blob: 0101e78c0e3648dd297a13c2de96d52ec3915bac [file] [log] [blame] [view]
# Get Fuchsia source code
This guide provides instructions for the following tasks:
* [Download the Fuchsia source code](#download-fuchsia-source).
* [Set up environment variables](#set-up-environment-variables).
## Prerequisites
The Fuchsia project requires `curl`, `unzip`, and `git` to be up-to-date:
* For **Linux**, install or update the following packages:
```posix-terminal
sudo apt-get install curl git unzip
```
Note: Fuchsia requires the version of Git to be 2.28 or higher.
* For **macOS**, install the Xcode command line tools:
```posix-terminal
xcode-select --install
```
## Download Fuchsia source {#download-fuchsia-source}
Fuchsia's [bootstrap script](/scripts/bootstrap) creates a `fuchsia` directory
and downloads the content of the Fuchsia source repository to this new
directory.
Note: Downloading Fuchsia source requires ~2 GiB of space on your machine. In
addition, you will need another 80-90 GiB of space when you build Fuchsia,
depending on your build configuration.
To download the Fuchsia source, do the following:
1. Go to the directory where you want to create your `fuchsia` directory, for
example:
```posix-terminal
cd ~
```
Note: All examples and instructions in `fuchsia.dev` use `~/fuchsia` as the
root directory of the Fuchsia project.
1. Run the bootstrap script:
```posix-terminal
curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash
```
If you see the `Invalid authentication credentials` error during the
bootstrapping process, see [Authentication error](#authentication-error) for
help.
## Set up environment variables {#set-up-environment-variables}
Fuchsia recommends updating your shell script to perform the following actions
(see [Update your shell script](#update-your-shell-script) for the instructions):
* Add the `.jiri_root/bin` directory to your `PATH`.
The `.jiri_root/bin` directory in the Fuchsia source contains the
<code>[jiri](https://fuchsia.googlesource.com/jiri){:.external}</code> and
<code>[fx](/docs/development/build/fx.md)</code> tools are essential to
Fuchsia workflows. Fuchsia uses the `jiri` tool to manage repositories in
the Fuchsia project. The `fx` tool helps configure, build, run, and debug
Fuchsia. The Fuchsia toolchain requires `jiri` to be available in your
`PATH`.
* Source the `scripts/fx-env.sh` file.
Although it's not required, sourcing the
<code>[fx-env.sh](/scripts/fx-env.sh)</code> script enables useful shell
functions in your terminal. For instance, it creates a `FUCHSIA_DIR`
environment variable and provides the `fd` command for navigating
directories with auto-completion (see comments in `fx-env.sh` for more
information).
### Update your shell script {#update-your-shell-script}
Update your shell script to automatically set up Fuchsia environment variables
in your terminal.
Note: If you don't wish to update your environment variables, see
[Work on Fuchsia without updating your PATH](#work-on-fuchsia-without-updating-your-path).
The following steps use a `bash` terminal as an example. If you are using `zsh` replace
`~/.bashrc` with `~/.zshrc` in the following example.
Do the following:
1. Use a text editor to open your `~/.bashrc` file, for example:
```posix-terminal
nano ~/.bashrc
```
1. Add the following lines your `~/.bashrc` file:
Note: If your Fuchsia source code 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
```
1. Save the file and exit the text editor.
1. To update your environment variables, run the following command:
```posix-terminal
source ~/.bashrc
```
1. Verify that you can run the following commands from any directory
without error:
```posix-terminal
jiri help
```
```posix-terminal
fx help
```
## Next steps
See
[Configure and build Fuchsia](/docs/get-started/build_fuchsia.md)
in the Getting started guide for the next steps.
## Troubleshoot
### 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
[Update your shell script](#update-your-shell-script) 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`.