blob: a436cf46cd5511b5141675993305f0333b24c48c [file] [log] [blame] [view] [edit]
# Create a Fuchsia package repository
The [`ffx repository`][ffx-repository] commands can create and manage
Fuchsia package repositories on the host machine.
## Concepts
When a Fuchsia device needs to run new software or update existing software,
the device requests and downloads [Fuchsia packages][fuchsia-package] from the
[Fuchsia package server](#start-the-fuchsia-package-server), which is a service
that you can start (and stop) on the host machine. The Fuchsia package server
then serves Fuchsia packages from a
[Fuchsia package repository](#create-a-package-repository) configured
on the host machine.
A Fuchsia package repository is mapped to a directory on the host machine.
When handling requests from Fuchsia devices, the Fuchsia package server looks
for Fuchsia packages in this directory and, when they're found, it serves the
packages from this directory. Therefore, this directory is often the
destination where you'd generate and store Fuchsia packages related to your
development.
Once a new Fuchsia package repository is created, you need to register the
package repository to your Fuchsia device (or devices), which permits the device
to download Fuchsia packages from this package repository. Fuchsia devices can
only download Fuchsia packages from their registered Fuchsia package repositories.
Lastly, you can set up the Fuchsia package server to serve from multiple Fuchsia
package repositories on the same host machine, where you may dedicate each package
repository for a specific purpose (for instance, to separate stable packages
from experimental packages).
## Create a package repository {:#create-a-package-repository}
To create a new Fuchsia package repository on your host machine,
do the following:
1. Create a new repository:
```posix-terminal
ffx repository add-from-pm <PM_REPO_PATH> [-r <REPO_NAME>]
```
Replace the following:
* `PM_REPO_PATH`: The path to a directory where Fuchsia packages are stored.
* `REPO_NAME`: A user-defined name for the new repository.
* If this flag is not specified, the command names the new repository `devhost`
by default.
The example command below creates a new repository named `my-repo`:
```none {:.devsite-disable-click-to-copy}
$ ffx repository add-from-pm ~/my-fuchsia-packages -r my-repo
```
After creating a new repository, this command exits silently without output.
1. Verify that the new repository is created:
```posix-terminal
ffx repository list
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ ffx repository list
+----------+------+--------------------------------------------------------+
| NAME | TYPE | EXTRA |
+==========+======+========================================================+
| my-repo* | pm | /usr/alice/my-fuchsia-packages |
+----------+------+--------------------------------------------------------+
```
1. Set the new repository to be default:
```posix-terminal
ffx repository default set <REPO_NAME>
```
Replace `REPO_NAME` with the name of a repository.
The example command below sets `my-repo` to be the default repository:
```none {:.devsite-disable-click-to-copy}
$ ffx repository default set my-repo
```
After setting the default repository, this command exits silently without output.
For a Fuchsia device to stat downloading Fuchsia packages from this new
repository, you need to
[register this repository to the device](#register-a-package-repository).
## Register a package repository to a Fuchsia device {:#register-a-package-repository}
To enable a Fuchsia device to download packages from a Fuchsia package repository
on your host machine, do the following:
Note: For Fuchsia package repositories to be able to serve packages to
Fuchsia devices, the [Fuchsia package server](#start-the-fuchsia-package-server)
needs to be running on the host machine.
1. Enable your Fuchsia device to connect to the new repository:
```posix-terminal
ffx target repository register [-r <REPO_NAME>] --alias fuchsia.com
```
Replace `REPO_NAME` with the name of the repository that you want the Fuchsia device
to connect to. If this flag is not specified, the command selects the default repository.
The example below sets your current Fuchsia device to connect to the default
repository (`my-repo`) at `fuchsia.com`:
```none {:.devsite-disable-click-to-copy}
$ ffx target repository register --alias fuchsia.com
```
After registering the repository, this command exits silently without output.
1. Verify that the new repository is registered:
```posix-terminal
ffx target repository list
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ ffx target repository list
+---------+------------------------+
| REPO | TARGET |
+=========+========================+
| my-repo | fuchsia-f80f-f974-a123 |
| | alias: fuchsia.com |
+---------+------------------------+
```
## Deregister a package repository {:#deregister-a-package-repository}
To deregister a Fuchsia package repository from the device,
run the following command:
```posix-terminal
ffx target repository deregister [-r <REPO_NAME>]
```
Replace `REPO_NAME` with the name of a registered repository. If this flag is
not specified, the command selects the default repository.
The example command below deregisters the `my-repo` repository:
```none {:.devsite-disable-click-to-copy}
$ ffx target repository deregister -r my-repo
```
After deregistering the repository, this command exits silently without output.
## Remove a package repository {:#remove-a-package-repository}
To remove a Fuchsia package repository, run the following command:
```posix-terminal
ffx repository remove <REPO_NAME>
```
Replace `REPO_NAME` with the name of a repository.
The example command below removes the `my-repo` repository:
```none {:.devsite-disable-click-to-copy}
$ ffx repository remove my-repo
```
After removing the repository, this command exits silently without output.
## Start the Fuchsia package server {:#start-the-fuchsia-package-server}
To be able to serve packages from Fuchsia package repositories
on your host machine, the Fuchsia package server must be running
on the machine.
To start the Fuchsia package server, run the following command:
```posix-terminal
ffx repository server start
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ ffx repository server start
server is listening on [::]:8083
```
## Stop the Fuchsia package server {:#stop-the-fuchsia-package-server}
To stop the Fuchsia package server, run the following command:
```posix-terminal
ffx repository server stop
```
This command prints output similar to the following:
```none {:.devsite-disable-click-to-copy}
$ ffx repository server stop
server stopped
```
<!-- Reference links -->
[ffx-repository]: https://fuchsia.dev/reference/tools/sdk/ffx#repository
[fuchsia-package]: /docs/concepts/packages/package.md