Start the [Fuchsia emulator][femu] on the host machine. This guide uses an instance of the Fuchsia emulator as the target device for running and testing Fuchsia software. And to be able to supply new Fuchsia software to the target device, you also need to start the [Fuchsia package server][fuchsia-package-server] on the host machine.

The tasks include:

  • Download a Fuchsia prebuilt image from Google Cloud Storage.
  • Start the Fuchsia emulator to run the downloaded Fuchsia prebuilt image.
  • Set the emulator instance as the default target device.
  • Verify that various ffx commands can connect to the emulator instance.
  • Start the Fuchsia package server.
  • Register the system package repository to the emulator instance.

Do the following:

  1. Download the latest Fuchsia Workstation prebuilt image for the emulator:

    tools/ffx product-bundle get workstation_eng.qemu-x64 --force-repo --repository workstation-packages
    

    This command may take a few minutes to download the image and product metadata.

    Once the download is finished, the ffx product-bundle get command creates a local Fuchsia package repository named workstation-packages on your host machine. This package repository hosts additional system packages for this Workstation prebuilt image. Later in step 12 you’ll register this package repository to the emulator instance.

  2. Stop all running emulator instances:

    tools/ffx emu stop --all
    
  3. Start a new Fuchsia emulator instance:

    Note: If your Linux machine does not support KVM hardware virtualization, start the emulator with the following command instead: tools/ffx emu start workstation_eng.qemu-x64 --engine qemu --startup-timeout 720 --accel none --device qemu-x64-emu-min --headless

    tools/ffx emu start workstation_eng.qemu-x64 --headless
    

    This command starts a headless emulator instance running the Workstation prebuilt image.

    When the instance is up and running, the command prints output similar to the following:

    $ tools/ffx emu start workstation_eng.qemu-x64 --headless
    ...
    Logging to "/home/alice/.local/share/Fuchsia/ffx/emu/instances/fuchsia-emulator/emulator.log"
    Waiting for Fuchsia to start (up to 60 seconds)...........
    Emulator is ready.
    
  4. Verify that the new emulator instance is running:

    tools/ffx emu list
    

    This command prints output similar to the following:

    $ tools/ffx emu list
    [Active]    fuchsia-emulator
    
  5. Verify that the emulator instance is detected as a device:

    tools/ffx target list
    

    This command prints output similar to the following:

    $ tools/ffx target list
    NAME                SERIAL       TYPE                        STATE      ADDRS/IP       RCS
    fuchsia-emulator    <unknown>    workstation_eng.qemu-x64    Product    [10.0.2.15]    Y
    
  6. Set this emulator instance to be the default device:

    tools/ffx target default set fuchsia-emulator
    

    This command exits silently without output.

  7. Verify that the default device is set:

    tools/ffx target default get
    

    This command prints output similar to the following:

    $ tools/ffx target default get
    fuchsia-emulator
    
  8. To verify that you can establish an SSH connection to the emulator instance, run the following command:

    tools/ffx target show
    

    This command prints output similar to the following:

    $ tools/ffx target show
    Target:
        Name: "fuchsia-emulator"
        SSH Address: "127.0.0.1:37787"
    Board:
        Name: "default-board"
        Revision: "1"
        Instruction set: "x64"
    Device:
        ...
    Build:
        Version: "10.20221130.0.1"
        Product: "workstation_eng"
        Board: "qemu-x64"
        Commit: "2022-11-30T07:03:36+00:00"
    Last Reboot:
        Graceful: "false"
        Reason: "Cold"
    ...
    

    The example output above shows that the target device is running a workstation_eng.qemu-x64 prebuilt image.

  9. Verify that you can stream the device logs:

    tools/ffx log
    

    This command prints output similar to the following:

    $ tools/ffx log
    ...
    [33.698][core/cobalt][cobalt,fidl_service,core][I] LocalAggregation: Enabling local aggregation.
    [33.698][core/cobalt][cobalt,fidl_service,core][I] ClearcutV1ShippingManager: Disabling observation uploading.
    [34.818][core/network/netstack][netstack,DHCP][W] client.go(692): ethp0004: recv timeout waiting for dhcpOFFER; retransmitting dhcpDISCOVER
    [34.818][core/network/netstack][netstack,DHCP][I] client.go(891): ethp0004: send dhcpDISCOVER from :68 to 255.255.255.255:67 on NIC:2 (broadcast_flag=false ciaddr=false)
    [35.654][core/remote-control][remote_control,remote-control][I] attempting to connect hub_path="/discovery_root/children/bootstrap/resolved/expose/fuchsia.diagnostics.LogSettings"
    ...
    

    Press CTRL+C to exit.

  10. Start the Fuchsia package server:

    tools/ffx repository server start
    

    This command prints output similar to the following:

    $ tools/ffx repository server start
    ffx repository server is listening on [::]:8083
    
  11. Check the list of Fuchsia package repositories available on your host machine:

    tools/ffx repository list
    

    This command prints output similar to the following:

    $ tools/ffx repository list
    +-----------------------+------+-------------------------------------------------------------------------------------------------+
    | NAME                  | TYPE | EXTRA                                                                                           |
    +=======================+======+=================================================================================================+
    | workstation-packages* | pm   | /home/alice/.local/share/Fuchsia/ffx/pbms/4751486831982119909/workstation_eng.qemu-x64/packages |
    +-----------------------+------+-------------------------------------------------------------------------------------------------+
    

    Notice a package repository named workstation-packages is created for the Workstation prebuilt image.

  12. Register the workstation-packages package repository to the target device:

    tools/ffx target repository register -r workstation-packages --alias fuchsia.com --alias chromium.org
    

    This command exits silently without output.