blob: 9f61ef3085e7d2dd60df93f13e5c7940df8f53d1 [file] [log] [blame] [view]
# Create a bootable Fuchsia image
## Overview
The `mkinstaller` script produces a bootable disk image from a build which can be used to
install Fuchsia to a target machine. It supports creating installation images
for x64 EFI-based devices (the x64 product configuration), and coreboot-based devices
(the chromebook-x64 configuration), depending on what has been built.
## Implementation
Mkinstaller can write an image directly to a USB disk, or it can produce a new
image file on the host machine, which can then be written to install media using
`dd` or similar. The mkinstaller script determines the images to be written to
disk based on `${FUCHSIA_BUILD_DIR}/images.json`, and then writes each partition
to disk, labelled according to the name field of the entry in images.json.
## Use the installer
After you complete a build, you can create an installer image with
`fx mkinstaller /path/to/usb`.
Note: To see a full list of options, run `fx mkinstaller -h`.
Follow the steps below to install Fuchsia:
1. To access the installer, boot your computer or virtual machine from the USB.
You should see a blue boot screen.
1. To access the Fuchsia shell, press alt+tab.
These are the ways you can install Fuchsia:
* [Automatic installation](#automatic_installation)
* [Manual installation](#manual_installation)
### Automatic installation
1. Run `installer` to launch the installer.
<pre class="prettyprint">
<code class="devsite-terminal">installer</code>
<span class="no-select">Bootloader vendor = Intel Corp.
Please select the disk you want to install Fuchsia to:
[0] /dev/sys/pci/00:17.0/ahci/sata2/block (119G)
Enter a selection (0..0):
</span>
</pre>
You will see a list of disks, along with their sizes.
1. Type in the number corresponding to the disk you wish to install Fuchsia on, and press ENTER.
Note: What you type in won't be displayed until you press ENTER.
<pre class="prettyprint">
<span class="no-select">
Enter a selection (0..0): 0
Using /dev/sys/pci/00:17.0/ahci/sata2/block as installation target.
WARNING: Installing Fuchsia will WIPE YOUR DISK. Make sure you've backed
everything up before proceeding!
Do you wish to proceed? (yes/[no])
</span>
</pre>
1. Confirm that you want to continue. The installer will wipe your disk, set up
the Fuchsia partition tables, and install Fuchsia to your disk. The installer
will show its progress as it installs, and exit once the installation is
complete.
<pre class="prettyprint">
<span class="no-select">
Do you wish to proceed? (yes/[no]) yes
Wiping old partition tables...
Initializing Fuchsia partition tables...
Success.
Partition[src=/dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-002/block, pave_type=Bootloader]... OK
Partition[src=/dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-003/block, pave_type=Asset { type: Kernel, config: A }, asset=Kernel, config=A]... OK
Partition[src=/dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-003/block, pave_type=Asset { type: Kernel, config: A }, asset=Kernel, config=A] [-B]... OK
Partition[src=/dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-004/block, pave_type=Asset { type: Kernel, config: Recovery }, asset=Kernel, config=Recovery]... OK
Partition[src=/dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-005/block, pave_type=Volume]... OK
</span>
</pre>
1. Unplug the installation USB drive.
1. Reboot your machine.
<pre class="prettyprint">
<code class="devsite-terminal">dm reboot</code>
</pre>
### Manual installation
1. Run `lsblk` to determine the main disk of the target machine.
<pre class="prettyprint">
<code class="devsite-terminal">lsblk</code>
<span class="no-select">ID SIZE TYPE LABEL FLAGS DEVICE
000 28G RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block
001 63M efi-system zedboot-efi RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-000/block
002 1M cros-data efi RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-001/block
003 25M cros-data zircon-a RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-002/block
004 22M cros-data zircon-r RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-003/block
005 321M cros-data storage-sparse RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-004/block
006 119G /dev/sys/pci/00:17.0/ahci/sata2/block
</span>
</pre>
In this case, `/dev/sys/pci/00:17.0/ahci/sata2/block` is the main disk of the
target machine.
1. Run `install-disk-image` to wipe and initialize the partition tables on the
target machine. Replace `/dev/sys/pci/00:17.0/ahci/sata2/block` with the path
you determined using the `lsblk` command.
<pre class="prettyprint">
<code class="devsite-terminal">install-disk-image init-partition-tables --block-device <var>/dev/sys/pci/00:17.0/ahci/sata2/block</var></code>
<span class="no-select">
disk-pave: init-partition-tables operation succeeded.
</span>
</pre>
1. Run `lsblk` to confirm the state of the disks:
<pre class="prettyprint">
<code class="devsite-terminal">lsblk</code>
<span class="no-select">
ID SIZE TYPE LABEL FLAGS DEVICE
000 28G RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block
001 63M efi-system zedboot-efi RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-000/block
002 1M cros-data efi RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-001/block
003 25M cros-data zircon-a RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-002/block
004 22M cros-data zircon-r RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-003/block
005 321M cros-data storage-sparse RE /dev/sys/pci/00:14.0/xhci/usb-bus/001/001/ifc-000/ums/lun-000/block/part-004/block
006 119G /dev/sys/pci/00:17.0/ahci/sata2/block
052 16M efi-system efi-system /dev/sys/pci/00:17.0/ahci/sata2/block/part-000/block
053 64M zircon-a zircon-a /dev/sys/pci/00:17.0/ahci/sata2/block/part-001/block
054 64M zircon-b zircon-b /dev/sys/pci/00:17.0/ahci/sata2/block/part-002/block
055 96M zircon-r zircon-r /dev/sys/pci/00:17.0/ahci/sata2/block/part-003/block
056 64K vbmeta_a vbmeta_a /dev/sys/pci/00:17.0/ahci/sata2/block/part-004/block
057 64K vbmeta_b vbmeta_b /dev/sys/pci/00:17.0/ahci/sata2/block/part-005/block
058 64K vbmeta_r vbmeta_r /dev/sys/pci/00:17.0/ahci/sata2/block/part-006/block
059 4K misc misc /dev/sys/pci/00:17.0/ahci/sata2/block/part-007/block
060 16G fuchsia-fvm fuchsia-fvm /dev/sys/pci/00:17.0/ahci/sata2/block/part-008/block
</span>
</pre>
1. Install the ESP to the disk. Note that the "ID" column in lsblk
corresponds to a file in /dev/class/block/<ID>. You should replace
`002` with the ID of the partition that's labelled `efi`, and `052`
with the ID of the partition that's labelled `efi-system`.
<pre class="prettyprint">
<code class="devsite-terminal">dd if=/dev/class/block/<var>002</var> of=/dev/class/block/<var>052</var></code>
<span class="no-select">
2194+0 records in
2194+0 records out
1123328 bytes copied
</span>
</pre>
1. Install the main kernel image. Replace `003` with the ID of the partition on
the USB drive labelled `zircon-a`.
Note: A limitation in the block device protocol means we need
to `dd` to an intermediary file before using `install-disk-image`.
<pre class="prettyprint">
<code class="devsite-terminal">dd if=/dev/class/block/<var>003</var> of=/tmp/tmp.img</code>
<span class="no-select">
52520+0 records in
52520+0 records out
26890240 bytes copied
</span>
<code class="devsite-terminal">install-disk-image install-zircona --file /tmp/tmp.img</code>
<span class="no-select">
disk-pave: install-zircona operation succeeded.
</span>
</pre>
1. Install the recovery kernel image. Replace `004` with the ID of the partition
on the USB drive labelled `zircon-r`.
<pre class="prettyprint">
<code class="devsite-terminal">dd if=/dev/class/block/<var>004</var> of=/tmp/tmp.img</code>
<span class="no-select">
52520+0 records in
52520+0 records out
26890240 bytes copied
<code class="devsite-terminal">install-disk-image install-zirconr --file /tmp/tmp.img</code>
<span class="no-select">
disk-pave: install-zirconr operation succeeded.
</span>
</pre>
1. Install the Fuchsia volume image. Replace `005` with the ID of the partition
on the USB drive labelled `storage-sparse`.
Note: this image is much bigger than any of the others - this step
may take a while!
<pre class="prettyprint">
<code class="devsite-terminal">dd if=/dev/class/block/<var>005</var> of=/tmp/tmp.img</code>
<span class="no-select">
658432+0 records in
658432+0 records out
337117184 bytes copied
</span>
<code class="devsite-terminal">install-disk-image install-fvm --file /tmp/tmp.img</code>
<span class="no-select">
disk-pave: install-fvm operation succeeded.
</span>
</pre>
1. Unplug the installation USB drive.
1. Reboot your machine.
<pre class="prettyprint">
<code class="devsite-terminal">dm reboot</code>
</pre>