From 9b544a135e62d01f063a8c1257a6fa207a9237bb Mon Sep 17 00:00:00 2001 From: Mary Camp Date: Mon, 17 Jun 2019 12:36:59 -0400 Subject: [PATCH 01/17] TCS review of swupd-guide (#509) * TCS review of swupd-guide Signed-off-by: MCamp859 * Incoporated feedback. Signed-off-by: MCamp859 * Added minor edits. Signed-off-by: MCamp859 * Fixed bullets Signed-off-by: MCamp859 --- .../guides/tooling/swupd-guide.rst | 195 +++++++++--------- 1 file changed, 93 insertions(+), 102 deletions(-) diff --git a/source/clear-linux/guides/tooling/swupd-guide.rst b/source/clear-linux/guides/tooling/swupd-guide.rst index 69fc78bb..dedd7499 100644 --- a/source/clear-linux/guides/tooling/swupd-guide.rst +++ b/source/clear-linux/guides/tooling/swupd-guide.rst @@ -8,77 +8,68 @@ software. .. contents:: :local: - :depth: 2 + :depth: 1 Description *********** :command:`swupd` has two main functions: -#. It manages software replacing APT or YUM, installing bundles +#. Manages software and replaces APT or YUM, by installing bundles rather than packages. -#. It checks for system updates and installs them. +#. Checks for system updates and installs them. -:ref:`Bundles ` are the smallest granularity component that is -managed by |CL| and contain everything needed to deliver a software -capability. Rather than downloading a cascade of package dependencies when -installing a piece of software, a bundle comes with all of its dependencies. -:command:`swupd` manages overlapping dependencies behind the scenes ensuring -that all software is compatible across the system. +:command:`swupd` manages overlapping dependencies behind the scenes, ensuring +that all software is compatible across the system. It can be used to verify +the OS, clean cached files, and fix issues. + +:ref:`Bundles ` contain everything needed to deliver a software +capability. They are the smallest granularity component that is +managed by |CL|. A bundle comes with all of its dependencies, rather than +downloading a cascade of package dependencies when installing a piece of +software. Versioning ========== -In a traditional distribution, the process of describing current software -versioning usually involves: +Using package managers to keep track of software version compatibility or +compare multiple systems on many Linux distributions can be cumbersome. -- Listing and keeping track of the current OS release (generally - uninformative about any singular packages or functionality). +With |CL| :command:`swupd`, versioning happens at the individual file-level. +This means |CL| generates an entirely new OS version with any set of software +changes to the system (including software downgrades or removals). This +rolling release versioning model is similar to :command:`git` internal version +tracking, where any of the individual file commits are tracked and move the +pointer forward when changed. -- Keeping track of packages and repositories being used, and updating them - individually. - -- Listing and tracking every package available and installed on the - system, none of which are directly tied to the current OS release. - -This can be done effectively, but given the nearly endless combinations of -packages and versions of packages a server may have, it quickly becomes -non-trivial to define what "version" the system is and what software it -is running without explicitly going through each system and inspecting -every package. - -With |CL|, we need track: - -- One number - -A number representing the **current** release of the OS is sufficient to -describe the versions of all the software on the OS. Each build is -composed of a specific set of bundles made from a particular version of -packages. This matters on a daily basis to system administrators, who -need to determine which of their systems do not have the latest security -fixes, or which combinations of software have been tested. Every release -of the same number is guaranteed to contain the same versions of software, -so there's no ambiguity between two systems running the same version of |CL|. +A number that represents the **current** release of the OS describes the +versions of all the software on the OS. Each build is composed of a specific +set of bundles made from a particular version of packages. This matters on a +daily basis to system administrators, who need to determine which of their +systems do not have the latest security fixes, or which combinations of +software have been tested. Every release of the same number is guaranteed to +contain the same versions of software, so there's no ambiguity between two +systems running the same version of |CL|. Updating ======== -|CL| enforces regular updating of the OS by default and will automatically -check for updates against a version server. The content server provides the +|CL| enforces regular updating of the OS by default and automatically +checks for updates against a version server. The content server provides the file and metadata content for all versions and can be the same as the version server. The content url server provides metadata in the form of -manifests. These Manifest files list and describe file contents, symlinks, +*manifests*, which list and describe file contents, symlinks, and directories. Additionally, the actual content is provided to clients in the form of archive files. Software updates with |CL| are also efficient. Unlike package-based -distributions, :command:`swupd` only updates files that have changed rather +distributions, :command:`swupd` only updates files that have changed, rather than entire packages. For example, it is quite common for an OS security -patch to be as small as 15 KB. Using binary deltas, the |CL| is able to +patch to be as small as 15 KB. Using binary deltas, |CL| is able to apply only what is needed. -To get a more detailed understanding of how to generate update content for -|CL| see the :ref:`mixer ` tool. +For details on how to generate update content for |CL|, see the +:ref:`mixer ` tool. How it works ************ @@ -93,42 +84,41 @@ Prerequisites Updates ======= -|CL| updates are automatic by default but can be set to occur only on +|CL| updates are automatic by default, but can be set to occur only on demand. :command:`swupd` makes sure that regular updates are simple and secure. It can also check the validity of currently installed files and -software and correct any problems. +software, and can correct any problems. Manifests --------- -The Clear Linux OS software update content consists of data and -metadata. The data is the files that end up in the OS. The metadata -contains relevant information to properly provision the data to the OS -file system, as well as update the system and add or remove additional -content to the OS. +The |CL| software update content consists of data and metadata. The data is +the files that end up in the OS. The metadata contains relevant information to +properly provision the data to the OS file system, as well as update the +system and add or remove additional content to the OS. -The Manifests are mostly long lists of hashes that describe content. +The manifests are mostly long lists of hashes that describe content. Each bundle gets its own manifest file. There is a master manifest file that describes all manifests to tie it all together. Fullfiles, packs, and delta packs --------------------------------- -The data that an update provisions to a system can be obtained in -three different ways. There are three different methods, and they -exist to optimize the delivery of content and speed up updates. +To speed up updates and optimize content delivery, update data provisioned to +a system is obtained by one of the following methods: -Fullfiles are always generated for every file in every release. This -allows any Clear Linux OS to obtain the exact copy of the content -for each version directly. This would be used if the OS verification -needed to replace a single file, for instance. +* *Fullfiles* are always generated for every file in every release. This + allows any |CL| to obtain the exact copy of the content + for each version directly. This is used if the OS verification + needs to replace a single file, for instance. -Packs are available for some releases and combine many files to speed -up the creation of installation media and large updates. Delta packs -are an optimized version of packs that only contain updates (binary -diffs) and cannot be used without having the original file content. +* *Packs* are available for some releases. They combine many files to speed + up the creation of installation media and large updates. -Bundle Search +* *Delta packs* are an optimized version of packs that only contain updates + (binary diffs). They cannot be used without having the original file content. + +Bundle search ============= :command:`swupd` search downloads manifest data and searches for @@ -139,21 +129,21 @@ Only the base bundle is returned. Bundles can contain other bundles via includes. For more details, see `Bundle Definition Files`_ and its subdirectory bundles. -Bundles that are already installed, will be marked [installed] in search +Bundles that are already installed are marked **(installed)** in search results. -Optionally, you can review our `bundles`_ on GitHub. +Optionally, you can review our `bundles`_ on GitHub\*. Examples ******** -Example 1: Disable and Enable automatic updates +Example 1: Disable and enable automatic updates =============================================== -|CL| updates are automatic by default but can be set to occur only +|CL| updates are automatic by default, but can be set to occur only on demand. -#. First verify your current auto-update setting. +#. Verify your current auto-update setting. .. code-block:: bash @@ -202,7 +192,7 @@ Example 2: Find and install Kata\* Containers Kata Containers is a popular container implementation. Unlike other container implementations, each Kata Container has its own -kernel instance and runs on its own :abbr:`Virtual Machine (VM)` for +kernel instance and runs on its own :abbr:`VM (Virtual Machine)` for improved security. |CL| makes it very easy to install, since you only need to add @@ -211,34 +201,33 @@ number of dependencies. Also, check out our tutorial: :ref:`kata`. #. Find the right bundle. - * To return all possible matches for the search string enter - :command:`swupd search`, followed by 'kata': + To return all possible matches for the search string, enter + :command:`swupd search`, followed by 'kata': - .. code-block:: bash + .. code-block:: bash - sudo swupd search kata + sudo swupd search kata - The output should be similar to: + The output should be similar to: - .. code-block:: console + .. code-block:: console - Bundle with the best search result: + Bundle with the best search result: - containers-virt - Run container applications from Dockerhub in lightweight virtual machines + containers-virt - Run container applications from Dockerhub in lightweight virtual machines - This bundle can be installed with: + This bundle can be installed with: - swupd bundle-add containers-virt + swupd bundle-add containers-virt - Alternative bundle options are + Alternative bundle options are - cloud-native-basic - Contains ClearLinux native software for Cloud + cloud-native-basic - Contains ClearLinux native software for Cloud - .. note:: + .. note:: - If your search does not produce results with a specific - term, shorten the search term. For example, use *kube* instead of - *kubernetes*. + If your search does not produce results with a specific term, shorten + the search term. For example, use *kube* instead of *kubernetes*. #. Add the bundle. @@ -248,7 +237,7 @@ number of dependencies. Also, check out our tutorial: :ref:`kata`. .. note:: - To add multiple bundles simply add a space followed by the bundle name. + To add multiple bundles, add a space followed by the bundle name. The output of a successful installation should be similar to: @@ -279,7 +268,7 @@ been added to, overwritten, removed, or modified (e.g., permissions). sudo swupd diagnose All directories that are watched by :command:`swupd` are verified according -to the manifest data and hash mismatches are flagged as follows: +to the manifest data. Hash mismatches are flagged as follows: .. code-block:: console @@ -295,47 +284,49 @@ to the manifest data and hash mismatches are flagged as follows: 423 files did not match Verify successful -In this case, python packages that were installed on top of the default +In this case, Python\* packages that were installed on top of the default install were flagged as mismatched. :command:`swupd` can be directed to ignore or fix issues based on command line options. :command:`swupd` can correct any issues it detects. Additional directives -can be added including a white list of directories that will be ignored. +can be added including a white list of directories to be ignored. -The following command will repair issues, remove unknown items, and -ignore files or directories matching `/usr/lib/python`: +The following command repairs issues, removes unknown items, and +ignores files or directories matching :file:`/usr/lib/python`: .. code-block:: bash sudo swupd repair --picky --picky-whitelist=/usr/lib/python -Quick Reference +Quick reference *************** swupd info - To see the currently installed version and update servers. + Returns the currently installed version and update servers. swupd update - To update to a specific version or with no arguments to update to latest. + Updates to a specific version or updates to latest version if no + arguments are used. swupd bundle-list [--all] - To list installed bundles. + Lists installed bundles. swupd bundle-add [-b] - To find a bundle that contains your search term. + Finds a bundle that contains your search term. swupd bundle-add - To add a bundle. + Adds a bundle. swupd bundle-remove - To remove a bundle. + Removes a bundle. swupd --help - For additional :command:`swupd` commands. + Lists additional :command:`swupd` commands. man swupd - To reference the :command:`swupd` man page, or see the - `source documentation`_ available on github. + Opens the :command:`swupd` man page. + +Refer to :command:`swupd` `source documentation`_ on GitHub for more details. Related topics ************** From d03e0b88bd9a2e1a8265418d620df971db6c8fd0 Mon Sep 17 00:00:00 2001 From: Mary Camp Date: Mon, 17 Jun 2019 12:39:13 -0400 Subject: [PATCH 02/17] TCS edits in Creating CL VM on Google Cloud Platform doc (#534) * Signed-off-by: MCamp859 TCS review of GCE guide * Incorporated feedback. Signed-off-by: MCamp859 --- .../virtual-machine-install/gce.rst | 125 +++++++++++++----- 1 file changed, 95 insertions(+), 30 deletions(-) diff --git a/source/clear-linux/get-started/virtual-machine-install/gce.rst b/source/clear-linux/get-started/virtual-machine-install/gce.rst index 32624cb5..0579648b 100644 --- a/source/clear-linux/get-started/virtual-machine-install/gce.rst +++ b/source/clear-linux/get-started/virtual-machine-install/gce.rst @@ -1,31 +1,49 @@ .. _gce: -Launch |CL-ATTR| Compute Engine on Google\* Cloud Platform +Launch |CL-ATTR| Compute Engine on Google Cloud Platform\* ########################################################## This tutorial walks you through the steps to create a virtual machine -instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). +instance of |CL-ATTR| on `Google Cloud Platform`_ (:abbr:`GCP (Google Cloud Platform)`). -#. Sign in your Google account on the +.. contents:: :local: + :depth: 1 + +Prerequisites +************* + +* Set up a Google account and a GCP billing account. + +* Generate and install a user SSH key in the Linux PCs that will connect to + the VMs in GCP. + + +Process +******* + +#. Sign in to your Google\* account on the `Google Cloud Console `_: .. figure:: figures/gce/00-sign-in.png :scale: 50 % - :alt: Sign in Google services + :alt: Sign in to Google services + + Figure 1: Google sign in screen #. Google Cloud Platform uses **Projects** to manage resources. Select or create a new project for hosting the |CL| VM. .. note:: - Reference the + Refer to the `Quickstart Using a Linux VM `_ - guide to get familiar with the process of creating VM instances on GCP. + guide to learn about the process of creating VM instances on GCP. #. Navigate to the latest |CL| `release folder `_ - to view currently released ``gce`` image, and download the image archive - *clear--gce.tar.gz*. + to view the currently released :abbr:`GCE (Google Compute Engine\*)` + image, and download the :file:`clear--gce.tar.gz` + image archive. You don't need to uncompress the image archive, the intact file will be uploaded to the Google Cloud Storage later. @@ -42,26 +60,32 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Browse Google Cloud Storage + Figure 2: Browse Google Cloud Storage + .. note:: You may need to create a billing account and link to this project before you create a bucket. .. figure:: figures/gce/02-storage-browser.png :scale: 50 % - :alt: Cloud Storage Broswer tool + :alt: Cloud Storage Browser tool + + Figure 3: Cloud Storage Browser tool * Click the ``CREATE BUCKET`` button to enter the bucket creation tool. - The bucket name must be unique as buckets in the Cloud Storage share + The bucket name must be unique because buckets in the Cloud Storage share a single global namespace. - You can leave the rest of options as defaults, and select the + Leave the remaining options set to the defaults, and select the ``Create`` button at the bottom to create a *Bucket*. .. figure:: figures/gce/03-create-bucket.png :scale: 50 % - :alt: Set an unique bucket name + :alt: Set a unique bucket name -#. Once the bucket is created, press the ``Upload files`` button + Figure 4: Set bucket name + +#. Once the bucket is created, click the ``Upload files`` button on the Bucket details page to upload the |CL| GCE image archive to the named bucket: @@ -69,24 +93,32 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Cloud Storage bucket is available for storing objects + Figure 5: Cloud Storage bucket + .. figure:: figures/gce/10-image-upload.png :scale: 50 % :alt: Uploading the image source archive file + Figure 6: Uploading the image source archive file + .. figure:: figures/gce/11-bucket-uploaded.png :scale: 50 % :alt: Image archive imported complete + Figure 7: Importing complete + #. Browse the Compute Engine Image library page: * Click the *Navigation menu* icon on the upper left screen menu. - * Hover mouse over the *Compute Engine* menu and select *Images*. + * Hover your mouse over the *Compute Engine* menu and select *Images*. .. figure:: figures/gce/20-gce-image.png :scale: 50 % :alt: Go to Google Compute Engine Image library + Figure 8: Image library + #. On the Compute Engine Image library page, click the ``[+] CREATE IMAGE`` menu item to create a custom image: @@ -94,18 +126,22 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Create a Google Compute Engine image + Figure 9: Create image + #. In the VM image creation page, change the image source type to *Cloud Storage file*. #. Under :guilabel:`Cloud Storage file`, select :guilabel:`Browse`. -#. Locate the *clear--gce.tar.gz*, +#. Locate the :file:`clear--gce.tar.gz` file, and click :guilabel:`Select`. .. figure:: figures/gce/21-create-image.png :scale: 50 % :alt: Create the image using the imported image archive object + Figure 10: Create image using imported object + Accept all default options, and click the ``Create`` button at the bottom to import the Clear Linux GCE image to the image library. @@ -113,18 +149,22 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Clear Linux Compute Engine image is created + Figure 11: Image is created + #. After the |CL| image is imported, you can launch a VM instance running |CL|: * Click the *Navigation menu* icon on the upper left screen menu. - * Hover mouse over the *Compute Engine* menu group and select + * Hover your mouse over the *Compute Engine* menu group and select the *VM instances* item. .. figure:: figures/gce/30-vm-instances.png :scale: 50 % :alt: Go to VM instances catalog + Figure 12: VM instances catalog + #. If no VM instance was created in this project, you will be prompted to create one. @@ -135,25 +175,33 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Prompt for VM creation + Figure 13: VM creation + .. figure:: figures/gce/30-vm-catalog.png :scale: 50 % :alt: List of VM instances - * In :guilabel:`Region`, decide on a region based on the - `Best practices for Compute Engine regions selection`_ . + Figure 14: VM instances list - * Under *Boot disk*, click the ``Change``. + * In :guilabel:`Region`, choose a region based on the + `Best practices for Compute Engine regions selection`_. + + * Under *Boot disk*, click the ``Change`` button. .. figure:: figures/gce/30-create-vm.png :scale: 50 % :alt: Use custom image while creating Clear Linux VM instance + Figure 15: Use custom image + * Select the *Custom images* tab for using Clear Linux OS GCE image. .. figure:: figures/gce/31-select-boot-disk.png :scale: 50 % :alt: Select Clear Linux boot disk to create a VM instance + Figure 16: Select Clear Linux boot disk to create a VM instance + * Scroll down to the bottom of the VM instance creation page, expand the *Management, security, disks, networking, sole tenancy* group. @@ -161,12 +209,14 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Clear Linux requires setting up SSH keys + Figure 17: Set up SSH keys + .. note:: |CL| does not allow SSH login with a root account by default. - As a result, you need to configure the VM instance with your - SSH public key, so that you are able to remote access to it. + As a result, you must configure the VM instance with your + SSH public key, so that you are able to access it remotely. - Refer also to :ref:`security` for more details. + Refer to :ref:`security` for more details. * Click the *Security* tab, copy and paste your SSH public key: @@ -174,28 +224,43 @@ instance of |CL-ATTR| on `Google Cloud Platform`_ (GCP). :scale: 50 % :alt: Set SSH key for remote login + Figure 18: Set SSH key for remote login + .. warning:: - The username is assigned from characters preceding ``@`` in the - email address, included in the SSH key. The dot symbol "." is not - allowed, as it is an invalid character while creating user accounts - in |CL|. + The username is assigned from characters preceding ``@`` in the email + address, included in the SSH key. The dot symbol "." is not allowed, + because it is an invalid character while creating user accounts in + |CL|. * Click the ``Create`` button to create the |CL| VM. -#. The Clear Linux VM instance is created and offered a public IP address: +#. The Clear Linux VM instance is created and assigned a public IP address: .. figure:: figures/gce/41-vm-created.png :scale: 50 % :alt: Clear Linux VM instance is created and started -#. You can now SSH login to the VM by using the IP address obtained in the + Figure 19: Clear Linux VM instance is created and started + +#. You can now SSH login to the VM using the IP address obtained in the previous step, and the username associated with the SSH public key: .. figure:: figures/gce/42-ssh-vm.png :scale: 50 % - :alt: SSH log in to the Clear Linux VM + :alt: SSH login to the Clear Linux VM + + Figure 20: SSH login to Clear Linux VM + +Related topics +************** + +The following tutorials describe a similar process and may be useful references: + +* :ref:`azure` +* :ref:`aws-web` + .. _Google Cloud Platform: https://cloud.google.com/ -.. _Best practices for Compute Engine regions selection: https://cloud.google.com/solutions/best-practices-compute-engine-region-selection \ No newline at end of file +.. _Best practices for Compute Engine regions selection: https://cloud.google.com/solutions/best-practices-compute-engine-region-selection From 645c05a10fcfdba4fee267f5c783d3d1d22000e2 Mon Sep 17 00:00:00 2001 From: Kevin Putnam Date: Mon, 17 Jun 2019 12:23:28 -0700 Subject: [PATCH 03/17] KP add proxy tutorial (#514) * First commit of proxy tutorial Signed-off-by: Kevin Putnam * First commit of new proxy tutorial content. Signed-off-by: Kevin Putnam * Added additional content and some todo items. Signed-off-by: Kevin Putnam * Removed todo list. Signed-off-by: Kevin Putnam * Added requested proxy variables. Signed-off-by: Kevin Putnam * Updates based on peer review. Signed-off-by: Kevin Putnam * Fixed typo. Signed-off-by: Kevin Putnam --- source/clear-linux/guides/guides.rst | 2 + .../clear-linux/tutorials/tutorial-proxy.rst | 115 ++++++++++++++++++ source/clear-linux/tutorials/tutorials.rst | 1 + 3 files changed, 118 insertions(+) create mode 100644 source/clear-linux/tutorials/tutorial-proxy.rst diff --git a/source/clear-linux/guides/guides.rst b/source/clear-linux/guides/guides.rst index c39057b2..d00fd5da 100644 --- a/source/clear-linux/guides/guides.rst +++ b/source/clear-linux/guides/guides.rst @@ -9,6 +9,8 @@ The following guides provide step-by-step instructions on using |CL|. As of 22 May 2019 :file:`mixin` is no longer supported. +.. _tooling: + Tooling ======= diff --git a/source/clear-linux/tutorials/tutorial-proxy.rst b/source/clear-linux/tutorials/tutorial-proxy.rst new file mode 100644 index 00000000..eab5ca47 --- /dev/null +++ b/source/clear-linux/tutorials/tutorial-proxy.rst @@ -0,0 +1,115 @@ +.. _tutorial-proxy: + +Setting up proxy +################ + +This tutorial shows you how to configure your system for use behind an +outbound proxy to access the Internet. + +|CL| :ref:`tooling` applications already benefit from the :ref:`autoproxy` +feature. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, visit +the :ref:`bare metal installation guide `. + +Shells and programs in a desktop session +**************************************** + +Terminal +======== + +Add the following to your ~/.bashrc: + +.. code-block:: bash + + export http_proxy=http://your.http-proxy.url:port + export https_proxy=http://your.https-proxy.url:port + export ftp_proxy=http://your.ftp-proxy.url:port + export socks_proxy=http://your.socks-proxy.url:port + export no_proxy=".your-company-domain.com,localhost" + export HTTP_PROXY=$http_proxy + export HTTPS_PROXY=$https_proxy + export FTP_PROXY=$ftp_proxy + export SOCKS_PROXY=$socks_proxy + export NO_PROXY=$no_proxy + +wget +**** + +Run this command to enable downloading from websites from the terminal: + +.. code-block:: bash + + echo >> ~/.wgetrc < Date: Mon, 17 Jun 2019 12:24:41 -0700 Subject: [PATCH 04/17] Update image types to match current offerings. (#548) * * updated image types to match current offerings * fixed broken link in ister.rst - now pointing at image-types.rst Signed-off-by: Kevin Putnam * Updates based on peer review. Signed-off-by: Kevin Putnam * Removed deprecated cloud image. Signed-off-by: Kevin Putnam --- source/clear-linux/guides/tooling/ister.rst | 5 ++- source/clear-linux/reference/image-types.rst | 37 ++++++++++++-------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/source/clear-linux/guides/tooling/ister.rst b/source/clear-linux/guides/tooling/ister.rst index 4f29229a..be2df62b 100644 --- a/source/clear-linux/guides/tooling/ister.rst +++ b/source/clear-linux/guides/tooling/ister.rst @@ -16,8 +16,8 @@ Description |CL| is a rolling release and produces on average 10 releases per week using the ister tool. With each release we produce multiple -`image types for different environments`_ and use cases such as installers, -Hyper-V, KVM, or VMWare. +:ref:`image types for different environments ` and use cases such +as installers, Hyper-V, KVM, or VMWare. Each image has a JSON configuration file used by ister to generate the image. These JSON configuration files describe the image type, partitions, version, @@ -88,7 +88,6 @@ Related topics * :ref:`bulk-provision` .. _ister.py tool: https://github.com/bryteise/ister -.. _image types for different environments: https://cdn.download.clearlinux.org/image/README-IMAGES.html .. _Configuration files for the current release: https://cdn.download.clearlinux.org/current/config/image/ .. _Previous releases: https://cdn.download.clearlinux.org/releases/ .. _Install a bundle: https://clearlinux.org/documentation/clear-linux/guides/maintenance/swupd-guide#adding-a-bundle \ No newline at end of file diff --git a/source/clear-linux/reference/image-types.rst b/source/clear-linux/reference/image-types.rst index a87fbd56..7fac89f8 100644 --- a/source/clear-linux/reference/image-types.rst +++ b/source/clear-linux/reference/image-types.rst @@ -35,14 +35,11 @@ Table 2 lists the currently available images that are platform specific. * - Image Type - Description - * - installer.img - - Preferred image of |CL| with interactive installer. + * - live-desktop.img or live-desktop.iso + - Image for booting to GNOME\* desktop to preview or install the OS. - * - installer.iso - - ISO of |CL| with interactive installer. Only for special cases where ISO image format is required (not for use with a USB key) - - * - live.img - - Image for live booting into memory, without requiring installaton. + * - live-server.img or live-server.iso + - Image for booting to server command prompt to preview or install the OS. .. list-table:: Table 2: Types of platform-specific |CL| images :widths: 15, 85 @@ -51,21 +48,27 @@ Table 2 lists the currently available images that are platform specific. * - Image Type - Description + * - aws.img + - Image suitable for use with Amazon\* AWS\*. + * - azure.vhd - - Virtual Hard Disk for use on Microsoft\* Azure\* cloud platform + - Virtual Hard Disk for use on Microsoft\* Azure\* cloud platform. * - azure-docker.vhd - - Virtual Hard Disk for use on Microsoft Azure cloud platform with Docker\* pre-installed + - Virtual Hard Disk for use on Microsoft Azure cloud platform with Docker\* pre-installed. * - azure-machine-learning.vhd - - Virtual Hard Disk for use on Microsoft Azure cloud platform with the `machine-learning-basic` bundle installed + - Virtual Hard Disk for use on Microsoft Azure cloud platform with the `machine-learning-basic` bundle installed. - * - cloud.img - - Image for use by cloud deployments such as OpenStack\* + * - cloudguest.img + - Image with generic cloud guest virtual machine (VM) requirements installed. - * - containers.img + * - container-host-kvm.img - Image for use by Clear Containers runtime. Includes `optimized kernel`_ for Clear Containers. + * - gce.tar + - Image with the Google Compute Engine (GCE) specific kernel. + * - hyperv.vhdx - Virtual Hard Disk for use with Microsoft Hyper-V\* hypervisor. Includes `optimized kernel`_ for Hyper-V. @@ -73,9 +76,15 @@ Table 2 lists the currently available images that are platform specific. - Image for booting in a simple VM with start_qemu.sh. Includes `optimized kernel`_ for KVM. + * - kvm-legacy.img + - Image for booting in a simple VM using legacy BIOS, if using start_qemu.sh make sure to remove -bios parameter. + + * - pxe.tar + - Image suitable for use with PXE server. + * - vmware.vmdk - Virtual Machine Disk for VMware\* platforms inclduing Player, Workstation, and ESXi. -.. _images: https://cdn.download.clearlinux.org/image +.. _images: https://clearlinux.org/downloads .. _`optimized kernel`: https://clearlinux.org/documentation/clear-linux/reference/compatible-kernels From be3c7f00d1575fd6603aaccc4692bc3d7ea52664 Mon Sep 17 00:00:00 2001 From: Tom Leavitt Date: Mon, 17 Jun 2019 14:28:44 -0700 Subject: [PATCH 05/17] Update KVM download script (#551) update the grep string to isolate and download the -kvm.img file --- source/clear-linux/get-started/virtual-machine-install/kvm.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/clear-linux/get-started/virtual-machine-install/kvm.rst b/source/clear-linux/get-started/virtual-machine-install/kvm.rst index 8176bedf..9b750643 100644 --- a/source/clear-linux/get-started/virtual-machine-install/kvm.rst +++ b/source/clear-linux/get-started/virtual-machine-install/kvm.rst @@ -61,7 +61,7 @@ Download and launch the virtual machine .. code-block:: bash - curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm) + curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm'\.') #. Uncompress the downloaded image: From e3538c68a55ebcf250e7449b29fa0e6cd340a5d0 Mon Sep 17 00:00:00 2001 From: George T Kramer Date: Tue, 18 Jun 2019 10:35:49 -0700 Subject: [PATCH 06/17] Remove non-production image types (#555) container-host-kvm.img is considered developmental and should not be shown in documentation. Want to keep list of image types in documentation oriented toward production. Signed-off-by: George T Kramer --- source/clear-linux/reference/image-types.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/clear-linux/reference/image-types.rst b/source/clear-linux/reference/image-types.rst index 7fac89f8..cc5d1325 100644 --- a/source/clear-linux/reference/image-types.rst +++ b/source/clear-linux/reference/image-types.rst @@ -63,9 +63,6 @@ Table 2 lists the currently available images that are platform specific. * - cloudguest.img - Image with generic cloud guest virtual machine (VM) requirements installed. - * - container-host-kvm.img - - Image for use by Clear Containers runtime. Includes `optimized kernel`_ for Clear Containers. - * - gce.tar - Image with the Google Compute Engine (GCE) specific kernel. From 815c250bab2d47f4cb3c1a9ad31698114ec334b1 Mon Sep 17 00:00:00 2001 From: Tom Leavitt Date: Tue, 18 Jun 2019 11:08:41 -0700 Subject: [PATCH 07/17] Update telemetry about (#549) * Update telemetry about Remove link to the features/telemetry, it no longer exists * Update next steps Update next steps section * add backticks cut and paste zapped the backticks, restore them --- source/clear-linux/concepts/telemetry-about.rst | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/source/clear-linux/concepts/telemetry-about.rst b/source/clear-linux/concepts/telemetry-about.rst index 750277c8..34a12d1e 100644 --- a/source/clear-linux/concepts/telemetry-about.rst +++ b/source/clear-linux/concepts/telemetry-about.rst @@ -78,10 +78,5 @@ own records, then you must set up your own telemetry backend server. Next steps ********** -To put this concept into practice, see the following resources: +To put this concept into practice, refer to :ref:`telem-guide`. -* :ref:`telem-guide` -* `Telemetry feature description`_ - -.. _`Telemetry feature description`: - https://clearlinux.org/features/telemetry From 3c1cfd90566b0e19f215ce2013c9a14ac19a57bf Mon Sep 17 00:00:00 2001 From: puneetse <22071208+puneetse@users.noreply.github.com> Date: Thu, 20 Jun 2019 11:38:28 -0700 Subject: [PATCH 08/17] Add document on CPU power and performance (#542) * Add document on CPU power and performance * Minor revisions for: - grammar - wording/spelling - formatting Signed-off-by: Kristal Dale --- .../guides/maintenance/cpu-performance.rst | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 source/clear-linux/guides/maintenance/cpu-performance.rst diff --git a/source/clear-linux/guides/maintenance/cpu-performance.rst b/source/clear-linux/guides/maintenance/cpu-performance.rst new file mode 100644 index 00000000..10eedb6e --- /dev/null +++ b/source/clear-linux/guides/maintenance/cpu-performance.rst @@ -0,0 +1,196 @@ +.. _cpu-performance: + +CPU Power and Performance +######################### + +Modern x86 :abbr:`CPUs (central processing units)` employ a number of features +and technologies to balance performance, energy, and thermal efficiencies. + +By default, |CL| prioritizes maximum CPU performance with the philosophy that +the faster the program finishes execution, the faster the CPU can return to a +low energy idle state. It is important to understand and evaluate all of these +technologies when troubleshooting or considering changing the defaults. + +.. contents:: :local: + :depth: 1 + +CPU power saving mechanisms +=========================== + +C-states and P-states are both CPU power saving mechanisms that are entered +under different operating conditions. The tradeoff is a slightly longer time +to exit these states when the CPU is needed once again. + +.. _c-states-section: + +C-states (idle states) +---------------------- + +C-states are hardware sleep states that are entered when it is determined that +the CPU is idle and not executing instructions. + +C-states aim to reduce power utilization by increasingly reducing clock +frequency, voltages, and features in each state. + +Although C-states can typically be limited or disabled in a system's UEFI or +BIOS configuration, these settings are overridden when the `intel_idle +driver`_ is in use. + +To view the current cpuidle driver run this command in a terminal: + +.. code:: bash + + cat /sys/devices/system/cpu/cpuidle/current_driver + +For troubleshooting, C-states can be limited with a kernel command line boot +parameter by adding :command:`processor.max_cstate=N intel_idle.max_cstate=N` +or completely disabled with :command:`idle=poll`. + +.. note:: + + * :command:`processor.max_cstate=0` is changed to :command:`processor.max_cstate=1` by the kernel to be a valid value. + + * :command:`intel_idle.max_cstate=0` disables the Intel Idle driver, not set + it to C-state 0. + +.. _p-states-section: + +P-states (performance states) +----------------------------- + +P-states, also known as *SpeedStep* on Intel processors or *Cool'n'Quiet* on +AMD processors, are states entered while the CPU is active and executing +instructions. + +P-states aim to reduce power utilization by adjusting CPU clock frequency and +voltages based on CPU demand. + +P-states can typically be limited or disabled in a system's firmware (UEFI/BIOS). + +Turbo boost +~~~~~~~~~~~ + +`Turbo Boost technology`_, found on some modern Intel CPUs, allows core(s) on +a processor to temporarily operate at a higher than rated CPU clock frequency +to accommodate demanding workloads if the CPU is under defined power and +thermal thresholds. + +Turbo boost is an extension of P-states. As such, changing or limiting +C-states or P-states impact the ability of a process to enter Turbo boost. + +Turbo boost can be disabled in a system's UEFI or BIOS. Turbo boost can also +be disabled within |CL| with the command: + +.. code:: bash + + echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo + +Linux CPU clock frequency scaling +================================= + +The CPUFreq subsystem in Linux allows the OS to control :ref:`C-states +` and :ref:`P-states ` +via CPU drivers and governors that provide algorithms that define how and when +to enter these states. + +Scaling driver +-------------- + +Linux uses the `Intel P-state driver`_, *intel_pstate*, for modern Intel +processors from the Sandy Bridge generation or newer. Other processors may +default to the *acpi-cpufreq* driver which reads values from the systems UEFI +or BIOS. + +To view the current CPU frequency scaling driver run this command in a terminal: + +.. code:: bash + + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver + +Scaling governor +---------------- + +|CL| sets the CPU governor to *performance* which calls for the CPU to operate +at maximum clock frequency. In other words, P-state P0. While this may sound +wasteful at first, it is important to remember that power utilization does not +increase significantly simply because of a locked clock frequency without a +workload. + +To view the current CPU frequency scaling governor run this command in a terminal: + +.. code:: bash + + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + +To change the CPU frequency scaling governor: + +#. Disable |CL| enforcement of certain power and performance settings: + + .. code:: bash + + sudo systemctl mask clr-power.timer + +#. Change the governor. In the example below, the governor is set to + *performance*: + + .. code:: bash + + echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor + +The list of all governors can be found in the `Linux kernel documentation on +CPUFreq Governors`_. + +.. note:: + + The intel_pstate driver only supports *performance* and *powersave* governors. + +Thermal management +================== + +`thermald`_ is a Linux thermal management daemon used to prevent the +overheating of platforms. When temperature thresholds are exceeded, thermald +forces a C-state by inserting CPU sleep cycles and adjusts available cooling +methods. This can be especially desirable for laptops. + +By default, thermald is disabled in |CL| and starts automatically if battery +power is detected. thermald can be manually enabled using the systemd service +by running the command: + +.. code:: bash + + sudo systemctl enable thermald + sudo systemctl start thermald + +For more information, see the thermald man page: + +.. code:: bash + + man thermald + +`ThermalMonitor`_ is a GUI application that can visually graph and log +temperatures from thermald. To use ThermalMonitor, add the desktop-apps-extras +bundle and add your user account to the power group: + +.. code:: bash + + sudo swupd bundle-add desktop-apps-extras + sudo usermod -a -G power + ThermalMonitor + +.. note:: + + After adding a new group you must log out and log back in for the new group + to take affect. + + +.. _`Intel P-state driver`: https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt + +.. _`Linux kernel documentation on CPUFreq Governors`: https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt + +.. _thermald: https://01.org/linux-thermal-daemon + +.. _`intel_idle driver`: https://github.com/torvalds/linux/blob/master/drivers/idle/intel_idle.c + +.. _`ThermalMonitor`: https://github.com/intel/thermal_daemon/tree/master/tools/thermal_monitor + +.. _`Turbo Boost technology`: https://www.intel.com/content/www/us/en/architecture-and-technology/turbo-boost/turbo-boost-technology.html From 18794a66ed25f39cbf4d4f5b4c2f643d399a39ba Mon Sep 17 00:00:00 2001 From: Beth Dean Date: Mon, 24 Jun 2019 11:41:52 -0700 Subject: [PATCH 09/17] Add section for kubectl to dlrs tutorial (#550) * Add section for kubectl to dlrs tutorial * Editorial clean up to Kubectl section. * Minor grammatical edits: missing punctuation and line length clean up. Signed-off-by: Kristal Dale --- source/clear-linux/tutorials/dlrs/dlrs.rst | 80 ++++++++++++++++------ 1 file changed, 60 insertions(+), 20 deletions(-) diff --git a/source/clear-linux/tutorials/dlrs/dlrs.rst b/source/clear-linux/tutorials/dlrs/dlrs.rst index 7d51ba4b..ff3f2ca4 100644 --- a/source/clear-linux/tutorials/dlrs/dlrs.rst +++ b/source/clear-linux/tutorials/dlrs/dlrs.rst @@ -6,7 +6,6 @@ Deep Learning Reference Stack This tutorial describes how to run benchmarking workloads for TensorFlow\*, PyTorch\*, and Kubeflow in |CL-ATTR| using the Deep Learning Reference Stack. - .. contents:: :local: :depth: 1 @@ -26,13 +25,13 @@ The Deep Learning Reference Stack is available in the following versions: for Deep Neural Networks (Intel® MKL-DNN) primitives and introduces support for Intel® AVX-512 Vector Neural Network Instructions (VNNI). * `Intel MKL-DNN`_, which includes the TensorFlow framework optimized using - Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN) primitives. + Intel® Math Kernel Library for Deep Neural Networks (Intel® MKL-DNN) + primitives. * `Eigen`_, which includes `TensorFlow`_ optimized for Intel® architecture. * `PyTorch with OpenBLAS`_, which includes PyTorch with OpenBlas. * `PyTorch with Intel MKL-DNN`_, which includes PyTorch optimized using Intel® Math Kernel Library (Intel® MKL) and Intel MKL-DNN. - .. note:: To take advantage of the Intel® AVX-512 and VNNI functionality with the Deep @@ -41,14 +40,16 @@ The Deep Learning Reference Stack is available in the following versions: * Intel® AVX-512 images require an Intel® Xeon® Scalable Platform * VNNI requires a 2nd generation Intel® Xeon® Scalable Platform - Stack features ============== * Deep Learning Reference Stack `V3.0 release announcement`_. -* Deep Learning Reference Stack v2.0 including current `PyTorch benchmark results`_. -* Deep Learning Reference Stack v1.0 including current `TensorFlow benchmark results`_. -* `Release notes on Github\*`_ for the latest release of Deep Learning Reference Stack. +* Deep Learning Reference Stack v2.0 including current + `PyTorch benchmark results`_. +* Deep Learning Reference Stack v1.0 including current + `TensorFlow benchmark results`_. +* `Release notes on Github\*`_ for the latest release of Deep Learning Reference + Stack. .. note:: @@ -58,19 +59,21 @@ Stack features Prerequisites ============= -* :ref:`Install ` |CL| on your host system. +* :ref:`Install ` |CL| on your host system * :command:`containers-basic` bundle * :command:`cloud-native-basic` bundle In |CL|, :command:`containers-basic` includes Docker\*, which is required for TensorFlow and PyTorch benchmarking. Use the :command:`swupd` utility to -check if :command:`containers-basic` and :command:`cloud-native-basic` are present: +check if :command:`containers-basic` and :command:`cloud-native-basic` are +present: .. code-block:: bash sudo swupd bundle-list -To install the :command:`containers-basic` or :command:`cloud-native-basic` bundles, enter: +To install the :command:`containers-basic` or :command:`cloud-native-basic` +bundles, enter: .. code-block:: bash @@ -91,7 +94,7 @@ Version compatibility We validated these steps against the following software package versions: -* |CL| 26240 (Lower version not supported.) +* |CL| 26240 (Lower version not supported) * Docker 18.06.1 * Kubernetes 1.11.3 * Go 1.11.12 @@ -137,8 +140,8 @@ TensorFlow. You can replace the model with one of your choice supported by the TensorFlow benchmarks. - If you are using an FP32 based model, it can be converted to an int8 model using `Intel® quantization tools`_ - + If you are using an FP32 based model, it can be converted to an int8 model + using `Intel® quantization tools`_. PyTorch single and multi-node benchmarks **************************************** @@ -196,6 +199,40 @@ We used `flannel`_ as the network provider for these tests. If you prefer a different network layer, refer to the Kubernetes `networking documentation`_ for setup. +Kubectl +======= + +You can use kubectl to run commands against your Kubernetes cluster. Refer to +the `kubectl overview`_ for details on syntax and operations. Once you have a +working cluster on Kubernetes, use the following YAML script to start a pod with +a simple shell script, and keep the pod open. + +#. Copy this example.yaml script to your system: + + .. code-block:: console + + apiVersion: v1 + kind: Pod + metadata: + name: example-pod + labels: + app: ex-pod + spec: + containers: + - name: ex-pod-container + image: clearlinux/stacks-dlrs-mkl:latest + command: ['/bin/bash', '-c', '--'] + args: [ "while true; do sleep 30; done" ] + +#. Execute the script with kubectl: + + .. code-block:: bash + + kubectl apply –f /example.yaml + +This script opens a single pod. More robust solutions would create a deployment +or inject a python script or larger shell script into the container. + Images ====== @@ -210,7 +247,7 @@ location. From the Docker image, run the following: cp launcher.py /opt chmod u+x /opt/* -Your entry point becomes: :file:`/opt/launcher.py` +Your entry point becomes: :file:`/opt/launcher.py`. This builds an image that can be consumed directly by TFJob from Kubeflow. @@ -220,9 +257,9 @@ ksonnet\* Kubeflow uses ksonnet\* to manage deployments, so you must install it before setting up Kubeflow. -ksonnet was added to the :command:`cloud-native-basic` bundle in |CL| version 27550. If -you are using an older |CL| version (not recommended), you must manually -install ksonnet as described below. +ksonnet was added to the :command:`cloud-native-basic` bundle in |CL| version +27550. If you are using an older |CL| version (not recommended), you must +manually install ksonnet as described below. On |CL|, follow these steps: @@ -294,7 +331,8 @@ Run a TFJob Replace with the image name you specified in previous steps. -#. Generate Kubernetes manifests for the workloads and apply them using these commands: +#. Generate Kubernetes manifests for the workloads and apply them using these + commands: .. code-block:: bash @@ -372,7 +410,8 @@ A new, blank notebook is displayed, with a cell ready for input. :alt: New blank notebook -To verify that PyTorch is working, copy the following snippet into the blank cell, and run the cell. +To verify that PyTorch is working, copy the following snippet into the blank +cell, and run the cell. .. code-block:: console @@ -405,7 +444,6 @@ Related topics * :ref:`kubernetes` tutorial * `Jupyter Notebook`_ - .. _TensorFlow: https://www.tensorflow.org/ .. _Kubeflow: https://www.kubeflow.org/ @@ -446,6 +484,8 @@ Related topics .. _Jupyter Notebook: https://jupyter.org/ +.. _kubectl overview: https://kubernetes.io/docs/reference/kubectl/overview/ + .. _Release notes on Github\*: https://github.com/clearlinux/dockerfiles/blob/master/stacks/dlrs/releasenote.md .. _Intel® quantization tools: https://github.com/IntelAI/tools/blob/master/tensorflow_quantization/README.md#quantization-tools From 122da5da4583659d7880c4f58807470dee6ef40e Mon Sep 17 00:00:00 2001 From: DougTW Date: Wed, 26 Jun 2019 15:31:23 -0700 Subject: [PATCH 10/17] Dm autospec guide editorial (#565) * Edited for syntax, spelling, trademarking, and branding. Signed-off-by: douglasm * Made editorial revisions, e.g., grammar and spelling. Signed-off-by: douglasm * changed one phrase to use active voice present tense. Reset autoproxy.rst. Signed-off-by: douglasm --- .../clear-linux/guides/tooling/autoproxy.rst | 16 ++--- .../clear-linux/guides/tooling/autospec.rst | 58 +++++++++---------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/source/clear-linux/guides/tooling/autoproxy.rst b/source/clear-linux/guides/tooling/autoproxy.rst index 129cae51..3b850229 100644 --- a/source/clear-linux/guides/tooling/autoproxy.rst +++ b/source/clear-linux/guides/tooling/autoproxy.rst @@ -20,22 +20,22 @@ manually configure the proxies. Corporate and private networks can be very complex, needing to restrict and control network connections for security reasons. The typical side effects -are limited or blocked connectivity and requiring manual configuration of -proxies to perform the most mundane tasks such as cloning a repo or checking +are limited or blocked connectivity, and require manual configuration of +proxies to perform the most mundane tasks, such as cloning a repo or checking for updates. With |CL|, all of the work is done behind the scenes to effortlessly use your network and have connections “just work”. -This feature removes massive complications in network connectivity due to -proxy issues. You can automate tasks like unit testing without worrying -about the proxy not being set and you can remove unset proxies from the +This feature removes severe complications with network connectivity due to +proxy issues. You can automate tasks, such as unit testing, without worrying +about the proxy not being set, and you can remove unset proxies from the equation when dealing with network unavailability across systems. How it works ************ -We designed Autoproxy around tools provided by most Linux +We designed Autoproxy around tools provided by most Linux\* distributions with a few minor additions and modifications. We leveraged the -DHCP and network information provided from systemd and created a +DHCP and network information obtained from systemd and created a PAC-discovery daemon. The daemon uses the information to resolve a URL for a PAC file. The daemon then passes the URL into PACrunner\*. PACrunner downloads the PAC file and uses the newly implemented Duktape\* engine to @@ -49,7 +49,7 @@ parse it. From that point on, any cURL\* or network requests query PACrunner for the correct proxy to use. We modified the cURL library to communicate with PACrunner over DBus. However, cURL will ignore PACrunner and run normally if -no PAC file is loaded or if you set any proxies manually. Thus, your +no PAC file is loaded or if you manually set any proxies. Thus, your environment settings are respected and no time is wasted trying to resolve a proxy. All these steps happen in the background with no user interaction. diff --git a/source/clear-linux/guides/tooling/autospec.rst b/source/clear-linux/guides/tooling/autospec.rst index f07252f2..000bb9e8 100644 --- a/source/clear-linux/guides/tooling/autospec.rst +++ b/source/clear-linux/guides/tooling/autospec.rst @@ -3,8 +3,8 @@ autospec ######## -**autospec** is a tool to assist in the automated creation and maintenance of -RPM packaging in |CL-ATTR|. Where a standard RPM build process using +**autospec** is a tool used to assist with the automated creation and maintenance of +RPM packaging in |CL-ATTR|. Where a standard :abbr:`RPM (RPM Package Manager)` build process using :command:`rpmbuild` requires a tarball and :file:`.spec` file to start, autospec requires only a tarball and package name to start. @@ -16,17 +16,17 @@ Description *********** The autospec tool attempts to infer the requirements of the :file:`.spec` file -by analyzing the source code and :file:`Makefile` information. It will -continuously run updated builds based on new information discovered from build +by analyzing the source code and :file:`Makefile` information. It +continuously runs updated builds based on new information discovered from build failures until it has a complete and valid :file:`.spec` file. If needed, you can influence the behavior of autospec and customize the build by providing optional `control files`_ to the autospec tool. -autospec uses mock as a sandbox to run the builds. Visit the `mock wiki`_ for +autospec uses **mock** as a sandbox to run the builds. Visit the `mock wiki`_ for additional information on using mock. -For a general understanding of how RPMs work, visit the `rpm website`_ or the -`RPM Packaging Guide`_ . +For a general understanding of how an RPM works, visit +the `rpm website`_ or the `RPM Packaging Guide`_ . How it works ************ @@ -44,7 +44,7 @@ The setup for building source in |CL| must be completed before using the autospec tool. Refer to `Setup environment to build source`_ for instructions on completing -setup. +the setup. Create an RPM ============= @@ -52,7 +52,7 @@ Create an RPM The basic autospec process is described in the following steps: #. The :command:`make autospec` command generates a :file:`.spec` file based on - analysis of code and existing control files. + the analysis of code and existing control files. Any control files should be located in the same directory as the resulting :file:`.spec` file. @@ -65,13 +65,13 @@ The basic autospec process is described in the following steps: #. autospec detects any missed declarations in the :file:`.spec`. -#. If build errors occur, autospec will scan the build log to try and detect +#. If build errors occur, autospec scans the build log to try to detect the root cause. -#. If autospec detects the root cause and knows how to continue, it will restart +#. If autospec detects the root cause and knows how to continue, it restarts the build automatically at step 1 with updated build instructions. -#. Otherwise, autospec will stop the build for user inspection to resolve the +#. Otherwise, autospec stops the build for user inspection to resolve the errors. Respond to the build process output by fixing source code issues and/or editing control files to resolve issues, which may include dependencies or exclusions. See `autospec README`_ for more information on @@ -79,7 +79,7 @@ The basic autospec process is described in the following steps: The user resumes the process at step 1 after errors are resolved. - If a binary dependency doesn't exist in |CL|, you will need to build it + If a binary dependency doesn't exist in |CL|, you must build it before running autospec again. Following these steps, autospec continues to rebuild the package, based on @@ -95,10 +95,10 @@ Complete `Setup environment to build source`_ before using these examples. :local: :depth: 1 -Example 1: Build RPM with existing spec file -============================================ +Example 1: Build RPM with an existing spec file +=============================================== -This example shows how to build a RPM from a pre-packaged upstream package, with +This example shows how to build a RPM from a pre-packaged upstream package with an existing spec file. The example uses the ``dmidecode`` package. #. Navigate to the autospec workspace and clone the ``dmidecode`` package: @@ -110,7 +110,7 @@ an existing spec file. The example uses the ``dmidecode`` package. .. note:: - You can clone all package repos at once using: + You can clone all package repos at once using the following command: .. code-block:: bash @@ -147,7 +147,7 @@ create a simple helloclear RPM. cd ~/clearlinux make autospecnew URL="https://github.com/clearlinux/helloclear/archive/helloclear-v1.0.tar.gz" NAME="helloclear" - The resulting RPMs are in :file:`./packages/helloclear/rpms`. Builde logs and + The resulting RPMs are in :file:`./packages/helloclear/rpms`. Build logs and additional RPMs are in :file:`./packages/helloclear/results`. Example 3: Generate a new spec file with a pre-defined package @@ -198,8 +198,8 @@ Example 4: Provide control files to autospec ============================================ This example shows how to modify control files to correct build failures that -autospec is unable to resolve. In this example you will add a missing license -and dependencies in order for autospec to complete a successful build. +autospec is unable to resolve. In this example, you will add a missing license +and dependencies so autospec can complete a successful build. #. Navigate to the autospec workspace: @@ -226,7 +226,7 @@ and dependencies in order for autospec to complete a successful build. make autospecnew URL="https://github.com/OPAE/opae-sdk/archive/0.13.0.tar.gz" NAME="opae-sdk" - This will give an error for a missing license file: + This results in an error for a missing license file: .. code-block:: console @@ -238,7 +238,7 @@ and dependencies in order for autospec to complete a successful build. cd packages/opae-sdk -#. Add one or more valid license identifier from the +#. Add one or more valid license identifiers from the `SPDX License List `_. In the example below, two different licenses are appropriate based on the opae-sdk project licensing: @@ -253,7 +253,7 @@ and dependencies in order for autospec to complete a successful build. make autospec - This will result in a generic error: + This results in a generic error: .. code-block:: console @@ -265,7 +265,7 @@ and dependencies in order for autospec to complete a successful build. cat ./results/build.log - In the build log, you will find details for the specific failures. In this + The build log contains details for the specific failures. In this instance, there are missing dependencies: .. code-block:: console @@ -279,7 +279,7 @@ and dependencies in order for autospec to complete a successful build. linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae #. Search the spec files of upstream |CL| packages to see if the json-c library - is availabe. In this case, it does exist and we'll add the json-c 'dev' + is available. In this case, it does exist and we'll add the json-c 'dev' package into the buildreq_add: .. code-block:: bash @@ -302,7 +302,7 @@ and dependencies in order for autospec to complete a successful build. grep 'libuuid\.so$' ~/clearlinux/packages/*/*.spec echo "util-linux-dev" >> buildreq_add -#. Run autospec again and find the successfully-generated RPMs in the rpms +#. Run autospec again and find the successfully-generated RPMs in the :file:`rpms` directory: .. code-block:: bash @@ -384,7 +384,7 @@ To test an autospec-created package inside a VM: The code that makes this possible can be viewed by searching for the *install:* target in the `Makefile.common file on GitHub`_. -#. Return back to the :file:`~/clearlinux` directory and start the |CL| VM: +#. Return to the :file:`~/clearlinux` directory and start the |CL| VM: .. code-block:: bash @@ -411,7 +411,7 @@ Test directly on a development machine The |CL| development tooling also includes a method to extract autospec-created RPMs locally onto a |CL| development system for testing. -Extracting an RPM directly onto a system offers quicker testing, however +Extracting an RPM directly onto a system offers quicker testing; however conflicts may occur and responsibility to remove the software after testing is up to the developer. @@ -456,7 +456,7 @@ automated for you with a setup script. It uses tools from the The setup script creates a workspace in the :file:`clearlinux` folder, with the subfolders :file:`Makefile`, :file:`packages`, and :file:`projects`. The :file:`projects` folder contains the main tools used for making packages in -|CL|: `autospec` and `common`. +|CL| :file:`autospec` and :file:`common`. Follow these steps to setup the workspace and tooling for building source: From ab72289223f4691f6fe69e6c2b3b2335b670ecb9 Mon Sep 17 00:00:00 2001 From: puneetse <22071208+puneetse@users.noreply.github.com> Date: Wed, 26 Jun 2019 17:25:44 -0700 Subject: [PATCH 11/17] Add document on debug system (#561) --- source/clear-linux/concepts/concepts.rst | 3 +- source/clear-linux/guides/tooling/debug.rst | 89 ++++++++++++++++++ .../guides/tooling/figures/debug-diagram.png | Bin 0 -> 39393 bytes 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 source/clear-linux/guides/tooling/debug.rst create mode 100644 source/clear-linux/guides/tooling/figures/debug-diagram.png diff --git a/source/clear-linux/concepts/concepts.rst b/source/clear-linux/concepts/concepts.rst index 1a324c33..96aa1425 100644 --- a/source/clear-linux/concepts/concepts.rst +++ b/source/clear-linux/concepts/concepts.rst @@ -3,7 +3,8 @@ Concepts ######## -|CL-ATTR| does things differently than other Linux distributions. Use the concepts section to learn in detail about the features that make |CL| +|CL-ATTR| does things differently than other Linux distributions. Use the +concepts section to learn in detail about the features that make |CL| different. .. toctree:: diff --git a/source/clear-linux/guides/tooling/debug.rst b/source/clear-linux/guides/tooling/debug.rst new file mode 100644 index 00000000..55bca98a --- /dev/null +++ b/source/clear-linux/guides/tooling/debug.rst @@ -0,0 +1,89 @@ +.. _debug: + +Debug System +############ + +|CL-ATTR| introduces a novel approach to system software debugging using +*clr-debug-info*. On the client side, the |CL| debug system obtains any +necessary debug information on-the-fly over a network during a debugging +session. On the server side, the system curates and compresses debug +information into small pieces for efficient downloading. + +For developers, this avoids the interruption during debugging that usually +happens when debug information is missing. This can be especially useful on +systems where storage is limited. + + +.. contents:: :local: + :depth: 2 + + +Background +---------- + +Software that is compiled and packaged for general usage in an operating +system typically only contains components that are used to execute the +program, like binaries and libraries. Extra developer data like the the +actual source code and symbol information are separated and excluded for +efficiency. + +The debug information helps relate binary code to human readable source code +lines and variables. Most of the time this auxiliary information is not needed +however without it, debugging a program results in limited visibility. + + +Usage +----- + +The clr-debug-info system is integrated into |CL| and seamlessly engages once +installed. + +#. Install the *dev-utils* bundle. + + .. code:: bash + + sudo swupd bundle-add dev-utils + + .. note:: + + The *telemetrics* and *performance-tools* bundles also include + clr-debug-info. + + +#. Start a debugging session against a program using a debugger, like GDB. + For example, to debug *gnome-control-center*: + + .. code:: bash + + gdb /usr/bin/gnome-control-center + +As the program is stepped through and debug information is needed, the +clr_debug_daemon will obtain it in the background. + + +Implementation +-------------- + +The implementation of the |CL| debug system is open source and available on +GitHub at: https://github.com/clearlinux/clr-debug-info/ + +.. figure:: figures/debug-diagram.png + :scale: 75% + :alt: Debug system communication flow + + Figure 1: The communication flow of the |CL| debug system + +The |CL| debug system implements a :abbr:`FUSE (filesystem in userspace)` +filesystem mounted at :file:`/usr/lib/debug` and :file:`/usr/src/debug`. The +FUSE filesystem starts automatically. Its status can be verified with +:command:`systemctl status clr_debug_fuse.service`. + +The *clr_debug_daemon* is responsible for fetching the appropriate package +debug content from the server and making it available for any debugging +programs needed it. It is socket activated whenever a request to the local +FUSE filesystem occurs. Its status can be verified with :command:`systemctl +status clr_debug_daemon.service`. + + +|CL| hosts debuginfo content packaged for consumption by |CL| debug clients at +https://download.clearlinux.org/debuginfo/ diff --git a/source/clear-linux/guides/tooling/figures/debug-diagram.png b/source/clear-linux/guides/tooling/figures/debug-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..d85a40451ca9098fea08c6d7abb2d6d046171b41 GIT binary patch literal 39393 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 Date: Wed, 26 Jun 2019 17:31:16 -0700 Subject: [PATCH 12/17] Add stateless concept document (#564) --- source/clear-linux/concepts/concepts.rst | 1 + .../concepts/figures/stateless-1.png | Bin 0 -> 96383 bytes .../concepts/figures/stateless-2.png | Bin 0 -> 89768 bytes source/clear-linux/concepts/stateless.rst | 145 ++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 source/clear-linux/concepts/figures/stateless-1.png create mode 100644 source/clear-linux/concepts/figures/stateless-2.png create mode 100644 source/clear-linux/concepts/stateless.rst diff --git a/source/clear-linux/concepts/concepts.rst b/source/clear-linux/concepts/concepts.rst index 96aa1425..54e0b37c 100644 --- a/source/clear-linux/concepts/concepts.rst +++ b/source/clear-linux/concepts/concepts.rst @@ -10,6 +10,7 @@ different. .. toctree:: :maxdepth: 2 + stateless swupd-about mixer-about bundles-about diff --git a/source/clear-linux/concepts/figures/stateless-1.png b/source/clear-linux/concepts/figures/stateless-1.png new file mode 100644 index 0000000000000000000000000000000000000000..550f37cee785bbf367c6e932d84f78a59638947b GIT binary patch literal 96383 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%0Avw?gTwy&5J{z=eS}&Z^k31pI}Sb9 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

TyqjDutHKzV_xL)NXI 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.This operating +assumption allows |CL| to verify and maintain integrity of system files. + +User areas +========== +Files under the :file:`/etc/`, :file:`/home`, and :file:`/var` directories are +owned and managed by the user. A freshly installed |CL| system will only have +a minimal set of files in the :file:`/etc/` directory and software installed +by |CL| does not write to :file:`/etc`. This operating assumption allows |CL| +users to clearly identify the configuration that makes their system unique. + + +Software Configuration +********************** + +With stateless separation, default software configurations are read in order +from predefined source code, |CL| provided defaults, and user-provided +configuration. + +Default configurations +====================== + +Software in |CL| provides default configuration values so that it is +immediately functional, whenever it is appropriate to do so. + +|CL| distributed software packages may be directly modified to include default +configuration values or default configuration files may be provided by |CL| +under :file:`/usr/share/defaults`. These files can be referenced as templates +for customization. + +For example, the default configuration that Apache uses when installed can be +found at :file:`/usr/share/defaults/httpd/httpd.conf` directory. + + +Overriding configurations +========================= + +If a configuration needs to be changed, the appropriate file should be +modified by the user under :file:`/etc/`. If the configuration file does not +already exist, it can be created in the appropriate location. + +User defined configuration files should contain the minimal set of desired +changes and rely on default configuration for the rest. + +For example, a customized Apache configuration can be used instead by: + +#. Create the destination directory for the configuration: + + .. code :: bash + + sudo mkdir /etc/httpd + +#. Copy the default configuration as a reference template: + + .. code :: bash + + sudo cp /usr/share/defaults/httpd/httpd.conf /etc/httpd/ + +#. Make any desired modifications to the configurations: + + .. code :: bash + + sudoedit /etc/httpd/httpd.conf + +#. Reload the service or reboot the system to pickup any changes: + + .. code :: bash + + systemctl daemon-reload httpd && systemctl restart httpd + + +This pattern can be used to modify the configurations of other programs too. +The `stateless man page`_ has application-specific examples. + + +System reset +************ + +Once advantage of the stateless design is that the system defaults can be +easily restored by simply deleting everything under :file:`/etc/` and +:file:`/var`. + +Running the commands below effectively performs a system reset as if it was +just installed: + +.. code:: + + sudo rm -rf /etc + sudo rm -rf /var + +In other Linux distributions, this can be a catastrophic action that renders a +system unable to boot. + +Additional information +********************** + +* `stateless man page`_ + +* `Where is /etc/fstab in Clear Linux? `_ + + +.. _`stateless man page`: https://github.com/clearlinux/clr-man-pages/blob/master/stateless.7.rst + + From e489014707889f8ecd8e7ac81ba6b847405e82cb Mon Sep 17 00:00:00 2001 From: DougTW Date: Thu, 27 Jun 2019 13:55:55 -0700 Subject: [PATCH 13/17] Changed ister.rst for trademarks, branding, and editorial issues. (#573) * Minor editorial revision to test multiple commits on one file. Signed-off-by: douglasm * Minor editorial revisions completes my revisions to this file. Signed-off-by: douglasm --- source/clear-linux/guides/tooling/ister.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/clear-linux/guides/tooling/ister.rst b/source/clear-linux/guides/tooling/ister.rst index be2df62b..bc8e399e 100644 --- a/source/clear-linux/guides/tooling/ister.rst +++ b/source/clear-linux/guides/tooling/ister.rst @@ -3,7 +3,7 @@ ister.py image builder ###################### -The `ister.py tool`_ is a template based installer used by |CL-ATTR| to produce +The `ister.py tool`_ is a template-based installer used by |CL-ATTR| to produce images for each release. The same ister tool is available for use in |CL| to create custom images based on an upstream image. @@ -14,21 +14,21 @@ create custom images based on an upstream image. Description *********** -|CL| is a rolling release and produces on average 10 releases per week using the +|CL| is a rolling release and produces an average of 10 releases per week using the ister tool. With each release we produce multiple :ref:`image types for different environments ` and use cases such as installers, Hyper-V, KVM, or VMWare. -Each image has a JSON configuration file used by ister to generate the image. -These JSON configuration files describe the image type, partitions, version, -and which bundles will be preinstalled by default with the image. For each image -type we produce, the corresponding JSON configuration file for the image is also +Each image has a JSON configuration file that is used by ister to generate the +image. These JSON configuration files describe the image type, partitions, version, +and bundles that will be preinstalled by default with the image. For each image +type we produce, the corresponding JSON configuration file for the image also is published. The :ref:`mixer` tool also uses ister to build images for your custom mix. Like upstream images, a JSON configuration file is defined for the image, which ister uses to generate the image. Refer to the :ref:`mixer` guide -for instruction on using ister to build an image for a custom mix. +for instructions on using ister to build an image for a custom mix. Examples ******** @@ -37,7 +37,7 @@ Recreate an upstream image ========================== The published configuration files for upstream images may be used to recreate an -image, for example when you want to: +image. Here are some examples: * Use an older version of |CL| and the image is no longer available (only after March 2017). @@ -64,7 +64,7 @@ configuration file: :file:`/clear/config/image`. For example: ``https://cdn.download.clearlinux.org/releases/15700/clear/config/image/`` -#. Download “PostNonChroot” script (if applicable). +#. Download the “PostNonChroot” script (if applicable). The JSON configuration file for the image may have an accompanying “PostNonChroot” script that is executed at the end of the image creation From a7fe4595d3164d0f9848ad71caa4be3f8a8815c5 Mon Sep 17 00:00:00 2001 From: puneetse <22071208+puneetse@users.noreply.github.com> Date: Fri, 28 Jun 2019 09:05:29 -0700 Subject: [PATCH 14/17] Add a FAQ page (#547) * Add a new FAQ document * Clerical changes to faq doc Signed-off-by: MCamp859 --- source/clear-linux/FAQ/faq.rst | 189 +++++++++++++++++++++++++++++ source/clear-linux/clear-linux.rst | 14 ++- 2 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 source/clear-linux/FAQ/faq.rst diff --git a/source/clear-linux/FAQ/faq.rst b/source/clear-linux/FAQ/faq.rst new file mode 100644 index 00000000..bc1de24d --- /dev/null +++ b/source/clear-linux/FAQ/faq.rst @@ -0,0 +1,189 @@ +.. _faq: + +Frequently Asked Questions (FAQ) +################################ + +Below is a list of commonly asked questions with answers sourced from the +|CL-ATTR| team and `Clear Linux community forums`_. + +.. contents:: :local: + :depth: 2 + + +General +******* + +Why did you make another distro? +================================ + +The |CL| team felt that performance was left on the table with Linux software. +|CL| takes a holistic approach to improving performance across the stack. We +also wanted to take more modern approaches with OS updates and tooling. + +| + +Can other distros copy |CL| improvements? +========================================= + +Yes, we absolutely love open source reuse and upstreaming improvements. + +| + +How often do you update? +======================== + +The |CL| team puts out multiple releases a week, often releasing 2 or more +times a day. This rolling release approach allows |CL| to remain agile to +upstream changes and security patches. + +| + +Is telemetry required? +====================== + +The telemetry solution provided by |CL| is entirely optional and customizable. +It is disabled by default. If you do choose to enable telemetry, the data +helps the |CL| team proactively identify and resolve bugs. See the +:ref:`telemetry ` page for more information. + +| + +What is the default firewall? +============================= + +|CL| packages :command:`iptables` as a bundle, however, there are no default +firewall rules. All network traffic is allowed by default. + +| + +Where are the files that I usually see under /etc like fstab? +============================================================= + +|CL| has a stateless design that maintains a separation between system files +and user files. Default values are stored under :file:`/usr/share/defaults/`. +Files under :file:`/etc/` are not created unless you create one. + +A blog post explaining how this is accomplished with :file:`/etc/fstab/` +specifically is available here: +https://clearlinux.org/news-blogs/where-etcfstab-clear-linux + +| + +Software packages +***************** + +How is software installed and updated? +====================================== + +|CL| provides software in the form of :ref:`bundles ` and +updates software with :ref:`swupd `. + +:ref:`FlatPak\* ` is an application virtualization solution that allows +more software to be available to |CL| users by augmenting the software |CL| +packages natively with software available through FlatPak. + +Our goal is to have software packaged natively and made available through +bundles whenever possible. + +| + +Does |CL| use RPMs like other distros? +====================================== + +|CL| provides software in the form of :ref:`bundles `. The RPM +format is used as an intermediary step for packaging and determining software +dependencies at OS build time. + +Individual RPMs can sometimes be manually installed on a |CL| system with the +right tools, but that is not the intended use case. + +| + +Can I install a software package from another OS on |CL|? +========================================================= + +Software that is packaged in other formats for other Linux distributions is +not guaranteed to work on |CL| and may be impacted by |CL| updates. + +If the software you're seeking is open source, please submit a request to add +it to |CL|. Submit requests on GitHub\* here: +https://github.com/clearlinux/distribution/issues + +| + +Software availability +********************* + +What software is available on |CL|? +=================================== + +Available software can be found in the `Software Store`_, through the GNOME\* +Software application on the desktop, or by using :ref:`swupd search `. + +| + +Is Google\* Chrome\* available? +=============================== + +The Google Chrome web browser is not distributed as a bundle in |CL| due to +copyright and licensing complexities. + +A discussion on manually installing and maintaining Google Chrome can be found +on GitHub: https://github.com/clearlinux/distribution/issues/422 + +| + +Is FFmpeg available? +==================== + +`FFmpeg`_ is a multimedia software suite, which is commonly used for +various media encoding/decoding, streaming, and playback. + +|CL| does not distribute FFmpeg due to well-known licensing and legal +complexities (See https://www.ffmpeg.org/legal.html and +http://blog.pkh.me/p/13-the-ffmpeg-libav-situation.html). + +Read more in the |CL| repository, including discussion of an alternative +hardware-based solution: +https://github.com/clearlinux/distribution/issues/429. + +While |CL| cannot distribute FFmpeg, a manual solution to build and install +FFmpeg under :file:`/usr/local` has been shared on the community forums: +https://community.clearlinux.org/t/how-to-h264-etc-support-for-firefox-including-ffmpeg-install. + +| + +Is ZFS\* available? +=================== + +ZFS is not available with |CL| because of copyright and licensing +complexities. BTRFS is an alternative filesystem that is available in |CL| +natively. + +A user on GitHub notes that the ZFS kernel module can be compiled, built, and +installed manually: https://github.com/clearlinux/distribution/issues/631 + +| + +Can you add a driver that I need? +================================= + +If a kernel module is available as part of the Linux kernel source tree but +not enabled in the |CL| kernels, in many cases the |CL| team will enable it +upon request. Submit requests on GitHub here: +https://github.com/clearlinux/distribution/issues + +The |CL| team does not typically add out-of-tree kernel modules as a matter of +practice because of the maintenance overhead. If the driver was unable to be +merged upstream, there is a good chance we may be unable to merge it for +similar reasons. + +Kernel modules can be individually built and installed on |CL|. See the +:ref:`kernel modules ` page for more information. + +| + + +.. _`Clear Linux community forums`: https://community.clearlinux.org +.. _`Software Store`: https://clearlinux.org/software +.. _`FFmpeg`: https://ffmpeg.org/ diff --git a/source/clear-linux/clear-linux.rst b/source/clear-linux/clear-linux.rst index 74496d0d..0101a604 100644 --- a/source/clear-linux/clear-linux.rst +++ b/source/clear-linux/clear-linux.rst @@ -3,13 +3,13 @@ |CL-PRJ| ############################################# -Welcome to the |CL-ATTR| documentation pages, the source for |CL| documentation. -Our documentation is divided into the following sections: +Welcome to the |CL-ATTR| documentation pages, the source for |CL| +documentation. Our documentation is divided into the following sections: * :ref:`get-started` - If you are new to |CL|, get started fast with tutorials for installing |CL| on - bare metal, in a virtual environment, or as a live image on a USB stick. + If you are new to |CL|, get started fast with tutorials for installing |CL| + on bare metal, in a virtual environment, or as a live image on a USB stick. * :ref:`concepts` @@ -32,6 +32,11 @@ Our documentation is divided into the following sections: Find the detailed information you need to enable your configuration or task in our |CL| reference section. +* :ref:`faq` + + Refer to our FAQ section to read commonly asked questions and answers. + + .. toctree:: :maxdepth: 2 :hidden: @@ -41,3 +46,4 @@ Our documentation is divided into the following sections: guides/guides tutorials/tutorials reference/reference + FAQ/faq From 0070d49b94c4554f7eb4a2e95c96fc8f84829907 Mon Sep 17 00:00:00 2001 From: puneetse <22071208+puneetse@users.noreply.github.com> Date: Fri, 28 Jun 2019 09:15:12 -0700 Subject: [PATCH 15/17] Add note about AUTOINSTALL=yes in dkms.conf (#575) --- .../maintenance/kernel-modules-dkms.rst | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/source/clear-linux/guides/maintenance/kernel-modules-dkms.rst b/source/clear-linux/guides/maintenance/kernel-modules-dkms.rst index 3e3cf6fe..8c8ca6ad 100644 --- a/source/clear-linux/guides/maintenance/kernel-modules-dkms.rst +++ b/source/clear-linux/guides/maintenance/kernel-modules-dkms.rst @@ -129,8 +129,8 @@ Before you begin, you must: Obtain kernel module source =========================== -A required :file:`dkms.conf` file inside of the kernel module's source code directory -informs DKMS how the kernel module should be compiled. +A required :file:`dkms.conf` file inside of the kernel module's source code +directory informs DKMS how the kernel module should be compiled. Kernel modules may come packaged as: @@ -141,10 +141,10 @@ Kernel modules may come packaged as: - Precompiled module binaries only (without source code) Of the package types listed above, only precompiled kernel module binaries -will not work, because |CL| requires kernel modules to be built against -the same kernel source tree before they can be loaded. If you are only able to -obtain source code without a :file:`dkms.conf` file, you must manually create a -:file:`dkms.conf` file, described later in this document. +will not work, because |CL| requires kernel modules to be built against the +same kernel source tree before they can be loaded. If you are only able to +obtain source code without a :file:`dkms.conf` file, you must manually create +a :file:`dkms.conf` file, described later in this document. #. Download the kernel module's source code. @@ -210,8 +210,8 @@ If the kernel module source does not contain a :file:`dkms.conf` file or the create the file. Review the kernel module README documentation for guidance on what needs to be -in the :file:`dkms.conf` file, including special variables that may be required to -build successfully. +in the :file:`dkms.conf` file, including special variables that may be +required to build successfully. Here are some additional resources that can be used for reference: @@ -223,6 +223,10 @@ Here are some additional resources that can be used for reference: * `Sample dkms.conf file`_ in the GitHub\* repository for the DKMS project. +.. note:: + + :command:`AUTOINSTALL=yes` must be set in the dkms.conf for the module to + be automatically recompiled with |CL| updates. The instructions below show a generic example: @@ -240,6 +244,7 @@ The instructions below show a generic example: PACKAGE_NAME=custom_module PACKAGE_VERSION=1.0 DEST_MODULE_LOCATION=/kernel/drivers/other + AUTOINSTALL=yes This example identifies a kernel module named *custom_module* with version *1.0*. From 45ce94d4df90ebffcdd1c03a0a76d7e660327764 Mon Sep 17 00:00:00 2001 From: Beth Dean Date: Fri, 28 Jun 2019 10:46:25 -0700 Subject: [PATCH 16/17] Add link for launcher.py and note MKL HW reqs for DLRS tutorial. (#570) * Add link for launcher.py and note MKL HW reqs for DLRS tutorial. * Reword note about MKL, change from note to warning. Closes #560, Closes #559 * Add note specifying Kubeflow v0.4 when using launcher.py * Closes #559 , Closes #560 --- source/clear-linux/tutorials/dlrs/dlrs.rst | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/clear-linux/tutorials/dlrs/dlrs.rst b/source/clear-linux/tutorials/dlrs/dlrs.rst index ff3f2ca4..3098432c 100644 --- a/source/clear-linux/tutorials/dlrs/dlrs.rst +++ b/source/clear-linux/tutorials/dlrs/dlrs.rst @@ -32,7 +32,7 @@ The Deep Learning Reference Stack is available in the following versions: * `PyTorch with Intel MKL-DNN`_, which includes PyTorch optimized using Intel® Math Kernel Library (Intel® MKL) and Intel MKL-DNN. -.. note:: +.. important:: To take advantage of the Intel® AVX-512 and VNNI functionality with the Deep Learning Reference Stack, you must use the following hardware: @@ -185,6 +185,11 @@ Kubeflow multi-node benchmarks The benchmark workload runs in a Kubernetes cluster. The tutorial uses `Kubeflow`_ for the Machine Learning workload deployment on three nodes. +.. warning:: + + If you choose the Intel® MKL-DNN or Intel® MKL-DNN-VNNI image, your platform must support the Intel® AVX-512 instruction set. Otherwise, an *illegal instruction* error may appear, and you won’t be able to complete this tutorial. + + Kubernetes setup ================ @@ -236,9 +241,11 @@ or inject a python script or larger shell script into the container. Images ====== -You must add `launcher.py` to the Docker image to include the Deep +You must add `launcher.py`_ to the Docker image to include the Deep Learning Reference Stack and put the benchmarks repo in the correct -location. From the Docker image, run the following: +location. Note that this tutorial uses Kubeflow v0.4.0, and cannot guarantee results if you use a different version. + +From the Docker image, run the following: .. code-block:: bash @@ -486,6 +493,8 @@ Related topics .. _kubectl overview: https://kubernetes.io/docs/reference/kubectl/overview/ +.. _launcher.py: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow + .. _Release notes on Github\*: https://github.com/clearlinux/dockerfiles/blob/master/stacks/dlrs/releasenote.md .. _Intel® quantization tools: https://github.com/IntelAI/tools/blob/master/tensorflow_quantization/README.md#quantization-tools From a829786be6c5759bfbf3c9b3b4bb730f386f3634 Mon Sep 17 00:00:00 2001 From: puneetse <22071208+puneetse@users.noreply.github.com> Date: Mon, 1 Jul 2019 08:55:35 -0700 Subject: [PATCH 17/17] Update assign static IP doc to have NM instructions (#574) --- .../guides/maintenance/assign-static-ip.rst | 190 ++++++++++++++---- 1 file changed, 147 insertions(+), 43 deletions(-) diff --git a/source/clear-linux/guides/maintenance/assign-static-ip.rst b/source/clear-linux/guides/maintenance/assign-static-ip.rst index 444fbf21..c535ccab 100644 --- a/source/clear-linux/guides/maintenance/assign-static-ip.rst +++ b/source/clear-linux/guides/maintenance/assign-static-ip.rst @@ -1,71 +1,175 @@ .. _assign-static-ip: -Assign a static IP address to a network interface -################################################# - -Introduction -************ +Assign a static IP address +########################## By default, your |CL-ATTR| system automatically gets an IP address from your network via DHCP. If you do not have a DHCP server on your network or simply want to use a static IP address, follow the steps in this guide. -Process -******* +.. contents:: + :local: + :depth: 1 -#. Create this directory structure: +Identify which program is managing the interface +************************************************ - .. code-block:: bash +New installations of |CL| use NetworkManager as the default network interface +manager for all network connections. - sudo mkdir -p /etc/systemd/network +.. note:: -#. Identify the interface to be assigned the static IP address: + * The *cloud* |CL| images continue to use systemd-networkd to manage + network connections. - .. code-block:: bash + * In earlier |CL| versions, systemd-network was used to manage Ethernet + interfaces and NetworkManager was used for wireless interfaces. - ip addr - The system returns the following: +Before defining a configuration for assigning a static IP address, you should +verify which program is managing the network interface. - .. code-block:: console +#. Check the output of :command:`nmcli device` to see if NetworkManager is + managing the device. - 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 - inet 127.0.0.1/8 scope host lo - valid_lft forever preferred_lft forever - inet6 ::1/128 scope host - valid_lft forever preferred_lft forever + .. code-block:: bash - 2: wlp1s0: mtu 1500 qdisc mq state DOWN group default qlen 1000 - link/ether 4a:98:8d:e5:43:15 brd ff:ff:ff:ff:ff:ff + nmcli device status - 3: eno1: mtu 1500 qdisc fq state UP group default qlen 1000 - link/ether f4:4d:30:68:96:20 brd ff:ff:ff:ff:ff:ff - inet 10.0.1.2/24 brd 10.54.74.255 scope global dynamic eno1 - valid_lft 6766sec preferred_lft 6766sec - inet6 fe80::f64d:30ff:fe68:9620/64 scope link - valid_lft forever preferred_lft forever + If the STATE column for the device shows *connected* or *disconnected*, the + network configuration is being managed by NetworkManager and the instructions + for :ref:`using NetworkManager ` should be used. - In this example, we will use the `eno1` interface. + If the STATE column for the device shows *unmanaged*, check to see if the + device is being managed by systemd-networkd -#. Create the :file:`70-static.network` file and add the following: - .. code-block:: bash +#. Check the output of :command:`networkctl list` to see if + systemd-networkd is managing the device. - sudo $EDITOR /etc/systemd/network/70-static.network + .. code-block:: bash - [Match] - Name=[interface name] - [Network] - Address=[IP address]/24 - DHCP=yes # to get DNS info, etc. + networkctl list - Replace [interface name] and [IP address] with your specific settings. + If the SETUP column for the device shows *configured*, the network + configuration is being managed by systemd-networkd and the instructions for + :ref:`using systemd-networkd ` should be used. -#. Restart the networkd service: - .. code-block:: bash +.. _nm-static-ip: - sudo systemctl restart systemd-networkd +Using NetworkManager +******************** + +Network connections managed by NetworkManager are stored as files with the +:file:`.nmconnection` file extension in the +:file:`/etc/NetworkManager/system-connections/` directory. + +A few tools exists to aid to manipulate network connections managed by +NetworkManager: + +* nmcli - a command-line tool + +* nmtui - a text user interface that provides a pseudo graphical menu in the + terminal + +* nm-connection-editor - a graphical user interface + +The method below uses the command line tool *nmcli* to modify network +connection. + + +#. Identify the existing connection name. + + .. code:: bash + + nmcli connection show + + The output will look like this: + + .. code:: bash + + NAME UUID TYPE DEVICE + Wired connection 1 00000000-0000-0000-0000-000000000000 802-3-etherneten01 + + If a connection does not exist, it will need to be created with + :command:`nmcli connection add`. + + +#. Modify the connection to use a static IP address. Replace the variables in + brackets with the appropriate values. *[CONNECTION_NAME]* should be + replaced with the NAME from the command above. + + .. code:: + + sudo nmcli connection modify "[CONNECTION_NAME]" \ + ipv4.method "manual" \ + ipv4.addresses "[IP_ADDRESS]/[CIDR_NETMASK]" \ + ipv4.gateway "[GATEWAY_IP_ADDRESS]" \ + ipv4.dns "[PRIMARY_DNS_IP],[SECONDARY_DNS_IP]" + + + See the `nmcli developer page `_ for more + configuration options. For advanced configurations, the + :file:`/etc/NetworkManager/system-connections/*.nmconnection`. can be edited + directly. + +#. Verify your static IP address details have been set + + .. code-block:: bash + + nmcli + + + +.. _networkd-static-ip: + +Using systemd-networkd +********************** + +Network connections managed by systemd-networkd are stored as files with the +:file:`.network` file extension the :file:`/etc/systemd/network/` directory. + +Files to manipulate network connections managed by systemd-networkd must be +created manually. + +#. Create the :file:`/etc/systemd/network` directory if it doesn't exist already: + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/network + +#. Create a :file:`.network` file and add the following content. Replace the + variables in brackets with the appropriate values. *[INTERFACE_NAME]* + should be replaced with LINK from the output of :command:`networkctl list` + ran previously. + + .. code-block:: bash + + sudo $EDITOR /etc/systemd/network/70-static.network + + [Match] + Name=[INTERFACE_NAME] + + [Network] + Address=[IP_ADDRESS]/[CIDR_NETMASK] + Gateway=[GATEWAY_IP_ADDRESS] + DNS=[PRIMARY_DNS_IP] + DNS=[SECONDARY_DNS_IP] + + See the `systemd-network man page + `_ + for more configuration options. + +#. Restart the systemd-networkd service: + + .. code-block:: bash + + sudo systemctl restart systemd-networkd + +#. Verify your static IP address details have been set + + .. code-block:: bash + + networkctl status -**Congratulations!** You have successfully assigned a static IP address.