From 1accaaf2bb403fe6843a4e4137b0949c9ba568c4 Mon Sep 17 00:00:00 2001 From: "Reyes, Amy" Date: Thu, 16 Jun 2022 16:12:44 -0700 Subject: [PATCH] doc: Update Configurator - Add Configurator Debian package build steps that were removed from GSG - Add description of error icon on parameters tabs - Mention that working folder name should be meaningful Signed-off-by: Reyes, Amy --- doc/tutorials/acrn_configurator_tool.rst | 132 ++++++++++++++++-- .../images/configurator-erroricon.png | Bin 0 -> 23681 bytes 2 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 doc/tutorials/images/configurator-erroricon.png diff --git a/doc/tutorials/acrn_configurator_tool.rst b/doc/tutorials/acrn_configurator_tool.rst index 5fa4ad394..c69355ff3 100644 --- a/doc/tutorials/acrn_configurator_tool.rst +++ b/doc/tutorials/acrn_configurator_tool.rst @@ -18,6 +18,8 @@ Capabilities: XML format * Generates a launch script for each post-launched User VM +.. _acrn_configurator_tool_prerequisites: + Prerequisites ************* @@ -29,6 +31,10 @@ Guide sections: * :ref:`gsg-board-setup` * :ref:`gsg-dev-setup` +The above Getting Started Guide steps use a prebuilt Debian package to install +the ACRN Configurator. :ref:`acrn_configurator_tool_source` describes how to +build the Debian package. + Start with a New or Existing Configuration ****************************************** @@ -73,7 +79,8 @@ such as a board configuration file, scenario configuration file, and launch scripts. If it finds any, it will delete them. 1. Under **Start a new configuration**, use the displayed working folder or - select a different folder by clicking **Browse for folder**. + select a different folder by clicking **Browse for folder**. Use a + folder name that is meaningful to you. .. image:: images/configurator-newconfig.png :align: center @@ -328,7 +335,10 @@ Save and Check for Errors :align: center :class: drop-shadow - The tool saves your configuration data in a set of files in the working folder: + The tool validates hypervisor and VM settings whenever you save. + + If no errors occur, the tool saves your configuration data in a set of files + in the working folder: * Scenario configuration file (``scenario.xml``): Raw format of all hypervisor and VM settings. You will need this file to build ACRN. @@ -341,19 +351,123 @@ Save and Check for Errors # Launch script for VM name: - The tool validates hypervisor and VM settings whenever you save. If an error - occurs, such as an empty required field, the tool saves the changes to the - files, but prompts you to correct the error. Error messages appear below the - applicable settings. Example: + If an error occurs, such as an empty required field, the tool saves the + changes to the scenario configuration file, but prompts you to correct the + error. - .. image:: images/configurator-rederror.png +#. On the selector menu, check for error messages on all tabs that have an error + icon. The following figure shows that the Hypervisor tab and the VM1 tab + contain errors. + + .. image:: images/configurator-erroricon.png :align: center :class: drop-shadow -#. Fix the errors and save again to generate a valid configuration. + Error messages appear below the selector menu or below the applicable + parameter. + +#. Fix all errors and save again to generate a valid configuration. Next Steps ========== After generating a valid scenario configuration file, you can build ACRN. See -:ref:`gsg_build`. \ No newline at end of file +:ref:`gsg_build`. + +.. _acrn_configurator_tool_source: + +Build ACRN Configurator From Source Code +***************************************** + +The :ref:`prerequisites` use a prebuilt +Debian package to install the ACRN Configurator. The following steps describe +how to build the Debian package from source code. + +#. On the development computer, complete the steps in :ref:`gsg-dev-computer`. + +#. Install the ACRN Configurator build tools: + + .. code-block:: bash + + sudo apt install -y libwebkit2gtk-4.0-dev \ + build-essential \ + curl \ + wget \ + libssl-dev \ + libgtk-3-dev \ + libappindicator3-dev \ + librsvg2-dev \ + python3-venv + +#. Install Node.js (npm included) as follows: + + a. We recommend using nvm to manage your Node.js runtime. It allows you to + switch versions and update Node.js easily. + + .. code-block:: bash + + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash + + #. Rerun your ``.bashrc`` initialization script and then install the latest + version of Node.js and npm: + + .. code-block:: bash + + source ~/.bashrc + nvm install node --latest-npm + nvm use node + +#. Install and upgrade Yarn: + + .. code-block:: bash + + npm install --global yarn + +#. Install rustup, the official installer for Rust: + + .. code-block:: bash + + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + + When prompted by the Rust installation script, type ``1`` and press + :kbd:`Enter`. + + .. code-block:: console + + 1) Proceed with installation (default) + 2) Customize installation + 3) Cancel installation + >1 + +#. Configure the current shell: + + .. code-block:: bash + + source $HOME/.cargo/env + +#. Install additional ACRN Configurator dependencies: + + .. code-block:: bash + + cd ~/acrn-work/acrn-hypervisor/misc/config_tools/configurator + python3 -m pip install -r requirements.txt + yarn + +#. Build the ACRN Configurator Debian package: + + .. code-block:: bash + + cd ~/acrn-work/acrn-hypervisor + make configurator + +#. Install the ACRN Configurator: + + .. code-block:: bash + + sudo apt install -y ~/acrn-work/acrn-hypervisor/build/acrn-configurator_*_amd64.deb + +#. Launch the ACRN Configurator: + + .. code-block:: bash + + acrn-configurator \ No newline at end of file diff --git a/doc/tutorials/images/configurator-erroricon.png b/doc/tutorials/images/configurator-erroricon.png new file mode 100644 index 0000000000000000000000000000000000000000..e826c4bb788560e4c495b384a353cf6a03ba1b7f GIT binary patch literal 23681 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