blob: 259744035a4ba885ca9a8bf41c7448534714c709 [file] [view]
# Download the Fuchsia source code
This guide provides instructions on how to download the
Fuchsia source code and set up the Fuchsia development
environment on your machine.
The steps are:
1. [Install prerequisite packages](#install-prerequisite-packages).
2. [Perform a preflight check](#perform-a-preflight-check).
3. [Download the Fuchsia source code](#download-the-fuchsia-source-code).
4. [Set up environment variables](#set-up-environment-variables).
5. [Configure firewall rules (Optional)](#configure-firewall-rules).
## 1. Install prerequisite packages {#install-prerequisite-packages}
Fuchsia requires `curl`, `file`, `unzip`, and `git` to be up to date.
The version of `git` needs to be 2.31 or higher.
To install or update these packages, run the following command:
```posix-terminal
sudo apt install curl file git unzip
```
(**Optional**) If you want to run the [Fuchsia emulator (FEMU)][femu],
consider completing the following additional steps before proceeding
to the next section:
* [Enable KVM acceleration](#enable-kvm-acceleration)
* [Configure emulator networking](#configure-emulator-networking)
## 2. Perform a preflight check {#perform-a-preflight-check}
Fuchsia provides a preflight check tool
([`ffx platform preflight`][ffx-platform-preflight])
that examines your machine and informs you of any issues that may
affect building Fuchsia from source on the machine.
Note: The preflight tool works for the `x64` architecture only.
To perform a preflight check, run the following command:
```posix-terminal
curl -sO https://storage.googleapis.com/fuchsia-ffx/ffx-linux-x64 && chmod +x ffx-linux-x64 && ./ffx-linux-x64 platform preflight
```
## 3. Download the Fuchsia source code {#download-the-fuchsia-source-code}
The Fuchsia [bootstrap script][bootstrap-script] creates a directory
named `fuchsia` and downloads the Fuchsia source code.
Downloading the Fuchsia source code requires about 2 GB of space
on your machine. Depending on your build configuration, you need
another 80 to 90 GB of space later when you build Fuchsia. Additionally,
the download process uses a substantial amount of memory. It is advisible
to close non-crucial processes during this time.
To download the Fuchsia source, do the following:
1. Select a directory for downloading the Fuchsia source code, for example:
Note: You can set up Fuchsia in any directory. This guide selects
the `$HOME` directory as an example.
```posix-terminal
cd $HOME
```
1. Run the bootstrap script to create the `fuchsia` directory and download the source code:
Note: Depending on your network speed, downloading the Fuchsia source code
(about 2 GB) can take a while.
* {Steps}
1. Download and decode the script:
```posix-terminal
curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode > bootstrap.sh
```
2. (Recommended) Verify the contents of the `bootstrap.sh` script.
3. Run the script:
```posix-terminal
bash bootstrap.sh
```
Note: The script is configured to automatically delete the
temporary `bootstrap.sh` file upon completion or exit.
Note: If you have a slower internet connection and run into
timeouts, edit the `bootstrap.sh` script directly to increase the
values of `-fetch-packages-timeout` and `-hook-timeout`. These
timeouts are in minutes, and indicate a 2 hour timeout for
package downloads. (The `-hook-timeout` value is multiplied
by 5 when downloading CIPD packages.)
* {One-liner}
If you prefer to run it in a single command, you can use the following:
```posix-terminal
curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode > bootstrap.sh && bash bootstrap.sh
```
If you see the `Invalid authentication credentials` error during the
bootstrapping process, see [Authentication error](#authentication-error) for
help.
## 4. Set up environment variables {#set-up-environment-variables}
Note: If you don't wish to update your shell profile, see
[Work on Fuchsia without updating your PATH](#work-on-fuchsia-without-updating-your-path)
in Appendix instead.
To configure the recommended Fuchsia environment variables in your shell profile,
do the following:
1. Use a text editor to open your `~/.bash_profile` file (in the example below,
we use the [Nano][nano]{:.external} text editor):
Note: This guide uses a `bash` terminal as an example. If you're
using `zsh`, replace `~/.bash_profile` with `~/.zprofile` in the
following steps.
```posix-terminal
nano ~/.bash_profile
```
1. Add the following lines to your `~/.bash_profile` file:
Note: If your Fuchsia checkout is not located in the `~/fuchsia`
directory, replace `~/fuchsia` with your Fuchsia directory.
```sh
export PATH=~/fuchsia/.jiri_root/bin:$PATH
source ~/fuchsia/scripts/fx-env.sh
```
* The `.jiri_root/bin` directory in the Fuchsia source contains the
[`jiri`](https://fuchsia.googlesource.com/jiri) and
[`fx`](/docs/development/build/fx.md) tools that are essential to
Fuchsia workflows. Fuchsia uses the `jiri` tool to manage repositories in
the Fuchsia project, and the `fx` tool helps configure, build, run, and
debug Fuchsia. The Fuchsia toolchain requires that `jiri` is available in
your `PATH`.
* The [`fx-env.sh`](https://cs.opensource.google/fuchsia/fuchsia/+/main:/scripts/fx-env.sh) script enables a number of
useful shell functions in your terminal. For instance, it creates the
`FUCHSIA_DIR` environment variable and provides the `fd` command for
navigating directories with auto-completion. (For more information, see
comments in `fx-env.sh`.)
1. Save the file and exit the text editor.
1. Update environment variables:
```posix-terminal
source ~/.bash_profile
```
To verify your environment setup, do the following:
1. Go to your `fuchsia` directory, for example:
```posix-terminal
cd ~/fuchsia
```
2. Verify that you can run the following commands without errors:
```posix-terminal
jiri help
```
```posix-terminal
fx help
```
## 5. Configure firewall rules (Optional) {#configure-firewall-rules}
Note: This step is **not required** for building or running Fuchsia. But it is
recommended to ensure that Fuchsia's emulator instances run smoothly on Linux.
To allow Fuchsia-specific traffic on the host machine, run the following command:
```posix-terminal
fx setup-ufw
```
This script requires `sudo` (which asks for your password) to set the appropriate
firewall rules. For more information on this script, see [`setup-ufw`][setup-ufw].
## Next steps
To build your first Fuchsia system image, see
[Configure and build Fuchsia](/docs/get-started/build_fuchsia.md).
## Appendix
### Authentication error {#authentication-error}
If you see the `Invalid authentication credentials` error during the bootstrap
process, your `~/.gitcookies` file may contain cookies from some repositories in
`googlesource.com` that the bootstrap script wants to check out anonymously.
To resolve this error, do one of the following:
* Follow the onscreen directions to get passwords for the specified
repositories.
* Delete the offending cookies from the `.gitcookies` file.
### Work on Fuchsia without updating your PATH {#work-on-fuchsia-without-updating-your-path}
The following sections provide alternative approaches to the
[Set up environment variables](#set-up-environment-variables) section:
* [Copy the tool to your binary directory](#copy-the-tool-to-your-binary-directory)
* [Add a symlink to your binary directory](#add-a-symlink-to-your-binary-directory)
#### Copy the tool to your binary directory {#copy-the-tool-to-your-binary-directory}
If you don't wish to update your environment variables, but you want `jiri` to
work in any directory, copy the `jiri` tool to your `~/bin` directory, for
example:
Note: If your Fuchsia source code is not located in the `~/fuchsia` directory,
replace `~/fuchsia` with your Fuchsia directory.
```posix-terminal
cp ~/fuchsia/.jiri_root/bin/jiri ~/bin
```
However, you must have write access to the `~/bin` directory without `sudo`. If
you don't, `jiri` cannot keep itself up-to-date.
#### Add a symlink to your binary directory {#add-a-symlink-to-your-binary-directory}
Similarly, if you want to use the `fx` tool without updating your environment
variables, provide the `fx` tool's symlink in your `~/bin` directory, for
example:
Note: If your Fuchsia source code is not located in the `~/fuchsia` directory,
replace `~/fuchsia` with your Fuchsia directory.
```posix-terminal
ln -s ~/fuchsia/scripts/fx ~/bin
```
Alternatively, run the `fx` tool directly using its path, for example:
```posix-terminal
./scripts/fx help
```
In either case, you need `jiri` in your `PATH`.
### Enable KVM acceleration {#enable-kvm-acceleration}
(**Linux only**) Most Linux machines support VM acceleration through KVM,
which greatly improves the performance and usability of the emulator.
If KVM is available on your machine, add yourself to the `kvm` group:
```posix-terminal
sudo usermod -a -G kvm ${USER}
```
For this change to take effect, you may need to log out and log back in.
### Configure emulator networking {#configure-emulator-networking}
(**Linux only**) To allow the [Fuchsia emulator (FEMU)][femu] to
access the network, you can configure an IPv6 network using
[TUN/TAP][tuntap]{: .external}.
To enable networking using [tap networking][tap-networking]{: .external},
do the following:
1. Set up `tuntap`:
```posix-terminal
sudo ip tuntap add dev qemu mode tap user $USER
```
1. Enable the network for `qemu`:
```posix-terminal
sudo ip link set qemu up
```
<!-- Reference links -->
[bootstrap-script]: https://cs.opensource.google/fuchsia/fuchsia/+/main:/scripts/bootstrap
[ffx-platform-preflight]: https://fuchsia.dev/reference/tools/sdk/ffx#preflight
[nano]: https://www.nano-editor.org/docs.php
[setup-ufw]: https://fuchsia.dev/reference/tools/fx/cmd/setup-ufw
[femu]: set_up_femu.md
[tuntap]: https://en.wikipedia.org/wiki/TUN/TAP
[tap-networking]: https://wiki.qemu.org/Documentation/Networking#Tap