You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.1 KiB
162 lines
4.1 KiB
# Packages
|
|
|
|
A package is the unit of installation on a Fuchsia system.
|
|
|
|
## Anatomy
|
|
|
|
_To be added..._
|
|
|
|
## Working with packages
|
|
|
|
The majority of these instructions rely on the `pm` tool which is available
|
|
in `//tools`.
|
|
|
|
This document describes the various steps to build and install a package:
|
|
|
|
* [Build a package](#build-package)
|
|
* [Publish a package](#publish-package)
|
|
* [Install a package](#install-package)
|
|
* [Run a component from an installed package](#run-component)
|
|
|
|
For more details about each step, see `pm`'s help messages.
|
|
|
|
### Build a package {#build-package}
|
|
|
|
To build a package:
|
|
|
|
1. Create the package ID file:
|
|
|
|
Note: `$PACKAGE_DIR` is a staging directory where the package
|
|
is built.
|
|
|
|
```
|
|
pm -o $PACKAGE_DIR -n $PACKAGE_NAME init
|
|
```
|
|
|
|
This generates the package ID file implicitly as
|
|
`$PACKAGE_DIR/meta/package`. Set `$PACKAGE_ID_FILE` accordingly
|
|
for use in subsequent steps:
|
|
|
|
```
|
|
export PACKAGE_ID_FILE=${PACKAGE_DIR}/meta/package
|
|
```
|
|
|
|
`$PACKAGE_ID_FILE` will contain the following data:
|
|
|
|
```
|
|
{
|
|
"name": "<package name>",
|
|
"version": "<package version>"
|
|
}
|
|
```
|
|
|
|
2. Create the manifest file, `$MANIFEST_FILE`, that provides the path to
|
|
the package ID file. Each line of a manifest file maps a single file that
|
|
is contained in the package and is in the form of `destination=source` where:
|
|
|
|
* `destination` is the path to the file in the final package
|
|
* `source` is the path to the file on the host machine
|
|
|
|
The manifest file must include at least one line for the package ID file like
|
|
this:
|
|
|
|
```
|
|
meta/package=<package ID file>
|
|
```
|
|
|
|
3. Generate the package metadata archive:
|
|
|
|
```
|
|
pm -o $PACKAGE_DIR -m $MANIFEST_FILE build
|
|
```
|
|
|
|
This creates the metadata archive at `$PACKAGE_DIR/meta.far`.
|
|
|
|
4. Create the package archive `$PACKAGE_ARCHIVE`:
|
|
|
|
```
|
|
pm -o $PACKAGE_DIR -m $MANIFEST_FILE archive
|
|
```
|
|
|
|
This command creates the package archive implicitly as
|
|
`$PACKAGE_DIR/$PACKAGE_NAME-0.far`. Set `$PACKAGE_ARCHIVE` accordingly
|
|
for use in subsequent steps:
|
|
|
|
```
|
|
export PACKAGE_ARCHIVE=${PACKAGE_DIR}/${PACKAGE_NAME}-0.far
|
|
```
|
|
|
|
If the contents of the package change, you need to re-run the
|
|
`pm -o $PACKAGE_DIR -m $MANIFEST_FILE archive` command.
|
|
|
|
You have successfully built a package. You are now ready to publish the package.
|
|
|
|
### Publish a package {#publish-package}
|
|
|
|
To publish a package:
|
|
|
|
1. Initialize a directory, `$REPO`, that serves as a packages repository:
|
|
|
|
```
|
|
pm newrepo -repo $REPO
|
|
```
|
|
|
|
This creates a directory structure named `$REPO` that is ready for
|
|
publishing packages.
|
|
|
|
2. Publish packages to the repository `$REPO`:
|
|
|
|
```
|
|
pm publish -a -r $REPO -f $PACKAGE_ARCHIVE
|
|
```
|
|
|
|
`pm publish` parses `$PACKAGE_ARCHIVE` and publishes the package in the
|
|
provided `$REPO` directory. If you run this command multiple times with
|
|
different package archives, `pm publish` publishes the packages to the same
|
|
repository. New versions of a same package can be published using the same
|
|
command.
|
|
|
|
You have successfully published a package. You are now ready to install a
|
|
package.
|
|
|
|
### Install a package {#install-package}
|
|
|
|
To install a package:
|
|
|
|
1. Start the package server:
|
|
|
|
```
|
|
pm serve -repo $REPO
|
|
```
|
|
|
|
By default, this starts an amber server on the host machine at port `8083`.
|
|
|
|
2. (On the target device) Add the new repository as an update source with
|
|
`amberctl`:
|
|
|
|
```
|
|
amberctl add_repo_cfg -n $REPO -f http://$HOST_ADDRESS:8083/config.json
|
|
```
|
|
|
|
If the component is not already on the system, `amberctl` installs the package.
|
|
If the package already exists, `amberctl` installs any package updates.
|
|
|
|
You have successfully installed or updated the package. You are now ready to
|
|
run a component from the installed package.
|
|
|
|
### Run a component from an installed package {#run-component}
|
|
|
|
To run a component published in a package:
|
|
|
|
1. (On the target device) Run:
|
|
|
|
Note: `$COMPONENT_URI` is in this form
|
|
`fuchsia-pkg://${REPO}/${PACKAGE_NAME}#meta/<component name>.cmx`.
|
|
|
|
```
|
|
run $COMPONENT_URI
|
|
```
|
|
|
|
You have successfully run a component from the installed package.
|
|
|