Initial commit for maintenance guides clean up (preparation for translation) (#648)

Signed-off-by: Kristal Dale <kristal.dale@intel.com>

Initial commit of cleanup for translations (maintenance guides)

Signed-off-by: Kristal Dale <kristal.dale@intel.com>

Clean up in preparation for translations

- Standardize page formatting (use of intro sentence, TOC tree, etc)
- Simplify intro sentences, remove idioms, etc
- Standardize use of roles (remove use of `` and * for emphasis on special words or options)
- Misc clean up (opportunistic)

Signed-off-by: Kristal Dale <kristal.dale@intel.com>

Update per requested changes on PR.

Signed-off-by: Kristal Dale <kristal.dale@intel.com>

Edits per requested changes on PR from @mvincerx

Signed-off-by: Kristal Dale <kristal.dale@intel.com>
This commit is contained in:
Kristal Dale
2019-07-19 18:15:45 -07:00
committed by michael vincerra
parent 5ab6383d6d
commit b9e5806856
15 changed files with 344 additions and 280 deletions
@@ -3,18 +3,8 @@
Architect the life-cycle of |CL-ATTR|
#####################################
This guide provides DevOps with a model to architect the life-cycle of a |CL|
derivative that integrates custom software and content using distinct
workflows.
Maintaining a |CL| derivative requires:
* Monitoring upstream |CL| for new releases
* Building software packages and staging
* Employing CI/CD automation for building releases
* Integrating Quality Assurance for testing and validation
This guide provides the foundation of the recommended infrastructure.
This guide describes the basic, recommended infrastructure and workflow for
maintaining a |CL-ATTR| derivative.
.. contents::
:local:
@@ -36,11 +26,16 @@ Prerequisites
Description
***********
Maintaining a |CL| derivative requires:
* Monitoring upstream |CL| for new releases
* Building software packages and staging
* Employing CI/CD automation for building releases
* Integrating Quality Assurance for testing and validation
Coordinated infrastructure is deployed to automate the life-cycle
of your |CL| derivative. We divide deployment of this infrastucture in two
parts: *Content Workflow*; and *Release Workflow*, shown in Figure 1. Distro
Factory manages the *Release Workflow* while capturing the requirements for
maintaining a long-term release cadence.
parts: *Content Workflow*; and *Release Workflow*, shown in Figure 1.
.. figure:: figures/architect-lifecycle-1.png
:scale: 100%
@@ -48,35 +43,35 @@ maintaining a long-term release cadence.
Figure 1: Architect the life-cycle
Content workflow
Content Workflow
****************
The *Content Workflow* (Figure 1) orchestrates the processes used to manage
The Content Workflow (Figure 1) orchestrates the processes used to manage
the creation of content for the distribution. This includes everything from
detecting a new release in a custom software repository to generating RPM
package files. The RPM files serve as intermediary artifacts that track software
dependencies and provide file-level data consumed in a *Release Workflow*. The
dependencies and provide file-level data consumed in a Release Workflow. The
`Watcher Pipeline`_ checks |CL| and a content provider, such as Koji, to
determine if a new release is necessary.
Release workflow
Release Workflow
****************
The *Release Workflow* (Figure 1) gathers the content of the RPMs and
The Release Workflow (Figure 1) gathers the content of the RPMs and
ensures it can be consumed by :ref:`mixer <mixer>`. A content web server
hosts the |CL| derivative, to which targets connect for updating their OSes.
As an integral part of this toolchain, the *Release Pipeline* enables these
As an integral part of this toolchain, the `Release Pipeline`_ enables these
derivatives to incorporate |CL| content into their own custom
content. The *Watcher Pipeline* triggers the `Release Pipeline`_ to create
content. The Watcher Pipeline triggers the Release Pipeline to create
new releases.
Implementation
**************
Distro factory implements the *Release workflow*. To get started on a full
implementation, visit |CL| `Distro Factory`_ documentation.
The |CL| Distro Factory manages the Release Workflow. For detailed information
about Distro Factory deployment, refer to the `clr-distro-factory`_ GitHub\* repo.
.. _Distro Factory: https://github.com/clearlinux/clr-distro-factory/wiki#clear-linux-distro-factory
.. _clr-distro-factory: https://github.com/clearlinux/clr-distro-factory/wiki#clear-linux-distro-factory
.. _Release Pipeline: https://github.com/clearlinux/clr-distro-factory/wiki/Release
@@ -3,9 +3,9 @@
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.
This guide explains how to assign a static IP address. This may be helpful in
scenarios such as a network with no DHCP server.
.. contents::
:local:
@@ -14,20 +14,20 @@ want to use a static IP address, follow the steps in this guide.
Identify which program is managing the interface
************************************************
New installations of |CL| use NetworkManager as the default network interface
New installations of |CL-ATTR| use NetworkManager as the default network interface
manager for all network connections.
.. note::
* The *cloud* |CL| images continue to use systemd-networkd to manage
* The cloud |CL| images continue to use `systemd-networkd` to manage
network connections.
* In earlier |CL| versions, systemd-network was used to manage Ethernet
* In earlier |CL| versions, `systemd-network` was used to manage Ethernet
interfaces and NetworkManager was used for wireless interfaces.
Before defining a configuration for assigning a static IP address, you should
verify which program is managing the network interface.
Before defining a configuration for assigning a static IP address, verify which
program is managing the network interface.
#. Check the output of :command:`nmcli device` to see if NetworkManager is
managing the device.
@@ -37,23 +37,23 @@ verify which program is managing the network interface.
nmcli device status
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 <nm-static-ip>` should be used.
network configuration is being managed by NetworkManager, then use the
instructions for :ref:`using NetworkManager <nm-static-ip>`.
If the STATE column for the device shows *unmanaged*, check to see if the
device is being managed by systemd-networkd
If the STATE column for the device shows *unmanaged*, then check if the
device is being managed by systemd-networkd.
#. Check the output of :command:`networkctl list` to see if
systemd-networkd is managing the device.
`systemd-networkd` is managing the device.
.. code-block:: bash
networkctl list
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 <networkd-static-ip>` should be used.
configuration is being managed by `systemd-networkd`, then use the
instructions for :ref:`using systemd-networkd <networkd-static-ip>`.
.. _nm-static-ip:
@@ -75,7 +75,7 @@ NetworkManager:
* nm-connection-editor - a graphical user interface
The method below uses the command line tool *nmcli* to modify network
The method below uses the command line tool nmcli to modify network
connection.
@@ -85,20 +85,20 @@ connection.
nmcli connection show
The output will look like this:
Sample output:
.. 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`.
If a connection does not exist, create it with the
:command:`nmcli connection add` command.
#. 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.
brackets with the appropriate values. Replace *[CONNECTION_NAME]* with the
NAME from the command above.
.. code::
@@ -132,7 +132,7 @@ connection.
.. _networkd-static-ip:
Using systemd-networkd
Using systemd-networkd
**********************
Network connections managed by systemd-networkd are stored as files with the
@@ -141,16 +141,16 @@ Network connections managed by systemd-networkd are stored as files with the
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:
#. Create the :file:`/etc/systemd/network` directory if it does not already exist:
.. 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.
variables in brackets with the appropriate values. Replace *[INTERFACE_NAME]*
with LINK from the output of the :command:`networkctl list` command that was
run previously.
.. code-block:: bash
@@ -169,7 +169,7 @@ created manually.
<https://www.freedesktop.org/software/systemd/man/systemd.network.html>`_
for more configuration options.
#. Restart the systemd-networkd service:
#. Restart the `systemd-networkd` service:
.. code-block:: bash
@@ -3,16 +3,23 @@
Bulk provision
##############
The |CL-ATTR| can be automatically provisioned in bulk using a combination of
the |CL| installer, **Ister**, and :abbr:`ICIS (Ister Cloud Init Service)`.
This guide covers how to perform a bulk provision of |CL| using **Ister**
and **ICIS**.
This guide explains how to perform a bulk provision of |CL-ATTR| using a
combination of the |CL| installer, Ister, and
:abbr:`ICIS (Ister Cloud Init Service)`.
To configure a bulk provision, Ister configuration files and cloud-init
files must be defined. Hosting the configuration files in **ICIS** allows
**Ister** to use them during the installation. The Ister configuration
files allow us to customize the installation process. The cloud-init\*
files allow us to customize the instance of the installation.
.. contents::
:local:
:depth: 1
Overview
********
To configure a bulk provision:
* Define Ister configuration files to customize the installation process
* Define cloud-init\* files to customize the installation instance
* Host the configuration files in ICIS to allow Ister to use them during
the installation
Figure 1 depicts the flow of information between a PXE server and a PXE
client that needs to be set up to perform a bulk provision.
@@ -23,7 +30,7 @@ client that needs to be set up to perform a bulk provision.
Figure 1: Bulk provision information flow
Prerequisites
=============
*************
Before performing a bulk provision, verify you have a PXE server capable
of performing network boots of |CL|. Please refer to our
@@ -38,16 +45,16 @@ preparations have been made:
on any computer performing the installation.
Configuration
=============
*************
#. Install **ICIS** by following the getting started guide on the
`ICIS`_ GitHub repository.
#. Install ICIS by following the getting started guide on the
`ICIS`_ GitHub\* repository.
#. Create an Ister installation file and save it to the
:file:`static/ister` directory within the web hosting directory for
**ICIS**. The installation file is a JSON block and provides **Ister**
ICIS. The installation file is a JSON block and provides Ister
with the steps it needs to perform an installation. The file outlines
what partitions, file systems, and mount points **Ister** should set
what partitions, file systems, and mount points Ister should set
up. Lastly, the file outlines which bundles to install. See our
:ref:`bundles` document for the list of available bundles. The
following example shows the contents of an Ister installation file:
@@ -82,14 +89,14 @@ Configuration
.. important::
Every Ister installation file hosted on **ICIS** must contain the
the ``IsterCloudInitSvc`` parameter as well as the ``os-cloudguest``
bundle. These entries allow **Ister** to customize an instance of of an
Every Ister installation file hosted on ICIS must contain the
the `IsterCloudInitSvc` parameter as well as the :command:`os-cloudguest`
bundle. These entries allow Ister to customize an instance of of an
install.
#. Create an Ister configuration file to define the location of the
Ister installation file. Save it to the :file:`static/ister` directory
within the web hosting directory of **ICIS**. The following example shows
within the web hosting directory of ICIS. The following example shows
an Ister configuration file:
.. code-block:: none
@@ -97,10 +104,10 @@ Configuration
template=http://192.168.1.1:60000/icis/static/ister/ister.json
#. Modify the iPXE boot script by adding a kernel parameter to the command line
for booting the network image. Add the kernel parameter ``isterconf`` with
the location of the Ister configuration file hosted on **ICIS** as the
for booting the network image. Add the kernel parameter `isterconf` with
the location of the Ister configuration file hosted on ICIS as the
kernel parameter value. The following example shows an iPXE boot script
with the ``isterconf`` parameter:
with the `isterconf` parameter:
.. code-block:: none
@@ -111,7 +118,7 @@ Configuration
.. note::
After the network image of |CL| boots, **Ister** inspects the
After the network image of |CL| boots, Ister inspects the
parameters used during boot in :file:`/proc/cmdline` to find the
location of the Ister configuration file.
@@ -121,13 +128,13 @@ Configuration
customization options provided by cloud-init after an installation.
#. Save the cloud-init document to the :file:`static/roles` directory within
the web hosting directory for **ICIS** with the name of a role you would
the web hosting directory for ICIS with the name of a role you would
like to create. For example, a role may be "database", "web", or "ciao".
#. After creating the roles, also known as cloud-init files, assign roles to
MAC addresses of PXE clients. To do so, modify the :file:`config.txt` file
in the ``static`` directory within the web hosting directory of **ICIS**.
The following example shows one such assignment:
in the :file:`static` directory within the web hosting directory of ICIS.
The following example shows an example assignment:
.. code-block:: none
@@ -145,11 +152,11 @@ Configuration
#. Verify the following URLs are accessible on your local network:
* ``http://192.168.1.1:60000/icis/static/ister/ister.conf``
* ``http://192.168.1.1:60000/icis/static/ister/ister.json``
* ``http://192.168.1.1:60000/icis/get_config/<MAC address>``
* ``http://192.168.1.1:60000/icis/get_role/<role>``
* ``http://192.168.1.1:60000/ipxe/ipxe_boot_script.txt``
* http://192.168.1.1:60000/icis/static/ister/ister.conf
* http://192.168.1.1:60000/icis/static/ister/ister.json
* http://192.168.1.1:60000/icis/get_config/<MAC address>
* http://192.168.1.1:60000/icis/get_role/<role>
* http://192.168.1.1:60000/ipxe/ipxe_boot_script.txt
#. Power on the PXE client and watch it boot and install |CL|.
@@ -3,6 +3,15 @@
CPU Power and Performance
#########################
This guide explains the CPU power and performance mechanisms in |CL-ATTR|.
.. contents::
:local:
:depth: 1
Overview
********
Modern x86 :abbr:`CPUs (central processing units)` employ a number of features
and technologies to balance performance, energy, and thermal efficiencies.
@@ -11,11 +20,12 @@ 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
.. 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
@@ -24,7 +34,7 @@ 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.
@@ -57,11 +67,11 @@ or completely disabled with :command:`idle=poll`.
.. _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, also known as *Intel SpeedStep® technology* 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.
@@ -69,9 +79,9 @@ 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
`Intel® 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.
@@ -87,7 +97,7 @@ be disabled within |CL| with the command:
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
<c-states-section>` and :ref:`P-states <P-states-section>`
@@ -95,12 +105,12 @@ 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
Linux uses the `Intel P-state driver`_, :command:`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.
default to the :command:`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:
@@ -109,7 +119,7 @@ To view the current CPU frequency scaling driver run this command in a terminal:
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
@@ -146,7 +156,7 @@ The list of all governors can be found in the Linux kernel documentation on
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
@@ -169,8 +179,9 @@ For more information, see the thermald man page:
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:
temperatures from thermald. To use ThermalMonitor, add the
:command:`desktop-apps-extras` bundle and add your user account to the power
group:
.. code:: bash
@@ -180,8 +191,8 @@ bundle and add your user account to the power group:
.. note::
After adding a new group you must log out and log back in for the new group
to take affect.
After adding a new group, you must log out and log back in for the new group
to take effect.
.. _`Intel P-state driver`: https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt
@@ -194,4 +205,4 @@ bundle and add your user account to the power group:
.. _`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
.. _`Intel® Turbo Boost Technology`: https://www.intel.com/content/www/us/en/architecture-and-technology/turbo-boost/turbo-boost-technology.html
@@ -3,28 +3,31 @@
Developer Workstation
#####################
*Developer Workstation* helps you find the :ref:`bundles-about` you need to
start your |CL-ATTR| development project.
This guide helps you find the minimum set of bundles needed to start your
|CL-ATTR| development project.
Before continuing, we recommend that you learn how to use
:ref:`swupd <swupd-guide>`. Visit our :ref:`swupd-about` page to understand
how |CL| simplifies software versioning compared to other Linux\*
distributions.
Before continuing, review the :ref:`swupd <swupd-guide>` guide to learn more
about the swupd tool and how |CL| simplifies software versioning compared to
other Linux\* distributions.
.. contents::
:local:
:depth: 1
Workstation Setup
*****************
This guide helps you understand the minimum bundles required to get started.
After installing them, you can add more bundles relevant to your use case.
To run any process required for |CL| development, you can add the
large bundle :ref:`*os-clr-on-clr* <enable-user-space>`. However, given how
many packages this bundle contains, you may want instead to deploy a leaner
OS with only those bundles relevant to your project. Developer Workstation
responds to this need.
After installing the minimum set of bundles required to get started, you can add
more bundles relevant to your specific use case.
To run any process required for |CL| development, you can add the large bundle
:ref:`*os-clr-on-clr* <enable-user-space>`. However, given how many packages this
bundle contains, you may want to deploy a leaner OS with only bundles relevant to
your project.
Use Table 1, *Developer Profiles*, to identify the *minimum
required bundles* to get started developing based on your role or project.
While your role may not neatly fit in one of these categories, consider using
While your role may not neatly fit in one of these categories, consider
Table 1 as a starting point.
.. list-table:: **Table 1. Developer Profiles**
@@ -36,48 +39,48 @@ Table 1 as a starting point.
- *System Administrator*
- *Client/Cloud/Web Developer*
* - `editors`
* - :command:`editors`
-
-
-
* - `network-basic`
* - :command:`network-basic`
-
-
-
* - `openssh-server`
* - :command:`openssh-server`
-
-
-
* - `webserver-basic`
* - :command:`webserver-basic`
-
-
-
* - `application-server`
* - :command:`application-server`
-
-
-
* - `database-basic`
* - :command:`database-basic`
-
-
-
* - `desktop-autostart`
* - :command:`desktop-autostart`
-
-
-
* - `dev-utils`
* - :command:`dev-utils`
-
-
-
`swupd` search
**************
swupd search
************
We recommend learning about :ref:`swupd <swupd-guide>`, to learn the
commands to search for and add bundles relevant to your project.
@@ -85,8 +88,8 @@ commands to search for and add bundles relevant to your project.
The guide provides an :ref:`example <swupd-guide-example-install-bundle>`
that shows you how to:
* Use `swupd` to search for bundles
* Use `swupd` to add bundles
* Use swupd to search for bundles
* Use swupd to add bundles
Core Concepts
*************
@@ -94,10 +97,9 @@ Core Concepts
We recommend that you understand these core concepts in |CL| *before*
developing your project.
* :ref:`Bundles <bundles-about>`
* :ref:`Software update <swupd-about>`
* :ref:`Mixer <mixer-about>`
* :ref:`Autospec <autospec-about>`
* :ref:`Software update <swupd-guide>`
* :ref:`Mixer <mixer>`
* :ref:`Autospec <autospec>`
Other resources for developers
-----------------------------------
@@ -3,7 +3,7 @@
Create and enable a new user space
##################################
This section provides steps to complete the following basic setup tasks for
This guide provides steps to complete the following basic setup tasks for
a newly installed |CL-ATTR| system:
.. contents::
@@ -14,7 +14,7 @@ Create a new user
*****************
To create a new user and set a password for that user, enter the following
commands as a `root` user:
commands as a root user:
.. code-block:: bash
@@ -26,28 +26,28 @@ including the password for that user. The :command:`passwd` command prompts
you to enter a new password. Retype the new password for the new user
account just created.
Add the new user to the `wheel` group
Add the new user to the *wheel* group
*************************************
Before logging off as root and logging into your new user account,
enable the :command:`sudo` command for your new `<userid>`.
enable the :command:`sudo` command for your new <userid>.
To be able to execute all applications with root privileges, add the
`<userid>` to the `wheel group`_.
<userid> to the `wheel group`_.
#. Add `<userid>` to the `wheel` group:
#. Add <userid> to the wheel group:
.. code-block:: bash
usermod -G wheel -a <userid>
#. Log out of root and into the new `<userid>`.
#. Log out of root and into the new <userid>.
To log off as root, enter :command:`exit`.
#. Enter the new `<userid>` and the password created earlier.
#. Enter the new <userid> and the password created earlier.
You will now be in the home directory of `<userid>`.
You will now be in the home directory of <userid>.
Install and update the OS software to its current version
*********************************************************
@@ -65,13 +65,13 @@ Add a bundle
************
Software applications are installed as bundles using the command
:command:`swupd bundle-add`. Experienced Linux* users might compare `swupd`
:command:`swupd bundle-add`. Experienced Linux users might compare swupd
to running :command:`apt-get` or :command:`yum install` for package
management. Yet |CL| manages packages at the level of bundles, which
management. However |CL| manages packages at the level of bundles, which
are integrated stacks of packages.
For example, the `sysadmin-basic` bundle installs the majority of applications
useful to a system administrator. To install it, enter:
For example, the :command:`sysadmin-basic` bundle installs the majority of
applications useful to a system administrator. To install it, enter:
.. code-block:: bash
@@ -1,20 +1,31 @@
.. _fix-broken-install:
Fix a broken installation of |CL-ATTR|
######################################
Fix a broken installation
#########################
This guide explains how to fix a broken installation of |CL| using a live
desktop image on a USB. It's assumed you already installed |CL| on a
target system, but your operating system does not boot or function properly.
This guide explains how to fix a broken installation of |CL-ATTR| using a live
desktop image on a USB.
This process can only verify and fix files that :ref:`swupd<swupd-guide>`
owns in :file:`/usr`. Files outside of this path, such as /home/, /etc,
/var, etc., cannot be repaired by this process.
.. contents::
:local:
:depth: 1
Overview
********
This guide assumes you have installed |CL| on a target system, but the OS
does not boot or function properly.
The process described in this guide can only verify and fix files that
:ref:`swupd<swupd-guide>` owns in :file:`/usr`. Files outside of this path, such
as :file:`/home/`, :file:`/etc`, :file:`/var`, etc., cannot be repaired by this
process.
Prerequisites
*************
* :ref:`Download and install the live desktop image on a USB <bare-metal-install-desktop>`
* Download and install the live desktop image on a USB. See
:ref:`bare-metal-install-desktop` for install instructions.
Boot a live desktop image to fix target system
**********************************************
@@ -30,7 +41,7 @@ Mount root partition, verify, and fix
#. Open a Terminal window.
#. Assure the system is connected to the network.
#. Ensure the system is connected to the network.
#. Mount the systems root partition.
@@ -40,9 +51,9 @@ Mount root partition, verify, and fix
lsblk
We'll use `/dev/sda3/` as the root partition example.
We'll use :file:`/dev/sda3/` as the root partition example.
#. Next, mount the partition to the `/mnt` folder.
#. Next, mount the partition to the :file:`/mnt` folder.
.. code-block:: bash
@@ -1,10 +1,17 @@
.. _hostname:
Modify hostname on |CL-ATTR|
############################
Modify hostname
###############
This guide describes how to modify and view the hostname of your
|CL-ATTR| system.
This guide describes how to modify and view the hostname of your |CL-ATTR|
system.
.. contents::
:local:
:depth: 1
Overview
********
By default, |CL| installations have a machine generated name, which is a
long string of letters and numbers. The generated name is fine for computers
@@ -22,8 +29,8 @@ Set your hostname
*****************
|CL| uses the :command:`hostnamectl` command to display and modify the machine
name. :command:`hostnamectl` is part of the **os-core** bundle, which provides
a basic Linux\* user space and utilities.
name. :command:`hostnamectl` is part of the :command:`os-core` bundle, which
provides a basic Linux\* user space and utilities.
This example sets the hostname to *telemetry-test-2-h15*, to identify a
|CL| telemetry test machine on the second floor at grid location H15.
@@ -1,25 +1,29 @@
.. _increase-virtual-disk-size:
Increase virtual disk size of a |CL-ATTR| image
###############################################
Increase virtual disk size of an image
######################################
|CL-ATTR| prebuilt images come in different sizes, ranging from 300 MB to 20
GB. This guide describes how to increase the size of your prebuilt |CL| image
if you need more capacity.
This guide describes how to increase the disk size of your prebuilt |CL-ATTR|
image if you need more capacity.
.. contents:: This guide will cover:
.. contents::
:local:
:depth: 1
Determine the partition order and sizes of the prebuilt image
*************************************************************
|CL| prebuilt images come in different sizes, ranging from 300 MB to 20
GB.
There are two methods to find the order and sizes of partitions virtual disk
of your prebuilt |CL| image.
In both examples, the prebuilt Hyper-V image has a disk size of 8.5 GB with /
dev/sda3 being the partition for the root filesystem (/)
In both examples, the prebuilt Hyper-V image has a disk size of 8.5 GB with
:file:`/dev/sda3` being the partition for the root filesystem (/)
Checking :command:`lsblk` on the VM
-----------------------------------
===================================
The first method is to boot up your :abbr:`VM (Virtual Machine)` and
execute the :command:`lsblk` command as shown below:
@@ -41,7 +45,7 @@ An example output of the :command:`lsblk` command:
An example of this can also be seen in Figure 1.
Checking :file:`config.json` used to build the image
----------------------------------------------------
====================================================
The second method to determine partition to check the :file:`config.json`
file used to create prebuilt image, located in the `releases`_ repository.
@@ -77,25 +81,24 @@ Increase virtual disk size
Once you have determined the disk and partition to be increased, you are
ready to perform the actual increase of the disk, partition, and filesystem.
Power off VM and increase virtual disk size:
--------------------------------------------
Power off VM and increase virtual disk size
===========================================
To increase the virtual disk size for a prebuilt image, perform the steps
below:
#. Shut down your VM if it is running.
#. Use the process defined by your hypervisor
or cloud provider to increase
#. Use the process defined by your hypervisor or cloud provider to increase
the virtual disk size of your |CL| VM.
#. Power up the VM.
Resize the partition of the virtual disk:
-----------------------------------------
Resize the partition of the virtual disk
========================================
#. Log in to an account with root privileges.
#. Open a terminal emulator.
#. Add the |CL| `storage-utils` bundle to install the
#. Add the :command:`storage-utils` bundle to install the
:command:`parted` and :command:`resize2fs` tools.
.. code-block:: bash
@@ -115,7 +118,7 @@ Resize the partition of the virtual disk:
.. code-block:: console
Warning: Not all of the space available to /dev/sda appears to be
Warning: Not all of the space available to :file:`/dev/sda` appears to be
used, you can fix the GPT to use all of the space (an extra ...
blocks) or continue with the current setting?
@@ -124,14 +127,14 @@ Resize the partition of the virtual disk:
#. Enter :command:`resizepart [partition number]` where
*[partition number]* is the partition number of the partition to modify.
#. Enter :command:`yes` when prompted.
#. Enter the new `End` size.
#. Enter the new End size.
.. note::
If you want a partition to take up the remaining disk space, then
enter the total size of the disk. When you print the partitions
table with the :command:`p` command, the total disk size is shown
after the `Disk` label.
after the :guilabel:`Disk` label.
An example of this can be seen in Figure 1.
@@ -146,16 +149,18 @@ Resize the partition of the virtual disk:
Figure 1: Increase root partition size.
Resize the filesytem
--------------------
Resize the filesystem
=====================
#. Enter :command:`sudo resize2fs -p /dev/[modified partition name]` where
*[modified partition name]* is the partition that was changed in `parted`.
*[modified partition name]* is the partition that was changed in the `parted`
tool.
#. Run the :command:`df -h` to verify that the filesystem size has
increased.
Figure 2 depicts the described steps to resize the partition of the virtual disk from 8.5GB to 20GB.
Figure 2 depicts the described steps to resize the partition of the virtual
disk from 8.5GB to 20GB.
.. figure:: figures/increase-virtual-disk-size-2.png
:scale: 100 %
@@ -163,7 +168,7 @@ Resize the filesytem
Figure 2: Increase root filesystem size after partition has been expanded.
Congratulations! You have resized the disk, partition, and filesystem. At
**Congratulations!** You have resized the disk, partition, and filesystem. At
this point, the increase in disk capacity is usable.
.. _releases: https://cdn.download.clearlinux.org/releases/
@@ -3,18 +3,21 @@
Kernel development
##################
This guide shows how to obtain and compile a Linux* kernel source
using |CL-ATTR| development tooling.
The :ref:`compatible-kernels` available in |CL| aim to be performant and
practical. In some cases, it may be necessary to modify the kernel to suit your
specific needs or test new kernel code as a developer.
This guide shows how to obtain and compile a Linux\* kernel source using
|CL-ATTR| development tooling.
.. contents::
:local:
:depth: 1
:backlinks: top
Overview
********
The :ref:`compatible-kernels` available in |CL| aim to be performant and
practical. In some cases, it may be necessary to modify the kernel to suit your
specific needs or test new kernel code as a developer.
`Source RPMs (SRPMS)`_ are also available for all |CL| kernels, and can be
used for development instead.
@@ -26,7 +29,7 @@ useful to others, consider submitting a request to include it in the
|CL| kernels.If your change request is accepted, you do not need to maintain
your own modified kernel.
Make enhancement requests to the |CL| `Distribution Project`_ on GitHub.
Make enhancement requests to the |CL| `Distribution Project`_ on GitHub\*.
Set up kernel development environment
*************************************
@@ -52,6 +55,7 @@ Install the |CL| development tooling framework
Clone the kernel package
========================
Clone the existing kernel package repository from |CL| as a starting point.
#. Clone the Linux kernel package from |CL|. Using the
@@ -71,7 +75,7 @@ Clone the existing kernel package repository from |CL| as a starting point.
cd ~/clearlinux/packages/linux
The "linux" package is the kernel that comes with |CL| in the `kernel-native`
The "linux" package is the kernel that comes with |CL| in the :command:`kernel-native`
bundle. Alternatively, you can use a different kernel variant as the base for
modification. For a list of kernel package names which you can clone instead,
see the `clearlinux-pkgs`_ repo on GitHub.
@@ -79,7 +83,8 @@ see the `clearlinux-pkgs`_ repo on GitHub.
.. note::
The latest version of the |CL| kernel package is pulled as a starting
point. An older version can pulled by switching to different git tag by using :command:`git checkout tag/<TAG_NAME>`.
point. An older version can pulled by switching to different git tag by using
:command:`git checkout tag/<TAG_NAME>`.
Change the kernel version
=========================
@@ -118,12 +123,16 @@ provided by autospec are not available and changes must be made manually.
%define ktarget native
.. note::
- Consider changing the Name from *linux* in the RPM spec file to easily identify a modified kernel.
- Consider changing the Name from *linux* in the RPM spec file to easily
identify a modified kernel.
- Consider changing the ktarget from *native* in the RPM spec file to easily identify a modified kernel.
- Consider changing the ktarget from *native* in the RPM spec file to
easily identify a modified kernel.
#. Commit and save the changes to the file.
.. _pull-copy-kernel-source:
Pull a copy of the Linux kernel source code
===========================================
@@ -162,16 +171,16 @@ build. These customizations are optional.
Modify kernel configuration
===========================
The kernel source has many configuration options available to pick support for different hardware and software features.
The kernel source has many configuration options available to pick support for
different hardware and software features.
These configuration values must be provided in the :file:`.config` file at
compile time. You will need to make modifications to the :file:`.config`
file, and include it in the kernel package.
#. Make sure you have followed the steps to
`Pull a copy of the Linux kernel source code`_ and are in the kernel
source working directory.
#. Make sure you have followed the steps to :ref:`pull-copy-kernel-source`
and are in the kernel source working directory.
#. If you have an existing :file:`.config` file from an old kernel, copy it
@@ -226,9 +235,8 @@ consider using a patch management tool in addition to Git such as
`Quilt`_.
#. Make sure you have followed the steps to
`Pull a copy of the Linux kernel source code`_ and are in the kernel
source working directory.
#. Make sure you have followed the steps to :ref:`pull-copy-kernel-source` and
are in the kernel source working directory.
#. Initialize the kernel source directory as a new git repo and create a
@@ -399,7 +407,7 @@ machine for testing. This approach works well for individual development or
testing. For a more scalable and customizable approach, consider using the
:ref:`mixer` to provide a custom kernel with updates.
1. Install the kernel onto the local system by extracting the RPM with the
#. Install the kernel onto the local system by extracting the RPM with the
:command:`rpm2cpio` command.
.. code-block:: bash
@@ -3,16 +3,21 @@
Add kernel modules with DKMS
############################
Certain kernel modules are enabled by default in |CL-ATTR|. To use additional
kernel modules that are not part of the Linux source tree, you may need to
build out-of-tree kernel modules. Use this guide to add kernel modules with
:abbr:`DKMS (Dynamic Kernel Module System)` or refer to
:ref:`kernel-modules`.
This guide describes how to add kernel modules with
:abbr:`DKMS (Dynamic Kernel Module System)`.
.. contents:: :local:
:depth: 1
:backlinks: top
Overview
********
Certain kernel modules are enabled by default in |CL-ATTR|. To use additional
kernel modules that are not part of the Linux source tree, you may need to
build out-of-tree kernel modules. Use this guide to add kernel modules with
:abbr:`DKMS (Dynamic Kernel Module System)` or refer to :ref:`kernel-modules`.
Description
***********
@@ -34,12 +39,12 @@ Install DKMS
.. _kernel-modules-dkms-install-begin:
The *kernel-native-dkms* bundle provides the :command:`dkms` program and
The :command:`kernel-native-dkms` bundle provides the :command:`dkms` program and
Linux kernel headers, which are required for compiling kernel modules.
The *kernel-native-dkms* bundle also:
The :command:`kernel-native-dkms` bundle also:
* Adds a systemd update trigger
* Adds a `systemd` update trigger
(:file:`/usr/lib/systemd/system/dkms-new-kernel.service`) to automatically
run DKMS to rebuild modules after a kernel upgrade occurs with :ref:`swupd
update <swupd-guide>`.
@@ -254,8 +259,7 @@ The instructions below show a generic example:
sudo dkms add -m <MODULE-NAME>
#. Build the kernel module using DKMS. If the build encounters errors,
you may
need to edit the :file:`dkms.conf` file.
you may need to edit the :file:`dkms.conf` file.
.. code-block:: bash
@@ -3,16 +3,20 @@
Add kernel modules manually
###########################
Certain kernel modules are enabled by default in |CL-ATTR|. To use additional
kernel modules that are not part of the Linux source tree, you may need to
build out-of-tree kernel modules. Use this guide to add kernel modules
manually, or refer to :ref:`kernel-modules-dkms`.
This guide describes how to add kernel modules manually.
.. contents:: :local:
:depth: 1
:backlinks: top
Overview
********
Certain kernel modules are enabled by default in |CL-ATTR|. To use additional
kernel modules that are not part of the Linux source tree, you may need to
build out-of-tree kernel modules. Use this guide to add kernel modules
manually, or refer to :ref:`kernel-modules-dkms`.
Description
***********
@@ -56,8 +60,7 @@ If the kernel module you need is already open source (for example, in the Linux
upstream) and likely to be useful to others, consider submitting a request to
add or enable it in the |CL| kernel.
Make enhancement requests to the |CL|
`Distribution Project <https://github.com/clearlinux/distribution>`_ on GitHub.
Make enhancement requests to the |CL| 'Distribution Project'_ on GitHub.
.. _kernel-modules-availability-end:
@@ -102,8 +105,8 @@ Build and install kernel module
kernel dev bundle contains the kernel headers, which are required for
compiling kernel modules. For example:
* `linux-dev` for developing against the native kernel.
* `linux-lts-dev` for developing against the LTS kernel.
* :command:`linux-dev` for developing against the native kernel.
* :command:`linux-lts-dev` for developing against the LTS kernel.
.. code-block:: bash
@@ -217,5 +220,4 @@ Related topic
* :ref:`kernel-modules-dkms`
.. _`on GitHub`: https://github.com/clearlinux/distribution
.. _`Distribution Project`: https://github.com/clearlinux/distribution
@@ -3,15 +3,17 @@
Restart system services after an OS update
##########################################
|CL-ATTR| includes a :command:`clr-service-restart` tool that shows which
system daemons require a restart.
This guide describes how to use the :command:`clr-service-restart` tool.
.. contents::
:local:
:depth: 1
Description
***********
Overview
********
|CL-ATTR| includes a :command:`clr-service-restart` tool that shows which
system daemons require a restart.
:command:`clr-service-restart` reads various files in the :file:`procfs`
filesystem provided by the kernel and relies on :command:`systemd` to
@@ -23,22 +25,22 @@ How it works
:command:`clr-service-restart` implements a whitelist to identify which
daemons can be restarted. As a system administrator, you can customize the
default |CL| OS whitelist using *allow* or *disallow* options for restarting
system services. When a software update occurs, :command:`clr-service-restart`
consults the whitelist to see if a service daemon is allowed to be restarted
or not.
default |CL| OS whitelist using :command:`allow` or :command:`disallow` options
for restarting system services. When a software update occurs,
:command:`clr-service-restart` consults the whitelist to see if a service daemon
is allowed to be restarted or not.
Basic options
*************
:command:`clr-service-restart` has three basic options: allow, disallow, and
default.
:command:`clr-service-restart` has three basic options: :command:`allow`,
:command:`disallow`, and :command:`default`.
allow
=====
The *allow* option identifies a daemon to restart after an OS software
The :command:`allow` option identifies a daemon to restart after an OS software
update. The :command:`clr-service-restart` daemon creates a symlink in
:file:`/etc/clr-service-restart` as a record. The example below tells
:command:`clr-service-restart` to restart the *tallow* daemon after an
@@ -51,7 +53,7 @@ OS software update.
disallow
========
The *disallow* option tells :command:`clr-service-restart` not to
The :command:`disallow` option tells :command:`clr-service-restart` not to
restart the specified daemon even if the OS defaults permit the daemon to be
restarted. The :command:`clr-service-restart` daemon creates a symlink in
:file:`/etc/clr-service-restart` that points to :file:`/dev/null` as a
@@ -65,9 +67,9 @@ restart the *rngd* daemon after an OS software update.
default
=======
The *default* option makes :command:`clr-service-restart` revert back to the
OS defaults and delete any symlink in :file:`/etc/clr-service-restart`. The
example below tells :command:`clr-service-restart` to restart *rngd*
The :command:`default` option makes :command:`clr-service-restart` revert back
to the OS defaults and delete any symlink in :file:`/etc/clr-service-restart`.
The example below tells :command:`clr-service-restart` to restart *rngd*
automatically again, because *rngd* is whitelisted for automatic service
restarts by default in |CL|.
@@ -82,7 +84,7 @@ Monitor options
:command:`swupd` automatically. Review the journal output to verify that
services are restarted after an OS software update.
If you pass both options (*-a* and *-n*) described below,
If you pass both options (:command:`-a` and :command:`-n`) described below,
:command:`clr-service-restart` displays a complete list of system services
that require a restart. Use both options to verify that all desired daemons
are restarted.
@@ -91,8 +93,8 @@ are restarted.
-n option
=========
The *-n* option makes :command:`clr-service-restart` perform no restarts. Instead
it displays the services that could potentially be restarted. When used,
The :command:`-n` option makes :command:`clr-service-restart` perform no restarts.
Instead it displays the services that could potentially be restarted. When used,
:command:`clr-service-restart` outputs a list of messages showing:
* Which service needs a restart.
@@ -103,17 +105,17 @@ it displays the services that could potentially be restarted. When used,
-a option
=========
The *-a* option makes :command:`clr-service-restart` consider all system services,
not only the ones that are whitelisted. Because the default whitelist in |CL|
is relatively short, you can use this option to restart all impacted services
when you log in on the system.
The :command:`-a` option makes :command:`clr-service-restart` consider all system
services, not only the ones that are whitelisted. Because the default whitelist
in |CL| is relatively short, you can use this option to restart all impacted
services when you log in on the system.
Example
*******
In the example below, :command:`clr-service-restart` is invoked with both the
*-a* and *-n* options, which displays a complete list of system services that
require a restart.
:command:`-a` and :command:`-n` options, which displays a complete list of system
services that require a restart.
Command:
@@ -3,12 +3,13 @@
Set the time
############
|CL-ATTR| uses the `systemd-timesyncd.service` daemon to synchronize time.
This guide describes how to reset the time in your |CL| system when
This guide describes how to reset the time in your |CL-ATTR| system when
the default :abbr:`NTP (Network Time Protocol)` servers cannot be reached.
#. Install the `sysadmin-basic` bundle.
|CL| uses the `systemd-timesyncd.service` daemon to synchronize time.
#. Install the :command:`sysadmin-basic` bundle.
.. code-block:: bash
@@ -3,19 +3,28 @@
Validate signatures
###################
|CL-ATTR| offers a way to validate the content of an image or an update. All
This guide describes how to validate the contents of a |CL-ATTR| image.
.. contents::
:local:
:depth: 1
Overview
********
Validating the contents of an image is a manual process and is the same process
:ref:`swupd-guide` performs internally.
|CL| offers a way to validate the content of an image or an update. All
validation of content works by creating and signing a hash. A valid signature
creates a chain of trust. A broken chain of trust, seen as an invalid
signature, means the content is not valid.
This guide covers how to validate the contents of an image, which is a manual
process and is the same process ``swupd`` performs internally to
validate an update.
.. _image-content-validation:
Image content validation
========================
************************
For the outlined steps, the installer image of the latest release of |CL| is
used for illustrative purposes. You may use any image of |CL| you choose.
@@ -61,21 +70,21 @@ used for illustrative purposes. You may use any image of |CL| you choose.
.. note::
The `-purpose any` option is required when using OpenSSL 1.1. If using
an earlier version of OpenSSL, omit this option to perform signature
validation. The `openssl version` command may be used to determine the
version of OpenSSL in use.
The :command:`-purpose any` option is required when using OpenSSL 1.1.
If using an earlier version of OpenSSL, omit this option to perform
signature validation. The :command:`openssl version` command may be used
to determine the version of OpenSSL in use.
#. The output should contain ``Verification successful``. If the output
contains ``bad_signature`` anywhere, then the image is not trustworthy.
#. The output should contain "Verification successful". If the output
contains "bad_signature" anywhere, then the image is not trustworthy.
Update content validation
=========================
*************************
``swupd`` validates all update content automatically before applying the
update content. The process ``swupd`` follows internally is illustrated here
**swupd** validates all update content automatically before applying the
update content. The process swupd follows internally is illustrated here
with manual steps using the latest |CL| release. There is no need to perform
these steps manually when performing a ``swupd update``.
these steps manually when performing a :command:`swupd update`.
#. Download the :abbr:`MoM (top-level manifest)`, the signature of the MoM,
and the Swupd certificate used for signing the signature of the MoM.
@@ -112,10 +121,10 @@ these steps manually when performing a ``swupd update``.
.. note::
The `-purpose any` option is required when using OpenSSL 1.1. If using
an earlier version of OpenSSL, omit this option to perform signature
validation. The `openssl version` command may be used to determine the
version of OpenSSL in use.
The :command:`-purpose any` option is required when using OpenSSL 1.1.
If using an earlier version of OpenSSL, omit this option to perform
signature validation. The :command:`openssl version` command may be used
to determine the version of OpenSSL in use.
.. note::
@@ -123,7 +132,7 @@ these steps manually when performing a ``swupd update``.
MoM is signed directly because it is small in size compared to an image of
|CL|.
#. The output should contain ``Verification successful``. If the output
contains ``bad_signature`` anywhere, then the MoM cannot be trusted.
#. The output should contain "Verification successful". If the output
contains "bad_signature" anywhere, then the MoM cannot be trusted.
Because the MoM contains a list of hashes for bundle manifests, if the MoM
cannot be trusted, then the bundle content cannot be trusted.