blob: aca859de32117348038ac9b46f53dd3fd09f20cb [file] [log] [blame] [view]
# Install Fuchsia on a device
This guide helps you understand the device installation process for Fuchsia.
The Fuchsia install process, called 'paving', requires two machines, the machine
on which you build Fuchsia ("host") and the device on which you want to run
Fuchsia ("target"). The host and target must be able to communicate over a local
area network.
This guide covers at a high level how to use your host system
to build Fuchsia, create a piece of install media, and stream
the system over the network to the target.
## Building {#building}
The `fx` command is used throughout these instructions. Before you can
install Fuchsia on a device, you must have Fuchsia source on your host by
following the instructions in these two documents:
* [Fuchsia source installed and environment variables created](/docs/get-started/get_fuchsia_source.md).
* [Configured and built Fuchsia](/docs/get-started/build_fuchsia.md)
If you have `fx` mapped into your command path you can follow these instructions. If you
don't have fx in your path, it can be found at `//scripts/fx` and you'll need
to use the appropriate relative path in the supplied commands.
Many `fx` commands are wrappers around build actions in [GN](/docs/concepts/build_system/intro.md)
coupled with tool invocations.
Assuming that the target system is x86-based and that you want to build a
complete Fuchsia system, you can set Fuchsia with the following command:
```
fx set {product_name}.x64`
```
Note: For more information on supported products, see [product and board](/docs/concepts/build_system/boards_and_products.md).
Then build Fuchsia:
```
fx build
```
## Creating install media {#creating-install-media}
To create your install media you should use a USB drive since these are
well-supported as boot media by most systems.
Note: Creating a USB drive **wipes everything** from the USB drive being used.
To create a USB drive, insert a USB drive into the host machine and run:
```
fx mkzedboot <device_path>
```
On Linux, `device_path` is typically `/dev/sd<X>` where X is a letter. On macOS
it is typically `/dev/disk<N>` where 'N' is a number. If you don't specify a
device path, `mkzedboot` lists the drives it detects. **Be careful
not to select the wrong device**. Once this is done, remove the USB drive.
## Paving {#paving}
Next, you must build the artifacts to transfer over the network during the paving
process. What is transferred is dependent on the target device. For UEFI based
systems (like the Intel NUC) our output target type is 'efi'.
To start the bootserver with the correct image just run `fx pave`.
Insert the install media into the target device that you want to pave. The
target device's boot settings may need to be changed to boot from the USB device
and this is typically device-specific. For the guides listed below, **only** go
through the steps to set the boot device, don't continue with any instructions
on creating install media.
* [Intel NUC](/docs/development/hardware/intel_nuc.md)
Paving should occur automatically after the device is booted into Zedboot from
the USB drive. After the paving process completes, the system should boot into
the Zircon kernel. After paving, the whole system is installed on internal
storage.
At this point the USB key can be removed since the system has
everything it needs stored locally. If you plan to re-pave frequently it may be
useful to keep the USB drive inserted so your system boots into Zedboot by
default where paving happens automatically. After the initial pave on UEFI
systems that use Gigaboot, another option for re-paving is to press 'z' while in
Gigaboot to select Zedboot.
## Troubleshooting {#troubleshooting}
In some cases paving may fail because you have a disk layout that is
incompatible. In these cases you will see a message that asks you to run
'install-disk-image wipe'. If it is incompatible because it contains an older
Fuchsia layout put there by installer (vs the paver) you can fix this by killing
the fx pave process on the host, switching to a different console (Alt+F3) on
the target, and running `install-disk-image wipe`. Then reboot the target,
re-run `fx pave` on the host, and the pave should succeed.
In some cases paving may fail with an error indicating "couldn't find space in
gpt". In these cases (as long as you don't want to keep the other OS, i.e.
Windows, parts) run `lsblk` and identify the partition that isn't your USB (it
shouldn't have RE in the columns). Identify the number in the first column for
your partition (likely to be either 000 or 003). Then, run:
Note: `N` is the number you just identified.
```
gpt Init /dev/class/block/N
```
This clears all Windows partitions from the disk. Once this is done, reboot into
zedboot and paving should work.
## Changing boot target (localboot, netboot, etc) default
For EFI-based systems, it is possible to change the default boot option of the
system paved on the target between local booting and Zedboot for network
booting. By default the system boots locally with a 1-second delay in Gigaboot
to allow you to select a different mode. To change this default to Zedboot,
supply the `always_zedboot` argument when calling your set command, for example
`fx set <goal> --args "always_zedboot=true"`.
## More information
* [Creating a Fuchsia USB flash drive](/docs/development/hardware/usb_setup.md)
* [Step-by-step build and pave guide](/docs/development/build/build_and_pave_quickstart.md)
* [More information on fx workflows](/docs/development/build/fx.md)