From 87930e2f2bc606aa2c81874fbc77cae498e27ba6 Mon Sep 17 00:00:00 2001 From: michael vincerra <37549381+mvincerx@users.noreply.github.com> Date: Fri, 20 Sep 2019 17:37:22 -0700 Subject: [PATCH] Adds Example 6 and 7 to show how to remove a bundle and do a format bump. (#770) - Subdivides prev Example 3 into two: - Create an update for the mix - Build an image - Adds subsection Format Bump to explain its purpose and swupd protocols - Adds Figure 1 and new _figures/mixer dir to illustrate Format Bump - Modifies some commands to clarify intent, purpose - Closes #507 Signed-off-by: Michael Vincerra --- source/_figures/mixer/format-bump.png | Bin 0 -> 17037 bytes source/guides/clear/mixer.rst | 491 ++++++++++++++++++++------ 2 files changed, 374 insertions(+), 117 deletions(-) create mode 100644 source/_figures/mixer/format-bump.png diff --git a/source/_figures/mixer/format-bump.png b/source/_figures/mixer/format-bump.png new file mode 100644 index 0000000000000000000000000000000000000000..d95e642dfd2917cac6db86e114268ff63698e5da GIT binary patch literal 17037 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

Hdm$fshj06dP0;|XU=Cbv(Wy%mW-o~Yyomp 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 literal 0 HcmV?d00001 diff --git a/source/guides/clear/mixer.rst b/source/guides/clear/mixer.rst index a846f1a0..04812076 100644 --- a/source/guides/clear/mixer.rst +++ b/source/guides/clear/mixer.rst @@ -26,7 +26,7 @@ will be part of your update. You can select content from each of these sources t The update content that mixer generates consists of various pieces of OS content, update metadata, as well as a complete image. The OS content -includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via swupd. Refer to :ref:`swupd ` for additional information regarding updates and update content. +includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via :command:`swupd`. Refer to :ref:`swupd ` for additional information regarding updates and update content. How it works ************ @@ -42,7 +42,7 @@ Prerequisites * :command:`mixer` bundle - Add the mixer tool with the :command:`mixer` bundle. Refer to + Add the mixer tool by installing the :command:`mixer` bundle. Refer to :ref:`swupd-guide` for more information on installing bundles. * Docker\* container @@ -67,9 +67,7 @@ Prerequisites * Location to host the update content and images - In order for swupd to make use of your mix, the update content for your mix - must be hosted on a web server. Your mix will be configured with an update - location URL, which swupd will use to pull down updates. + In order for :command:`swupd` to make use of your mix, the update content for your mix must be hosted on a web server. Your mix will be configured with an update location URL, which :command:`swupd` will use to pull down updates. Refer to `Set up a nginx web server for mixer`_ for an simple example of setting up an update location. @@ -107,11 +105,9 @@ the setup before you create a mix. #. Edit builder.conf. :file:`builder.conf` tells the mixer tool how to configure the mix. For - example, it allows you to configure where mixer output is located and where - swupd update content will be located. + example, it allows you to configure where mixer output is located and where swupd update content will be located. - At minimum, set the URL of your update server so your custom OS knows where - to get update content. + At minimum, set the URL of your update server so your custom OS knows where to get update content. Refer to the `builder.conf`_ section for more information. @@ -172,7 +168,7 @@ A mix is created with the following steps: Deploy update content and images to your update server. - View the `Example 3: Deploy updates to target`_ for a simple deployment + View the `Example 5: Deploy updates to target`_ for a simple deployment scenario. Maintain or modify mix @@ -195,47 +191,76 @@ use: Complete all `Prerequisites`_ before using these examples. Example 1: Mix set up -====================== +===================== -This example shows the basic steps for the first-time setup of +This example shows the basic steps for the first-time setup of mixer for a new mix. -#. Create an empty directory to use as a workspace for mixer: +#. Create a directory to use as a workspace for mixer: .. code-block:: bash mkdir ~/mixer -#. In your mixer workspace, generate an initial mix based on the latest upstream - |CL| version, with minimum bundles. In the initialization output, be aware - that your initial mix version is set to 10 and that the minimum bundles have - been added. +#. In your mixer workspace, generate an initial mix based on the latest + upstream |CL| version, with minimum bundles. In the initialization + output, be aware that your initial mix version is set to 10 and that the + minimum bundles have been added. .. code-block:: bash cd ~/mixer mixer init -#. Edit :file:`builder.conf` to set the value of CONTENTURL and VERSIONURL to - the IP address of the nginx\* server you set up in the prerequisite - `Set up a nginx web server for mixer`_. For example: + .. note:: + + If you want to add all upstream bundles in your mix, + initialize your mix as shown below. + + .. code-block:: bash + + mixer init --all-upstream + +#. Look up your IP address: + + .. code-block:: bash + + networkctl status + +#. Copy the IP “Address”, from above, for the next step. + + .. note:: + + In this example, we put `mixer` and `nginx` on the same system. In a production environment, they would likely reside on different systems. + +#. Edit :file:`builder.conf`. Paste the IP address from the previous step + as the value after \http:// for CONTENTURL and VERSIONURL. For example: .. code-block:: console CONTENTURL="http://192.168.25.52" VERSIONURL="http://192.168.25.52" +#. `Set up a nginx web server for mixer`_. + + Example 2: Create a simple mix ============================== This example shows how to create a simple custom mix using upstream content. -We'll create an image for a QEMU virtual machine that we can use later to test -our mix. +We'll create an image for a QEMU virtual machine that we can use later to +test our mix. -We can use the default bundles that were added during initialization, but these -include the :command:`native-kernel` bundle that is intended to be used on a -bare metal system instead of a VM. So we will modify the default bundle -set to get a smaller kernel image, which will also be faster to load. +We can use the default bundles that were added during initialization, but +these include the :command:`native-kernel` bundle that is intended to be +used on a bare metal system instead of a VM. So we will modify the default +bundle set to get a smaller kernel image, which will also be faster to load. + +The only bundles available to :command:`swupd` for a given release are those +that were added to the mix during build time. A mix doesn’t automatically +inherit upstream bundles. + +#. Assure that you have run `mixer init`, shown in Example 1. #. Update bundles in mix: @@ -244,8 +269,11 @@ set to get a smaller kernel image, which will also be faster to load. mixer bundle remove kernel-native mixer bundle add kernel-kvm + .. note:: + The mixer bundle commands operate on the bundle description files but not on the bundle contents. To remove bundle contents and their tracking completely, follow `Example 6: Remove a bundle from client system`_, Advanced. + #. In this case, we will add the `editors` bundle from upstream, but we will - remove the `joe` editor. + remove the :command:`joe` editor. .. code-block:: bash @@ -258,63 +286,112 @@ set to get a smaller kernel image, which will also be faster to load. $EDITOR ./local-bundles/editors -#. List the bundles in the mix again to confirm removal. +#. List the bundles in the mix again to confirm removal of :command:`joe`. .. code-block:: bash mixer bundle list --tree - #. Build bundles: .. code-block:: bash mixer build bundles - Look in ~/mixer/update/image//full for the full chroot after the - :command:`build` command completes. - -#. Build update content. Browse to your \http://localhost site and you'll see - the web page is now up, but with no update content. Build the update content: +#. First, browse to web server from Example 1. The web page appears yet + has no update content. Build the update content: .. code-block:: bash mixer build update - Refresh your \http://localhost site and now you can see the update + After that is completed, on your web server, you can see the update content for mix version 10. - Look in ~/mixer/update/www/ to see the update content in your - workspace. +Example 3: Create an update for your mix +======================================== -#. Configure image. Edit the ister configuration file for your image to include - all of the bundles you want preinstalled in the image. If this is the first - time creating an image, first get a copy of the +Next, let’s create a new version of the mix. We’ll add a new bundle. + +#. Create a new version of your mix, for the live image to + update to. Increment your mix version by 10: + + .. code-block:: bash + + mixer versions update + +#. Add the upstream :command:`curl` bundle to version 20 of the mix: + + .. code-block:: bash + + mixer bundle add curl + +#. Build your next mix version that incorporates the new bundle. + + .. code-block:: bash + + mixer build bundles + mixer build update + +#. Optionally, you can build delta-packs, which help reduce client update + time: + + .. code-block:: bash + + mixer build delta-packs --from 10 --to 20 + +Refresh your web server to see the update content for mix version 20. + +You can also look in ~/mixer/update/www/ to see the update +content in your workspace. + + +Example 4: Build an image +========================= + +This example shows how to build a bootable image containing the +:command:`kernel-kvm`, :command:`os-core`, and the :command:`os-core-update` +bundles from Example 2. Underneath, mixer uses `ister`_ to generate the +image. + +#. Change directory into your mix. + +#. Configure image. + + Edit the ister configuration file for your image to include all of the bundles you want pre-installed in the image. If this is the first time creating an image, first get a copy of the :file:`release-image-config.json` template file: .. code-block:: bash curl -O https://raw.githubusercontent.com/bryteise/ister/master/release-image-config.json - For this example, edit :file:`release-image-config.json` so that the root - partition size is "5G" and replace the "kernel-native" bundle with - "kernel-kvm". + For this example, make the following revisions + :file:`release-image-config.json`: - .. code-block:: console + * Set root partition size to "5G" + * Replace the "kernel-native" bundle with "kernel-kvm" + * Set the version to 10 (as an integer) + + .. note:: + When creating an image, select a subset of the bundles that are part of your mix. All the bundles that are *not* part of this subset are available for consumers of that image to install afterwards via swupd. + + .. code-block:: bash + :linenos: + :emphasize-lines: 5,11-12 { - "DestinationType" : "virtual", + "DestinationType" : "virtual", "PartitionLayout" : [ { "disk" : "release.img", "partition" : 1, "size" : "32M", "type" : "EFI" }, - { "disk" : "release.img", "partition" : 2, "size" : "16M", "type" : "swap" }, - { "disk" : "release.img", "partition" : 3, "size" : "5G", "type" : "linux" } ], - "FilesystemTypes" : [ { "disk" : "release.img", "partition" : 1, "type" : "vfat" }, - { "disk" : "release.img", "partition" : 2, "type" : "swap" }, - { "disk" : "release.img", "partition" : 3, "type" : "ext4" } ], + { "disk" : "release.img", "partition" : 2, "size" : "16M", "type" : "swap" }, + { "disk" : "release.img", "partition" : 3, "size" : "5G", "type" : "linux" } ], + "FilesystemTypes" : [ { "disk" : "release.img", "partition" : 1, "type" : "vfat" }, + { "disk" : "release.img", "partition" : 2, "type" : "swap" }, + { "disk" : "release.img", "partition" : 3, "type" : "ext4" } ], "PartitionMountPoints" : [ { "disk" : "release.img", "partition" : 1, "mount" : "/boot" }, - { "disk" : "release.img", "partition" : 3, "mount" : "/" } ], - "Version": "latest", + { "disk" : "release.img", "partition" : 3, "mount" : "/" } ], + "Version": 10, "Bundles": ["kernel-kvm", "os-core", "os-core-update"] - } + } #. Build the image. @@ -322,41 +399,15 @@ set to get a smaller kernel image, which will also be faster to load. sudo mixer build image - The output from this step will be :file:`release.img`, which is a live image. + The output from this step will be :file:`release.img`, which is a live + image. -#. Make the next mix. Create a new version of your mix, for the live image to - update to. Increment your mix version by 10: - - .. code-block:: bash - - mixer versions update - - Repeat steps 1-3 to add the upstream :command:`curl` bundle to the mix: - - .. code-block:: bash - - mixer bundle add curl - mixer build bundles - mixer build update - - Build optional delta-packs, which helps reduce client update time: - - .. code-block:: bash - - mixer build delta-packs --from 10 --to 20 - - Refresh your \http://localhost site to see the update content for - mix version 20. - - Look in ~/mixer/update/www/ to see the update content in your - workspace. - -Example 3: Deploy updates to target +Example 5: Deploy updates to target =================================== -The image created in Example 2 is directly bootable in QEMU. In this example, -we'll boot the image from Example 2 to verify it, and update the image from -mix version 10 (from which the image was built), to mix version 20. +The image created in Example 4 is directly bootable in QEMU. In this example, +we'll boot the image and verify it. Then we'll update the image from +mix version 10 to mix version 20. #. Set up the QEMU environment. @@ -366,8 +417,8 @@ mix version 10 (from which the image was built), to mix version 20. sudo swupd bundle-add kvm-host - Get the virtual EFI firmware, download the image launch script, and make it - executable: +#. Get the virtual EFI firmware, download the image launch script, and make + it executable: .. code-block:: bash @@ -375,13 +426,29 @@ mix version 10 (from which the image was built), to mix version 20. curl -O https://download.clearlinux.org/image/start_qemu.sh chmod +x start_qemu.sh -#. Start your VM image (created in Example 2): +#. Start your VM image (created in Example 4): .. code-block:: bash sudo ./start_qemu.sh release.img -#. Log in as root and set a password +#. Log in as root and set a password. + +#. To avoid adding a flag each time, enter: + + .. code-block:: bash + + mkdir -p /etc/swupd + cat > /etc/swupd/config << EOF + [GLOBAL] + allow_insecure_http=true + EOF + + .. note: + + By default, the swupd client is designed to communicate with an + *\https* server. For development purposes, the swupd client can talk to + an *\http* server if you add the flag :command:`--allow-insecure-http`. #. Try out your mix. @@ -391,19 +458,31 @@ mix version 10 (from which the image was built), to mix version 20. swupd info swupd bundle-list - swupd bundle-list -a -#. Now we will add the `editors` bundle that we modified. +#. List available bundles on your update server. + .. code-block:: bash - swupd bundle add editors + swupd bundle-list -a -#. Try to start the `joe` editor. It should not appear because we removed it - from the original `editors` bundle. +#. Now we will add the :command:`editors` bundle that we modified. + + .. code-block:: bash + + swupd bundle-add editors + +#. Try to start the :command:`joe` editor. + + .. code-block:: bash + + joe + + It should not appear. We removed it from the original + :command:`editors` bundle. #. Next we will update from version 10 to 20 to capture the newly - available bundles. Use :command:`swupd` to update your mix: + available bundles. .. code-block:: bash @@ -411,7 +490,7 @@ mix version 10 (from which the image was built), to mix version 20. swupd update swupd bundle-list -a -#. Now your mix should be at version 20 and curl is now available. Try using +#. Now your mix should be at version 20 and curl is available. Try using curl. This will fail because curl is not yet installed: .. code-block:: console @@ -419,19 +498,184 @@ mix version 10 (from which the image was built), to mix version 20. curl: command not found To install curl use: swupd bundle-add curl - Add the new bundle from your update server to your VM. Retry curl. It works! +#. Add the new bundle from your update server to your VM. Retry curl. + It works! .. code-block:: bash swupd bundle-add curl curl -O https://download.clearlinux.org/image/start_qemu.sh - Shutdown your VM: +#. Shutdown your VM: .. code-block:: bash poweroff +Example 6: Remove a bundle from client system +============================================= + +Removing a bundle in a future release requires more steps than deleting the +bundle description file, as shown in Example 2. After a bundle is built in +the mix, you must assure all of the files that are part of the bundle are +removed from the client where that bundle is installed. To do this, create a +version of this bundle in which all of its content is marked for deletion. + +In the following example, we show how to remove the contents of the `editors` +bundle that we added to our mix in Example 2. + +#. First update your mix version. This will set the mix to the next version. + + .. code-block:: bash + + mixer versions update + + .. note:: + Run this command every time that you want to build a new version. + +#. Navigate to local-bundles: + + .. code-block:: bash + + cd local-bundles + +#. Open the `editors` bundle with an editor and delete + **all lines** that follow after the `[MAINTAINERS]` line. + +#. Afterward, it should look like this: + + .. code-block:: console + + # [TITLE]: editors + # [DESCRIPTION]: Run popular terminal text editors. + # [STATUS]: Active + # [CAPABILITIES]: + # [TAGS]: Tools and Utilities, Editor + # [MAINTAINER]: Developer + +#. Save and exit. + +#. Next, run a build to capture recently edited bundles and update your mix. + + .. code-block:: bash + + mixer build all + + .. note:: + :command:`mixer build all` runs both :command:`mixer build bundles` and :command:`mixer build update` in one step. + +At this point the new mix, version 30, is complete. All the content of the +editors bundles is marked as deleted. If any clients of this mix upgraded to +mix build version 30, the content of the editors bundle would be removed. +Note that the bundle still exists and is being tracked by :command:`swupd`, +but it contains no files. + +Example 7: Execute a format bump +================================ + +As a maintainer of your mix, you must execute a format bump if you wish to: + +* Track upstream’s format bump on your downstream derivative +* Delete any custom bundles that were added + +Follow the appropriate use case below depending on your needs. + +Basic +----- + +If you maintain your own downstream derivative and you want to track +upstream, you need to do a format bump when one occurs on upstream. This +method helps you track the latest changes on upstream; however, it does not +change any local content that was added or deleted. For example, if you +deprecated bundles, this method will **not remove the bundle tracking**. +Refer to `Advanced`_ for help on managing your local mix and removing bundle +tracking. + +In this example, we show a mix version that was initialized to upstream +version 29740 (format 27). You need to update your mix to upstream version +30700 (format 28). To do so, you will go through a format bump. + +#. Change to your mix location and verify the current version of the mix and + its format. + + .. code-block:: bash + + mixer versions + +#. Update to upstream version, which has a newer format. + + .. code-block:: bash + + mixer versions update --upstream-version 30700 + + The output will look like this: + + .. code-block:: console + + Old mix: 10 + Old upstream: 29740 (format: 27) + + New mix: 20 + New upstream: 30700 (format: 28) + [...] + + Read the output carefully: + + * The Old mix shows the current version (10) of your mix. + + * The Old upstream shows the version and format (27) on which it’s based. + + * The New mix shows the new version (20) of your mix. + + * The New upstream shows the version and format (28) on which it’s based. + +#. Given that the format in the output differs, you need to run a + format bump: + + .. code-block:: bash + + sudo mixer build upstream-format --new-format 28 + + .. note:: + + You specify the :command:`--new-format` to indicate the format (28) to which you transition. + +#. Your mix is now synchronized with the new format (28); however, you must + still advance to the desired or latest version. + + .. code-block:: bash + + mixer versions update --upstream-version 30700 + +Advanced +-------- + +To properly remove a bundle from being tracked by :command:`swupd`, +do a manual format bump. This process can also be used to perform +customizations during the update, such as: + +* Adjustment in the command parameters + +* Change the content of the chroot + +Tutorial +-------- + +Try this tutorial to learn how to manually do a format bump. Read the +comments above each line for an explanation of each step as you execute +commands. Use this same process on your mix if you need to remove a bundle +and its tracking. + +The `afb.sh reference script`_ shows an example of how to: + +* Create a mix + +* Add a bundle + +* Deprecate a bundle + +* Do a format bump to remove the deprecated bundle + .. Example: Create a mix with custom RPM .. ------------------------------------- @@ -560,29 +804,38 @@ other version within that epoch. The compatibility epoch is set as the :file:`mixer.state` are used by mixer between executions and should not be manually changed. -A format bump is like modifying the foundation of a house to create a new -level. If `Format` increments to a new epoch (a "format bump"), the OS has -changed in such a way that updating from build A in format X to build B in -format Y will not work. +Format bump +----------- -A format bump is required when: +Mixer needs to produce content that is consumable by swupd. For swupd to +consume the content, it needs a consistent protocol that describes the +requirements of the Manifest. -* The software updater, :command:`swupd`, or the software is no longer - compatible with the previous update scheme +If the `Format` increments to a new epoch (a "format bump"), the underlying +`swupd` protocol has changed such that updating from one build version in an +old format to a new build version in a new format is **only** allowed if one +performs a corresponding format bump. -* A package is removed from the update stream and the update must ensure the - files associated with that package are removed from the system +Format bumps are “checkpoints” (see Figure 1). The first release (20) is +built on the previous format with a `swupd` that is capable of interpreting +the next format. The second release (30) has the same content, but it’s +built in the new format. -Using a format increment, we make sure pre- and co-requisite changes flow out -with proper ordering. The updated client will only update to the latest -release in its respective format version, unless overridden by command line -flags. In this way, we can guarantee that all clients update to the final -version in their given format. +Suppose you have build version 10, but you need the tools in build version +40. Whereas version 10 belongs to Format 27, version 40 belongs to Format +28. The swupd client needs to follow formats sequentially. First, you must +update to version 20, which effectively enables a format bump to version 30. +Doing a format bump bridges the gap so your mix can progress to build +version 40. -The given format *must* contain all the changes needed to understand the content built in the next format. Only after reaching the final release in the old format can a client continue to update to releases in the new format. +.. figure:: ../../_figures/mixer/format-bump.png + :alt: Format bump -The format version is incremented only when a compatibility breakage is -introduced. Normal updates, such as updating a software package, do not require a format increment. + Figure 1: Format bump + +.. note:: + if you update to build 20 and then check which format of the distro is + used, the new build version will show 30, and the new format will show 28. .. rst-class:: content-collapse @@ -840,8 +1093,9 @@ Set up a nginx web server for mixer with the following steps: sudo systemctl start nginx -#. Verify the web server is running at \http://localhost. At this point - you should no longer see a "404 Not Found" message. +#. Verify the web server is running at \http://, + where is the same one that you captured in + `Example 1: Mix set up`_. Related topics ************** @@ -856,3 +1110,6 @@ Related topics .. _mixer.bundle man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.bundle.1.rst .. _mixer.build man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.build.1.rst .. _releases: https://github.com/clearlinux/clr-bundles/releases +.. _afb.sh reference script: https://github.com/clearlinux/mixer-tools/blob/master/afb.sh + +.. _ister: https://github.com/bryteise/ister \ No newline at end of file