commit 319727628b515c2292ab2b11f93317bce45d34da Author: Kevin Putnam Date: Mon Jul 29 14:35:12 2019 -0700 First commit Signed-off-by: Kevin Putnam diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..d87e332e --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: cc99ba4fd98ddc62c1fab24f336360f5 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/FAQ/faq.html b/FAQ/faq.html new file mode 100644 index 00000000..fcbc9759 --- /dev/null +++ b/FAQ/faq.html @@ -0,0 +1,1178 @@ + + + + + + + + + + + FAQ — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

FAQ

+

Below is a list of commonly asked questions with answers sourced from the +Clear Linux* OS team and Clear Linux community forums.

+ +
+

General

+
+

Why did you make another distro?

+

The Clear Linux OS team felt that performance was left on the table with Linux software. +Clear Linux OS 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 Clear Linux OS improvements?

+

Yes, we absolutely love open source reuse and upstreaming improvements.

+
+

+
+
+
+

How often do you update?

+

The Clear Linux OS team puts out multiple releases a week, often releasing 2 or more +times a day. This rolling release approach allows Clear Linux OS to remain agile to +upstream changes and security patches.

+
+

+
+
+
+

Is telemetry required?

+

The telemetry solution provided by Clear Linux OS is entirely optional and customizable. +It is disabled by default. If you do choose to enable telemetry, the data +helps the Clear Linux OS team proactively identify and resolve bugs. See the +telemetry page for more information.

+
+

+
+
+
+

What is the default firewall?

+

Clear Linux OS packages 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?

+

Clear Linux OS has a stateless design that maintains a separation between system files +and user files. Default values are stored under /usr/share/defaults/. +Files under /etc/ are not created unless you create one.

+

A blog post explaining how this is accomplished with /etc/fstab/ +specifically is available here: +https://clearlinux.org/news-blogs/where-etcfstab-clear-linux

+
+

+
+
+
+
+

Software packages

+
+

How is software installed and updated?

+

Clear Linux OS provides software in the form of bundles and +updates software with swupd.

+

FlatPak* is an application virtualization solution that allows +more software to be available to Clear Linux OS users by augmenting the software Clear Linux OS +packages natively with software available through FlatPak.

+

Our goal is to have software packaged natively and made available through +bundles whenever possible.

+
+

+
+
+
+

Does Clear Linux OS use RPMs like other distros?

+

Clear Linux OS provides software in the form of 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 Clear Linux OS system with the +right tools, but that is not the intended use case.

+
+

+
+
+
+

Can I install a software package from another OS on Clear Linux OS?

+

Software that is packaged in other formats for other Linux distributions is +not guaranteed to work on Clear Linux OS and may be impacted by Clear Linux OS updates.

+

If the software you’re seeking is open source, please submit a request to add +it to Clear Linux OS. Submit requests on GitHub* here: +https://github.com/clearlinux/distribution/issues

+
+

+
+
+
+
+

Software availability

+
+

What software is available on Clear Linux OS?

+

Available software can be found in the Software Store, through the GNOME* +Software application on the desktop, or by using swupd search.

+
+

+
+
+
+

Is Google* Chrome* available?

+

The Google Chrome web browser is not distributed as a bundle in Clear Linux OS 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.

+

Clear Linux OS 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 Clear Linux OS repository, including discussion of an alternative +hardware-based solution: +https://github.com/clearlinux/distribution/issues/429.

+

While Clear Linux OS cannot distribute FFmpeg, a manual solution to build and install +FFmpeg under /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 Clear Linux OS because of copyright and licensing +complexities. BTRFS is an alternative filesystem that is available in Clear Linux OS +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 Clear Linux OS kernels, in many cases the Clear Linux OS team will enable it +upon request. Submit requests on GitHub here: +https://github.com/clearlinux/distribution/issues

+

The Clear Linux OS 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 Clear Linux OS. See the +kernel modules page for more information.

+
+

+
+
+
+
+ + +
+ +
+
+ + + + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_images/00-sign-in.png b/_images/00-sign-in.png new file mode 100644 index 00000000..4b9840ee Binary files /dev/null and b/_images/00-sign-in.png differ diff --git a/_images/01-cloud-storage.png b/_images/01-cloud-storage.png new file mode 100644 index 00000000..0888723d Binary files /dev/null and b/_images/01-cloud-storage.png differ diff --git a/_images/01-install-libreoffice.gif b/_images/01-install-libreoffice.gif new file mode 100644 index 00000000..62775293 Binary files /dev/null and b/_images/01-install-libreoffice.gif differ diff --git a/_images/02-openlibreoffice.gif b/_images/02-openlibreoffice.gif new file mode 100644 index 00000000..92ff6b7b Binary files /dev/null and b/_images/02-openlibreoffice.gif differ diff --git a/_images/02-storage-browser.png b/_images/02-storage-browser.png new file mode 100644 index 00000000..704f94b8 Binary files /dev/null and b/_images/02-storage-browser.png differ diff --git a/_images/03-create-bucket.png b/_images/03-create-bucket.png new file mode 100644 index 00000000..36a1da38 Binary files /dev/null and b/_images/03-create-bucket.png differ diff --git a/_images/04-bucket-created.png b/_images/04-bucket-created.png new file mode 100644 index 00000000..064719cb Binary files /dev/null and b/_images/04-bucket-created.png differ diff --git a/_images/10-image-upload.png b/_images/10-image-upload.png new file mode 100644 index 00000000..babaf2d1 Binary files /dev/null and b/_images/10-image-upload.png differ diff --git a/_images/11-bucket-uploaded.png b/_images/11-bucket-uploaded.png new file mode 100644 index 00000000..ce368e44 Binary files /dev/null and b/_images/11-bucket-uploaded.png differ diff --git a/_images/20-gce-image.png b/_images/20-gce-image.png new file mode 100644 index 00000000..7b8a2ccb Binary files /dev/null and b/_images/20-gce-image.png differ diff --git a/_images/20-image-library.png b/_images/20-image-library.png new file mode 100644 index 00000000..a70cceee Binary files /dev/null and b/_images/20-image-library.png differ diff --git a/_images/21-create-image.png b/_images/21-create-image.png new file mode 100644 index 00000000..4ef4d43b Binary files /dev/null and b/_images/21-create-image.png differ diff --git a/_images/22-image-list.png b/_images/22-image-list.png new file mode 100644 index 00000000..4347e462 Binary files /dev/null and b/_images/22-image-list.png differ diff --git a/_images/30-create-vm.png b/_images/30-create-vm.png new file mode 100644 index 00000000..528a461e Binary files /dev/null and b/_images/30-create-vm.png differ diff --git a/_images/30-vm-catalog.png b/_images/30-vm-catalog.png new file mode 100644 index 00000000..06071cf6 Binary files /dev/null and b/_images/30-vm-catalog.png differ diff --git a/_images/30-vm-instances.png b/_images/30-vm-instances.png new file mode 100644 index 00000000..3c38bd8d Binary files /dev/null and b/_images/30-vm-instances.png differ diff --git a/_images/30-vm-none.png b/_images/30-vm-none.png new file mode 100644 index 00000000..e043ef03 Binary files /dev/null and b/_images/30-vm-none.png differ diff --git a/_images/31-select-boot-disk.png b/_images/31-select-boot-disk.png new file mode 100644 index 00000000..b0b44cdf Binary files /dev/null and b/_images/31-select-boot-disk.png differ diff --git a/_images/40-clear-vm-security.png b/_images/40-clear-vm-security.png new file mode 100644 index 00000000..8d45b4a4 Binary files /dev/null and b/_images/40-clear-vm-security.png differ diff --git a/_images/40-ssh-key.png b/_images/40-ssh-key.png new file mode 100644 index 00000000..e18a390c Binary files /dev/null and b/_images/40-ssh-key.png differ diff --git a/_images/41-vm-created.png b/_images/41-vm-created.png new file mode 100644 index 00000000..ec4f3a20 Binary files /dev/null and b/_images/41-vm-created.png differ diff --git a/_images/42-ssh-vm.png b/_images/42-ssh-vm.png new file mode 100644 index 00000000..92badb80 Binary files /dev/null and b/_images/42-ssh-vm.png differ diff --git a/_images/architect-lifecycle-1.png b/_images/architect-lifecycle-1.png new file mode 100644 index 00000000..294d0f35 Binary files /dev/null and b/_images/architect-lifecycle-1.png differ diff --git a/_images/autoproxy_0.png b/_images/autoproxy_0.png new file mode 100644 index 00000000..7a02cd81 Binary files /dev/null and b/_images/autoproxy_0.png differ diff --git a/_images/aws-web-1.png b/_images/aws-web-1.png new file mode 100644 index 00000000..c4fad685 Binary files /dev/null and b/_images/aws-web-1.png differ diff --git a/_images/aws-web-10.png b/_images/aws-web-10.png new file mode 100644 index 00000000..b4fbeb13 Binary files /dev/null and b/_images/aws-web-10.png differ diff --git a/_images/aws-web-11.png b/_images/aws-web-11.png new file mode 100644 index 00000000..2a6dcab0 Binary files /dev/null and b/_images/aws-web-11.png differ diff --git a/_images/aws-web-12.png b/_images/aws-web-12.png new file mode 100644 index 00000000..1091ea72 Binary files /dev/null and b/_images/aws-web-12.png differ diff --git a/_images/aws-web-13.png b/_images/aws-web-13.png new file mode 100644 index 00000000..507c8c12 Binary files /dev/null and b/_images/aws-web-13.png differ diff --git a/_images/aws-web-14.png b/_images/aws-web-14.png new file mode 100644 index 00000000..36e10661 Binary files /dev/null and b/_images/aws-web-14.png differ diff --git a/_images/aws-web-2.png b/_images/aws-web-2.png new file mode 100644 index 00000000..8bb6ffa0 Binary files /dev/null and b/_images/aws-web-2.png differ diff --git a/_images/aws-web-3.png b/_images/aws-web-3.png new file mode 100644 index 00000000..7beb5ad8 Binary files /dev/null and b/_images/aws-web-3.png differ diff --git a/_images/aws-web-4.png b/_images/aws-web-4.png new file mode 100644 index 00000000..cd143b51 Binary files /dev/null and b/_images/aws-web-4.png differ diff --git a/_images/aws-web-5.png b/_images/aws-web-5.png new file mode 100644 index 00000000..9c70a903 Binary files /dev/null and b/_images/aws-web-5.png differ diff --git a/_images/aws-web-6.png b/_images/aws-web-6.png new file mode 100644 index 00000000..a5819f7a Binary files /dev/null and b/_images/aws-web-6.png differ diff --git a/_images/aws-web-7.png b/_images/aws-web-7.png new file mode 100644 index 00000000..dad60bd8 Binary files /dev/null and b/_images/aws-web-7.png differ diff --git a/_images/aws-web-8.png b/_images/aws-web-8.png new file mode 100644 index 00000000..9e927a43 Binary files /dev/null and b/_images/aws-web-8.png differ diff --git a/_images/aws-web-9.png b/_images/aws-web-9.png new file mode 100644 index 00000000..2c1f411c Binary files /dev/null and b/_images/aws-web-9.png differ diff --git a/_images/azure-1.png b/_images/azure-1.png new file mode 100644 index 00000000..25c1800f Binary files /dev/null and b/_images/azure-1.png differ diff --git a/_images/azure-2.png b/_images/azure-2.png new file mode 100644 index 00000000..8364393c Binary files /dev/null and b/_images/azure-2.png differ diff --git a/_images/azure-3.png b/_images/azure-3.png new file mode 100644 index 00000000..dfb1c11c Binary files /dev/null and b/_images/azure-3.png differ diff --git a/_images/bare-metal-install-desktop-01.png b/_images/bare-metal-install-desktop-01.png new file mode 100644 index 00000000..2e94163e Binary files /dev/null and b/_images/bare-metal-install-desktop-01.png differ diff --git a/_images/bare-metal-install-desktop-011.png b/_images/bare-metal-install-desktop-011.png new file mode 100644 index 00000000..2e94163e Binary files /dev/null and b/_images/bare-metal-install-desktop-011.png differ diff --git a/_images/bare-metal-install-desktop-02.png b/_images/bare-metal-install-desktop-02.png new file mode 100644 index 00000000..bce97b57 Binary files /dev/null and b/_images/bare-metal-install-desktop-02.png differ diff --git a/_images/bare-metal-install-desktop-03.png b/_images/bare-metal-install-desktop-03.png new file mode 100644 index 00000000..a2650b35 Binary files /dev/null and b/_images/bare-metal-install-desktop-03.png differ diff --git a/_images/bare-metal-install-desktop-04.png b/_images/bare-metal-install-desktop-04.png new file mode 100644 index 00000000..0ae7d397 Binary files /dev/null and b/_images/bare-metal-install-desktop-04.png differ diff --git a/_images/bare-metal-install-desktop-05.png b/_images/bare-metal-install-desktop-05.png new file mode 100644 index 00000000..7efc721f Binary files /dev/null and b/_images/bare-metal-install-desktop-05.png differ diff --git a/_images/bare-metal-install-desktop-06.png b/_images/bare-metal-install-desktop-06.png new file mode 100644 index 00000000..8a966ab7 Binary files /dev/null and b/_images/bare-metal-install-desktop-06.png differ diff --git a/_images/bare-metal-install-desktop-07.png b/_images/bare-metal-install-desktop-07.png new file mode 100644 index 00000000..13a3d5f2 Binary files /dev/null and b/_images/bare-metal-install-desktop-07.png differ diff --git a/_images/bare-metal-install-desktop-08.png b/_images/bare-metal-install-desktop-08.png new file mode 100644 index 00000000..e35d2948 Binary files /dev/null and b/_images/bare-metal-install-desktop-08.png differ diff --git a/_images/bare-metal-install-desktop-09.png b/_images/bare-metal-install-desktop-09.png new file mode 100644 index 00000000..8497270d Binary files /dev/null and b/_images/bare-metal-install-desktop-09.png differ diff --git a/_images/bare-metal-install-desktop-10.png b/_images/bare-metal-install-desktop-10.png new file mode 100644 index 00000000..db05151c Binary files /dev/null and b/_images/bare-metal-install-desktop-10.png differ diff --git a/_images/bare-metal-install-desktop-11.png b/_images/bare-metal-install-desktop-11.png new file mode 100644 index 00000000..8fdfdcf0 Binary files /dev/null and b/_images/bare-metal-install-desktop-11.png differ diff --git a/_images/bare-metal-install-desktop-12.png b/_images/bare-metal-install-desktop-12.png new file mode 100644 index 00000000..98edfbb7 Binary files /dev/null and b/_images/bare-metal-install-desktop-12.png differ diff --git a/_images/bare-metal-install-desktop-13.png b/_images/bare-metal-install-desktop-13.png new file mode 100644 index 00000000..99cc6763 Binary files /dev/null and b/_images/bare-metal-install-desktop-13.png differ diff --git a/_images/bare-metal-install-desktop-14.png b/_images/bare-metal-install-desktop-14.png new file mode 100644 index 00000000..f47bd702 Binary files /dev/null and b/_images/bare-metal-install-desktop-14.png differ diff --git a/_images/bare-metal-install-desktop-15.png b/_images/bare-metal-install-desktop-15.png new file mode 100644 index 00000000..d81b6dc3 Binary files /dev/null and b/_images/bare-metal-install-desktop-15.png differ diff --git a/_images/bare-metal-install-desktop-16.png b/_images/bare-metal-install-desktop-16.png new file mode 100644 index 00000000..9560bf24 Binary files /dev/null and b/_images/bare-metal-install-desktop-16.png differ diff --git a/_images/bare-metal-install-desktop-17.png b/_images/bare-metal-install-desktop-17.png new file mode 100644 index 00000000..d51a0fa7 Binary files /dev/null and b/_images/bare-metal-install-desktop-17.png differ diff --git a/_images/bare-metal-install-desktop-18.png b/_images/bare-metal-install-desktop-18.png new file mode 100644 index 00000000..d6ac2d52 Binary files /dev/null and b/_images/bare-metal-install-desktop-18.png differ diff --git a/_images/bare-metal-install-desktop-19.png b/_images/bare-metal-install-desktop-19.png new file mode 100644 index 00000000..a82cb2a6 Binary files /dev/null and b/_images/bare-metal-install-desktop-19.png differ diff --git a/_images/bare-metal-install-server-01.png b/_images/bare-metal-install-server-01.png new file mode 100644 index 00000000..2e94163e Binary files /dev/null and b/_images/bare-metal-install-server-01.png differ diff --git a/_images/bare-metal-install-server-02.png b/_images/bare-metal-install-server-02.png new file mode 100644 index 00000000..688f85d5 Binary files /dev/null and b/_images/bare-metal-install-server-02.png differ diff --git a/_images/bare-metal-install-server-03.png b/_images/bare-metal-install-server-03.png new file mode 100644 index 00000000..b644a0a5 Binary files /dev/null and b/_images/bare-metal-install-server-03.png differ diff --git a/_images/bare-metal-install-server-04.png b/_images/bare-metal-install-server-04.png new file mode 100644 index 00000000..73bb3f90 Binary files /dev/null and b/_images/bare-metal-install-server-04.png differ diff --git a/_images/bare-metal-install-server-05.png b/_images/bare-metal-install-server-05.png new file mode 100644 index 00000000..9be288ee Binary files /dev/null and b/_images/bare-metal-install-server-05.png differ diff --git a/_images/bare-metal-install-server-06.png b/_images/bare-metal-install-server-06.png new file mode 100644 index 00000000..3e45ec66 Binary files /dev/null and b/_images/bare-metal-install-server-06.png differ diff --git a/_images/bare-metal-install-server-07.png b/_images/bare-metal-install-server-07.png new file mode 100644 index 00000000..2ebac81e Binary files /dev/null and b/_images/bare-metal-install-server-07.png differ diff --git a/_images/bare-metal-install-server-08.png b/_images/bare-metal-install-server-08.png new file mode 100644 index 00000000..7ec125b4 Binary files /dev/null and b/_images/bare-metal-install-server-08.png differ diff --git a/_images/bare-metal-install-server-09.png b/_images/bare-metal-install-server-09.png new file mode 100644 index 00000000..9ccd2c2b Binary files /dev/null and b/_images/bare-metal-install-server-09.png differ diff --git a/_images/bare-metal-install-server-10.png b/_images/bare-metal-install-server-10.png new file mode 100644 index 00000000..9603f3ae Binary files /dev/null and b/_images/bare-metal-install-server-10.png differ diff --git a/_images/bare-metal-install-server-11.png b/_images/bare-metal-install-server-11.png new file mode 100644 index 00000000..351bf7f1 Binary files /dev/null and b/_images/bare-metal-install-server-11.png differ diff --git a/_images/bare-metal-install-server-12.png b/_images/bare-metal-install-server-12.png new file mode 100644 index 00000000..268260be Binary files /dev/null and b/_images/bare-metal-install-server-12.png differ diff --git a/_images/bare-metal-install-server-13.png b/_images/bare-metal-install-server-13.png new file mode 100644 index 00000000..7de11593 Binary files /dev/null and b/_images/bare-metal-install-server-13.png differ diff --git a/_images/bare-metal-install-server-14.png b/_images/bare-metal-install-server-14.png new file mode 100644 index 00000000..2dd429f5 Binary files /dev/null and b/_images/bare-metal-install-server-14.png differ diff --git a/_images/bare-metal-install-server-15.png b/_images/bare-metal-install-server-15.png new file mode 100644 index 00000000..1913d944 Binary files /dev/null and b/_images/bare-metal-install-server-15.png differ diff --git a/_images/bare-metal-install-server-16.png b/_images/bare-metal-install-server-16.png new file mode 100644 index 00000000..72974308 Binary files /dev/null and b/_images/bare-metal-install-server-16.png differ diff --git a/_images/bare-metal-install-server-17.png b/_images/bare-metal-install-server-17.png new file mode 100644 index 00000000..315d7673 Binary files /dev/null and b/_images/bare-metal-install-server-17.png differ diff --git a/_images/bare-metal-install-server-18.png b/_images/bare-metal-install-server-18.png new file mode 100644 index 00000000..4a082720 Binary files /dev/null and b/_images/bare-metal-install-server-18.png differ diff --git a/_images/bare-metal-install-server-19.png b/_images/bare-metal-install-server-19.png new file mode 100644 index 00000000..79db68cb Binary files /dev/null and b/_images/bare-metal-install-server-19.png differ diff --git a/_images/bare-metal-install-server-20.png b/_images/bare-metal-install-server-20.png new file mode 100644 index 00000000..4aed6b7c Binary files /dev/null and b/_images/bare-metal-install-server-20.png differ diff --git a/_images/bare-metal-install-server-21.png b/_images/bare-metal-install-server-21.png new file mode 100644 index 00000000..11ed3660 Binary files /dev/null and b/_images/bare-metal-install-server-21.png differ diff --git a/_images/bare-metal-install-server-22.png b/_images/bare-metal-install-server-22.png new file mode 100644 index 00000000..77cddd2a Binary files /dev/null and b/_images/bare-metal-install-server-22.png differ diff --git a/_images/bare-metal-install-server-23.png b/_images/bare-metal-install-server-23.png new file mode 100644 index 00000000..7662d260 Binary files /dev/null and b/_images/bare-metal-install-server-23.png differ diff --git a/_images/bare-metal-install-server-24.png b/_images/bare-metal-install-server-24.png new file mode 100644 index 00000000..1f26f912 Binary files /dev/null and b/_images/bare-metal-install-server-24.png differ diff --git a/_images/bare-metal-install-server-25.png b/_images/bare-metal-install-server-25.png new file mode 100644 index 00000000..c1e425bc Binary files /dev/null and b/_images/bare-metal-install-server-25.png differ diff --git a/_images/bare-metal-install-server-26.png b/_images/bare-metal-install-server-26.png new file mode 100644 index 00000000..6a584f88 Binary files /dev/null and b/_images/bare-metal-install-server-26.png differ diff --git a/_images/bare-metal-install-server-27.png b/_images/bare-metal-install-server-27.png new file mode 100644 index 00000000..92023a3f Binary files /dev/null and b/_images/bare-metal-install-server-27.png differ diff --git a/_images/bare-metal-install-server-28.png b/_images/bare-metal-install-server-28.png new file mode 100644 index 00000000..bd19aacf Binary files /dev/null and b/_images/bare-metal-install-server-28.png differ diff --git a/_images/bare-metal-install-server-29.png b/_images/bare-metal-install-server-29.png new file mode 100644 index 00000000..7a4b9676 Binary files /dev/null and b/_images/bare-metal-install-server-29.png differ diff --git a/_images/bare-metal-install-server-30.png b/_images/bare-metal-install-server-30.png new file mode 100644 index 00000000..fdb1d556 Binary files /dev/null and b/_images/bare-metal-install-server-30.png differ diff --git a/_images/bare-metal-install-server-31.png b/_images/bare-metal-install-server-31.png new file mode 100644 index 00000000..7a046191 Binary files /dev/null and b/_images/bare-metal-install-server-31.png differ diff --git a/_images/bare-metal-install-server-32.png b/_images/bare-metal-install-server-32.png new file mode 100644 index 00000000..863561c3 Binary files /dev/null and b/_images/bare-metal-install-server-32.png differ diff --git a/_images/bootable-usb-mac-01.png b/_images/bootable-usb-mac-01.png new file mode 100644 index 00000000..1fa8114c Binary files /dev/null and b/_images/bootable-usb-mac-01.png differ diff --git a/_images/bootable-usb-windows-02.png b/_images/bootable-usb-windows-02.png new file mode 100644 index 00000000..399ff4d1 Binary files /dev/null and b/_images/bootable-usb-windows-02.png differ diff --git a/_images/bootable-usb-windows-03.png b/_images/bootable-usb-windows-03.png new file mode 100644 index 00000000..a4345853 Binary files /dev/null and b/_images/bootable-usb-windows-03.png differ diff --git a/_images/bulk-provision-flow.png b/_images/bulk-provision-flow.png new file mode 100644 index 00000000..036982f7 Binary files /dev/null and b/_images/bulk-provision-flow.png differ diff --git a/_images/debug-diagram.png b/_images/debug-diagram.png new file mode 100644 index 00000000..d85a4045 Binary files /dev/null and b/_images/debug-diagram.png differ diff --git a/_images/dlrs-fig-1.png b/_images/dlrs-fig-1.png new file mode 100644 index 00000000..8054b120 Binary files /dev/null and b/_images/dlrs-fig-1.png differ diff --git a/_images/dlrs-fig-2.png b/_images/dlrs-fig-2.png new file mode 100644 index 00000000..df7a72ab Binary files /dev/null and b/_images/dlrs-fig-2.png differ diff --git a/_images/dlrs-fig-3.png b/_images/dlrs-fig-3.png new file mode 100644 index 00000000..ce07bbc0 Binary files /dev/null and b/_images/dlrs-fig-3.png differ diff --git a/_images/dlrs-fig-4.png b/_images/dlrs-fig-4.png new file mode 100644 index 00000000..387cda2d Binary files /dev/null and b/_images/dlrs-fig-4.png differ diff --git a/_images/dlrs-fig-5.png b/_images/dlrs-fig-5.png new file mode 100644 index 00000000..6c7923be Binary files /dev/null and b/_images/dlrs-fig-5.png differ diff --git a/_images/download-verify-decompress-windows-fig-1.png b/_images/download-verify-decompress-windows-fig-1.png new file mode 100644 index 00000000..0b0ee7f6 Binary files /dev/null and b/_images/download-verify-decompress-windows-fig-1.png differ diff --git a/_images/download-verify-decompress-windows-fig-11.png b/_images/download-verify-decompress-windows-fig-11.png new file mode 100644 index 00000000..0b0ee7f6 Binary files /dev/null and b/_images/download-verify-decompress-windows-fig-11.png differ diff --git a/_images/increase-virtual-disk-size-1.png b/_images/increase-virtual-disk-size-1.png new file mode 100644 index 00000000..a4692c9a Binary files /dev/null and b/_images/increase-virtual-disk-size-1.png differ diff --git a/_images/increase-virtual-disk-size-2.png b/_images/increase-virtual-disk-size-2.png new file mode 100644 index 00000000..90b1eb28 Binary files /dev/null and b/_images/increase-virtual-disk-size-2.png differ diff --git a/_images/machine-learning-1.png b/_images/machine-learning-1.png new file mode 100644 index 00000000..caddc867 Binary files /dev/null and b/_images/machine-learning-1.png differ diff --git a/_images/machine-learning-2.png b/_images/machine-learning-2.png new file mode 100644 index 00000000..70ee944c Binary files /dev/null and b/_images/machine-learning-2.png differ diff --git a/_images/machine-learning-3.png b/_images/machine-learning-3.png new file mode 100644 index 00000000..b54503a5 Binary files /dev/null and b/_images/machine-learning-3.png differ diff --git a/_images/machine-learning-4.png b/_images/machine-learning-4.png new file mode 100644 index 00000000..7cfdbe5d Binary files /dev/null and b/_images/machine-learning-4.png differ diff --git a/_images/machine-learning-5.png b/_images/machine-learning-5.png new file mode 100644 index 00000000..ae7e7d03 Binary files /dev/null and b/_images/machine-learning-5.png differ diff --git a/_images/machine-learning-6.png b/_images/machine-learning-6.png new file mode 100644 index 00000000..b074d787 Binary files /dev/null and b/_images/machine-learning-6.png differ diff --git a/_images/machine-learning-7.png b/_images/machine-learning-7.png new file mode 100644 index 00000000..0c6715fa Binary files /dev/null and b/_images/machine-learning-7.png differ diff --git a/_images/machine-learning-8.png b/_images/machine-learning-8.png new file mode 100644 index 00000000..add49999 Binary files /dev/null and b/_images/machine-learning-8.png differ diff --git a/_images/mixer-about-1.png b/_images/mixer-about-1.png new file mode 100644 index 00000000..8120a068 Binary files /dev/null and b/_images/mixer-about-1.png differ diff --git a/_images/network-boot-flow.png b/_images/network-boot-flow.png new file mode 100644 index 00000000..7ad68c76 Binary files /dev/null and b/_images/network-boot-flow.png differ diff --git a/_images/network-boot-setup.png b/_images/network-boot-setup.png new file mode 100644 index 00000000..dc9239db Binary files /dev/null and b/_images/network-boot-setup.png differ diff --git a/_images/pktgen_lw3fd.png b/_images/pktgen_lw3fd.png new file mode 100644 index 00000000..d17318b1 Binary files /dev/null and b/_images/pktgen_lw3fd.png differ diff --git a/_images/pyshical_net.png b/_images/pyshical_net.png new file mode 100644 index 00000000..182ba6ce Binary files /dev/null and b/_images/pyshical_net.png differ diff --git a/_images/run-cell-button.png b/_images/run-cell-button.png new file mode 100644 index 00000000..b61de4ce Binary files /dev/null and b/_images/run-cell-button.png differ diff --git a/_images/smb-1.png b/_images/smb-1.png new file mode 100644 index 00000000..8b0b4196 Binary files /dev/null and b/_images/smb-1.png differ diff --git a/_images/smb-2.png b/_images/smb-2.png new file mode 100644 index 00000000..f7a852ff Binary files /dev/null and b/_images/smb-2.png differ diff --git a/_images/smb-desktop-1.png b/_images/smb-desktop-1.png new file mode 100644 index 00000000..866a45ef Binary files /dev/null and b/_images/smb-desktop-1.png differ diff --git a/_images/smb-desktop-2.png b/_images/smb-desktop-2.png new file mode 100644 index 00000000..9ed4a61d Binary files /dev/null and b/_images/smb-desktop-2.png differ diff --git a/_images/smb-desktop-3.png b/_images/smb-desktop-3.png new file mode 100644 index 00000000..7688e484 Binary files /dev/null and b/_images/smb-desktop-3.png differ diff --git a/_images/stateless-1.png b/_images/stateless-1.png new file mode 100644 index 00000000..550f37ce Binary files /dev/null and b/_images/stateless-1.png differ diff --git a/_images/stateless-2.png b/_images/stateless-2.png new file mode 100644 index 00000000..94e8af22 Binary files /dev/null and b/_images/stateless-2.png differ diff --git a/_images/telemetry-backend-1.png b/_images/telemetry-backend-1.png new file mode 100644 index 00000000..9cd8df75 Binary files /dev/null and b/_images/telemetry-backend-1.png differ diff --git a/_images/telemetry-e2e.png b/_images/telemetry-e2e.png new file mode 100644 index 00000000..75868291 Binary files /dev/null and b/_images/telemetry-e2e.png differ diff --git a/_images/telemetry-e2e1.png b/_images/telemetry-e2e1.png new file mode 100644 index 00000000..75868291 Binary files /dev/null and b/_images/telemetry-e2e1.png differ diff --git a/_images/virtualbox-cl-installer-01.png b/_images/virtualbox-cl-installer-01.png new file mode 100644 index 00000000..7722a886 Binary files /dev/null and b/_images/virtualbox-cl-installer-01.png differ diff --git a/_images/virtualbox-cl-installer-02.png b/_images/virtualbox-cl-installer-02.png new file mode 100644 index 00000000..365f8545 Binary files /dev/null and b/_images/virtualbox-cl-installer-02.png differ diff --git a/_images/virtualbox-cl-installer-03.png b/_images/virtualbox-cl-installer-03.png new file mode 100644 index 00000000..496f270a Binary files /dev/null and b/_images/virtualbox-cl-installer-03.png differ diff --git a/_images/virtualbox-cl-installer-04.png b/_images/virtualbox-cl-installer-04.png new file mode 100644 index 00000000..31662623 Binary files /dev/null and b/_images/virtualbox-cl-installer-04.png differ diff --git a/_images/virtualbox-cl-installer-05.png b/_images/virtualbox-cl-installer-05.png new file mode 100644 index 00000000..c250776d Binary files /dev/null and b/_images/virtualbox-cl-installer-05.png differ diff --git a/_images/virtualbox-cl-installer-06.png b/_images/virtualbox-cl-installer-06.png new file mode 100644 index 00000000..9926af81 Binary files /dev/null and b/_images/virtualbox-cl-installer-06.png differ diff --git a/_images/virtualbox-cl-installer-07.png b/_images/virtualbox-cl-installer-07.png new file mode 100644 index 00000000..8f2c2b34 Binary files /dev/null and b/_images/virtualbox-cl-installer-07.png differ diff --git a/_images/virtualbox-cl-installer-08.png b/_images/virtualbox-cl-installer-08.png new file mode 100644 index 00000000..7b23c454 Binary files /dev/null and b/_images/virtualbox-cl-installer-08.png differ diff --git a/_images/virtualbox-cl-installer-09.png b/_images/virtualbox-cl-installer-09.png new file mode 100644 index 00000000..f6feabfa Binary files /dev/null and b/_images/virtualbox-cl-installer-09.png differ diff --git a/_images/virtualbox-cl-installer-10.png b/_images/virtualbox-cl-installer-10.png new file mode 100644 index 00000000..0ffd96e8 Binary files /dev/null and b/_images/virtualbox-cl-installer-10.png differ diff --git a/_images/virtualbox-cl-installer-11.png b/_images/virtualbox-cl-installer-11.png new file mode 100644 index 00000000..b0ca6d35 Binary files /dev/null and b/_images/virtualbox-cl-installer-11.png differ diff --git a/_images/virtualbox-cl-installer-12.png b/_images/virtualbox-cl-installer-12.png new file mode 100644 index 00000000..ba6344de Binary files /dev/null and b/_images/virtualbox-cl-installer-12.png differ diff --git a/_images/vmw-player-01.png b/_images/vmw-player-01.png new file mode 100644 index 00000000..23ba879a Binary files /dev/null and b/_images/vmw-player-01.png differ diff --git a/_images/vmw-player-02.png b/_images/vmw-player-02.png new file mode 100644 index 00000000..89ad86e6 Binary files /dev/null and b/_images/vmw-player-02.png differ diff --git a/_images/vmw-player-03.png b/_images/vmw-player-03.png new file mode 100644 index 00000000..e037b30e Binary files /dev/null and b/_images/vmw-player-03.png differ diff --git a/_images/vmw-player-04.png b/_images/vmw-player-04.png new file mode 100644 index 00000000..ea4d9f69 Binary files /dev/null and b/_images/vmw-player-04.png differ diff --git a/_images/vmw-player-05.png b/_images/vmw-player-05.png new file mode 100644 index 00000000..27147973 Binary files /dev/null and b/_images/vmw-player-05.png differ diff --git a/_images/vmw-player-06.png b/_images/vmw-player-06.png new file mode 100644 index 00000000..d8157359 Binary files /dev/null and b/_images/vmw-player-06.png differ diff --git a/_images/vmw-player-07.png b/_images/vmw-player-07.png new file mode 100644 index 00000000..89686569 Binary files /dev/null and b/_images/vmw-player-07.png differ diff --git a/_images/vmw-player-08.png b/_images/vmw-player-08.png new file mode 100644 index 00000000..891e3366 Binary files /dev/null and b/_images/vmw-player-08.png differ diff --git a/_images/vmw-player-09.png b/_images/vmw-player-09.png new file mode 100644 index 00000000..0644ac29 Binary files /dev/null and b/_images/vmw-player-09.png differ diff --git a/_images/vmw-player-10.png b/_images/vmw-player-10.png new file mode 100644 index 00000000..4f6687c7 Binary files /dev/null and b/_images/vmw-player-10.png differ diff --git a/_images/vmw-player-11.png b/_images/vmw-player-11.png new file mode 100644 index 00000000..1eba9c88 Binary files /dev/null and b/_images/vmw-player-11.png differ diff --git a/_images/vmw-player-preconf-01.png b/_images/vmw-player-preconf-01.png new file mode 100644 index 00000000..69b6a24e Binary files /dev/null and b/_images/vmw-player-preconf-01.png differ diff --git a/_images/vmw-player-preconf-02.png b/_images/vmw-player-preconf-02.png new file mode 100644 index 00000000..d24c0612 Binary files /dev/null and b/_images/vmw-player-preconf-02.png differ diff --git a/_images/vmw-player-preconf-03.png b/_images/vmw-player-preconf-03.png new file mode 100644 index 00000000..2fbe4cea Binary files /dev/null and b/_images/vmw-player-preconf-03.png differ diff --git a/_images/vmw-player-preconf-04.png b/_images/vmw-player-preconf-04.png new file mode 100644 index 00000000..6a01685f Binary files /dev/null and b/_images/vmw-player-preconf-04.png differ diff --git a/_images/vmw-player-preconf-05.png b/_images/vmw-player-preconf-05.png new file mode 100644 index 00000000..22f40dfc Binary files /dev/null and b/_images/vmw-player-preconf-05.png differ diff --git a/_images/vmw-player-preconf-06.png b/_images/vmw-player-preconf-06.png new file mode 100644 index 00000000..eeb4b36e Binary files /dev/null and b/_images/vmw-player-preconf-06.png differ diff --git a/_images/vmw-player-preconf-07.png b/_images/vmw-player-preconf-07.png new file mode 100644 index 00000000..4f46b24e Binary files /dev/null and b/_images/vmw-player-preconf-07.png differ diff --git a/_images/vmw-player-preconf-08.png b/_images/vmw-player-preconf-08.png new file mode 100644 index 00000000..d86378bb Binary files /dev/null and b/_images/vmw-player-preconf-08.png differ diff --git a/_images/vmw-player-preconf-09.png b/_images/vmw-player-preconf-09.png new file mode 100644 index 00000000..416fb206 Binary files /dev/null and b/_images/vmw-player-preconf-09.png differ diff --git a/_images/vmw-player-preconf-10.png b/_images/vmw-player-preconf-10.png new file mode 100644 index 00000000..3efc71e4 Binary files /dev/null and b/_images/vmw-player-preconf-10.png differ diff --git a/_images/vmw-player-preconf-11.png b/_images/vmw-player-preconf-11.png new file mode 100644 index 00000000..8cd9d0a9 Binary files /dev/null and b/_images/vmw-player-preconf-11.png differ diff --git a/_images/vmw-player-preconf-12.png b/_images/vmw-player-preconf-12.png new file mode 100644 index 00000000..36f43d3e Binary files /dev/null and b/_images/vmw-player-preconf-12.png differ diff --git a/_images/vmw-player-preconf-13.png b/_images/vmw-player-preconf-13.png new file mode 100644 index 00000000..30f77a88 Binary files /dev/null and b/_images/vmw-player-preconf-13.png differ diff --git a/_images/vmw-player-preconf-14.png b/_images/vmw-player-preconf-14.png new file mode 100644 index 00000000..e115111e Binary files /dev/null and b/_images/vmw-player-preconf-14.png differ diff --git a/_images/vmw-player-preconf-15.png b/_images/vmw-player-preconf-15.png new file mode 100644 index 00000000..7d2111fa Binary files /dev/null and b/_images/vmw-player-preconf-15.png differ diff --git a/_images/vmware-esxi-install-cl-1.png b/_images/vmware-esxi-install-cl-1.png new file mode 100644 index 00000000..828ca838 Binary files /dev/null and b/_images/vmware-esxi-install-cl-1.png differ diff --git a/_images/vmware-esxi-install-cl-10.png b/_images/vmware-esxi-install-cl-10.png new file mode 100644 index 00000000..85688105 Binary files /dev/null and b/_images/vmware-esxi-install-cl-10.png differ diff --git a/_images/vmware-esxi-install-cl-11.png b/_images/vmware-esxi-install-cl-11.png new file mode 100644 index 00000000..bb134ba2 Binary files /dev/null and b/_images/vmware-esxi-install-cl-11.png differ diff --git a/_images/vmware-esxi-install-cl-12.png b/_images/vmware-esxi-install-cl-12.png new file mode 100644 index 00000000..ba26d552 Binary files /dev/null and b/_images/vmware-esxi-install-cl-12.png differ diff --git a/_images/vmware-esxi-install-cl-13.png b/_images/vmware-esxi-install-cl-13.png new file mode 100644 index 00000000..3f11505d Binary files /dev/null and b/_images/vmware-esxi-install-cl-13.png differ diff --git a/_images/vmware-esxi-install-cl-14.png b/_images/vmware-esxi-install-cl-14.png new file mode 100644 index 00000000..59e07de1 Binary files /dev/null and b/_images/vmware-esxi-install-cl-14.png differ diff --git a/_images/vmware-esxi-install-cl-15.png b/_images/vmware-esxi-install-cl-15.png new file mode 100644 index 00000000..9d654081 Binary files /dev/null and b/_images/vmware-esxi-install-cl-15.png differ diff --git a/_images/vmware-esxi-install-cl-16.png b/_images/vmware-esxi-install-cl-16.png new file mode 100644 index 00000000..bb134ba2 Binary files /dev/null and b/_images/vmware-esxi-install-cl-16.png differ diff --git a/_images/vmware-esxi-install-cl-2.png b/_images/vmware-esxi-install-cl-2.png new file mode 100644 index 00000000..a3554e92 Binary files /dev/null and b/_images/vmware-esxi-install-cl-2.png differ diff --git a/_images/vmware-esxi-install-cl-3.png b/_images/vmware-esxi-install-cl-3.png new file mode 100644 index 00000000..aec0c8d0 Binary files /dev/null and b/_images/vmware-esxi-install-cl-3.png differ diff --git a/_images/vmware-esxi-install-cl-4.png b/_images/vmware-esxi-install-cl-4.png new file mode 100644 index 00000000..30cabb0e Binary files /dev/null and b/_images/vmware-esxi-install-cl-4.png differ diff --git a/_images/vmware-esxi-install-cl-5.png b/_images/vmware-esxi-install-cl-5.png new file mode 100644 index 00000000..f1e7cee1 Binary files /dev/null and b/_images/vmware-esxi-install-cl-5.png differ diff --git a/_images/vmware-esxi-install-cl-6.png b/_images/vmware-esxi-install-cl-6.png new file mode 100644 index 00000000..b0a58487 Binary files /dev/null and b/_images/vmware-esxi-install-cl-6.png differ diff --git a/_images/vmware-esxi-install-cl-7.png b/_images/vmware-esxi-install-cl-7.png new file mode 100644 index 00000000..4971a78e Binary files /dev/null and b/_images/vmware-esxi-install-cl-7.png differ diff --git a/_images/vmware-esxi-install-cl-8.png b/_images/vmware-esxi-install-cl-8.png new file mode 100644 index 00000000..b188da8a Binary files /dev/null and b/_images/vmware-esxi-install-cl-8.png differ diff --git a/_images/vmware-esxi-install-cl-9.png b/_images/vmware-esxi-install-cl-9.png new file mode 100644 index 00000000..24e72696 Binary files /dev/null and b/_images/vmware-esxi-install-cl-9.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-1.png b/_images/vmware-esxi-preconfigured-cl-image-1.png new file mode 100644 index 00000000..828ca838 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-1.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-10.png b/_images/vmware-esxi-preconfigured-cl-image-10.png new file mode 100644 index 00000000..9648bdaa Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-10.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-11.png b/_images/vmware-esxi-preconfigured-cl-image-11.png new file mode 100644 index 00000000..c12c90fb Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-11.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-12.png b/_images/vmware-esxi-preconfigured-cl-image-12.png new file mode 100644 index 00000000..9d654081 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-12.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-13.png b/_images/vmware-esxi-preconfigured-cl-image-13.png new file mode 100644 index 00000000..bb134ba2 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-13.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-2.png b/_images/vmware-esxi-preconfigured-cl-image-2.png new file mode 100644 index 00000000..a3554e92 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-2.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-3.png b/_images/vmware-esxi-preconfigured-cl-image-3.png new file mode 100644 index 00000000..209a9492 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-3.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-4.png b/_images/vmware-esxi-preconfigured-cl-image-4.png new file mode 100644 index 00000000..30cabb0e Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-4.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-5.png b/_images/vmware-esxi-preconfigured-cl-image-5.png new file mode 100644 index 00000000..f1e7cee1 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-5.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-6.png b/_images/vmware-esxi-preconfigured-cl-image-6.png new file mode 100644 index 00000000..b0a58487 Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-6.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-7.png b/_images/vmware-esxi-preconfigured-cl-image-7.png new file mode 100644 index 00000000..4971a78e Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-7.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-8.png b/_images/vmware-esxi-preconfigured-cl-image-8.png new file mode 100644 index 00000000..fe3c517f Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-8.png differ diff --git a/_images/vmware-esxi-preconfigured-cl-image-9.png b/_images/vmware-esxi-preconfigured-cl-image-9.png new file mode 100644 index 00000000..d1af9ceb Binary files /dev/null and b/_images/vmware-esxi-preconfigured-cl-image-9.png differ diff --git a/_images/vnc-1.png b/_images/vnc-1.png new file mode 100644 index 00000000..bb496aaf Binary files /dev/null and b/_images/vnc-1.png differ diff --git a/_images/vnc-10.png b/_images/vnc-10.png new file mode 100644 index 00000000..be6751fc Binary files /dev/null and b/_images/vnc-10.png differ diff --git a/_images/vnc-2.png b/_images/vnc-2.png new file mode 100644 index 00000000..aa7561f7 Binary files /dev/null and b/_images/vnc-2.png differ diff --git a/_images/vnc-3.png b/_images/vnc-3.png new file mode 100644 index 00000000..29365e08 Binary files /dev/null and b/_images/vnc-3.png differ diff --git a/_images/vnc-4.png b/_images/vnc-4.png new file mode 100644 index 00000000..b3608289 Binary files /dev/null and b/_images/vnc-4.png differ diff --git a/_images/vnc-6.png b/_images/vnc-6.png new file mode 100644 index 00000000..5a808e34 Binary files /dev/null and b/_images/vnc-6.png differ diff --git a/_images/vnc-7.png b/_images/vnc-7.png new file mode 100644 index 00000000..a20e6c97 Binary files /dev/null and b/_images/vnc-7.png differ diff --git a/_images/vnc-8.png b/_images/vnc-8.png new file mode 100644 index 00000000..fa702cb4 Binary files /dev/null and b/_images/vnc-8.png differ diff --git a/_images/vnc-9.png b/_images/vnc-9.png new file mode 100644 index 00000000..a8cafba4 Binary files /dev/null and b/_images/vnc-9.png differ diff --git a/_images/web-server-install-1.png b/_images/web-server-install-1.png new file mode 100644 index 00000000..d1dd0e22 Binary files /dev/null and b/_images/web-server-install-1.png differ diff --git a/_images/web-server-install-2.png b/_images/web-server-install-2.png new file mode 100644 index 00000000..b0fd4d3f Binary files /dev/null and b/_images/web-server-install-2.png differ diff --git a/_images/web-server-install-3.png b/_images/web-server-install-3.png new file mode 100644 index 00000000..5fbdad01 Binary files /dev/null and b/_images/web-server-install-3.png differ diff --git a/_images/web-server-install-4.png b/_images/web-server-install-4.png new file mode 100644 index 00000000..2c553ce9 Binary files /dev/null and b/_images/web-server-install-4.png differ diff --git a/_images/web-server-install-5.png b/_images/web-server-install-5.png new file mode 100644 index 00000000..292dfbc6 Binary files /dev/null and b/_images/web-server-install-5.png differ diff --git a/_images/web-server-install-6.png b/_images/web-server-install-6.png new file mode 100644 index 00000000..0700a210 Binary files /dev/null and b/_images/web-server-install-6.png differ diff --git a/_images/web-server-install-7.png b/_images/web-server-install-7.png new file mode 100644 index 00000000..f3f9c327 Binary files /dev/null and b/_images/web-server-install-7.png differ diff --git a/_images/web-server-install-8.png b/_images/web-server-install-8.png new file mode 100644 index 00000000..3e631ec1 Binary files /dev/null and b/_images/web-server-install-8.png differ diff --git a/_images/wp-install-1.png b/_images/wp-install-1.png new file mode 100644 index 00000000..3d1239fe Binary files /dev/null and b/_images/wp-install-1.png differ diff --git a/_images/wp-install-2.png b/_images/wp-install-2.png new file mode 100644 index 00000000..6adc942a Binary files /dev/null and b/_images/wp-install-2.png differ diff --git a/_images/wp-install-3.png b/_images/wp-install-3.png new file mode 100644 index 00000000..9e713210 Binary files /dev/null and b/_images/wp-install-3.png differ diff --git a/_images/wp-install-4.png b/_images/wp-install-4.png new file mode 100644 index 00000000..124f3b8e Binary files /dev/null and b/_images/wp-install-4.png differ diff --git a/_images/wp-install-5.png b/_images/wp-install-5.png new file mode 100644 index 00000000..6651b16f Binary files /dev/null and b/_images/wp-install-5.png differ diff --git a/_images/wp-install-6.png b/_images/wp-install-6.png new file mode 100644 index 00000000..6118eebb Binary files /dev/null and b/_images/wp-install-6.png differ diff --git a/_images/wp-install-7.png b/_images/wp-install-7.png new file mode 100644 index 00000000..554a0d36 Binary files /dev/null and b/_images/wp-install-7.png differ diff --git a/_images/wp-install-8.png b/_images/wp-install-8.png new file mode 100644 index 00000000..1e477c25 Binary files /dev/null and b/_images/wp-install-8.png differ diff --git a/_sources/FAQ/faq.rst.txt b/_sources/FAQ/faq.rst.txt new file mode 100644 index 00000000..4b7be4f2 --- /dev/null +++ b/_sources/FAQ/faq.rst.txt @@ -0,0 +1,189 @@ +.. _faq: + +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/_sources/about.rst.txt b/_sources/about.rst.txt new file mode 100644 index 00000000..a17ef5f0 --- /dev/null +++ b/_sources/about.rst.txt @@ -0,0 +1,24 @@ +.. _about: + +About +##### + +Clear Linux is a little different from other distros. Here are some important +tools and concepts for managing your install. + +Training +******** + +Additional training materials are available in the `how-to-clear`_ GitHub\* +project to help you get started with |CL| tools. + +The training helps you create a customized OS that is based on |CL| and provides +complete details on the methods and tools used to create updates and how to +deploy updates to targets. + +To complete the training, you will need a clean |CL| installation and a network connection. The project includes all files needed to complete the exercises. + +* `how-to-clear`_ training on GitHub + + +.. _how-to-clear: https://github.com/clearlinux/how-to-clear diff --git a/_sources/concepts/autospec-about.rst.txt b/_sources/concepts/autospec-about.rst.txt new file mode 100644 index 00000000..ed3e03d9 --- /dev/null +++ b/_sources/concepts/autospec-about.rst.txt @@ -0,0 +1,106 @@ +.. _autospec-about: + +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 ``rpmbuild`` +requires a tarball and .spec file to start, ``autospec`` requires only a tarball +and package name to start. + +How autospec works +****************** + +``autospec`` attempts to infer the requirements of the .spec file by analyzing +the source code and :file:`Makefile` information. It will continuously run +updated builds based on new information discovered from build failures until it +has a complete and valid .spec file. Although not required, you can influence +the behavior of ``autospec`` by providing :ref:`control files `. + +The basic process is described in the following steps: + +#. The :command:`make autospec` command generates a .spec based on + analysis of code and control files, if present. + +#. ``autospec`` creates a ``build root`` with ``mock`` config. + +#. ``autospec`` attempts to build an RPM from the generated .spec. + +#. ``autospec`` detects any missed declarations in the .spec. + +#. If build errors occur, ``autospec`` will scan the build log to try and detect + the root cause. + +#. If ``autospec`` detects the root cause and knows how to continue, it will restart the build + automatically at step 1 with updated build instructions. + +#. Otherwise, ``autospec`` will stop the build for user inspection and editing of control files + to resolve the errors. The user resumes the process at step 1 after errors are resolved. + +Following these steps, ``autospec`` continues to rebuild the package, based on +new information discovered from build failures, until it has a valid .spec. If +no build errors occur, RPM packages are successfully built. + +.. _control-files: + +Control files +************* + +It is possible to influence the behavior of ``autospec`` by providing control +files. These files may be used to alter the default behavior of the configure +routine, to blacklist build dependencies, etc. Control files must be located +in the same directory as the resulting .spec. + +Table 1 shows control files used to control dependencies, for example. + +.. list-table:: **Table 1. Control files to control dependencies** + :widths: 20 80 + :header-rows: 1 + + * - Filename + - Description + * - buildreq_add + - Each line in the file provides the name of a package to add as a + build dependency to the .spec. + * - buildreq_ban + - Each line in the file is a build dependency that under no + circumstance should be automatically added to the build dependencies. + This is useful to block automatic configuration routines adding + undesired functionality, or to omit any automatically discovered + dependencies during tarball scanning. + * - pkgconfig_add + - Each line in the file is assumed to be a pkgconfig() build + dependency. Add the pkg-config names here, as ``autospec`` will + automatically transform the names into their ``pkgconfig($name)`` + style when generating the .spec. + * - pkgconfig_ban + - Each line in this file is a pkgconfig() build dependency that should + not be added automatically to the build, much the same as + `` buildreq_ban``. As with ``pkgconfig_add``, these names are + automatically transformed by ``autospec`` into their correct + ``pkgconfig($name))`` style. + * - requires_add + - Each line in the file provides the name of a package to add as a + runtime dependency to the .spec. + * - requires_ban + - Each line in the file is a runtime dependency that under no + circumstance should be automatically added to the runtime + dependencies. This is useful to block automatic configuration + routines adding undesired functionality, or to omit any automatically + discovered dependencies during tarball scanning. + +Further control of the build can be achieved through the use of the +``options.conf`` file. If this file does not exist, it is created by +``autospec`` with default values. If certain deprecated configuration +files exists ``autospec`` will use the value indicated by those files and +remove them. + +For a comprehensive list of control files, view the `autospec readme`_. + +Related topics +************** + +* :ref:`autospec` +* :ref:`mixer` + +.. _autospec readme: https://github.com/clearlinux/autospec diff --git a/_sources/concepts/bundles-about.rst.txt b/_sources/concepts/bundles-about.rst.txt new file mode 100644 index 00000000..0db3efb2 --- /dev/null +++ b/_sources/concepts/bundles-about.rst.txt @@ -0,0 +1,30 @@ +.. _bundles-about: + +Bundles +####### + +Linux-based operating systems contain the code of several hundred, if +not thousands, of open source projects. To make this manageable, +distributions use a concept called "packages" to configure and compile +the source code of these projects into binaries. + +Many distributions then split the content of these compiled packages +into so-called sub-packages, which are the granularity at which these +distributions deploy their software. With those kinds of distributions, +system administrators can then install and update sub-packages +individually or as a set, using tools such as "yum" and "apt-get." + +The |CL-ATTR| takes a slightly different approach. While we also use the +concept of packages to manage compiling source code into binaries, we do not +use the package concept to deploy software. Instead, we provide software +"bundles" that are installed and managed using :ref:`swupd`. +Each bundle contains as many or as few open source projects needed to provide a complete functionality. + +Next steps +========== + +To put this concept into practice, see the following resources: + +* :ref:`bundles` +* :ref:`bundle-commands` +* :ref:`compatible-kernels` diff --git a/_sources/concepts/mixer-about.rst.txt b/_sources/concepts/mixer-about.rst.txt new file mode 100644 index 00000000..0548ed50 --- /dev/null +++ b/_sources/concepts/mixer-about.rst.txt @@ -0,0 +1,54 @@ +.. _mixer-about: + +Mixer +##### + +|CL-ATTR| is a powerful, modular, and customizable OS. Upstream |CL| offers +many images to support different environments and use-cases. There are +hundreds of bundles that will meet most, if not all, of your OS and software +needs. + +However, if you need additional customization or content, |CL| provides the +mixer tool. Depending on your needs, the mixer tool allows you to: + +* :ref:`create-mix` to create a distinct derivative of the |CL| that + contains your custom software. + +.. _create-mix: + +Create a mix +============ + +When creating a mix, you can + +* Use any existing upstream bundles with no modification. +* Redefine what goes into existing bundles. +* Create completely new, custom bundles with your own custom packages. + +With mixer you are not required to incorporate every upstream release into +your mix. You decide which upstream versions to update your derivative to, as +illustrated in Figure 1. + +.. figure:: figures/mixer-about-1.png + :scale: 75% + :alt: Creating a custom mix. + + Figure 1: With a custom mix, you add your custom bundle and decide which + upstream versions to update your mix to, on your own release cycle. + +Creating your own mix forks away from the |CL| upstream and requires that you +act as your own OSV. There is a greater level of responsibility, requiring +more infrastructure and processes to adopt. However, with this approach, you +have a higher degree of control and customization of your custom |CL|. + +Related topics +============== + +|CL| provides flexibility in how you customize your OS. Learn more about +mixer and related topics to decide which customization approach is best for +you. + +* :ref:`mixer` +* :ref:`bundles-about` +* :ref:`swupd-about` +* :ref:`deploy-at-scale` diff --git a/_sources/concepts/swupd-about.rst.txt b/_sources/concepts/swupd-about.rst.txt new file mode 100644 index 00000000..8d6e5bb4 --- /dev/null +++ b/_sources/concepts/swupd-about.rst.txt @@ -0,0 +1,97 @@ +.. _swupd-about: + +swupd: software updater +####################### + +:command:`swupd` is an operating system software manager and update program +that operates at a file-level to enable verifiable integrity and update +efficiency. + +Visit the `swupd man page`_ for more details. + +Versioning +========== + +Using package managers to keep track of software version compatibility or compare multiple systems on many Linux distributions can be cumbersome. + +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. + +While administrators can pick and choose which `bundles`_ a system has +installed, a single |CL| version number strictly represents one combination +of all software versions that can be installed onto a system of that |CL| +version. This method of whole OS versioning offers unique advantages. +Namely, system administrators can quickly compare multiple |CL| systems that share the same version for important software and security fixes. + + +Updating +======== + +|CL| promotes regular and automated updating of software to ensure +integration of new enhancements and security fixes. Refer to :ref:`security` +documentation for more information. + +Learn how to update your system using :ref:`swupd `. + +Update efficiency +----------------- + +Because :command:`swupd` operates at the individual file-level instead of a +package-level, |CL| updates are small and fast. + +On many Linux\* distributions, updates to a particular software package +require the whole software package to be downloaded and replaced +--even for one line of code. + +In |CL|, updates are generated using the :ref:`mixer ` tool. Mixer calculates the difference between two |CL| versions and makes available +*binary deltas*, which contain only the changed portion of files. This +*binary delta technology* [1]_ means :command:`swupd` on |CL| systems only +needs to download and apply a small fraction of a package in order to +receive an update. + +The :ref:`mixer ` tool additionally computes updates files in +multiple compression formats, allowing :command:`swupd` to utilize the most +efficiently compressed format for a |CL| system to minimize the cost +to update. + +Update integrity +---------------- + +This is the basis of the :command:`swupd diagnose` subcommand, which allows a |CL| system to check for any discrepancies to system files. As necessary, +:command:`swupd repair` provides a useful way for software developers to remediate these discrepancies and return to a known filesystem state. + +Bundles +======= + +|CL-ATTR| approaches software management differently than many other +Linux-based operating systems. + +Instead of deploying granular software packages, |CL| uses the concept of +bundles with pre-associated software. Each bundle encapsulates a particular +use-case, which is enabled by composing all the required upstream open-source +projects and packages into one logical unit. + +This bundle-based approach offers some unique advantages: + +* Bundles provide a particular functionality, or stack, which + include all associated runtime dependencies. + +* Software package dependencies are resolved on the server, so file-level + conflicts do not occur on the target system after an update. + +* All combinations of bundles are able to co-exist on a |CL| system. + +For more information on bundles, visit: + +* :ref:`bundles` +* :ref:`bundles-about` +* :ref:`bundle-commands` +* :ref:`compatible-kernels` + +.. [1] The software update technology for |CL-ATTR| was first presented at the Linux Plumbers conference in 2012. + +.. _swupd man page: https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst + diff --git a/_sources/concepts/telemetry-about.rst.txt b/_sources/concepts/telemetry-about.rst.txt new file mode 100644 index 00000000..34a12d1e --- /dev/null +++ b/_sources/concepts/telemetry-about.rst.txt @@ -0,0 +1,82 @@ +.. _telemetry-about: + +Telemetrics +########### + +One of the key features of |CL-ATTR| is telemetry, which is used to +monitor system health. Telemetry enables developers to observe and proactively +address issues before end users are impacted. + +*Telemetrics* is a combination word made from: + +* *Telemetry* which is sensing and reporting data. +* *Analytics* which is using visualization and statistical inferencing to make + sense of the reported data. + +|CL| telemetry reports system-level debug/crash information using specialized probes. The +probes monitor system tasks such as :abbr:`swupd (software updater)`, kernel +oops, machine error checks, and BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to quickly focus on an issue and monitor corrective actions. + +|CL| telemetry is fully customizable and can be used during software development +for debugging purposes. You can use **libtelemetry** in your code to create custom +telemetry records. You can also use **telem-record-gen** in script files or call +it from another program. + +.. note:: + + The |CL| telemetry client is disabled by default until you decide to enable it. Telemetry is an **opt-in** solution and can be easily enabled or disabled. + +Architecture +************ + +|CL| telemetry has two fundamental components, which are shown in figure 1: + +* Client: generates and delivers records to the backend server via the network. +* Backend: captures records sent from the client and displays the cumulative + content through a specialized interface. + + .. note:: + + If you want to capture your own records for analysis, you must set up + your own backend server. + +.. figure:: ../guides/telemetrics/figures/telemetry-e2e.png + :scale: 75% + :alt: Clear Linux Telemetry Architecture. + + Figure 1: Clear Linux Telemetry Architecture. + +The telemetry client provides the front end of a complete telemetrics solution +and includes the following components: + +* **telemprobd**, a daemon that prepares the telemetry records and spools them on disk prior to delivery +* **telempostd**, a daemon that sends the records to the telemetry backend server or leaves them on disk until deleting after the record expires. + +* **probes**, that collect specific types of data from the operating system. +* **libtelemetry**, that telemetrics probes use to create telemetrics records and + send them to the telemprobd daemon for further processing. + + +The telemetry backend provides the server-side component of a complete telemetrics solution and +consists of: + +* Nginx web server. +* Two Flask apps: + + * Collector, an ingestion web app for records received from telemetrics-client probes. + * TelemetryUI, a web app that exposes several views to visualize the telemetry data + and also provides a REST API to perform queries. + +* PostgreSQL as the underlying database server. + +The default telemetry backend server reports back to the |CL| development team +and is not viewable outside the Intel firewall. If you want to collect your +own records, then you must set up your own telemetry backend server. + +Next steps +********** + +To put this concept into practice, refer to :ref:`telem-guide`. + diff --git a/_sources/disclaimers.rst.txt b/_sources/disclaimers.rst.txt new file mode 100644 index 00000000..6f2dfb6e --- /dev/null +++ b/_sources/disclaimers.rst.txt @@ -0,0 +1,12 @@ +:orphan: + +.. _disclaimers: + + +.. rubric:: Disclaimer + +.. important:: + This documentation is a work in progress and is being provided for + informative purposes only. Because it is a work in progress, there are + parts that are either missing or will be revised as code development + continues. diff --git a/_sources/documentation_license.rst.txt b/_sources/documentation_license.rst.txt new file mode 100644 index 00000000..758a7a24 --- /dev/null +++ b/_sources/documentation_license.rst.txt @@ -0,0 +1,12 @@ +:orphan: + +.. raw:: html + + Creative Commons License
This work is licensed under a Creative Commons + Attribution 4.0 International License + diff --git a/_sources/get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst.txt b/_sources/get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst.txt new file mode 100644 index 00000000..25d1ada5 --- /dev/null +++ b/_sources/get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst.txt @@ -0,0 +1,542 @@ +.. _bare-metal-install-desktop: + +Install |CL-ATTR| from the live desktop +####################################### + +This page explains how to boot the |CL-ATTR| live desktop image, from which +you can install |CL| or explore without modifying the host system. + +.. contents:: + :local: + :depth: 1 + +System requirements +******************* + +Before installing |CL|, verify that the host system supports the +installation: + +* :ref:`system-requirements` +* :ref:`compatibility-check` + +Preliminary steps +***************** + +#. Visit our `Downloads`_ page. + +#. Download the file :file:`clear--live-desktop.iso`, + also called the |CL| Desktop. + + .. note:: + + is the latest |CL| auto-numbered release. + +#. Verify and decompress the file per your OS. + + * :ref:`download-verify-decompress` + +#. Follow your OS instructions to create a bootable USB drive. + + * :ref:`bootable-usb` + +.. _install-on-target-start: + +Install from live image +*********************** + +After you download and burn the live desktop image on a USB drive, follow +these steps. + +#. Insert the USB drive into an available USB slot. + +#. Power on the system. + +#. Open the system BIOS setup menu by pressing the :kbd:`F2` key. + Your BIOS setup menu entry point may vary. + +#. In the setup menu, enable the UEFI boot and set the USB drive as the + first option in the device boot order. + +#. Save these settings, e.g. :kbd:`F10`, and exit. + +#. Reboot the target system. + +#. Select :guilabel:`Clear Linux OS` in the boot menu, shown in Figure 1. + + .. figure:: figures/bare-metal-install-desktop-01.png + :scale: 100% + :alt: Clear Linux OS in boot menu + + Figure 1: Clear Linux OS in boot menu + +.. _install-on-target-end: + +Software (optional) +=================== + +Explore |CL| bundles and other software. Double-click the +:guilabel:`Software` icon from the Activities menu, shown in Figure 2. +Ensure a network connection exists before launching the Software application. + +.. note:: + + While running the |CL| live desktop image, the Software application is + intended only for exploration. Do not attempt to install applications during + exploration. + +Launch the |CL| installer +========================= + +#. After the live desktop image boots, scroll over the vertical + :guilabel:`Activities` menu at left. + +#. Click the |CL| penguin icon to launch the installer, shown in Figure 2. + + .. figure:: figures/bare-metal-install-desktop-02.png + :scale: 100% + :alt: Install Clear Linux OS icon + + Figure 2: |CL| installer icon + +#. After the installer is launched, it will appear as shown in Figure 3. + + .. figure:: figures/bare-metal-install-desktop-03.png + :scale: 100% + :alt: |CL| Desktop Installer + + Figure 3: |CL| OS Desktop Installer + +#. In :guilabel:`Select Language`, select a language from the options, or + type your preferred language in the search bar. + +#. Select :guilabel:`Next`. + +Checking prerequisites +====================== + +The installer automatically launches :guilabel:`Checking Prerequisites`, +which checks your target system for compatibility and network connectivity. + +After the installer shows `Prerequisites passed`, select :guilabel:`Next` to +proceed with installation. + +.. figure:: figures/bare-metal-install-desktop-04.png + :scale: 100% + :alt: Checking Prerequisites + + Figure 4: Checking Prerequisites + +Network Proxy (optional) +------------------------ + +#. Configure :guilabel:`Network Proxy` settings. + +#. In the top right menu bar, select the :guilabel:`Power button`. + +#. Select :guilabel:`Wired Connected` and then :guilabel:`Wired Settings`. + + #. In :guilabel:`Network Proxy`, select the :guilabel:`Gear` icon to view + options. + + #. Select an option from `Automatic`, `Manual` or `Disabled`. + + #. Close :guilabel:`Network Proxy`. + +#. Close :guilabel:`Settings`. + +.. _incl-bare-metal-beta-start: + +Minimum installation requirements +********************************* + +To fulfill minimum installation requirements, complete the +`Required options`_. We also recommend completing `Advanced options`_. + +.. note:: + + * The :kbd:`Install` button is only highlighted **after** you complete + `Required options`_. + + * Check marks indicate a selection has been made. + + * An Internet connection is required. You may want to launch a browser + prior to installation to verify your Internet connection. + +|CL| Desktop Installer +********************** + +The |CL| Desktop Installer Main Menu appears as shown in Figure 5. To meet +the minimum requirements, enter values in all submenus for the +:guilabel:`Required options`. After you complete them, your selections appear +below submenus and a check mark appears at right. + +.. figure:: figures/bare-metal-install-desktop-05.png + :scale: 100% + :alt: Clear Linux OS Desktop Installer - Main Menu + + Figure 5: Clear Linux OS Desktop Installer - Main Menu + +Navigation +********** + +* Use the :kbd:`mouse` to navigate or select options. + +* Use :kbd:`Tab` key to navigate between :guilabel:`Required options` + and :guilabel:`Advanced options` + +* Use :kbd:`Up` or :kbd:`Down` arrow keys to navigate the submenus. + +* Select :kbd:`Confirm`, or :kbd:`Cancel` in submenus. + +Required options +**************** + +Select Time Zone +================ + +#. From the Main Menu, select :guilabel:`Select Time Zone`. `UTC` is selected + by default. + +#. In :guilabel:`Select Time Zone`, navigate to the desired time zone. + Or start typing the region and then the city. + (.e.g., :file:`America/Los_Angeles`). + +#. Select :guilabel:`Confirm`. + + .. figure:: figures/bare-metal-install-desktop-06.png + :scale: 100% + :alt: Select System Timezone + + Figure 6: Select System Time Zone + +Select Keyboard +=============== + +#. From the Main Menu, select :guilabel:`Select Keyboard`. + +#. Navigate to your desired keyboard layout. We select "us" for the + United States. + +#. Select :guilabel:`Confirm`. + + .. figure:: figures/bare-metal-install-desktop-07.png + :scale: 100% + :alt: Select Keyboard menu + + Figure 7: Select Keyboard menu + +Select Installation Media +========================= + +#. From the Main Menu, select :guilabel:`Select Installation Media`. + +#. Choose an installation method: `Safe Installation`_ or + `Destructive Installation`_. + + .. figure:: figures/bare-metal-install-desktop-08.png + :scale: 100% + :alt: Select Installation Media + + Figure 8: Select Installation Media + +Safe Installation +----------------- + +Use this method to safely install |CL| on media with available space, or +alongside existing partitions, and accept the `Default partition schema`_. +If enough free space exists, safe installation is allowed. + +.. note:: + + |CL| allows installation alongside another OS. Typically, when you boot + your system, you can press an `F key` to view and select a bootable + device or partition during the BIOS POST stage. Some BIOSes present the + |CL| partition, and you can select and boot it. However, other + BIOSes may only show the primary partition, in which case you will not be + able boot |CL|. Be aware of this possible limitation. + + +Destructive Installation +------------------------ + +Use this method to destroy the contents of the target device, install |CL| +on it, and accept the `Default partition schema`_. + +Disk encryption +=============== + +For greater security, disk encryption is supported using LUKS. Encryption is +optional. + +#. To encrypt the root partition, select :guilabel:`Enable Encryption`, + as shown in Figure 9. + + .. figure:: figures/bare-metal-install-desktop-09.png + :scale: 100% + :alt: Enable Encryption + + Figure 9: Enable Encryption + +#. When :guilabel:`Encryption Passphrase` appears, enter a passphrase. + + .. figure:: figures/bare-metal-install-desktop-10.png + :scale: 100% + :alt: Encryption Passphrase + + Figure 10: Encryption Passphrase + + .. note:: + + Minimum length is 8 characters. Maximum length is 94 characters. + +#. Enter the same passphrase in the second field. + +#. Select :guilabel:`Confirm` in the dialogue box. + + .. note:: + + :guilabel:`Confirm` is only highlighted if passphrases match. + +#. Select :guilabel:`Confirm` in submenu. + +Manage User +=========== + +#. In Required Options, select :guilabel:`Manage User`. + +#. In :guilabel:`User Name`, enter a user name. + + .. figure:: figures/bare-metal-install-desktop-11.png + :scale: 100% + :alt: Manage User + + Figure 11: Manage User + +#. In :guilabel:`Login`, create a login name. It must start with a letter + and can use numbers, hyphens, and underscores. Maximum length is 31 + characters. + +#. In :guilabel:`Password`, enter a password. Minimum length is + 8 characters. Maximum length is 255 characters. + +#. In :guilabel:`Confirm`, enter the same password. + + .. note:: + + :guilabel:`Administrator` rights are selected by default. + For security purposes, the default user must be assigned as an + Administrator. + +#. Select :kbd:`Confirm`. + + .. note:: + + Select :guilabel:`Cancel` to return to the Main Menu. + +Modify User +----------- + +#. In Manager User, select :guilabel:`Manage User`. + +#. Modify user details as desired. + +#. Select :guilabel:`Confirm` to save the changes you made. + + .. note:: + + Optional: Select :guilabel:`Cancel` to return to the Main Menu to + revert changes. + +Optional: Skip to `Finish installation`_. + +Telemetry +========= + +Choose whether to participate in `telemetry`. :ref:`telem-guide` is a |CL| +feature that reports failures and crashes to the |CL| development +team for improvements. For more information, see :ref:`telemetry-about`. + +#. From :guilabel:`Required Options`, select :guilabel:`Telemetry`. + +#. Select :kbd:`Yes`. + + .. figure:: figures/bare-metal-install-desktop-12.png + :scale: 100% + :alt: Enable Telemetry + + Figure 12: Enable Telemetry + +#. If you don't wish to participate, select :kbd:`No`. + +Advanced options +**************** + +After you complete the `Required options`_, we recommend completing +:guilabel:`Advanced options`--though they're not required. Doing so +customizes your development environment, so you're ready to go immediately +after reboot. + +.. note:: + + You can always add more bundles later with :ref:`swupd-guide`. + +Bundle Selection +================ + +#. On the Advanced menu, select :guilabel:`Bundle Selection` + +#. Select your desired bundles. + + .. figure:: figures/bare-metal-install-desktop-13.png + :scale: 100% + :alt: Bundle Selection + + Figure 13: Bundle Selection + +#. Select :kbd:`Confirm`. + +#. View the bundles that you selected. + + .. figure:: figures/bare-metal-install-desktop-14.png + :scale: 100% + :alt: Bundle Selections - Advanced Options + + Figure 14: Bundle Selections - Advanced Options + +Optional: Skip to `Finish installation`_. + +Assign Hostname +=============== + +#. In Advanced Options, select :guilabel:`Assign Hostname`. + +#. In :guilabel:`Hostname`, enter the hostname only (excluding the domain). + + .. figure:: figures/bare-metal-install-desktop-15.png + :scale: 100% + :alt: Assign Hostname + + Figure 15: Assign Hostname + + .. note:: + + Hostname does not allow empty spaces. Hostname must start with an + alphanumeric character but may also contain hyphens. Maximum length of + 63 characters. + +#. Select :kbd:`Confirm`. + +Optional: Skip to `Finish installation`_. + +Kernel Configuration +==================== + +#. In :guilabel:`Kernel Configuration`, navigate to select your desired + kernel. :guilabel:`Native` is selected by default. + + .. figure:: figures/bare-metal-install-desktop-16.png + :scale: 100% + :alt: Kernel Configuration + + Figure 16: Kernel Configuration + +#. To add arguments, enter the argument in :guilabel:`Add Extra Arguments`. + +#. To remove an argument, enter the argument in :guilabel:`Remove Arguments`. + +#. Select :kbd:`Confirm`. + +Software Updater Configuration +============================== + +#. In Advanced Options, select :guilabel:`Software Updater Configuration`. + +#. In :guilabel:`Mirror URL`, follow the instructions if you wish to + specify a different installation source. + +#. :guilabel:`Enable Auto Updates` is selected by default. If you **do not** + wish to enable automatic software updates, uncheck the box. + + .. figure:: figures/bare-metal-install-desktop-17.png + :scale: 100% + :alt: Software Updater Configuration + + Figure 17: Software Updater Configuration + +#. Select :kbd:`Confirm`. + +Finish installation +******************* + +#. When you are satisfied with your installation configuration, select + :guilabel:`Install`. + + .. figure:: figures/bare-metal-install-desktop-18.png + :scale: 100% + :alt: Assign Hostname + + Figure 18: Finish installation + + .. note: + + All check marks must appear in :guilabel:`Required Options` for the + :guilabel:`Install` button to be enabled. + +#. If you do not enter a selection for all :guilabel:`Required Options`, + the :guilabel:`Install` button remains disabled, as shown + in Figure 19. Return to `Required Options`_ and make selections. + + .. figure:: figures/bare-metal-install-desktop-19.png + :scale: 100% + :alt: Required Options - Incomplete + + Figure 19: Required Options - Incomplete + +#. After installation is complete, select :guilabel:`Exit`. + +#. Shut down the target system. + +#. Remove the USB or any installation media. + +#. Power on your system. + + .. note:: + + Allow time for the graphical login to appear. A login prompt shows the administrative user that you created. + +#. Log in as the administrative user. + +Congratulations. You successfully installed |CL|. + +Default partition schema +======================== + +Create partitions per requirements in Table 1. + +.. list-table:: **Table 1. Default partition schema** + :widths: 25, 25, 25, 25 + :header-rows: 1 + + * - FileSystem + - Label + - Mount Point + - Default size + + * - **VFAT(FAT32)** + - boot + - /boot + - 150MB + + * - **linux-swap** + - swap + - + - 256MB + + * - **ext[234] or XFS** + - root + - / + - *Size depends upon use case/desired bundles.* + +.. _Downloads: https://clearlinux.org/downloads + + diff --git a/_sources/get-started/bare-metal-install-server/bare-metal-install-server.rst.txt b/_sources/get-started/bare-metal-install-server/bare-metal-install-server.rst.txt new file mode 100644 index 00000000..7e0225de --- /dev/null +++ b/_sources/get-started/bare-metal-install-server/bare-metal-install-server.rst.txt @@ -0,0 +1,869 @@ +.. _bare-metal-install-server: + +Install |CL-ATTR| on bare metal with live server +################################################ + +This page explains how to install |CL-ATTR| on bare metal from a bootable USB +drive using a live server image. + +.. contents:: + :local: + :depth: 1 + +System requirements +******************* + +Before installing |CL|, verify that the host system supports the +installation: + +* :ref:`system-requirements` +* :ref:`compatibility-check` + +Download the latest |CL| live server image +****************************************** + +Get the latest |CL| installer image from the `Downloads`_ page. Look for the +:file:`clear-[version number]-live-server.iso` file. + +#. Verify and decompress the file per your OS. + + * :ref:`download-verify-decompress` + +#. Follow your OS instructions to create a bootable USB drive. + + * :ref:`bootable-usb` + +Install |CL| on your target system +********************************** + +Ensure that your system is configured to boot UEFI. The installation method +described below requires a wired Internet connection with DHCP. + +.. note:: + + Alternatively, you can install |CL| over a wireless connection by first + using `nmtui`. Follow the `nmtui` instructions shown in Figure 2. + +Follow these steps to install |CL| on the target system: + +#. Insert the USB drive into an available USB slot. + +#. Power on the system. + +#. Open the system BIOS setup menu by pressing the :kbd:`F2` key. + Your BIOS setup menu entry point may vary. + + .. note:: + |CL| supports UEFI boot. Some hardware may list UEFI and non-UEFI USB + boot entries. In this case, you should select the `UEFI` boot + option. + +#. In the setup menu, enable the UEFI boot and set the USB drive as the first + option in the device boot order. + +#. Save these settings and exit. + +#. Reboot the target system. + +#. This action launches the |CL| installer boot menu, shown in figure 1. + + .. figure:: figures/bare-metal-install-server-01.png + :scale: 100% + :alt: Clear Linux OS Installer boot menu + + Figure 1: Clear Linux OS Installer boot menu + +#. With :guilabel:`Clear Linux OS` highlighted, select :kbd:`Enter`. + +Launch the |CL| Installer +************************* + +#. At the :guilabel:`login` prompt, enter :command:`root`. + +#. Follow the onscreen instructions, shown in Figure 2, and + enter a temporary password. + + .. figure:: figures/bare-metal-install-server-02.png + :scale: 100% + :alt: root login + + Figure 2: root login + +#. At the :guilabel:`root` prompt, enter :command:`clr-installer` and + press :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-03.png + :scale: 100% + :alt: clr-installer command + + Figure 3: clr-installer command + +Minimum installation requirements +********************************* + +To fulfill minimum installation requirements, complete the +`Required options`_. While not required, we encourage you to apply the +`Recommended options`_. `Advanced options`_ are optional. + +.. note:: + + * The :kbd:`Install` button is **only highlighted after** you complete + `Required options`_. + +Main Menu +********* +The |CL| Installer Main Menu appears as shown in Figure 4. + +.. figure:: figures/bare-metal-install-server-04.png + :scale: 100% + :alt: Clear Linux OS Installer + + Figure 4: Clear Linux OS Installer + +The |CL| Installer Main Menu has two tabs: :guilabel:`[R] Required options` +and :guilabel:`[A] Advanced options`. Navigate between tabs using the arrow +these shortcut keys: + +* :kbd:`Shift+A` for :guilabel:`[A] Advanced options` +* :kbd:`Shift+R` for :guilabel:`[R] Required options` + +To meet the minimum requirements, enter your choices in the +:guilabel:`Required options`. After confirmation, your selections appear +beside the :guilabel:`>>` chevron, below the menu options. + +Navigation +********** + +* Select :kbd:`Tab` or :kbd:`Up/Down` arrows to highlight your choice. + +* Select :kbd:`Enter` or :kbd:`Spacebar` to confirm your choice. + +* Select :kbd:`Cancel` or :kbd:`Esc` to cancel your choice. + +Required options +**************** + +Choose Timezone +=============== + +#. From the Main Menu, navigate to :guilabel:`Choose Timezone`. + `UTC` is the default. + +#. Select :kbd:`Enter`. + +#. In :guilabel:`Select System Timezone`, use :kbd:`Up/Down` arrows + navigate to the desired timezone. + +.. todo: User need only select Enter; can only select Confirm with mouse. + +#. Press :kbd:`Enter` to confirm. + + .. figure:: figures/bare-metal-install-server-05.png + :scale: 100% + :alt: Select System Timezone + + Figure 5: Select System Timezone + +Choose Language +=============== + +#. From the Main Menu, navigate to :guilabel:`Choose Language`. + +#. Select :kbd:`Enter`. + +#. In :guilabel:`Select System Language`, navigate to your desired language. + +#. Press :kbd:`Enter` to confirm. + + .. figure:: figures/bare-metal-install-server-06.png + :scale: 100% + :alt: Select System Language + + Figure 6: Select System Language + +Configure the Keyboard +====================== + +#. From the Main Menu, select :guilabel:`Configure the Keyboard`. + +#. Select :kbd:`Enter`. + +#. In :guilabel:`Select Keyboard`, navigate to the desired option. + +#. Select :kbd:`Enter` to :kbd:`Confirm`. + +#. Optional: In :guilabel:`Test keyboard`, type text to assure + that the keys map to your keyboard. + + .. figure:: figures/bare-metal-install-server-07.png + :scale: 100% + :alt: Select Keyboard menu + + Figure 7: Select Keyboard menu + +Configure Installation Media +============================ + +#. From the Main Menu, select :guilabel:`Configure Installation Media`. + +#. Choose an installation method: + * `Safe Installation`_ + * `Destructive Installation`_ + * `Advanced Configuration`_ + + + .. figure:: figures/bare-metal-install-server-08.png + :scale: 100% + :alt: Select Installation Media + + Figure 8: Select Installation Media + +#. Select :guilabel:`Rescan Media` to show available installation targets. + +.. todo: Revise below section to match the dev-gui-00 + +Safe Installation +----------------- + +Use this method to safely install |CL| on media with available space, or +alongside existing partitions, and accept the `Default partition schema`_. +If enough free space exists, safe installation is allowed. See also +`Troubleshooting`_ below. + +Destructive Installation +------------------------ + +Use this method to destroy the contents of the target device, install |CL| +on it, and accept the `Default partition schema`_. + +.. note:: + + From the :guilabel:`Select Installation Media` menu, select + :guilabel:`Enable Encryption` to encrypt the root filesystem for either + option above. See also `Disk encryption`_ for more information. + +Advanced Configuration +---------------------- + +Use this method to manually configure partitions. These must meet +`Default partition schema`_. You may also choose `Disk encryption`_ during +configuration of each partition. + +.. note:: + + `Advanced Configuration` is available in the installer versions 1.2.0 and + above. + +#. From :guilabel:`Select Installation Media`, shown in Figure 8 above, + select :guilabel:`Advanced Configuration`. + +#. In :guilabel:`Advanced Configuration`, navigate to :file:`/dev/sda` + and then press :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-09.png + :scale: 100% + :alt: Advanced configuration menu + + Figure 9: Advanced configuration menu + +#. Choose a partition method: + + * :guilabel:`Auto Partition` Select this option to accept the + `Default partition schema`_. + + #. Navigate to and press :guilabel:`Confirm`. + + #. Continue with installation configuration. Jump to `Telemetry`_. + + * `Manual Partition`_ Continue below. + +Manual Partition +---------------- + +We provide a simple example below. + +#. Navigate to the unallocated media (e.g.,`/dev/sda`) until highlighted, as + shown in Figure 9. + +#. Press :guilabel:`Enter` to edit the partition. + +#. The :guilabel:`Partition Setup` menu appears, shown in Figure 10. + + .. note:: + + After adding the first partition, select :guilabel:`Free Space` to add another partition. + +root partition +-------------- + +#. We configure the `root` partition as shown in Figure 10. + Configuration of the `root` partition varies. + + .. figure:: figures/bare-metal-install-server-10.png + :scale: 100% + :alt: root partition + + Figure 10: root partition + +#. Navigate to :guilabel:`Add` and press :guilabel:`Enter`. + +boot partition +-------------- + +#. We configure the `boot` partition as shown in Figure 11. + + .. figure:: figures/bare-metal-install-server-11.png + :scale: 100% + :alt: boot partition + + Figure 11: boot partition + +#. Navigate to :guilabel:`Add` and press :guilabel:`Enter`. + +swap partition +-------------- + +#. In the :guilabel:`File System` pulldown menu, select `swap`, and + enter a label. We enter the minimum required size (e.g., 256M). + + .. figure:: figures/bare-metal-install-server-12.png + :scale: 100% + :alt: swap partition + + Figure 12: swap partition + +#. Navigate to :guilabel:`Add` and press :guilabel:`Enter`. + +#. Next, navigate to :guilabel:`Confirm` and press :guilabel:`Enter`, + shown in Figure 13. + + Manual partitioning is complete. + + .. figure:: figures/bare-metal-install-server-13.png + :scale: 100% + :alt: Final configuration of disk partitions + + Figure 13: Final configuration of disk partitions + +#. You may skip to the `Telemetry`_ section below. + +Disk encryption +=============== + +For greater security, disk encryption is supported using LUKS for the +any partition except `/boot` on |CL|. To encrypt the root partition, see the +example below. Encryption is optional. + +Encryption Passphrase +--------------------- + +|CL| uses a single passphrase for encrypted partitions. Additional keys may +be configured post-installation using the ``cryptsetup`` tool. + +#. Optional: Select :guilabel:`[X] Encrypt` to encrypt the root partition, + as shown in Figure 14. + + .. figure:: figures/bare-metal-install-server-14.png + :scale: 100% + :alt: Encrypt partition + + Figure 14: Encrypt partition + +#. The :guilabel:`Encryption Passphrase` dialogue appears. + + .. note:: + + Minimum length is 8 characters. Maximum length is 94 characters. + + .. figure:: figures/bare-metal-install-server-15.png + :scale: 100% + :alt: Encryption Passphrase + + Figure 15: Encryption Passphrase + +#. Enter the same passphrase in the first and second field. + +#. Navigate to :guilabel:`Confirm` and press :kbd:`Enter`. + + .. note:: + + :guilabel:`Confirm` is only highlighted if passphrases match. + +Telemetry +========= + +:ref:`telem-guide` is a |CL| feature that reports failures and crashes to +the |CL| development team for improvements. For more detailed information, +visit our :ref:`telemetry-about` page. + +Select your desired option on whether to participate in `telemetry`. + +#. In the Main Menu, navigate to :guilabel:`Telemetry` and select + :kbd:`Enter`. + +#. Select :kbd:`Tab` to highlight your choice. + +#. Select :kbd:`Enter` to confirm. + + .. figure:: figures/bare-metal-install-server-16.png + :scale: 100% + :alt: Enable Telemetry + + Figure 16: Enable Telemetry + +Recommended options +******************* + +After you complete the `Required options`_, we highly recommend completing +these selected `Advanced options`_ at minimum: + +* `Manage User`_ Assign a new user with administrative rights +* `Assign Hostname`_ Simplify your development environment + +Skip to finish installation +=========================== + +After selecting values for all :guilabel:`Required options`, you may skip +to `Finish installation`_. + +Otherwise, continue below. In the Main Menu, select +:guilabel:`Advanced options` for additional configuration. + +Advanced options +**************** + +Configure Network Interfaces +============================ + +By default, |CL| is configured to automatically detect the host network +interface using DHCP. However, if you want to use a static IP address or if +you do not have a DHCP server on your network, follow these instructions to +manually configure the network interface. Otherwise, default network +interface settings are automatically applied. + +.. note:: + + If DHCP is available, no user selection may be required. + +#. Navigate to :guilabel:`Configure Network Interfaces` and + select :kbd:`Enter`. + +#. Navigate to the network :guilabel:`interface` you wish to change. + +#. When the desired :guilabel:`interface` is highlighted, select + :guilabel:`Enter` to edit. + + .. note:: Multiple network interfaces may appear. + + .. figure:: figures/bare-metal-install-server-17.png + :scale: 100% + :alt: Configure Network Interfaces + + Figure 17: Configure Network Interfaces + +#. Notice :guilabel:`Automatic / dhcp` is selected by default (at bottom). + + Optional: Navigate to the checkbox :guilabel:`Automatic / dhcp` and select + :kbd:`Spacebar` to deselect. + + .. figure:: figures/bare-metal-install-server-18.png + :scale: 100% + :alt: Network interface configuration + + Figure 18: Network interface configuration + +#. Navigate to the appropriate fields and assign the desired + network configuration. + +#. To save settings, navigate to :guilabel:`Confirm` and select + :kbd:`Enter`. + + .. note:: + + To revert to previous settings, navigate to the :guilabel:`Cancel` + and select :kbd:`Enter`. + +#. Upon confirming network configuration, the :guilabel:`Testing Networking` + dialogue appears. Assure the result shows success. If a failure occurs, + your changes will not be saved. + +#. Upon confirmation, you are returned to :guilabel:`Network interface` + settings. + +#. Navigate to and select :guilabel:`Main Menu`. + +Optional: Skip to `Finish installation`_. + +Proxy +===== + +|CL| automatically attempts to detect proxy settings, as described in +:ref:`autoproxy`. If you need to manually assign proxy settings, follow this +instruction. + +#. From the Advanced options menu, navigate to :guilabel:`Proxy`, and + select :kbd:`Enter`. + +#. Navigate to the field :guilabel:`HTTPS Proxy`. + + .. figure:: figures/bare-metal-install-server-19.png + :scale: 100% + :alt: Configure the network proxy + + Figure 19: Configure the network proxy + +#. Enter the desired proxy address and port using conventional syntax, + such as: \http://address:port. + +#. Navigate to :guilabel:`Confirm` and select :kbd:`Enter`. + +#. To revert to previous settings, navigate to :guilabel:`Cancel` + and select :guilabel:`Cancel`. + +Optional: Skip to `Finish installation`_. + +Test Network Settings +===================== + +To manually assure network connectivity before installing |CL|, +select :guilabel:`Test Network Settings` and select :guilabel:`Enter`. + +A progress bar appears as shown in Figure 20. + +.. figure:: figures/bare-metal-install-server-20.png + :scale: 100% + :alt: Testing Networking dialogue + + Figure 20: Testing Networking dialogue + +.. note:: + + Any changes made to network settings are automatically tested + during configuration. + +Optional: Skip to `Finish installation`_. + +Bundle Selection +================ + +#. On the Advanced menu, select :guilabel:`Bundle Selection` + +#. Navigate to the desired bundle using :kbd:`Tab` or :kbd:`Up/Down` arrows. + +#. Select :kbd:`Spacebar` to select the checkbox for each desired bundle. + + .. figure:: figures/bare-metal-install-server-21.png + :scale: 100% + :alt: Bundle Selection + + Figure 21: Bundle Selection + +#. Optional: To start developing with |CL|, we recommend + adding :file:`os-clr-on-clr`. + +#. Navigate to and select :kbd:`Confirm`. + + You are returned to the :guilabel:`Advanced options` menu. + +Optional: Skip to `Finish installation`_. + +Manage User +=========== + +Add New User +------------ + +#. In Advanced Options, select :guilabel:`Manage User`. + +#. Select :guilabel:`Add New User` as shown in Figure 22. + + .. figure:: figures/bare-metal-install-server-22.png + :scale: 100% + :alt: Add New User, User Name + + Figure 22: Add New User + +#. Optional: Enter a :guilabel:`User Name`. + + .. note: + + The User Name must be alphanumeric and can include spaces, commas, or hyphens. Maximum length is 64 characters. + + .. figure:: figures/bare-metal-install-server-23.png + :scale: 100% + :alt: User Name + + Figure 23: User Name + +#. Enter a :guilabel:`Login`. + + .. note:: + + The User Login must be alphanumeric and can include hyphens and underscores. Maximum length is 31 characters. + +#. Enter a :guilabel:`Password`. + + .. note: + + Minimum length is 8 characters. Maximum length is 255 characters. + +#. In :guilabel:`Confirm`, enter the same password. + +#. Optional: Navigate to the :guilabel:`Administrative` checkbox and select + :kbd:`Spacebar` to assign administrative rights to the user. + + .. note:: + + Selecting this option enables sudo privileges for the user. + +#. Select :kbd:`Confirm`. + + .. note:: + + If desired, select :guilabel:`Reset` to reset the form. + +#. In :guilabel:`Manage User`, navigate to :guilabel:`Confirm`. + +#. With :guilabel:`Confirm` highlighted, select :kbd:`Enter`. + +Modify / Delete User +-------------------- + +#. In :guilabel:`Manage User`, navigate to the user you wish + to modify until highlighted, as shown in Figure 24. + +#. Select :kbd:`Enter` to modify the user. + + .. figure:: figures/bare-metal-install-server-24.png + :scale: 100% + :alt: Modify User + + Figure 24: Modify User + +#. Modify user details as desired. + +#. Navigate to :kbd:`Confirm` until highlighted. + + .. note:: + + Optional: Select :guilabel:`Reset` to rest the form. + +#. Select :guilabel:`Confirm` to save the changes you made. + +#. Optional: In :guilabel:`Modify User`, to delete the user, navigate to + the :guilabel:`Delete` button and select :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-25.png + :scale: 100% + :alt: Delete User + + Figure 25: Delete User + +You are returned to :guilabel:`Manage User`. + +#. Navigate to :kbd:`Confirm` until highlighted. + +#. Select :guilabel:`Enter` to complete :guilabel:`Manage User` options. + +Optional: Skip to `Finish installation`_. + +Kernel Command Line +=================== + +For advanced users, |CL| provides the ability to add or remove kernel +arguments. If you want to append a new argument, enter the argument here. +This argument will be used every time you install or update a +new kernel. + +#. In Advanced Options, select :guilabel:`Tab` to highlight + :guilabel:`Kernel Command Line`. + +#. Select :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-26.png + :scale: 100% + :alt: kernel command line + + Figure 26: kernel command line + +#. Choose from the following options. + + * To add arguments, enter the argument in :guilabel:`Add Extra Arguments`. + + * To remove an argument, enter the argument in + :guilabel:`Remove Arguments`. + +#. Select :kbd:`Confirm`. + +Optional: Skip to `Finish installation`_. + +Kernel Selection +================ + +#. Select a kernel option. By default, the latest kernel release is + selected. Native kernel is shown in Figure 27. + +#. To select a different kernel, navigate to it using :guilabel:`Tab`. + + .. figure:: figures/bare-metal-install-server-27.png + :scale: 100% + :alt: Kernel selection + + Figure 27: Kernel selection + +#. Select :kbd:`Spacebar` to select the desired option. + +#. Navigate to :kbd:`Confirm` and select :kbd:`Enter`. + +Optional: Skip to `Finish installation`_. + +Swupd Mirror +============ + +If you have your own custom mirror of |CL|, you can add its URL. + +#. In Advanced Options, select :guilabel:`Swupd Mirror`. + +#. To add a local swupd mirror, enter a valid URL in :guilabel:`Mirror URL:` + +#. Select :kbd:`Confirm`. + + .. figure:: figures/bare-metal-install-server-28.png + :scale: 100% + :alt: Swupd Mirror + + Figure 28: Swupd Mirror + +Optional: Skip to `Finish installation`_. + +Assign Hostname +=============== + +#. In Advanced Options, select :guilabel:`Assign Hostname`. + +#. In :guilabel:`Hostname`, enter the hostname only (excluding the domain). + + .. note:: + + Hostname does not allow empty spaces. Hostname must start with an + alphanumeric character but may also contain hyphens. Maximum length of + 63 characters. + + .. figure:: figures/bare-metal-install-server-29.png + :scale: 100% + :alt: Assign Hostname + + Figure 29: Assign Hostname + +#. Navigate to :kbd:`Confirm` until highlighted. + +#. Select :kbd:`Confirm`. + +Optional: Skip to `Finish installation`_. + +Automatic OS Updates +==================== + +Automatical OS updates are enabled by default. In the rare case that you +need to disable automatic software updates, follow the onscreen instructions, +shown in Figure 30. + +#. In Advanced Options, select :guilabel:`Automatic OS Updates`. + +#. Select the desired option. + + .. figure:: figures/bare-metal-install-server-30.png + :scale: 100% + :alt: Automatic OS Updates + + Figure 30: Automatic OS Updates + +You are returned to the :guilabel:`Main Menu`. + +Save Configuration Settings +=========================== + +#. In Advanced Options, select :guilabel:`Save Configuration Settings`. + +#. A dialogue box shows the installation configuration was saved to + :file:`clr-installer.yaml` + + .. figure:: figures/bare-metal-install-server-31.png + :scale: 100% + :alt: Automatic OS Updates + + Figure 31: Automatic OS Updates + +#. Use the :file:`clr-installer.yaml` file to install |CL|, with the same + configuration, on multiple targets. + +Finish installation +******************* + +#. When you are satisfied with your installation configuration, navigate to + :guilabel:`Install` and select :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-32.png + :scale: 100% + :alt: Select Install + + Figure 32: Select Install + +#. Select :guilabel:`reboot`. + + .. note:: + + If you do not assign an administrative user, upon rebooting, + enter `root` and set the root password immediately. + +#. When the system reboots, remove any installation media present. + +Default partition schema +======================== + +Create partitions per requirements in Table 1. + +.. list-table:: **Table 1. Default partition schema** + :widths: 25, 25, 25, 25 + :header-rows: 1 + + * - FileSystem + - Label + - Mount Point + - Default size + + * - ``VFAT(FAT32)`` + - boot + - /boot + - 150MB + + * - ``linux-swap`` + - swap + - + - 256MB + + * - ``ext[234] or XFS`` + - root + - / + - *Size depends upon use case/desired bundles.* + +Troubleshooting +*************** + +For Configure Installation Media +================================ + +If a warning message appears that no media or space is available after +entering :guilabel:`Configure Installation Media`: + +- Verify that target media has enough free space. + +- Confirm the USB is properly connected to and mounted on target media. + +- Review the size of existing partitions on the target media: + + - Linux\* OS: :command:`lsblk -a` + - Windows\* OS: :command:`diskpart`, then :command:`list disk` + - macOS\* platform: :command:`diskutil list` + +.. _Downloads: https://clearlinux.org/downloads diff --git a/_sources/get-started/bootable-usb/bootable-usb.rst.txt b/_sources/get-started/bootable-usb/bootable-usb.rst.txt new file mode 100644 index 00000000..995cf3f5 --- /dev/null +++ b/_sources/get-started/bootable-usb/bootable-usb.rst.txt @@ -0,0 +1,208 @@ +.. _bootable-usb: + +Create a bootable USB drive +########################### + +Follow the instructions applicable to your system to create a bootable |CL-ATTR| +USB drive: + +* :ref:`bootable-usb-linux` +* :ref:`bootable-usb-mac` +* :ref:`bootable-usb-windows` + +Prerequisites +************* + +* Use an **8GB** or larger USB drive. +* Download the |CL| live boot image or interactive installer image from the + `Downloads`_ page. + +.. _bootable-usb-linux: + +Create a bootable USB drive on Linux\* +************************************** + +Make sure you have have completed all `Prerequisites`_. + +Before burning the image onto your USB drive, +:ref:`verify and decompress your image `. + +Burn the |CL| image onto a USB drive +==================================== + +.. caution:: + + |CAUTION-BACKUP-USB| + +#. Open a terminal emulator and get root privilege. + + .. code-block:: bash + + sudo -s + +#. Go to the directory with the decompressed image. + +#. Plug in the USB drive. + +#. Identify the USB drive using the :command:`lsblk` command. This shows all + drives attached to the system, including the primary hard disk. In the + example output below, there are 4 drives + (`/dev/sda`, `/dev/sdb`, `/dev/sdc`, and `/dev/sdd`) attached, where + `/dev/sda` is primary drive. The remaining are three USB drives. The output + also shows the mounted partitions (under the `MOUNTPOINT` column) for each + drive. + + .. code-block:: bash + + lsblk + + Example output: + + .. code-block:: console + + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sdd 8:48 1 15G 0 disk + ├─sdd2 8:50 1 5G 0 part /run/media/user1/960c184f-3bb7-42b7-bcaf-0c1282 + ├─sdd3 8:51 1 8G 0 part /run/media/user1/704f3382-b26d-4f34-af1b-cb9aab + └─sdd1 8:49 1 2G 0 part + sdb 8:16 1 14.8G 0 disk + └─sdb1 8:17 1 14.8G 0 part /run/media/user1/PATRIOT_USB + sdc 8:32 1 7.3G 0 disk + └─sdc1 8:33 1 7.3G 0 part /run/media/user1/LINUX MINT + sda 8:0 0 335.4G 0 disk + ├─sda4 8:4 0 28G 0 part + ├─sda2 8:2 0 3.7G 0 part [SWAP] + ├─sda7 8:7 0 6G 0 part /home + ├─sda5 8:5 0 1G 0 part /boot + ├─sda3 8:3 0 954M 0 part /boot/efi + ├─sda1 8:1 0 28G 0 part + ├─sda8 8:8 0 30G 0 part / + └─sda6 8:6 0 7.9G 0 part [SWAP] + +#. You must unmount a USB drive before burning an image onto it. Note that + some Linux distros automatically mount a USB drive when it is plugged in. + Unmount a USB drive with the :command:`umount` command followed by the device + identifier/partition. For example: + + .. code-block:: bash + + umount /dev/sdd2 + umount /dev/sdd3 + +#. Burn the image onto the USB drive. The example below burns an uncompressed + image onto ``: + + .. code-block:: bash + + dd if=./clear-[version number]-[image type] of= oflag=sync bs=4M status=progress + +.. caution:: + + |CAUTION-UNMOUNT-USB-PARTITIONS| + +.. _bootable-usb-mac: + +Create a bootable USB drive on macOS\* +************************************** + +Make sure you have have completed all `Prerequisites`_. + +Before burning the image onto your USB drive, +:ref:`verify and decompress your image `. + +Burn the |CL| image onto a USB drive +==================================== + +.. caution:: + + |CAUTION-BACKUP-USB| + +#. Launch the Terminal app. + +#. Go to the directory with the decompressed image. + +#. Plug in a USB drive and get its identifier: + + .. code-block:: bash + + diskutil list + + This will list available disks and their partitions, as shown in Figure 1. + + .. figure:: figures/bootable-usb-mac-01.png + :scale: 100 % + :alt: Get USB drive identifier + + Figure 1: macOS - Get USB drive identifier + +#. Unmount the USB drive identified in the previous step. For example: + + .. code-block:: bash + + diskutil umountDisk /dev/disk2 + +#. Burn the image onto the drive using the :command:`dd` command. + The example below burns an uncompressed image onto ``: + + .. code-block:: bash + + sudo dd if=./clear-[version number]-[image type] of= bs=4m + + To speed up the imaging process, add an ‘r’ in front of the disk identifier. + For example `/dev/rdisk2`. + + Press :kbd:`-T` to check imaging progress. + +#. Eject the USB drive. + + .. code-block:: bash + + diskutil eject /dev/disk2 + +.. _bootable-usb-windows: + +Create a bootable USB drive on Windows\* +**************************************** + +Make sure you have have completed all `Prerequisites`_. + +Before burning the image onto your USB drive, +:ref:`verify and decompress your image `. + +Burn the |CL| image onto a USB drive +==================================== + +.. caution:: + + |CAUTION-BACKUP-USB| + +#. Download the `Rufus`_ utility to burn the image onto a USB drive. + We use Rufus 3.5 here. **Only use the latest version of Rufus**. + +#. Plug in the USB drive and open Rufus. + +#. Under `Boot selection`, click the :guilabel:`SELECT` button. + +#. Find and select the previously extracted |CL| image file. + +#. Click the :guilabel:`START` button. See Figure 2. + + .. figure:: figures/bootable-usb-windows-02.png + :scale: 80 % + :alt: Rufus utility + + Figure 2: Rufus utility + +#. When the dialogue appears, select + :guilabel:`Write in ISO image mode (Recommended)`. See Figure 3. + + .. figure:: figures/bootable-usb-windows-03.png + :scale: 80 % + :alt: ISOHybrid image detected + + Figure 3: ISOHybrid image detected + +#. Select the Windows taskbar menu for USB and select eject. + +.. _Rufus: https://rufus.ie/ +.. _Downloads: https://clearlinux.org/downloads diff --git a/_sources/get-started/compatibility-check.rst.txt b/_sources/get-started/compatibility-check.rst.txt new file mode 100644 index 00000000..ff17e55e --- /dev/null +++ b/_sources/get-started/compatibility-check.rst.txt @@ -0,0 +1,68 @@ +.. _compatibility-check: + +Check processor and EFI firmware compatibility +############################################## + +Before installing |CL-ATTR|, check your host system's processor and EFI firmware +compatibility. To check compatibilty, choose one of the following paths: + +* From a system with a Linux\* OS installed, follow the instructions to :ref:`check-compatibility-steps`. + +* From a non-Linux OS, first :ref:`bare-metal-install-desktop` and then follow + the instructions to :ref:`check-compatibility-steps`. + +.. note:: + This does not check other system components (for example: storage and + graphics) for compatibility with |CL|. + +.. _check-compatibility-steps: + +Check compatibility +******************* + +#. Download the `clear-linux-check-config.sh`_ file. + + If a browser is not available, use: + + .. code-block:: console + + curl -O https://cdn.download.clearlinux.org/current/clear-linux-check-config.sh + +#. Make the script executable. + + .. code-block:: console + + chmod +x clear-linux-check-config.sh + +#. Run the script. + + #. Check to see if the host's processor and EFI firmware is capable of + running |CL|. + + .. code-block:: console + + ./clear-linux-check-config.sh host + + #. Check to see if the host is capable of running |CL| in a container. + + .. code-block:: console + + ./clear-linux-check-config.sh container + + The script prints a list of test results similar to the output below. + All items should return a `SUCCESS` status. This example indicates the + host's processor and EFI firmware support running |CL|. + + .. code-block:: console + + Checking if host is capable of running Clear Linux* OS + + SUCCESS: 64-bit CPU (lm) + SUCCESS: Supplemental Streaming SIMD Extensions 3 (ssse3) + SUCCESS: Streaming SIMD Extension v4.1 (sse4_1) + SUCCESS: Streaming SIMD Extensions v4.2 (sse4_2) + SUCCESS: Advanced Encryption Standard instruction set (aes) + SUCCESS: Carry-less Multiplication extensions (pclmulqdq) + SUCCESS: EFI Firmware + +.. _clear-linux-check-config.sh: https://cdn.download.clearlinux.org/current/clear-linux-check-config.sh diff --git a/_sources/get-started/get-started.rst.txt b/_sources/get-started/get-started.rst.txt new file mode 100644 index 00000000..a0ff24fd --- /dev/null +++ b/_sources/get-started/get-started.rst.txt @@ -0,0 +1,49 @@ +.. _get-started: + +Get started +########### + +The Get Started section guides you through the requirements and installation of +|CL-ATTR|. Follow these step-by-step intructions to get started with |CL|, fast. + +Pre-install +*********** + +There are a couple of things to take care of before you install. + +* :ref:`system-requirements` +* :ref:`compatibility-check` +* :ref:`bootable-usb` + +When installing |CL-ATTR| in a VM, consider which kernel to use. + +* :ref:`Compatible VM kernels ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + compatibility-check + bootable-usb/bootable-usb + +Install +******* + +.. toctree:: + :maxdepth: 1 + + bare-metal-install-desktop/bare-metal-install-desktop + bare-metal-install-server/bare-metal-install-server + install-configfile + +.. _virtual-machine-install: + +Install in a virtual machine +**************************** + +.. toctree:: + :maxdepth: 1 + :glob: + + virtual-machine-install/* + ../../guides/maintenance/increase-virtual-disk-size.rst \ No newline at end of file diff --git a/_sources/get-started/install-configfile.rst.txt b/_sources/get-started/install-configfile.rst.txt new file mode 100644 index 00000000..60a1bf75 --- /dev/null +++ b/_sources/get-started/install-configfile.rst.txt @@ -0,0 +1,192 @@ +.. _install-configfile: + +Install using clr-installer and a configuration file +#################################################### + +This page explains how to install |CL-ATTR| using the clr-installer tool +with a configuration file. The configuration file (:file:`clr-installer.yaml`) +can be reused to duplicate the same installation configuration on additional +machines. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +Ensure that your target system supports the installation: + +* :ref:`system-requirements` +* :ref:`compatibility-check` + +Process +******* + +This guide describes two methods for using a configuration file with the +clr-installer tool. You can use either method to achieve the same goal. Choose +the method that works best for your setup. + +If you are installing |CL| for the first time, we recommend Example 1. + +To clone an existing |CL| setup on another system, we recommend Example 2. + +Example 1 +========= + +This method uses a configuration file template to perform a new installation. + +Perform the following steps: + +#. Go to `Downloads`_ and download the latest Clear Linux OS Server image. + + For example: + https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz + +#. Follow the instructions to :ref:`bootable-usb` based on your OS. + +#. Boot up the USB thumb drive. +#. Select :guilabel:`Clear Linux OS` from the menu. +#. In the console window, log in as root and set a password. +#. Verify you have a network connection to the Internet and configure proxy + settings if you're working behind a firewall. +#. Download a :file:`live-server.yaml` template. + + For example: + + .. code-block:: bash + + curl -O https://download.clearlinux.org/releases/30010/clear/config/image/live-server.yaml + +#. Edit the template and change the settings as needed. + + Commonly-changed settings include: + +.. _install-configfile-yaml-begin: + + #. Under *block-devices*, set “file: "/dev/sda"” or enter your preferred device. + #. Under *targetMedia*, set the third partition size to “0” to use the entire disk space. + #. Under *bundles*, add additional bundles as needed. + #. Delete the *post-install* section unless you have post-installation scripts. + #. Under *Version*, set a version number. To use the latest version, set to “0”. + + Commonly-changed settings are shown in lines 15, 34, 37, and 51 below. + See `Installer YAML Syntax`_ for more details. + + .. code-block:: bash + :linenos: + :emphasize-lines: 14,15,34,37,51 + + #clear-linux-config + + # c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil + # vi: set shiftwidth=2 tabstop=2 expandtab: + # :indentSize=2:tabSize=2:noTabs=true: + + # File: developer-live-server.yaml + # Use Case: Live Image which boots into login prompt + # Optionally allows for installing Clear Linux OS + # using the TUI clr-installer by running clr-installer + + # switch between aliases if you want to install to an actual block device + # i.e /dev/sda + block-devices: [ + {name: "bdevice", file: "/dev/sda"} + ] + + targetMedia: + - name: ${bdevice} + type: disk + children: + - name: ${bdevice}1 + fstype: vfat + mountpoint: /boot + size: "150M" + type: part + - name: ${bdevice}2 + fstype: swap + size: "32M" + type: part + - name: ${bdevice}3 + fstype: ext4 + mountpoint: / + size: "0" + type: part + + bundles: [os-core, os-core-update, NetworkManager, clr-installer, vim] + + autoUpdate: false + postArchive: false + postReboot: false + telemetry: false + iso: true + keepImage: true + autoUpdate: false + + keyboard: us + language: en_US.UTF-8 + kernel: kernel-native + + version: 30010 + +.. _install-configfile-yaml-end: + +Start the installation with the command: + +.. code-block:: bash + + clr-installer --config live-server.yaml + +Example 2 +========= + +This method uses a saved configuration file from a previous installation, +which you can use to easily duplicate the installation on additional machines. + +Perform the following steps: + +#. Open a console window on a system where |CL| was installed to retrieve a + copy of the configuration file. + +#. In the console window, log in as root and enter your password. + +#. Change directory to :file:`/root` and copy the :file:`clr-installer.yaml` + file to a USB thumb drive. + + .. code-block:: bash + + cd /root + cp clr-installer.yaml + +Start the installation on the target with the following steps: + +#. Go to `Downloads`_ and download the latest Clear Linux OS Server image. + + For example: + https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz + +#. Follow the instructions to :ref:`bootable-usb` based on your OS. + +#. Boot up the USB thumb drive. +#. Select :guilabel:`Clear Linux OS` from the menu. +#. In the console window, log in as root and set a password. +#. Verify you have a network connection to the Internet and configure proxy + settings if you're working behind a firewall. +#. Plug in and mount the USB thumb drive containing the retrieved + :file:`clr-installer.yaml` configuration file. +#. Start the installation with the command: + + .. code-block:: bash + + clr-installer --config clr-installer.yaml + +References +********** + +* `Clear Linux Installer`_ +* `Installer YAML Syntax`_ + +.. _Downloads: https://clearlinux.org/downloads +.. _Clear Linux Installer: https://github.com/clearlinux/clr-installer + +.. _Installer YAML Syntax: https://github.com/clearlinux/clr-installer/blob/master/scripts/InstallerYAMLSyntax.md \ No newline at end of file diff --git a/_sources/get-started/virtual-machine-install/gce.rst.txt b/_sources/get-started/virtual-machine-install/gce.rst.txt new file mode 100644 index 00000000..c94913b0 --- /dev/null +++ b/_sources/get-started/virtual-machine-install/gce.rst.txt @@ -0,0 +1,266 @@ +.. _gce: + +Launch |CL-ATTR| Compute Engine on Google Cloud Platform\* +########################################################## + +This page explains the steps to create a virtual machine instance of +|CL-ATTR| on `Google Cloud Platform`_ (:abbr:`GCP (Google Cloud Platform)`). + +.. 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. + +Setup |CL| VM on GCP +******************** + +#. Sign in to your Google\* account on the + `Google Cloud Console `_: + + .. figure:: figures/gce/00-sign-in.png + :scale: 50 % + :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:: + + Refer to the + `Quickstart Using a Linux VM `_ + guide to learn about the process of creating VM instances on GCP. + +#. Navigate to the latest |CL| + `release folder `_ + 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. + +#. Create a *Storage Bucket* for hosting the |CL| image source archive + downloaded in the previous step: + + * Click the :guilabel:`Navigation menu` icon on the upper left screen menu. + + * Select the :menuselection:`Storage` item from the side bar on the left. You + will be sent to the Storage Browser tool or the Cloud Storage overview page. + + .. figure:: figures/gce/01-cloud-storage.png + :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 Browser tool + + Figure 3: Cloud Storage Browser tool + + * Click the :guilabel:`CREATE BUCKET` button to enter the bucket creation tool. + The bucket name must be unique because buckets in the Cloud Storage share + a single global namespace. + + Leave the remaining options set to the defaults, and click the + :guilabel:`Create` button at the bottom to create a *Bucket*. + + .. figure:: figures/gce/03-create-bucket.png + :scale: 50 % + :alt: Set a unique bucket name + + Figure 4: Set bucket name + +#. Once the bucket is created, click the :guilabel:`Upload files` button + on the Bucket details page to upload the |CL| GCE image archive + to the named bucket: + + .. figure:: figures/gce/04-bucket-created.png + :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 :guilabel:`Navigation menu` icon on the upper left screen menu. + + * Select the :menuselection:`Compute Engine --> Images` from the side bar on + the left. + + .. 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 :guilabel:`[+] CREATE IMAGE` + menu item to create a custom image: + + .. figure:: figures/gce/20-image-library.png + :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:`Source`, select :guilabel:`Browse`. + +#. 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 :guilabel:`Create` button + at the bottom to import the Clear Linux GCE image to the image library. + + .. figure:: figures/gce/22-image-list.png + :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 :guilabel:`Navigation menu` icon on the upper left screen menu. + + * Select :menuselection:`Compute Engine --> VM Instances` from the side bar on + the left. + + .. 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. + +#. Alternatively, click the :guilabel:`CREATE INSTANCE` button on the VM + instances page to create a VM instance. + + .. figure:: figures/gce/30-vm-none.png + :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 + + Figure 14: VM instances list + + * Under :guilabel:`Region`, choose a region based on the + `Best practices for Compute Engine regions selection`_. + + * Under :guilabel:`Boot disk`, click the :guilabel:`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 :menuselection:`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 :guilabel:`Management, security, disks, networking, sole tenancy` + group. + + .. figure:: figures/gce/40-clear-vm-security.png + :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 must configure the VM instance with your + SSH public key, so that you are able to access it remotely. + + Refer to :ref:`security` for more details. + + * Click the :menuselection:`Security` tab, copy and paste your SSH public key: + + .. figure:: figures/gce/40-ssh-key.png + :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, + because it is an invalid character while creating user accounts in + |CL|. + + * Click the :guilabel:`Create` button to create the |CL| VM. + +#. 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 + + 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 login to the Clear Linux VM + + Figure 20: SSH login to Clear Linux VM + +Related topics +************** + +* :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 diff --git a/_sources/get-started/virtual-machine-install/hyper-v.rst.txt b/_sources/get-started/virtual-machine-install/hyper-v.rst.txt new file mode 100644 index 00000000..45e00741 --- /dev/null +++ b/_sources/get-started/virtual-machine-install/hyper-v.rst.txt @@ -0,0 +1,68 @@ +.. _hyper-v: + +Use Hyper-V\* +############# + +This page explains how to run |CL-ATTR| inside a +`Windows Server Virtualization`_\* or **Hyper-V** environment. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +* Enable `Intel® Virtualization Technology`_ (Intel® VT) + +* Enable `Intel® Virtualization Technology for Directed I/O`_ (Intel® VT-d) in + your BIOS/UEFI firmware configuration. + +Enable Hyper-V +************** + +Please refer to `Install Hyper-V on Windows 10`_ to enable and configure +*Hyper-V* on your machine. + +Create a virtual network +************************ + +Once *Hyper-V* has been enabled on your Windows system you will need to +create a virtual network in the **Hyper-V Manager**. Refer to the +`Create a virtual network`_ documentation to create and configure +a virtual network. + +Create a virtual machine +************************ + +#. Download and decompress the latest hyperv disk image + :file:`clear-XXXXX-hyperv.img.gz`, where XXXXX is the latest + available version of |CL| from our `Downloads`_ page. + +#. Create a virtual machine using the **Hyper-V Manager**: + + a. Choose **Generation 2** when prompted to *specify VM generation*. + b. Choose **Use an existing virtual hard disk** and browse to find the + :file:`clear-XXXX-hyperv.vhdx` file. + c. When finished, open VM settings, select Firmware Section and in Secure + Boot config, **uncheck** Enable Secure Boot. + + .. note:: Currently, |CL| does not boot with `secure boot` + enabled. + +#. Connect to your new VM and start it. You should see a prompt: + + .. code-block:: console + + > User: root + +#. Set a root user password. + +Your virtual machine running |CL| is ready! + +.. _Windows Server Virtualization: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/about/ +.. _Install Hyper-V on Windows 10: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v +.. _Create a virtual network: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/connect-to-network +.. _Downloads: https://cdn.download.clearlinux.org/image/ +.. _Intel® Virtualization Technology: http://www.intel.com/content/www/us/en/virtualization/virtualization-technology/intel-virtualization-technology.html +.. _Intel® Virtualization Technology for Directed I/O: https://software.intel.com/en-us/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices \ No newline at end of file diff --git a/_sources/get-started/virtual-machine-install/kvm.rst.txt b/_sources/get-started/virtual-machine-install/kvm.rst.txt new file mode 100644 index 00000000..8678e5eb --- /dev/null +++ b/_sources/get-started/virtual-machine-install/kvm.rst.txt @@ -0,0 +1,253 @@ +.. _kvm: + +Run |CL-ATTR| as a KVM guest OS +############################### + +This page explains how to run |CL-ATTR| in a virtualized environment using +:abbr:`KVM (Kernel-based Virtual Machine)`. + +.. contents:: + :local: + :depth: 1 + +Install QEMU-KVM +**************** + +#. Enable the `Intel® Virtualization Technology`_ (Intel® VT) and the + `Intel® Virtualization Technology for Directed I/O`_ (Intel® VT-d) in the + host machine’s BIOS. + +#. Log in and open a terminal emulator. + +#. Install `QEMU*-KVM` on the host machine. Below are some example distros. + + * On |CL|: + + .. code-block:: bash + + sudo swupd bundle-add kvm-host + + * On Ubuntu\* 18.04 LTS Desktop: + + .. code-block:: bash + + sudo apt-get install qemu-kvm + + * On Mint\* 19.1 “Cinnamon” Desktop: + + .. code-block:: bash + + sudo apt-get install qemu-kvm + + * On Fedora\* 30 Workstation: + + .. code-block:: bash + + sudo dnf install qemu-kvm + +Download and launch the virtual machine +*************************************** + +#. Download the latest pre-built |CL| KVM image file from + the `image `_ directory. Look for + ``clear--kvm.img.xz``. You can also use this command: + + .. code-block:: bash + + 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: + + .. code-block:: bash + + unxz -v clear--kvm.img.xz + +#. Download the 3 OVMF files (`OVMF.fd`, `OVMF_CODE.fd`, `OVMF_VARS.fd`) that + provides UEFI support for virtual machines. + + .. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/OVMF.fd + curl -O https://cdn.download.clearlinux.org/image/OVMF_CODE.fd + curl -O https://cdn.download.clearlinux.org/image/OVMF_VARS.fd + + .. note:: + + The default OVMF files from |CL| may not work for some distro version(s). + You may get an `ASSERT` in the `debug.log` file when starting the VM. + If that is the case, use the distro-specific-OVMF files instead. + For example, the |CL| OVMF files work for Ubuntu 18.04 LTS, but not for Ubuntu 19.04 LTS. + Installing and using the OVMF files for Ubuntu 19.04 LTS resolved the `ASSERT` issue. + +#. Download the `start_qemu.sh`_ script from the + `image `_ directory. This script + will launch the |CL| VM and provide console interaction within the same + terminal emulator window. + + .. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh + +#. Make the script executable: + + .. code-block:: bash + + chmod +x start_qemu.sh + +#. Start the |CL| KVM virtual machine: + + .. code-block:: bash + + sudo ./start_qemu.sh clear--kvm.img + +#. Log in as ``root`` user and set a new password. + +SSH access into the virtual machine +*********************************** + +To interact with the |CL| VM through SSH instead of the console it was +launched from, follow these steps. + +#. Configure SSH in the |CL| VM to allow root login: + + .. code-block:: bash + + cat > /etc/ssh/sshd_config << EOF + PermitRootLogin yes + EOF + +#. Enable and start SSH server in the |CL| VM: + + .. code-block:: bash + + systemctl enable sshd + systemctl start sshd + +#. Determine the IP address of the host on which you will launch the VM. + Substitute in the next step with this information. + + .. code-block:: bash + + ip a + +#. SSH into the |CL| VM using the default port of `10022`: + + .. code-block:: bash + + ssh -p 10022 root@ + +Optional: Add the GNOME Display Manager (GDM) +********************************************* + +To add :abbr:`GDM (GNOME Display Manager)` to the |CL| VM, follow these steps: + +#. Shutdown the active |CL| VM. + + .. code-block:: bash + + poweroff + +#. Install the Spice viewer on the local host or remote system. Below are some + example distros. + + * On Clear Linux: + + .. code-block:: bash + + sudo swupd bundle-add virt-viewer + + * On Ubuntu\* 18.04 LTS Desktop: + + .. code-block:: bash + + sudo apt-get install virt-viewer + + * On Mint\* 19.1 “Cinnamon” Desktop: + + .. code-block:: bash + + sudo apt-get install virt-viewer + + * On Fedora\* 30 Workstation: + + .. code-block:: bash + + sudo dnf install virt-viewer + +#. Modify the :file:`start_qemu.sh` script to increase memory (`-m`), add + graphics driver (`-vga`), and add Spice (`-spice`, `-usb`, and + `-device`) support. + + .. code-block:: console + + qemu-system-x86_64 \ + -enable-kvm \ + ${UEFI_BIOS} \ + -smp sockets=1,cpus=4,cores=2 -cpu host \ + -m 4096 \ + -vga qxl \ + -nographic \ + -spice port=5924,disable-ticketing \ + -usb \ + -device usb-tablet,bus=usb-bus.0 \ + -drive file="$IMAGE",if=virtio,aio=threads,format=raw \ + -netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \ + -device virtio-net-pci,netdev=mynet0 \ + -debugcon file:debug.log -global isa-debugcon.iobase=0x402 $@ + +#. Due to changes in the :file:`start_qemu.sh` script from the previous step, + using the same OVMF files will result in the VM not booting properly and + you end up in the the UEFI shell. The easiest way to avoid this is to delete + the OVMF files and restore the originals before relaunching the VM. + +#. Increase the size of the VM by 10GB to accommodate the GDM installation: + + .. code-block:: bash + + qemu-img resize -f raw clear--kvm.img +10G + +#. Relaunch the |CL| VM: + + .. code-block:: bash + + sudo ./start_qemu.sh clear--kvm.img + +#. Determine the IP address of the host on which you will launch the VM. + Substitute in the next step with this information. + + .. code-block:: bash + + ip a + +#. From the local host or remote system, open a new terminal emulator window + and connect into the |CL| VM using the Spice viewer: + + .. code-block:: bash + + remote-viewer spice://:5924 + +#. Log in as `root` user into the |CL| VM. + +#. Follow these steps from :ref:`increase-virtual-disk-size` to resize the partition of the virtual disk of the VM. + +#. Add GDM to the |CL| VM: + + .. code-block:: bash + + swupd bundle-add desktop-autostart + +#. Reboot the |CL| VM to start GDM: + + .. code-block:: bash + + reboot + +#. Go through the GDM out-of-box experience (OOBE). + +#. The default aspect ratio of the GDM GUI for the |CL| VM is 4:3. To change + it, use GDM's `Devices > Displays` setting tool (located at the top-right corner). + + +.. _Intel® Virtualization Technology: https://www.intel.com/content/www/us/en/virtualization/virtualization-technology/intel-virtualization-technology.html +.. _Intel® Virtualization Technology for Directed I/O: https://software.intel.com/en-us/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices +.. _start_qemu.sh: https://cdn.download.clearlinux.org/image/start_qemu.sh diff --git a/_sources/get-started/virtual-machine-install/virtualbox-cl-installer.rst.txt b/_sources/get-started/virtual-machine-install/virtualbox-cl-installer.rst.txt new file mode 100644 index 00000000..2a25674d --- /dev/null +++ b/_sources/get-started/virtual-machine-install/virtualbox-cl-installer.rst.txt @@ -0,0 +1,404 @@ +.. _virtualbox-cl-installer: + +Install a |CL-ATTR| VM in VirtualBox\* +###################################### + +This page explains how to create a virtual machine on the `VirtualBox`_ +hypervisor with |CL-ATTR| as the guest operating system. These instructions +support the |CL| live-server installer to create the |CL| virtual machine (VM). + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +#. Enable virtualization, such as `Intel® Virtualization Technology`_ + (Intel® VT), on the host system from EFI/BIOS. + +#. Download and install |VB| **version 6.0 or greater** from + `VirtualBox`_ using the `VirtualBox Installation Instructions`_ for your + platform. + +Download and extract the |CL| installer ISO +******************************************* + +#. Download the :file:`clear--live-server.iso.xz` of + |CL| on the `Downloads`_ page. + +#. Validate the integrity of the downloaded image by checking the file hash + and signatures. Refer to :ref:`validate-signatures` for detailed steps. + +#. Decompress the downloaded image. + + - On Windows you can use `7zip`_ to extract the file by right-clicking the + file to *Extract Here* (in the same directory) + + .. figure:: figures/vbox/virtualbox-cl-installer-01.png + :scale: 100% + :alt: 7zip extract here command + + Figure 1: 7zip extract here command + + - On Linux : + + .. code-block:: bash + + xz -d clear--live-server.iso.xz + +#. Delete the originally downloaded compressed file. + +Create a new |VB| virtual machine +********************************* + +A new :abbr:`VM (Virtual Machine)` needs to be created in |VBM| where |CL| +will be installed. General instructions for creating a virtual machine and +details about using different settings are available in the VirtualBox manual section `Creating Your First Virtual Machine`_. + +#. Launch the |VBM| from your host system. + +#. Click the :guilabel:`New` button to create a new VM. + +#. Choose :guilabel:`Expert mode`. + +#. On the :guilabel:`Create Virtual Machine` screen, enter the following settings: + + - **Name**: Choose name (e.g. ClearLinuxOS-VM). + - **Type**: Linux + - **Version**: **Linux 2.6 / 3.x / 4.x (64-bit)** + - **Hard disk**: `Create a virtual hard disk now` + - **Memory size default**: 2048 MB (Adjust appropriately.) + + .. note:: + Later, if you want to change the amount of RAM allocated, power down your VM. Return to :file:`Settings > System` and change + :guilabel:`Base Memory` to the desired size. + + .. figure:: figures/vbox/virtualbox-cl-installer-02.png + :scale: 100% + :alt: Create Virtual Machine + + Figure 2: Create Virtual Machine + +#. Click :guilabel:`Create`. + +#. On the :guilabel:`Create Virtual Hard Disk` screen, select: + + - **File location** + - **File size**: **32.00 GB**. Adjust size to your needs. + - **Hard disk file type**: `VDI (VirtualBox Disk Image)` + - **Storage on physical hard disk**:`Dynamically allocated` + + .. figure:: figures/vbox/virtualbox-cl-installer-03.png + :scale: 100% + :alt: Create Virtual Hard Disk + + Figure 3: Create Virtual Hard Disk + +#. Click :guilabel:`Create`. + + A new virtual machine will be created and appear in the |VBM|. + +#. Click :guilabel:`Settings` to configure the |CL| VM. + +#. In the left-hand menu, navigate to the :menuselection:`System` menu. + +#. On the :guilabel:`Motherboard` tab, select the :guilabel:`Chipset` menu, and + then select :menuselection:`ICH9`. See Figure 4. + + .. note:: + + You can select which chipset will be presented to the virtual machine. + Consult the `VM VirtualBox User Manual`_ for more details. + +#. In :guilabel:`Enabled Features`, check these boxes: + + - **Enable I/O APIC** + - **Enable EFI (special OSes only)** + + .. figure:: figures/vbox/virtualbox-cl-installer-04.png + :scale: 100% + :alt: Settings > System + + Figure 4: Settings > System + + .. note:: + + By default, only 1 virtual CPU is allocated to the new VM. Consider + increasing the number of virtual processors allocated to the virtual + machine under Settings > System > Processor for increased + performance. + +#. Click :guilabel:`OK`. + +Install |CL| on the |VB| VM +*************************** + +|CL| is ready to be installed. + +Mount the installation ISO +========================== + +The |CL| installer ISO needs to be mounted as a virtual CD-ROM on the VM +before powering the VM on. + +#. From the *ClearLinux-OS* :guilabel:`Settings` menu at left, select + :guilabel:`Storage`. + +#. From :guilabel:`Storage Devices`, middle column, click the blue + disk labeled :guilabel:`Empty`. + +#. From the :guilabel:`Attributes` menu, click the blue CD disk next to + the :guilabel:`Optical Drive` drop down menu and click + :guilabel:`Choose Virtual Optical Disk File...` + + .. figure:: figures/vbox/virtualbox-cl-installer-05.png + :scale: 100% + :alt: Choose Virtual Optical Disk Drive + + Figure 5: Choose Virtual Optical Disk Drive + +#. Where there appears :guilabel:`Please choose a virtual optical disk file`, + select the ISO file and click *Open*. + + .. figure:: figures/vbox/virtualbox-cl-installer-06.png + :scale: 100% + :alt: Mounting an ISO + + Figure 6: Mounting an ISO + +#. Click :guilabel:`OK` to exit and return to the main |VBM|. + +Install |CL| with live-server installer +======================================= + +#. In the |VBM|, select virtual machine you created and click :guilabel:`Start`. + + .. figure:: figures/vbox/virtualbox-cl-installer-07.png + :scale: 100% + :alt: Start the installer + + Figure 7: Start the installer + + .. note:: + + To release the mouse cursor from the VM console window, press the right + :kbd:`Ctrl` key on the keyboard. + +#. When :guilabel:`Clear Linux Installer` in boot manager appears, + select :kbd:`Enter`. Do not install the bundle `desktop-autostart`. + +#. Follow the steps in :ref:`bare-metal-install-server` to + install |CL| onto the VM virtual disk. Note: + + #. In :guilabel:`Configure Installation Media`, navigate top + VBOX HARDDISK, and then select :guilabel:`Confirm`. + + #. In :menuselection:`Advanced options --> Manage User`, create an + administrative user. + + #. Do not install the bundle `desktop-autostart`. + +#. When |CL| installation is complete, click :guilabel:`Exit`. + +#. At the prompt, enter: + + .. code-block:: bash + + shutdown now + +Unmount the ISO +=============== + +The |CL| installer ISO needs to be unmounted to allow the VM to boot from the +virtual hard disk. + +#. Return to the |VBM|. + +#. Click :guilabel:`Settings` to configure the |CL| VM. + +#. From the VM :guilabel:`Settings` window, navigate to the :guilabel:`Storage` + pane in the left menu. + +#. From the middle :guilabel:`Storage Devices` column, click the blue CD disk + labeled :guilabel:`clear--live-server.iso` under the + :guilabel:`Controller: IDE`. + +#. From the :guilabel:`Attributes` column at right, in :guilabel:`Optical Drive`, + select the blue CD icon beside and click + :guilabel:`Remove Disk from Virtual Drive`. + + .. figure:: figures/vbox/virtualbox-cl-installer-08.png + :scale: 100% + :alt: Remove Disk from Virtual Drive + + Figure 8: Remove Disk from Virtual Drive + +#. Click :guilabel:`OK` to exit the :guilabel:`VM Settings` menu and return to + the main |VBM|. + +Install |VB| Linux Guest Additions +================================== + +|CL| provides Linux Guest Additions drivers for full compatibility using an +install script in the **kernel-lts** (Long Term Support) bundle by |CL|. + +#. From the |VBM| select the |CL| VM, and select :guilabel:`Start`. + +#. In the VM Console, log in as the administrative user previously created. + + .. note:: + A message may appear: "A kernel update is available: you may wish + to reboot the system." + + To update the kernel, enter: + + .. code-block:: bash + + sudo reboot + + At initial login, enter the administrative user's password and continue. + +#. Validate the installed kernel is **kernel-lts** by checking the output + of the :command:`uname -r` command. It should end in **.lts** or **.lts2018**. + + .. code-block:: bash + + uname -r + .lts + + If the running kernel is not **lts**: install the LTS kernel manually, + update the bootloader, and check again: + + .. code-block:: bash + + sudo swupd bundle-add kernel-lts + clr-boot-manager set-kernel $(basename $(realpath /usr/lib/kernel/default-lts)) + clr-boot-manager update + reboot + +#. Remove any kernel bundles that do not end in *-lts* or *kernel-install* + to simplify and avoid conflicts: + + .. code-block:: bash + + sudo swupd bundle-list | grep kernel + sudo swupd bundle-remove + +#. In the VM Console top menu, click :guilabel:`Devices`, and select + :guilabel:`Insert Guest Additions CD image...` to mount the |VB| driver + installation to the |CL| VM. + + .. figure:: figures/vbox/virtualbox-cl-installer-09.png + :scale: 100% + :alt: Insert Guest Additions CD image + + Figure 9: Insert Guest Additions CD image + +#. If a dialogue appears, "VBx_GAs_6.0.8... Would you like to run it?", + select :guilabel:`Cancel`. + + Instead, we provide a script to patch and install |VB| drivers on |CL|. + +#. Open a Terminal and enter the script: + + .. code-block:: bash + + sudo install-vbox-lga + + .. note:: + + Successful installation shows: "Guest Additions installation complete". + If drivers are already installed, don't re-install them. + +#. Shut down the system. Select :menuselection:`Machine --> ACPI Shutdown`. + + .. figure:: figures/vbox/virtualbox-cl-installer-10.png + :scale: 100% + :alt: Powering off a VirtualBox VM + + Figure 10: Powering off a VirtualBox VM + +#. Select :guilabel:`Settings`, :guilabel:`Display`. + +#. In :guilabel:`Graphics Controller`, select :guilabel:`VBoxSVGA` + to adjust screen size dynamically. + + .. figure:: figures/vbox/virtualbox-cl-installer-11.png + :scale: 100% + :alt: Remove Disk from Virtual Drive + + Figure 11: VirtualBox hardware acceleration error + +#. In the |VBM|, select :guilabel:`Start`. + +#. In the VM console, login and verify the |VB| drivers are loaded: + + .. code-block:: bash + + lsmod | grep ^vbox + + You should see drivers loaded with names beginning with **vbox**: + (e.g., vboxvideo, vboxguest). + +#. Add `desktop-autostart` for a full desktop experience. + + .. code-block:: bash + + sudo swupd bundle-add desktop-autostart + +#. Reboot the VM and log in with the administrative user. + + .. code-block:: bash + + sudo reboot + +The |CL| VM running on |VB| is ready to develop and explore. + +Troubleshooting +*************** + +#. **Problem:** On a Microsoft\* Windows\* OS, |VB| encounters an error when + trying to start a VM indicating *VT-X/AMD-v hardware acceleration is not + available on your system.* + + .. figure:: figures/vbox/virtualbox-cl-installer-12.png + :scale: 100% + :alt: Remove Disk from Virtual Drive + + Figure 12: VirtualBox hardware acceleration error + + **Solution:** First, double check the `Prerequisites`_ section to make + sure *Hardware accelerated virtualization* extensions have been enabled + in the host system's EFI/BIOS. + + *Hardware accelerated virtualization*, may get disabled for |VB| when + another hypervisor, such as *Hyper-V* is enabled. + + To disable *Hyper-V* execute this command in an + **Administrator: Command Prompt or Powershell**, and reboot the system: + + .. code-block:: bash + + bcdedit /set {current} hypervisorlaunchtype off + + To enable Hyper-V again, execute this command in an + **Administrator: Command Prompt or Powershell**, and reboot the system: + + .. code-block:: bash + + bcdedit /set {current} hypervisorlaunchtype Auto + +.. _VirtualBox Installation Instructions: https://www.virtualbox.org/manual/ch02.html + +.. _VirtualBox: https://www.virtualbox.org + +.. _Downloads: https://clearlinux.org/downloads + +.. _`Creating Your First Virtual Machine`: https://www.virtualbox.org/manual/UserManual.html#gui-createvm + +.. _7zip: http://www.7-zip.org/ + +.. _Intel® Virtualization Technology: https://www.intel.com/content/www/us/en/virtualization/virtualization-technology/intel-virtualization-technology.html + +.. _VM VirtualBox User Manual: https://docs.oracle.com/cd/E97728_01/E97727/html/settings-system.html \ No newline at end of file diff --git a/_sources/get-started/virtual-machine-install/vmw-player-preconf.rst.txt b/_sources/get-started/virtual-machine-install/vmw-player-preconf.rst.txt new file mode 100644 index 00000000..a51b94ab --- /dev/null +++ b/_sources/get-started/virtual-machine-install/vmw-player-preconf.rst.txt @@ -0,0 +1,308 @@ +.. _vmw-player-preconf: + +Run pre-configured |CL-ATTR| image as a VMware\* Workstation Player guest OS +############################################################################ + +This page explains how to deploy a pre-configured |CL| VMware image on +`VMware Workstation 14 Player`_. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +VMware Workstation 14 Player is a type 2 hypervisor. It runs on top of +another operating system such as Windows\* or Linux\*. With VMware ESXi, you +can create, configure, manage, and run |CL-ATTR| :abbr:`VMs (Virtual Machines)` +on your local system. + +.. note:: + + Screenshots in this document show VMware Workstation 14 Player for Windows. + Menus and prompts in the Linux version have minor wording differences. + +Install the VMware Workstation Player hypervisor +************************************************ + +#. Enable :abbr:`Intel® VT (Intel® Virtualization Technology)` and + :abbr:`Intel® VT-d (Intel® Virtualization Technology for Directed I/O)` in + your system's BIOS. + +#. `VMware Workstation 14 Player`_ is available for Windows and Linux. + Download your preferred version. + +#. Depending on which OS you're running, install it by following one of these + instructions: + + * On supported Linux distros: + + #. Enable a GUI desktop. + + #. Start a terminal emulator. + + #. Start the installer by issuing the command below and following the + guided steps. + + .. code-block:: bash + + sudo sh ./VMware-Player-[version number].x86_64.bundle + + * On Windows: + + #. Start the installer. + #. Follow the setup wizard. + +For additional help, see the `VMware Workstation Player Documentation`_. + +Download the latest |CL| VMware image +************************************* + +Get the latest |CL| VMware image from the `image`_ repository. +Look for :file:`clear-[version number]-vmware.vmdk.xz`. You can also use +this command: + +.. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware) + +Visit :ref:`image-types` for additional information about all available |CL| images. + +.. include:: ../../guides/maintenance/download-verify-decompress.rst + :Start-after: verify-windows: + +We also provide instructions for other operating systems: + +* :ref:`download-verify-decompress-linux` + +Create and configure a new VM +***************************** + +#. Start the `VMware Workstation Player` app. +#. On the home screen, click :guilabel:`Create a New Virtual Machine`. See + figure 1. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-01.png + :scale: 100% + :alt: VMware Workstation 14 Player - Create a new virtual machine + + Figure 1: VMware Workstation 14 Player - Create a new virtual machine + +#. On the :guilabel:`Welcome to the New Virtual Machine Wizard` screen, + select the :guilabel:`I will install the operating system later` option. + See figure 2. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-02.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select install operating system + + Figure 2: VMware Workstation 14 Player - Select install operating + system later. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Select a Guest Operating System` screen, set the + :guilabel:`Guest operating system` setting to :guilabel:`Linux`. + See figure 3. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-03.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select guest operating system type + + Figure 3: VMware Workstation 14 Player - Select guest operating system + type + +#. Set :guilabel:`Version` setting to + :guilabel:`Other Linux 3.x or later kernel 64-bit`. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Name the Virtual Machine` screen, give your new VM a + name. See figure 4. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-04.png + :scale: 100% + :alt: VMware Workstation 14 Player - Name virtual machine + + Figure 4: VMware Workstation 14 Player - Name virtual machine + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Specify Disk Capacity` screen, click + the :guilabel:`Next` button. Keep the default disk settings unchanged. + When we attach the pre-configured |CL| VMware image, we will remove the + default virtual disk and replace it with the pre-configured one. See + figure 5. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-05.png + :scale: 100% + :alt: VMware Workstation 14 Player - Set disk capacity + + Figure 5: VMware Workstation 14 Player - Set disk capacity + +#. On the :guilabel:`Ready to Create Virtual Machine` screen, click the + :guilabel:`Customize Hardware...` button. See figure 6. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-06.png + :scale: 100% + :alt: VMware Workstation 14 Player - Customize hardware + + Figure 6: VMware Workstation 14 Player - Customize hardware + +#. Under the :guilabel:`Device` list, select :guilabel:`Processors`. See + figure 7. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-07.png + :scale: 100% + :alt: VMware Workstation 14 Player - Set virtualization engine option + + Figure 7: VMware Workstation 14 Player - Set virtualization engine + option + +#. Under the :guilabel:`Virtualization engine` section, + check :guilabel:`Virtualize Intel VT-x/EPT or AMD-V/RVI`. + +#. To disconnect the virtual CD/DVD (IDE) since it is not needed, under the + :guilabel:`Device` list, select :guilabel:`New CD/DVD (IDE)`. See figure 8. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-08.png + :scale: 100% + :alt: VMware Workstation 14 Player - Disconnect CD/DVD (IDE) + + Figure 8: VMware Workstation 14 Player - Disconnect CD/DVD (IDE) + +#. Under the :guilabel:`Device status` section, uncheck + :guilabel:`Connect at power on`. + +#. Click the :guilabel:`Close` button. + +#. Click the :guilabel:`Finish` button. + +Attach the pre-configured |CL| VMware image +******************************************* + +#. Move the downloaded and decompressed pre-configured |CL| VMware image file + :file:`clear-[version number]-basic.vmdk` to the directory where your + newly-created VM resides. + + .. note:: + + Depending on the OS, you can typically find the VMware VM files under: + + * On Linux distros: :file:`/home/username/vmware` + * On Windows: :file:`C:\Users\username\Documents\Virtual Machines` + +#. On the :guilabel:`VMware Workstation Player` home screen, select your + newly-created VM. See figure 9. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-09.png + :scale: 100% + :alt: VMware Workstation 14 Player - Edit virtual machine settings + + Figure 9: VMware Workstation 14 Player - Edit virtual machine settings + +#. Click :guilabel:`Edit virtual machine settings`. + +#. To remove the default hard disk, under the :guilabel:`Device` list, select + :guilabel:`Hard Disk (SCSI)`. See figure 10. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-10.png + :scale: 100% + :alt: VMware Workstation 14 Player - Remove hard drive + + Figure 10: VMware Workstation 14 Player - Remove hard drive + +#. Click the :guilabel:`Remove` button. + +#. To add a new hard disk and attach the pre-configured |CL| VMware image, + click the :guilabel:`Add...` button. See Figure 11. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-11.png + :scale: 100% + :alt: VMware Workstation 14 Player - Add new hard drive + + Figure 11: VMware Workstation 14 Player - Add new hard drive + +#. Under the :guilabel:`Hardware types` section, select :guilabel:`Hard Disk`. + +#. Click the :guilabel:`Next` button. + +#. Select your preferred :guilabel:`Virtual disk type`. See figure 12. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-12.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select virtual disk type + + Figure 12: VMware Workstation 14 Player - Select virtual disk type + +#. Select the :guilabel:`Use an existing virtual disk` option. See figure 13. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-13.png + :scale: 100% + :alt: VMware Workstation 14 Player - Use existing virtual disk + + Figure 13: VMware Workstation 14 Player - Use existing virtual disk + +#. Click the :guilabel:`Browse` button and select the pre-configured |CL| + VMware image file. See figure 14. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-14.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select ready-made VMware |CL| + + Figure 14: VMware Workstation 14 Player - Select ready-made VMware |CL| + image file + +#. Click the :guilabel:`Finish` button. + + .. note:: + + When asked to convert the existing virtual disk to a newer format, + selecting either option works. + +Enable UEFI boot support +************************ + +|CL| needs UEFI support to boot. To enable it, add the +following line to the end of your VM's :file:`.vmx` file: + +.. code-block:: console + + firmware = "efi" + +.. note:: + + Depending on the OS, you can typically find the VMware VM files under: + + * On Linux distros: :file:`/home/username/vmware` + * On Windows: :file:`C:\\Users\\username\\Documents\\Virtual Machines` + +Power on the VM +*************** + +After configuring the settings above, power on your |CL| virtual machine. + +#. On the :guilabel:`VMware Workstation Player` home screen, select your + VM. See figure 15. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-15.png + :scale: 100% + :alt: VMware Workstation 14 Player - Power on virtual machine + + Figure 15: VMware Workstation 14 Player - Power on virtual machine + +#. Click :guilabel:`Play virtual machine`. + +Related topics +************** + +For other guides on using the VMWare Player and ESXi, see: + +* :ref:`vmw-player` +* :ref:`vmware-esxi-install-cl` +* :ref:`vmware-esxi-preconfigured-cl-image` + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html +.. _VMware Workstation 14 Player: https://www.vmware.com/products/workstation-player.html +.. _VMware Workstation Player Documentation: https://docs.vmware.com/en/VMware-Workstation-Player/index.html diff --git a/_sources/get-started/virtual-machine-install/vmw-player.rst.txt b/_sources/get-started/virtual-machine-install/vmw-player.rst.txt new file mode 100644 index 00000000..a1028274 --- /dev/null +++ b/_sources/get-started/virtual-machine-install/vmw-player.rst.txt @@ -0,0 +1,296 @@ +.. _vmw-player: + +Install |CL-ATTR| as a VMware\* Workstation Player guest OS +########################################################### + +This page explains how to create a new VM and install |CL| on it with the +VMware Workstation Player hypervisor. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +`VMware Workstation Player`_ is a type 2 hypervisor. It runs on top of +Windows\* or Linux\* operating systems. With VMware ESXi, you can +create, configure, manage, and run |CL-ATTR| :abbr:`VMs (Virtual Machines)` +on your local system. + +VMware offers a type 1 hypervisor called `VMware ESXi`_ designed for the +cloud environment. For information on how to install |CL| as guest OS on +it, see :ref:`vmware-esxi-install-cl`. + +.. note:: + + The screenshots on this document show the Windows version of the + VMware Workstation 15 Player. The menus and prompts are similar to those + in other versions and for the Linux OS save some minor wording differences. + +If you prefer to use a pre-configured |CL| VMware image instead, +see our :ref:`vmw-player-preconf` guide. + +Install the VMware Workstation Player hypervisor +************************************************ + +#. Enable :abbr:`Intel® VT (Intel® Virtualization Technology)` and + :abbr:`Intel® VT-d (Intel® Virtualization Technology for Directed I/O)` in + your system's BIOS. + +#. `VMware Workstation Player`_ is available for Windows and Linux. + Download your preferred version. + + .. note:: + + By default, selecting download means you receive the latest version + of this application. Commands may differ based on the version. + +#. Install VMware Workstation Player following the instructions + appropriate for your system's OS: + + * On supported Linux distros: + + #. Enable a GUI desktop. + #. Start a terminal emulator. + #. Start the installer by issuing the command below and follow the + guided steps. + + .. code-block:: console + + sudo sh ./VMware-Player-[version number].x86_64.bundle + + * On Windows: + + #. Start the installer. + #. Follow the setup wizard. + +For additional help, see the `VMware Workstation Player Documentation`_. + +Download the latest |CL| installer +********************************** + +Get the latest installer with |CL| OS Desktop from the `downloads`_ page. + +Visit :ref:`image-types` for additional information about all available |CL| images. + +We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to :ref:`download-verify-decompress`. + +Create and configure a new VM +***************************** + +#. Start the `VMware Workstation Player` app. + +#. On the home screen, click :guilabel:`Create a New Virtual Machine`. See + Figure 1. + + .. figure:: figures/vmw-player/vmw-player-01.png + :scale: 100% + :alt: VMware Workstation Player - Create a new virtual machine + + Figure 1: VMware Workstation Player - Create a new virtual + machine + +#. On the :guilabel:`Welcome to the New Virtual Machine Wizard` screen, + select the :guilabel:`Installer disc image file (iso)` option. + See Figure 2. + + .. figure:: figures/vmw-player/vmw-player-02.png + :scale: 100% + :alt: VMware Workstation Player - Select |CL| installer ISO + + Figure 2: VMware Workstation Player - Select |CL| installer ISO + +#. Click the :guilabel:`Browse` button and select the decompressed |CL| + installer ISO. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Select a Guest Operating System`, set the + :guilabel:`Guest operating system` setting to :guilabel:`Linux`. See + Figure 3. + + .. figure:: figures/vmw-player/vmw-player-03.png + :scale: 100% + :alt: VMware Workstation Player - Select guest operating system type + + Figure 3: VMware Workstation Player - Select guest operating system + type + +#. Set the :guilabel:`Version` setting to + :guilabel:`Other Linux 4.x or later kernel 64-bit`. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Name the Virtual Machine` screen, name the new VM. See + Figure 4. + + .. figure:: figures/vmw-player/vmw-player-04.png + :scale: 100% + :alt: VMware Workstation Player - Name virtual machine + + Figure 4: VMware Workstation Player - Name virtual machine + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Specify Disk Capacity` screen, set the VM's maximum disk + size. See Figure 5. + + .. figure:: figures/vmw-player/vmw-player-05.png + :scale: 100% + :alt: VMware Workstation Player - Set disk capacity + + Figure 5: VMware Workstation Player - Set disk capacity + + .. note:: + + For optimal performance with the |CL| Desktop image, we recommend 32GB + of drive space. See :ref:`system-requirements` for more details. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Ready to Create Virtual Machine` screen, click the + :guilabel:`Customize Hardware...` button. See Figure 6. + + .. figure:: figures/vmw-player/vmw-player-06.png + :scale: 100% + :alt: VMware Workstation Player - Customize hardware + + Figure 6: VMware Workstation Player - Customize hardware + +#. Select :guilabel:`Memory` and set the size to 2GB. See Figure 7. + + .. figure:: figures/vmw-player/vmw-player-07.png + :scale: 100% + :alt: VMware Workstation Player - Set memory size + + Figure 7: VMware Workstation Player - Set memory size + + .. note:: + The |CL| installer ISO needs a minimum of 2GB of RAM. + After completing installation, |CL| can run on as little as + 128MB of RAM. Thus, you can reduce the memory size if needed. + See :ref:`system-requirements` for more details. + +#. Under the :guilabel:`Device` list, select :guilabel:`Processors`. See + Figure 8. + + .. figure:: figures/vmw-player/vmw-player-08.png + :scale: 100% + :alt: VMware Workstation Player - Set virtualization engine option + + Figure 8: VMware Workstation Player - Set virtualization engine + option + +#. Under the :guilabel:`Virtualization engine` section, + check :guilabel:`Virtualize Intel VT-x/EPT or AMD-V/RVI`. + +#. Click the :guilabel:`Close` button. + +#. Click the :guilabel:`Finish` button. + +Install |CL| into the new VM +**************************** + +#. Select the newly-created VM and click the :guilabel:`Play virtual machine` + button. See Figure 9. + + .. figure:: figures/vmw-player/vmw-player-09.png + :scale: 100% + :alt: VMware Workstation Player - Power on virtual machine + + Figure 9: VMware Workstation Player - Power on virtual machine + +#. Follow the :ref:`install-on-target-start` guide to complete the + installation of |CL|. + +#. After the installation completes, reboot the VM. This reboot restarts the + |CL| installer. + +Detach the |CL| installer ISO from the VM +***************************************** + +#. To enable the mouse pointer so you access VMware Workstation Player's + menus, press :kbd:`` + :kbd:`` on the keyboard. + +#. To disconnect the CD/DVD to stop it from booting the |CL| installer ISO + again, click the :guilabel:`Player` menu. See Figure 10. + + .. figure:: figures/vmw-player/vmw-player-10.png + :scale: 100% + :alt: VMware Workstation Player - Edit CD/DVD settings + + Figure 10: VMware Workstation Player - Edit CD/DVD settings + +#. Go to :menuselection:`Removable Devices-->CD/DVD (IDE)-->Disconnect`. + +#. Click the :guilabel:`OK` button. + +Enable UEFI boot support +************************ + +|CL| needs UEFI support to boot. To enable UEFI: + +#. Power off the VM. click the :guilabel:`Player` menu. See Figure 11. + + .. figure:: figures/vmw-player/vmw-player-11.png + :scale: 100% + :alt: VMware Workstation Player - Power off virtual machine + + Figure 11: VMware Workstation Player - Power off virtual machine + +#. Go to :guilabel:`Power` and select :guilabel:`Shut Down Guest`. + +#. Add the following line to the end of your VM's :file:`.vmx` file: + + .. code-block:: console + + firmware = "efi" + + .. note:: + + Depending on the OS, you can typically find the VMware VM files under: + + * On Linux distros: :file:`/home/username/vmware` + * On Windows: :file:`C:\\Users\\username\\Documents\\Virtual Machines` + + +#. After configuring the settings above, power on your |CL| virtual machine. + On the :guilabel:`VMware Workstation Player` home screen, select your + VM. See Figure 9. + +#. Click :guilabel:`Play virtual machine`. + +#. Install Open VM Tools. You may want to install the `open-vm-tools` in + your virtual machine. The Open Virtual Machine Tools (open-vm-tools) are + the open source implementation of VMware Tools for Linux guest operating + systems. In |CL| you can use the following to install the bundle in your VM + + .. code-block:: console + + sudo swupd bundle-add os-cloudguest-vmware + sudo systemctl enable --now open-vm-tools + +More information is available on the `VMWare Tools Product Documentation`_ site. + +Related topics +************** + +For other guides on using the VMWare Player and ESXi, see: + +* :ref:`vmw-player-preconf` +* :ref:`vmware-esxi-install-cl` +* :ref:`vmware-esxi-preconfigured-cl-image` + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html + +.. _VMware Workstation Player: + https://www.vmware.com/products/workstation-player.html + +.. _VMware Workstation Player Documentation: + https://docs.vmware.com/en/VMware-Workstation-Player/index.html + +.. _downloads: https://clearlinux.org/downloads + +.. _VMWare Tools Product Documentation: https://docs.vmware.com/en/VMware-Tools/10.1.0/com.vmware.vsphere.vmwaretools.doc/GUID-8B6EA5B7-453B-48AA-92E5-DB7F061341D1.html diff --git a/_sources/get-started/virtual-machine-install/vmware-esxi-install-cl.rst.txt b/_sources/get-started/virtual-machine-install/vmware-esxi-install-cl.rst.txt new file mode 100644 index 00000000..902548a4 --- /dev/null +++ b/_sources/get-started/virtual-machine-install/vmware-esxi-install-cl.rst.txt @@ -0,0 +1,288 @@ +.. _vmware-esxi-install-cl: + +Install |CL-ATTR| as a VMware\* ESXi guest OS +############################################# + +This page explains how to create a new :abbr:`VM (Virtual Machine)` and +manually install |CL-ATTR| on the new VM with VMware ESXi 6.5. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +`VMware ESXi`_ is a type 1 bare-metal hypervisor that runs directly on top +of server hardware. With VMware ESXi, you can create, configure, manage, and +run |CL| virtual machines in the cloud. + +Manually installing |CL| on a new VM gives additional configuration flexibility +during installation. For example: alternate disk sizes, number of partitions, +pre-installed bundles, etc. + +If you prefer to use a preconfigured |CL| VMware image instead, refer to +:ref:`vmware-esxi-preconfigured-cl-image`. + +.. note:: + + VMware also offers a type 2 hypervisor designed for the desktop environment, + called `VMware Workstation Player`_. Refer to :ref:`vmw-player-preconf` or + :ref:`vmw-player` for more information. + + Visit :ref:`image-types` to learn more about all available images. + +Download the latest |CL| installer ISO +************************************** + +Get the latest |CL| installer ISO image from the `image`_ repository. +Look for :file:`clear-[version number]-installer.iso.xz`. + +We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to :ref:`download-verify-decompress`. + +Upload the |CL| installer ISO to the VMware server +************************************************** + +#. Connect to the VMware server and log into an account with sufficient + permission to create and manage VMs. +#. Under the :guilabel:`Navigator` window, select :guilabel:`Storage`. + See Figure 1. +#. Under the :guilabel:`Datastores` tab, click the :guilabel:`Datastore browser` + button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-1.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Storage + + Figure 1: VMware ESXi - Navigator > Storage + +#. Click the :guilabel:`Create directory` button and name the directory `ISOs`. + See Figure 2. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-2.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Create directory + + Figure 2: VMware ESXi - Datastore > Create directory + +#. Select the newly-created directory and click the :guilabel:`Upload` button. + See Figure 3. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-3.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Upload ISO + + Figure 3: VMware ESXi - Datastore > Upload ISO + +#. Select the decompressed |CL| installer ISO file :file:`clear-[version number]-installer.iso` + and upload it. + +Create and configure a new VM +***************************** + +In this section, you will create a new VM, configure its basic parameters such +as drive size, number of CPUs, memory size, and then attach the |CL| installer ISO. + +#. Under the :guilabel:`Navigator` window, select :guilabel:`Virtual Machines`. + See Figure 4. +#. In the right window, click the :guilabel:`Create / Register VM` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-4.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines + + Figure 4: VMware ESXi - Navigator > Virtual Machines + +#. On the :guilabel:`Select creation type` step: + + #. Select the :guilabel:`Create a new virtual machine` option. + See Figure 5. + #. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-5.png + :scale: 100 % + :alt: VMware ESXi - Create a new virtual machine + + Figure 5: VMware ESXi - Create a new virtual machine + +#. On the :guilabel:`Select a name and guest OS` step: + + #. Give the new VM a name in the :guilabel:`Name` field. See Figure 6. + #. Set the :guilabel:`Compatability` option to :guilabel:`ESXi 6.5 virtual machine`. + #. Set the :guilabel:`Guest OS family` option to :guilabel:`Linux`. + #. Set the :guilabel:`Guest OS version` option to :guilabel:`Other 3.x or later Linux (64-bit)`. + #. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-6.png + :scale: 100 % + :alt: VMware ESXi - Give a name and select guest OS type + + Figure 6: VMware ESXi - Give a name and select guest OS type + +#. On the :guilabel:`Select storage` step: + + #. Accept the default option. + #. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Customize settings` step: + + #. Click the :guilabel:`Virtual Hardware` button. See Figure 7. + #. Expand the :guilabel:`CPU` setting and enable :guilabel:`Hardware virtualization` by + checking :guilabel:`Expose hardware assisted virtualization to the guest OS`. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-7.png + :scale: 100 % + :alt: VMware ESXi - Enable hardware virtualization + + Figure 7: VMware ESXi - Enable hardware virtualization + + #. Set :guilabel:`Memory` size to 2048MB (2GB). See Figure 8. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-8.png + :scale: 100 % + :alt: VMware ESXi - Set memory size + + Figure 8: VMware ESXi - Set memory size + + .. note:: + + The |CL| installer ISO needs a minimum of 2GB of RAM to work properly. + You can reduce the memory size after the installation completes if you want, + because a minimum |CL| installation can function on as little as 128MB of RAM. + See :ref:`system-requirements` for more details. + + #. Set :guilabel:`Hard disk 1` to the desired capacity. See Figure 9. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-9.png + :scale: 100 % + :alt: VMware ESXi - Set hard disk size + + Figure 9: VMware ESXi - Set hard disk size + + .. note:: + + A minimum |CL| installation can exist on 600MB of drive space. + See :ref:`system-requirements` for more details. + + #. Attach the |CL| installer ISO. For the :guilabel:`CD/DVD Drive 1` setting, + click the drop-down list to the right of it and select the :guilabel:`Datastore ISO file` + option. Then select the |CL| installer ISO :file:`clear-[version number]-installer.iso` + that you previously uploaded to the VMware server. See Figure 10. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-10.png + :scale: 100 % + :alt: VMware ESXi - Set CD/DVD to boot installer ISO + + Figure 10: VMware ESXi - Set CD/DVD to boot installer ISO + +#. Click the :guilabel:`Next` button. +#. Click the :guilabel:`Finish` button. + +Install |CL| into the new VM +**************************** + +#. Power on the VM. + + #. Under the :guilabel:`Navigator` window, select :guilabel:`Virtual Machines`. + See Figure 11. + #. In the right window, select the newly-created VM. + #. Click the :guilabel:`Power on` button. + #. Click on the icon representing the VM to bring it into view and maximize + its window. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-11.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines > Power on VM + + Figure 11: VMware ESXi - Navigator > Virtual Machines > Power on VM + +#. Follow the :ref:`install-on-target-start` guide to complete the installation of + |CL|. +#. After the installation is complete, follow the |CL| instruction to reboot it. + This will restart the installer again. + +Reconfigure the VM's settings to boot the newly-installed |CL| +************************************************************** + +After |CL| has been installed using the installer ISO, it must be detached so +it will not run again. Also, in order to boot the newly-installed |CL|, you must +enable UEFI support. + +#. Power off the VM. + + #. Click the :guilabel:`Actions` button - located on the top-right corner + of the VM's windows - and go to the :guilabel:`Power` setting and + select the :guilabel:`Power off` option. See Figure 12. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-12.png + :scale: 100 % + :alt: VMware ESXi - Actions > Power off + + Figure 12: VMware ESXi - Actions > Power off + +#. Edit the VM settings. + + #. Click the :guilabel:`Actions` button again and select :guilabel:`Edit settings`. + See Figure 13. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-13.png + :scale: 100 % + :alt: VMware ESXi - Actions > Edit settings + + Figure 13: VMware ESXi - Actions > Edit settings + +#. Disconnect the CD/DVD to stop it from booting the |CL| installer ISO again. + + #. Click the :guilabel:`Virtual Hardware` button. See Figure 14. + #. For the :guilabel:`CD/DVD Drive 1` setting, uncheck the + :guilabel:`Connect` checkbox. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-14.png + :scale: 100 % + :alt: VMware ESXi - Disconnect the CD/DVD drive + + Figure 14: VMware ESXi - Disconnect the CD/DVD drive + +#. |CL| needs UEFI support in order to boot. Enable it. + + #. Click the :guilabel:`VM Options` button. See Figure 15. + #. Expand the :guilabel:`Boot Options` setting. + #. For the :guilabel:`Firmware` setting, click the drop-down list to the right + of it and select the :guilabel:`EFI` option. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-15.png + :scale: 100 % + :alt: VMware ESXi - Set boot firmware to EFI + + Figure 15: VMware ESXi - Set boot firmware to EFI + +#. Click the :guilabel:`Save` button. + +Power on the VM and boot |CL| +***************************** + +After configuring the settings above, power on the VM. + +#. Under the :guilabel:`Navigator` window, select :guilabel:`Virtual Machines`. + See Figure 16. +#. In the right window, select the VM. +#. Click the :guilabel:`Power on` button. +#. Click on the icon representing the VM to bring it into view and maximize + its window. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-16.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines > Power on VM + + Figure 16: VMware ESXi - Navigator > Virtual Machines > Power on VM + +Related topics +************** + +* :ref:`vmware-esxi-preconfigured-cl-image` + + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html +.. _VMware Workstation Player: https://www.vmware.com/products/workstation-player.html +.. _image: https://cdn.download.clearlinux.org/image diff --git a/_sources/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst.txt b/_sources/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst.txt new file mode 100644 index 00000000..f19165d5 --- /dev/null +++ b/_sources/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst.txt @@ -0,0 +1,288 @@ +.. _vmware-esxi-preconfigured-cl-image: + +Run preconfigured |CL-ATTR| image as a VMware\* ESXi guest OS +############################################################# + +This page explains how to deploy a preconfigured |CL| VMware +:abbr:`VM (Virtual Machine)` image on a VMware ESXi 6.5 host. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +`VMware ESXi`_ is a type 1 bare-metal hypervisor which runs directly on top +of server hardware. With VMware ESXi, you can create, configure, manage, +and run |CL-ATTR| virtual machines at scale. + +We provide a preconfigured |CL| VMware image that can be run on a VMware ESXi +6.5 host. + +If manuall installation is preferred, refer to :ref:`vmware-esxi-install-cl`. + +.. note:: + + VMware also offers a type 2 hypervisor designed for the desktop environment, + called `VMware Workstation Player`_. Refer to :ref:`vmw-player-preconf` or + :ref:`vmw-player` for more information. + +Download the latest |CL| VMware image +************************************* + +Get the latest |CL| VMware prebuilt image from the `image`_ repository. +Look for :file:`clear-[version number]-vmware.vmdk.xz`. You can also use +this command: + +.. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware) + +Visit :ref:`image-types` for additional information about all available |CL| images. + +We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to :ref:`download-verify-decompress`. + +Upload the |CL| image to the VMware server +****************************************** + +Once the |CL| VMware prebuilt image has been downloaded and +decompressed on your local system, it must be uploaded to a datastore +on the VMware ESXi server. + +The steps in this section can also be referenced from the VMware documentation +`Using Datastore File Browser in the VMware Host Client`_. + +#. Connect to the VMware ESXi server and login to an account with sufficient + permission to create and manage VMs. + +#. Under the :guilabel:`Navigator` window on the left side, + select :guilabel:`Storage`. + See Figure 1 + +#. Under the :guilabel:`Datastores` tab, click + the :guilabel:`Datastore browser` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-1.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Storage + + Figure 1: VMware ESXi - Navigator > Storage + +#. Click the :guilabel:`Create directory` button and name the directory + `Clear Linux VM`. See Figure 2. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-2.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Create directory + + Figure 2: VMware ESXi - Datastore > Create directory + +#. Select the newly-created directory and click the :guilabel:`Upload` + button. See Figure 3. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-3.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Upload VMware image + + Figure 3: VMware ESXi - Datastore > Upload VMware image + +#. Select the decompressed |CL| VMware image file + :file:`clear-[version number]-vmware.vmdk` and upload it. + +Convert the |CL| image to an ESXi-supported format +************************************************** + +Once the |CL| VMware prebuilt image has been uploaded to the VMware ESXi +datastore, it must be converted to a format for usable with VMware's ESXi +hypervisor. + +The steps in this section can also be referenced from the VMware documentation on `Cloning and converting virtual machine disks with vmkfstools`_ + +#. SSH into the `vSphere Management Assistant`_ appliance that is managing + the ESXi host or connect to the vSphere hosting using the `vSphere CLI`_. + + .. note:: + + If there is no :abbr:`vMA (vSphere Management Assistant)` appliance or :abbr:`vCLI (vSphere CLI)` configured and available, + you can temporarily enable SSH directly on the ESXi host by following the + steps described in `Enable the Secure Shell (SSH) in the VMware Host Client`_ . + + As a security best practice, remember to disable SSH access after following the steps in this section. + + +#. Locate the uploaded image, which is typically found in + :file:`/vmfs/volumes/datastore1`. + +#. Use the :command:`vmkfstools` command to perform the conversion, as + shown below: + + .. code-block:: console + + vmkfstools -i clear-[version number]-vmware.vmdk -d zeroedthick clear-[version number]-esxi.vmdk + + Two files should result from this: + + * :file:`clear-[version number]-esxi-flat.vmdk` + * :file:`clear-[version number]-esxi.vmdk` + + The :file:`clear-[version number]-esxi.vmdk` file will be used in the + next section when you create a new VM. + +Create and configure a new VM +***************************** + +In this section, you will create a new VM, configure its basic parameters +such as number of CPUs, memory size, and then attach the converted |CL| +VMware image. Also, in order to boot |CL|, you must enable UEFI support. + +#. Under the :guilabel:`Navigator` window, select + :guilabel:`Virtual Machines`. See Figure 4. + +#. In the right window, click the :guilabel:`Create / Register VM` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-4.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines + + Figure 4: VMware ESXi - Navigator > Virtual Machines + +#. On the :guilabel:`Select creation type` step: + + #. Select the :guilabel:`Create a new virtual machine` option. See + Figure 5. + + #. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-5.png + :scale: 100 % + :alt: VMware ESXi - Create a new virtual machine + + Figure 5: VMware ESXi - Create a new virtual machine + +#. On the :guilabel:`Select a name and guest OS` step: + +#. Give the new VM a name in the :guilabel:`Name` field. See Figure 6. + +#. Set the :guilabel:`Compatability` option to + :guilabel:`ESXi 6.5 virtual machine`. +#. Set the :guilabel:`Guest OS family` option to :guilabel:`Linux`. +#. Set the :guilabel:`Guest OS version` option to + :guilabel:`Other 3.x or later Linux (64-bit)`. +#. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-6.png + :scale: 100 % + :alt: VMware ESXi - Give a name and select guest OS type + + Figure 6: VMware ESXi - Give a name and select guest OS type + +#. On the :guilabel:`Select storage` step: + + #. Accept the default option. + #. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Customize settings` step: + + #. Click the :guilabel:`Virtual Hardware` button. See Figure 7. + #. Expand the :guilabel:`CPU` setting and enable + :guilabel:`Hardware virtualization` by checking + :guilabel:`Expose hardware assisted virtualization to the guest OS`. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-7.png + :scale: 100 % + :alt: VMware ESXi - Enable hardware virtualization + + Figure 7: VMware ESXi - Enable hardware virtualization + + #. Remove the default :guilabel:`Hard drive 1` setting by clicking + the `X` icon on the right side. See Figure 8. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-8.png + :scale: 100 % + :alt: VMware ESXi - Remove hard drive + + Figure 8: VMware ESXi - Remove hard drive + + #. Since a preconfigured image will be used, + the :guilabel:`CD/DVD Drive 1` setting will not be needed. Disable it + by unchecking the :guilabel:`Connect` checkbox. See Figure 9. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-9.png + :scale: 100 % + :alt: VMware ESXi - Disconnect the CD/DVD drive + + Figure 9: VMware ESXi - Disconnect the CD/DVD drive + + #. Attach the :file:`clear-[version number]-esxi.vmdk` file that was + converted from the preconfigured |CL| VMware image. + + #. Click the :guilabel:`Add hard disk` button and select the + :guilabel:`Existing hard drive` option. See Figure 10. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-10.png + :scale: 100 % + :alt: VMware ESXi - Add an existing hard drive + + Figure 10: VMware ESXi - Add an existing hard drive + + #. Select the converted :file:`clear-[version number]-esxi.vmdk` + file. Do not use the original unconverted + :file:`clear-[version number]-vmware.vmdk` file. See Figure 11. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-11.png + :scale: 100 % + :alt: VMware ESXi - Select the converted `vmdk` file + + Figure 11: VMware ESXi - Select the converted + :file:`clear-[version number]-esxi.vmdk` file + +#. |CL| needs UEFI support in order to boot. Enable UEFI boot support. + + #. Click the :guilabel:`VM Options` button. See Figure 12. + #. Expand the :guilabel:`Boot Options` setting. + #. For the :guilabel:`Firmware` setting, click the drop-down list to + the right of it and select the :guilabel:`EFI` option. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-12.png + :scale: 100 % + :alt: VMware ESXi - Set boot firmware to EFI + + Figure 12: VMware ESXi - Set boot firmware to EFI + +#. Click the :guilabel:`Save` button. +#. Click the :guilabel:`Next` button. +#. Click the :guilabel:`Finish` button. + +Power on the VM and boot |CL| +***************************** + +After configuring the settings above, power on the VM. + +#. Under the :guilabel:`Navigator` window, select + :guilabel:`Virtual Machines`. See Figure 13. +#. In the right window, select the newly-created VM. +#. Click the :guilabel:`Power on` button. +#. Click on the icon representing the VM to bring it into view and maximize + its window. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-13.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines > Power on VM + + Figure 13: VMware ESXi - Navigator > Virtual Machines > Power on VM + +Related topics +************** + +* :ref:`vmware-esxi-install-cl` + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html +.. _Using Datastore File Browser in the VMware Host Client: https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.html.hostclient.doc/GUID-7533A767-8396-4844-A3F2-206047D254EA.html +.. _vSphere Management Assistant: https://www.vmware.com/support/developer/vima/ +.. _vSphere CLI: https://www.vmware.com/support/developer/vcli/ +.. _Cloning and converting virtual machine disks with vmkfstools: https://kb.vmware.com/kb/1028042 +.. _Enable the Secure Shell (SSH) in the VMware Host Client: https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.html.hostclient.doc/GUID-B649CB74-832F-467B-B6A4-8BA67AD5C1F0.html +.. _VMware Workstation Player: https://www.vmware.com/products/workstation-player.html +.. _image: https://cdn.download.clearlinux.org/image diff --git a/_sources/guides/clear/autoproxy.rst.txt b/_sources/guides/clear/autoproxy.rst.txt new file mode 100644 index 00000000..3b850229 --- /dev/null +++ b/_sources/guides/clear/autoproxy.rst.txt @@ -0,0 +1,153 @@ +.. _autoproxy: + +Autoproxy +######### + +Autoproxy is provided to enable |CL-ATTR| to work smoothly behind a +corporate proxy. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +Autoproxy tries to detect a Proxy Auto-Config (PAC) script and use it to +automatically resolve the proxy needed for a given connection. With +Autoproxy, you can use |CL| inside any proxy environment without having to +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 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 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\* +distributions with a few minor additions and modifications. We leveraged the +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 +parse it. + +.. figure:: figures/autoproxy_0.png + :width: 400px + + Figure 1: Autoproxy Flow + +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 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. + +Troubleshooting +=============== + +Autoproxy allows |CL| to operate seamlessly behind a proxy +because :ref:`swupd ` and other |CL| tools are implemented on +top of libcurl. Tools that do not use libcurl, like git, must +be configured independently. + +If you are familiar with PAC files and WPAD, you can use +:command:`pacdiscovery` and :command:`FindProxyForURL` to +troubleshoot problems with autproxy. + +.. note:: + + Learn more about WPAD, PAC files, and PAC functions at `findproxyforurl`_. + +.. _findproxyforurl: http://findproxyforurl.com/ + +Run :command:`pacdiscovery` with no arguments to indicate + +1. if there is a problem resolving the :command:`WPAD` host name resolution: + + .. code-block:: bash + + pacdiscovery + + .. code-block:: console + + failed getaddrinfo: No address associated with hostname + Unable to find wpad host + +2. or if the :command:`pacrunner` service is disabled (masked). + + .. code-block:: bash + + pacdiscovery + + .. code-block:: console + + PAC url: http://autoproxy.your.domain.com/wpad.dat + Failed to create proxy config: Unit pacrunner.service is masked. + +Unmask the :command:`pacrunner` service by running: + +.. code-block:: bash + + systemctl unmask pacrunner.service + +:command:`FindProxyForURL` with :command:`busctl` can also indicate if the +:command:`pacrunner.service` is masked. + +.. code-block:: bash + + busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client + +.. code-block:: console + + FindProxyForURL ss "http://www.google.com" "google.com" + Unit pacrunner.service is masked. + dig wpad, dig wpad. + +:command:`FindProxyForURL` returns the URL and port of the proxy server when +an external URL and host are provided as arguments. + +.. code-block:: bash + + busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client + +.. code-block:: console + + FindProxyForURL ss "http://www.google.com" "google.com" + s "PROXY proxy.your.domain.com:" + +If a proxy server is not avialable, or if :command:`pacrunner` is running +without a PAC file, :command:`FindProxyForURL` will return "DIRECT". + +.. code-block:: bash + + busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client + +.. code-block:: console + + FindProxyForURL ss "http://www.google.com" "google.com" + s "DIRECT" + +Once :command:`pacdiscovery` is able to look up :command:`WPAD`, restart the +:command:`pacrunner` service: + +.. code-block:: bash + + systemctl stop pacrunner + systemctl restart pacdiscovery + +.. note:: + + A "domain" or "search" entry in :file:`/etc/resolv.conf` is required + for short name lookups to resolve. The :file:`resolv.conf` man page has + additional details. \ No newline at end of file diff --git a/_sources/guides/clear/autospec.rst.txt b/_sources/guides/clear/autospec.rst.txt new file mode 100644 index 00000000..ed3c2c90 --- /dev/null +++ b/_sources/guides/clear/autospec.rst.txt @@ -0,0 +1,511 @@ +.. _autospec: + +autospec +######## + +**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. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +The autospec tool attempts to infer the requirements of the :file:`.spec` file +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 +additional information on using mock. + +For a general understanding of how an RPM works, visit +the `rpm website`_ or the `RPM Packaging Guide`_ . + +How it works +************ + +Learn the autospec tool set up and process. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +============= + +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 +the setup. + +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 + the analysis of code and existing control files. + + Any control files should be located in the same directory as the resulting + :file:`.spec` file. + + View the `autospec README`_ for more information on `control files`_. + +#. autospec creates a build root with mock config. + +#. autospec attempts to build an RPM from the generated :file:`.spec`. + +#. autospec detects any missed declarations in the :file:`.spec`. + +#. 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 restarts + the build automatically at step 1 with updated build instructions. + +#. 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 + control files. + + The user resumes the process at step 1 after errors are resolved. + + 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 +new information discovered from build failures, until it has a valid +:file:`.spec`. If no build errors occur, RPM packages are successfully built. + +Examples +******** + +Complete `Setup environment to build source`_ before using these examples. + +.. contents:: + :local: + :depth: 1 + +Example 1: Build RPM with an existing spec file +=============================================== + +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: + + .. code-block:: bash + + cd ~/clearlinux + make clone_dmidecode + + .. note:: + + You can clone all package repos at once using the following command: + + .. code-block:: bash + + make [-j NUM] clone-packages + + The optional NUM is the number of threads to use. + + For a list of available packages, view the + :file:`~/clearlinux/projects/common/packages` file. + +#. Navigate to the local copy of the ``dmidecode`` package and build it: + + .. code-block:: bash + + cd ~/clearlinux/packages/dmidecode/ + make build + +#. The resulting RPMs are in :file:`./rpms`. Build logs and additional RPMs are + in :file:`./results`. + +Example 2: Build a new RPM +========================== + +This example shows how to build a new RPM with no spec file. The example will +create a simple helloclear RPM. + +#. Navigate to the autospec workspace and build the helloclear RPM. The + :file:`Makefile` provides a :command:`make autospecnew` that can + automatically generate an RPM package using the autospec tool. You must pass + the URL to the source tarball and the NAME of the RPM you wish to create: + + .. code-block:: bash + + 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`. Build logs and + additional RPMs are in :file:`./packages/helloclear/results`. + +Example 3: Generate a new spec file with a pre-defined package +============================================================== + +This example shows how to modify an existing package to create a custom RPM. In +this example you will make a simple change to the ``dmidecode`` package and +rebuild the package. + +#. Navigate to the autospec workspace and clone the ``dmidecode`` package: + + .. code-block:: bash + + cd ~/clearlinux + make clone_dmidecode + +#. Navigate into the *dmidecode* directory: + + .. code-block:: bash + + cd packages/dmidecode + +#. Open the :file:`excludes` file with an editor and add these lines: + + .. code-block:: console + + /usr/bin/biosdecode + /usr/bin/ownership + /usr/bin/vpddecode + /usr/share/man/man8/biosdecode.8 + /usr/share/man/man8/ownership.8 + /usr/share/man/man8/vpddecode.8 + + .. note:: + + These files aren't needed by dmidecode, so we can remove them without + any issues. + +#. In the :file:`dmidecode` directory, build the modified ``dmidecode`` package: + + .. code-block:: bash + + make autospec + +#. The resulting RPMs are in :file:`./rpms`. Logs are in :file:`./results`. + +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 so autospec can complete a successful build. + +#. Navigate to the autospec workspace: + + .. code-block:: bash + + cd ~/clearlinux + +#. If you have not already, clone all upstream package repos: + + .. code-block:: bash + + make [-j NUM] clone-packages + + The optional NUM is the number of threads to use. + + .. note:: + + In a later step of this example, we will search the cloned package repos + for a missing dependency. + +#. Build the opae-sdk RPM: + + .. code-block:: bash + + make autospecnew URL="https://github.com/OPAE/opae-sdk/archive/0.13.0.tar.gz" NAME="opae-sdk" + + This results in an error for a missing license file: + + .. code-block:: console + + [FATAL] Cannot find any license or opae-sdk.license file! + +#. Navigate to the package with build failures: + + .. code-block:: bash + + cd packages/opae-sdk + +#. 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: + + .. code-block:: bash + + echo "BSD-3-Clause MIT" > opae-sdk.license + +#. Run autospec again: + + .. code-block:: bash + + make autospec + + This results in a generic error: + + .. code-block:: console + + [FATAL] Build failed, aborting + +#. Open the build log to view the error details: + + .. code-block:: bash + + cat ./results/build.log + + The build log contains details for the specific failures. In this + instance, there are missing dependencies: + + .. code-block:: console + + CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: + CJSON_LIBRARY + linked by target "opae-c++-utils" in directory /builddir/build/BUILD/opae-sdk-0.13.0/tools/c++utilslib + json-c_LIBRARIES + linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae + libuuid_LIBRARIES + 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 available. In this case, it does exist and we'll add the json-c 'dev' + package into the buildreq_add: + + .. code-block:: bash + + grep 'json-c\.so$' ~/clearlinux/packages/*/*.spec + echo "json-c-dev" >> buildreq_add + + .. note:: + + This search step works only if the user cloned all of the upstream package + repos. In this example, upstream package repos were cloned in a previous + step. + +#. Search the spec files of upstream |CL| packages to see if the libuuid library + is available. In this case, it exists in the util-linux package, so we'll add + util-linux-dev package into the buildreq_add: + + .. code-block:: bash + + grep 'libuuid\.so$' ~/clearlinux/packages/*/*.spec + echo "util-linux-dev" >> buildreq_add + +#. Run autospec again and find the successfully-generated RPMs in the :file:`rpms` + directory: + + .. code-block:: bash + + make autospec + +.. note:: + + If you need a dependency that does not exist in the |CL| repo, you must first + build it manually (see `Example 2: Build a new RPM`_), then add the repo so + that autospec knows the package exists. For example: + + .. code-block:: bash + + cd ~/clearlinux/packages/ + make repoadd + make repostatus + + You only need to add the dependency to the :file:`buildreq_add` control file + if autospec is not able to automatically find the correct dependency on its + own. + +Test packaged software +********************** + +After software has been packaged with autospec, the resulting RPMs can be +tested for functionality before being integrated and deployed into a |CL| +image with the :ref:`Mixer tool `. + +The |CL| development tooling offers two ways to quickly test autospec +generated RPMs. + +.. note:: + The methods outlined below should only be used for temporary testing on + development systems. + + +Test in a |CL| virtual machine +============================== + +The |CL| development tooling includes a method to install RPMs into a |CL| +virtual machine running on the KVM hypervisor. Using a :abbr:`VM (Virtual +Machine)` allows testing in a completely isolated environment. + +To test an autospec-created package inside a VM: + +#. Download the |CL| KVM image into the :file:`~/clearlinux` directory as + :file:`clear.img`. The location and name :file:`clear.img.xz` is important + for the tooling to work: + + .. code-block:: bash + + cd ~/clearlinux + curl -o clear.img.xz https://download.clearlinux.org/image/$(curl https://download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm) + +#. Extract the downloaded |CL| KVM image: + + .. code-block:: bash + + unxz -v clear.img.xz + +#. Copy the QEMU start script and virtual firmware needed for KVM into the + :file:`~/clearlinux` directory: + + .. code-block:: bash + + cp ~/clearlinux/projects/common/start_qemu.sh . + cp /usr/share/qemu/OVMF.fd . + +#. Run :command:`make install` from the package's autospec directory. The + :command:`make install` command mounts the downloaded |CL| KVM image and + installs the autospec-created RPM into it: + + .. code-block:: bash + + cd ~/clearlinux/packages/ + make install + + The code that makes this possible can be viewed by searching for the + *install:* target in the `Makefile.common`_ file on GitHub. + +#. Return to the :file:`~/clearlinux` directory and start the |CL| VM: + + .. code-block:: bash + + cd ~/clearlinux/ + sudo ./start_qemu.sh clear.img + +#. A new |CL| VM will launch in the console. Log into the VM as *root* and set + a new pasword for the VM. + +#. Check that the software is installed in the |CL| VM as expected and perform + any relevant tests. + +#. After testing has been completed, the |CL| VM can be powered off and + deleted: + + .. code-block:: bash + + poweroff + rm clear.img + + +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 +conflicts may occur and responsibility to remove the software after testing is +up to the developer. + +To test an autospec created package directly on the |CL| development system: + +#. Run :command:`make install-local` from the package's autospec directory. + The :command:`make install-local` command extracts the RPM directly onto + the filesystem of the running |CL| system: + + .. code-block:: bash + + cd ~/clearlinux/packages/ + make install-local + + The code that makes this possible can be viewed by searching for the + *install-local:* target in the `Makefile.common`_ file on GitHub. + +#. Check that the software is installed as expected and perform any relevant + tests. + +#. After testing has been completed, the software and any related files must + be identified and deleted. The :command:`swupd repair --picky` + command can help restore the state of the :file:`/usr` directory (see + :ref:`swupd `) however any other files must be cleaned up + manually. + + +References +********** + +Reference the `autospec README`_ for details regarding `autospec` commands and options. + +Setup environment to build source +================================= + +.. _install-tooling-after-header: + +Setup of the workspace and tooling used for building source in |CL| is mostly +automated for you with a setup script. It uses tools from the +:command:`os-clr-on-clr` bundle. + +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| :file:`autospec` and :file:`common`. + +Follow these steps to setup the workspace and tooling for building source: + +#. Install the :command:`os-clr-on-clr` bundle: + + .. code-block:: bash + + sudo swupd bundle-add os-clr-on-clr + +#. Download the :file:`user-setup.sh` script: + + .. code-block:: bash + + curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh + +#. Make :file:`user-setup.sh` executable: + + .. code-block:: bash + + chmod +x user-setup.sh + +#. Run the script as an unprivileged user: + + .. code-block:: bash + + ./user-setup.sh + +#. After the script completes, log out and log in again to complete the setup + process. + +#. Set your Git user email and username for the repos on your system: + + .. code-block:: bash + + git config --global user.email "you@example.com" + git config --global user.name "Your Name" + + This global setting is used by |CL| tools that make use of Git. + +.. _install-tooling-end: + +Related topics +************** + +* :ref:`Mixer tool ` + +.. _`Makefile.common`: https://github.com/clearlinux/common/blob/master/Makefile.common +.. _autospec README: https://github.com/clearlinux/autospec +.. _control files: https://github.com/clearlinux/autospec#control-files +.. _mock wiki: https://github.com/rpm-software-management/mock/wiki +.. _rpm website: http://rpm.org +.. _RPM Packaging Guide: https://rpm-packaging-guide.github.io/ diff --git a/_sources/guides/clear/compatible-kernels.rst.txt b/_sources/guides/clear/compatible-kernels.rst.txt new file mode 100644 index 00000000..3adaa54c --- /dev/null +++ b/_sources/guides/clear/compatible-kernels.rst.txt @@ -0,0 +1,83 @@ +.. _compatible-kernels: + +Kernels +####### + +The |CL-ATTR| provides the following Linux kernels with a respective bundle. +This document describes the specific use cases these `bundles`_ serve +and provides links to their source code. + +Bare metal only +*************** + +Kernel native + The *kernel-native* bundle focuses on the bare metal platforms. It is + optimized for fast booting and performs best on the Intel® architectures + described on the :ref:`supported hardware list`. The + optimization patches are found in our `Linux`_ GitHub\* repo. + +.. _vm-kernels: + +Also compatible with VMs +************************ + +Kernel LTS + The *kernel-lts* bundle focuses on the bare metal platforms but uses the + latest :abbr:`LTS (Long Term Support)` Linux kernel. It is optimized for + fast booting and performs best on the Intel® architectures described on the + :ref:`supported hardware list`. Additionally, this + kernel includes the VirtualBox\* kernel modules, see our + :ref:`instructions on using Virtualbox` for more + information. The optimization patches are found in our `Linux-LTS`_ GitHub + repo. + +VM only +******* + +Kernel KVM + The *kernel-kvm* bundle focuses on the Linux + :abbr:`KVM (Kernel-based Virtual Machine)`. It is optimized for fast + booting and performs best on Virtual Machines running on the Intel® + architectures described on the + :ref:`supported hardware list`. Use this kernel when + running |CL| as the guest OS on top of *qemu/kvm*. Use this kernel with + **cloud orchestrators** using *qemu/kvm* internally as their **hypervisor** + . This kernel can be used as a standalone |CL| VM, see our + :ref:`instructions on using KVM` for more information. The + optimization patches are found in our `Linux-KVM`_ GitHub repo. + +Kernel Hyper-V\* + The *kernel-hyperv* bundle focuses on running Linux on Microsoft\* + Hyper-V. It is optimized for fast booting and performs best on Virtual + Machines running on the Intel® architectures described on the + :ref:`supported hardware list`. + Use this kernel when running |CL| as the guest OS of **Cloud Instances** in + projects such as Microsoft `Azure`_\*. This kernel can be used in a + standalone |CL| VM, see our :ref:`instructions on using Hyper-V` + for more information. The optimization patches are found in our + `Linux-HyperV`_ GitHub repo. + +Kernel Hyper-V LTS + The *kernel-hyperv-lts* bundle focuses on running Linux on Microsoft + Hyper-V but uses the latest :abbr:`LTS (Long Term Support)` Linux kernel. + It is optimized for fast booting and performs best on Virtual + Machines running on the Intel® architectures described on the + :ref:`supported hardware list`. + Use this kernel when running |CL| as the guest OS of **Cloud Instances** in + projects such as Microsoft `Azure`_. This kernel can be used in a + standalone |CL| VM, see our :ref:`instructions on using Hyper-V` + for more information. The optimization patches are found in our + `Linux-HyperV-LTS`_ GitHub repo. + + +.. _Linux: https://github.com/clearlinux-pkgs/linux +.. _Linux-LTS: https://github.com/clearlinux-pkgs/linux-lts +.. _Linux-KVM: https://github.com/clearlinux-pkgs/linux-kvm +.. _Linux-HyperV: https://github.com/clearlinux-pkgs/linux-hyperv +.. _Linux-HyperV-LTS: https://github.com/clearlinux-pkgs/linux-hyperv-lts +.. _Linux-Container: https://github.com/clearlinux-pkgs/linux-container +.. _bundles: https://github.com/clearlinux/clr-bundles +.. _CIAO: https://github.com/01org/ciao +.. _Azure: + https://azuremarketplace.microsoft.com/en-us/marketplace/apps/clear-linux-project.clear-linux-os + diff --git a/_sources/guides/clear/debug.rst.txt b/_sources/guides/clear/debug.rst.txt new file mode 100644 index 00000000..bb984767 --- /dev/null +++ b/_sources/guides/clear/debug.rst.txt @@ -0,0 +1,91 @@ +.. _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, such as binaries and libraries. Extra developer data, such as 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, such as GDB. + For example, to debug *gnome-control-center* execute the following + command: + + .. code:: bash + + gdb /usr/bin/gnome-control-center + +As you step through the program and debug information is needed, the +clr_debug_daemon obtains 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 + :width: 400px + :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. You can verify its status by executing +: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 that need it. It is socket activated whenever a request to the local +FUSE filesystem occurs. You can verify its status 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/_sources/guides/clear/ister.rst.txt b/_sources/guides/clear/ister.rst.txt new file mode 100644 index 00000000..c877b700 --- /dev/null +++ b/_sources/guides/clear/ister.rst.txt @@ -0,0 +1,93 @@ +.. _ister: + +ister.py image builder +###################### + +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. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +|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 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 instructions on using ister to build an image for a custom mix. + +Examples +******** + +Recreate an upstream image +========================== + +The published configuration files for upstream images may be used to recreate an +image. Here are some examples: + +* Use an older version of |CL| and the image is no longer available (only after + March 2017). +* Customize the partitions of an image. +* Customize the bundles preinstalled in an image. +* Run your own post installation script. + + +Follow these steps to recreate an upstream image based on the image's JSON +configuration file: + +#. Install the :command:`os-installer` bundle. Refer to :ref:`swupd-guide` for + more information on installing bundles. + +#. Download the `ister.py`_ tool and grant it sudo privileges. + +#. Download the JSON configuration file for the desired image (located in + :file:`config/image/`): + + * `Current release`_ + * `Previous releases`_ (only after March 2017) + + For a previous release, navigate to `Previous releases`_, select the version + you want, and find the JSON configuration file under + :file:`/clear/config/image`. For example: + ``https://cdn.download.clearlinux.org/releases/15700/clear/config/image/`` + +#. 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 + process. If it does, download the script and make it executable. + +#. Edit the JSON configuration file as needed. + +#. If your configuration file has an accompanying "PostNonChroot" script, change + the default path of the script to match your path. + +#. Generate the new image with the following command: + + .. code-block:: bash + + sudo ister.py -t [JSON configuration] + +Related topics +************** + +* :ref:`mixer` +* :ref:`bulk-provision` + +.. _ister.py: https://github.com/bryteise/ister +.. _Current release: https://cdn.download.clearlinux.org/current/ +.. _Previous releases: https://cdn.download.clearlinux.org/releases/ diff --git a/_sources/guides/clear/mixer.rst.txt b/_sources/guides/clear/mixer.rst.txt new file mode 100644 index 00000000..789178c4 --- /dev/null +++ b/_sources/guides/clear/mixer.rst.txt @@ -0,0 +1,859 @@ +.. _mixer: + +mixer +##### + +**mixer** is the tool used by the |CL-ATTR| team to generate official update +content and releases. The update content generated by mixer is then consumed +by swupd on a downstream client. The same mixer tool is available as part of +|CL| to create your own customized update content and releases. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +mixer uses the following sources as inputs to generate update content: + +* Upstream |CL| bundles with their corresponding RPM packages +* Locally-defined bundles with their corresponding local RPM packages +* Locally-defined bundles with upstream RPM packages + +Using the mixer tool, you select which set of content from these sources +will be part of your update. You can select content from each of these sources to make a unique combination of functionality for your custom update content, known as a **mix**. + +The update content that mixer generates consists of various pieces of OS +content, update metadata, as well as a complete image. The OS content +includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via swupd. Refer to :ref:`swupd ` for additional information regarding updates and update content. + +How it works +************ + +Learn the mixer tool set up and workflow. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +============= + +* :command:`mixer` bundle + + Add the mixer tool with the :command:`mixer` bundle. Refer to + :ref:`swupd-guide` for more information on installing bundles. + +* Docker\* container + + mixer by default runs all build commands in a Docker container to ensure + the correct tool versions are used. This also allows custom mixes to + automatically perform downstream format bumps when the upstream releases a + format bump. See `Format version`_ for additional information regarding + format bumps. + + Refer to `Configure and enable Docker`_ for instruction. + +* Docker proxy (optional) + + If you use a proxy server, you must set your proxy environment variables and + create a proxy configuration file for the Docker daemon and container. + + Consult your IT department for the correct values if you are behind a + corporate proxy. + + Refer to `Configure Docker proxy info`_ for instruction. + +* Location to host the update content and images + + In order for swupd to make use of your mix, the update content for your mix + must be hosted on a web server. Your mix will be configured with an update + location URL, which swupd will use to pull down updates. + + Refer to `Set up a nginx web server for mixer`_ for an simple example of + setting up an update location. + +Mix setup +========== + +Follow these steps to create and initialize the mixer workspace. Complete +the setup before you create a mix. + +#. Create workspace. + + The mixer tool uses a simple workspace to contain all input and output in a + basic directory structure. The workspace is simply an empty folder from + which you execute the mixer commands. Each mix uses its own separate + workspace. + +#. Initialize the workspace and mix. + + Before you create a mix, you must explicitly initialize the mixer workspace. + During initialization, the mixer workspace is configured and the base for + your mix is defined. By default, your mix is based on the latest + upstream version and starts with the minimum set of bundles. Your first custom + mix version number starts at 10. Alternatively, you can select other + versions or bundle sets from which to start. + + Initialization creates the directory structure within the workspace and adds + the :file:`builder.conf` file, which is used to configure the mixer tool. + + View the `mixer.init man page`_ for more information on mixer + initialization. + + View the list of suitable `releases`_ from which to mix. + +#. Edit builder.conf. + + :file:`builder.conf` tells the mixer tool how to configure the mix. For + example, it allows you to configure where mixer output is located and where + swupd update content will be located. + + At minimum, set the URL of your update server so your custom OS knows where + to get update content. + + Refer to the `builder.conf`_ section for more information. + +Create a mix +============ + +A mix is created with the following steps: + +#. Add custom RPMs and set up local repo (optional). + + If you are adding custom RPMs to your mix, you must add the RPMs to + your mix workspace and set up a corresponding local repository. + + Go to the :ref:`autospec` guide to learn to build RPMs from + scratch. If the RPMs are not built on |CL|, make sure your + configuration and toolchain builds them correctly for |CL|. Otherwise there + is no guarantee they will be compatible. + + Refer to the :ref:`autospec` guide for more information on using autospec to + build RPMs. + +#. Update and build bundles. + + Add, edit, or remove bundles that will be part of your content and build + them. mixer automatically updates the :file:`mixbundles` file when you + update the bundles in your mix. + + View the `mixer.bundle man page`_ for more information on configuring bundles + in a mix. + + View the `mixer.build man page`_ for more information on building bundles. + + View the `Bundles`_ section for more information on how mixer manages + bundles. + +#. Create the update content. + + mixer creates update content with this step. Zero-packs are created + automatically, and delta-packs can be optionally created at the same time + (for all builds after version 0). + + A zero-pack is the full set of content needed to go from mix version 0 + (nothing) to the mix version for which you just built content. + + A delta-pack provides the content *delta* between a `PAST_VERSION` to a + `MIX_VERSION` that allows the transition from one mix version to another. + + View :ref:`swupd-guide` for more information on update content. + +#. Create image. + + mixer creates a bootable image from your updated content using + the :ref:`ister` tool. In this step you can specify which bundles you want + *preinstalled* in the image. Users can later install other bundles available + in your mix. + +#. Make update available. + + Deploy update content and images to your update server. + + View the `Example 3: Deploy updates to target`_ for a simple deployment + scenario. + +Maintain or modify mix +====================== + +Update or modify your content to a new version by following the steps to +create a mix. Increment the mix version number for the next mix. + +Examples +******** + +The following examples are designed to work together and in order. The examples +use: + +* A stock installation of |CL|. +* A web server that comes with |CL| to host the content updates. +* A simple VM that updates against the locally produced content created in + Example 2. + +Complete all `Prerequisites`_ before using these examples. + +Example 1: Mix set up +====================== + +This example shows the basic steps for the first-time setup of +mixer for a new mix. + +#. Create an empty directory to use as a workspace for mixer: + + .. code-block:: bash + + mkdir ~/mixer + +#. In your mixer workspace, generate an initial mix based on the latest upstream + |CL| version, with minimum bundles. In the initialization output, be aware + that your initial mix version is set to 10 and that the minimum bundles have + been added. + + .. code-block:: bash + + cd ~/mixer + mixer init + +#. Edit :file:`builder.conf` to set the value of CONTENTURL and VERSIONURL to + the IP address of the nginx\* server you set up in the prerequisite + `Set up a nginx web server for mixer`_. For example: + + .. code-block:: console + + CONTENTURL="http://192.168.25.52" + VERSIONURL="http://192.168.25.52" + +Example 2: Create a simple mix +============================== + +This example shows how to create a simple custom mix using upstream content. +We'll create an image for a QEMU virtual machine that we can use later to test +our mix. + +We can use the default bundles that were added during initialization, but these +include the :command:`native-kernel` bundle that is intended to be used on a +bare metal system instead of a VM. So we will modify the default bundle +set to get a smaller kernel image, which will also be faster to load. + +#. Update bundles in mix: + + .. code-block:: bash + + mixer bundle remove kernel-native + mixer bundle add kernel-kvm + +#. In this case, we will add the `editors` bundle from upstream, but we will + remove the `joe` editor. + + .. code-block:: bash + + mixer bundle add editors + mixer bundle edit editors + +#. Use an editor and manually remove `joe` from the bundle definition. + + .. code-block:: bash + + $EDITOR ./local-bundles/editors + +#. List the bundles in the mix again to confirm removal. + + .. code-block:: bash + + mixer bundle list --tree + + +#. Build bundles: + + .. code-block:: bash + + mixer build bundles + + Look in ~/mixer/update/image//full for the full chroot after the + :command:`build` command completes. + +#. Build update content. Browse to your \http://localhost site and you'll see + the web page is now up, but with no update content. Build the update content: + + .. code-block:: bash + + mixer build update + + Refresh your \http://localhost site and now you can see the update + content for mix version 10. + + Look in ~/mixer/update/www/ to see the update content in your + workspace. + +#. Configure image. Edit the ister configuration file for your image to include + all of the bundles you want preinstalled in the image. If this is the first + time creating an image, first get a copy of the + :file:`release-image-config.json` template file: + + .. code-block:: bash + + curl -O https://raw.githubusercontent.com/bryteise/ister/master/release-image-config.json + + For this example, edit :file:`release-image-config.json` so that the root + partition size is "5G" and replace the "kernel-native" bundle with + "kernel-kvm". + + .. code-block:: console + + { + "DestinationType" : "virtual", + "PartitionLayout" : [ { "disk" : "release.img", "partition" : 1, "size" : "32M", "type" : "EFI" }, + { "disk" : "release.img", "partition" : 2, "size" : "16M", "type" : "swap" }, + { "disk" : "release.img", "partition" : 3, "size" : "5G", "type" : "linux" } ], + "FilesystemTypes" : [ { "disk" : "release.img", "partition" : 1, "type" : "vfat" }, + { "disk" : "release.img", "partition" : 2, "type" : "swap" }, + { "disk" : "release.img", "partition" : 3, "type" : "ext4" } ], + "PartitionMountPoints" : [ { "disk" : "release.img", "partition" : 1, "mount" : "/boot" }, + { "disk" : "release.img", "partition" : 3, "mount" : "/" } ], + "Version": "latest", + "Bundles": ["kernel-kvm", "os-core", "os-core-update"] + } + +#. Build the image. + + .. code-block:: bash + + sudo mixer build image + + The output from this step will be :file:`release.img`, which is a live image. + +#. Make the next mix. Create a new version of your mix, for the live image to + update to. Increment your mix version by 10: + + .. code-block:: bash + + mixer versions update + + Repeat steps 1-3 to add the upstream :command:`curl` bundle to the mix: + + .. code-block:: bash + + mixer bundle add curl + mixer build bundles + mixer build update + + Build optional delta-packs, which helps reduce client update time: + + .. code-block:: bash + + mixer build delta-packs --from 10 --to 20 + + Refresh your \http://localhost site to see the update content for + mix version 20. + + Look in ~/mixer/update/www/ to see the update content in your + workspace. + +Example 3: Deploy updates to target +=================================== + +The image created in Example 2 is directly bootable in QEMU. In this example, +we'll boot the image from Example 2 to verify it, and update the image from +mix version 10 (from which the image was built), to mix version 20. + +#. Set up the QEMU environment. + + Install the :command:`kvm-host` bundle to your |CL|: + + .. code-block:: bash + + sudo swupd bundle-add kvm-host + + Get the virtual EFI firmware, download the image launch script, and make it + executable: + + .. code-block:: bash + + curl -O https://download.clearlinux.org/image/OVMF.fd + curl -O https://download.clearlinux.org/image/start_qemu.sh + chmod +x start_qemu.sh + +#. Start your VM image (created in Example 2): + + .. code-block:: bash + + sudo ./start_qemu.sh release.img + +#. Log in as root and set a password + +#. Try out your mix. + + Take a look at the default bundles installed in your mix: + + .. code-block:: bash + + swupd info + swupd bundle-list + swupd bundle-list -a + +#. Now we will add the `editors` bundle that we modified. + + .. code-block:: bash + + swupd bundle add editors + +#. Try to start the `joe` editor. It should not appear because we removed it + from the original `editors` bundle. + +#. Next we will update from version 10 to 20 to capture the newly + available bundles. Use :command:`swupd` to update your mix: + + .. code-block:: bash + + swupd check-update + swupd update + swupd bundle-list -a + +#. Now your mix should be at version 20 and curl is now available. Try using + curl. This will fail because curl is not yet installed: + + .. code-block:: console + + curl: command not found + To install curl use: swupd bundle-add curl + + Add the new bundle from your update server to your VM. Retry curl. It works! + + .. code-block:: bash + + swupd bundle-add curl + curl -O https://download.clearlinux.org/image/start_qemu.sh + + Shutdown your VM: + + .. code-block:: bash + + poweroff + + +.. Example: Create a mix with custom RPM +.. ------------------------------------- +.. TODO future example to show copy into local-rpms... + +References +********** + +Reference the `mixer man page`_ for details regarding mixer commands and options. + +.. contents:: + :local: + :depth: 1 + +.. rst-class:: content-collapse + +builder.conf +============ + +mixer initialization creates a :file:`builder.conf` that stores the basic +configuration for the mixer tool. The items of primary interest are CONTENTURL +and VERSIONURL, which will be used by systems updating against your custom +content. + +.. code-block:: console + + #builder.conf + + #VERSION 1.0 + + [Builder] + CERT = "/home/clr/mix/Swupd_Root.pem" + SERVER_STATE_DIR = "/home/clr/mix/update" + VERSIONS_PATH = "/home/clr/mix" + YUM_CONF = "/home/clr/mix/.yum-mix.conf" + + [Swupd] + BUNDLE = "os-core-update" + CONTENTURL = "" + VERSIONURL = "" + + [Server] + DEBUG_INFO_BANNED = "true" + DEBUG_INFO_LIB = "/usr/lib/debug" + DEBUG_INFO_SRC = "/usr/src/debug" + + [Mixer] + LOCAL_BUNDLE_DIR = "/home/clr/mix/local-bundles" + LOCAL_REPO_DIR = "" + LOCAL_RPM_DIR = "" + DOCKER_IMAGE_PATH = "clearlinux/mixer" + +Additional explanation of variables in :file:`builder.conf` is provided in Table +1. + ++-------------------------------+----------------------------------------------------------+ +| **Variable** | **Explanation** | ++-------------------------------+----------------------------------------------------------+ +| `CERT` | Sets the path where mixer stores the certificate file | +| | used to sign content for verification. mixer | +| | automatically generates the certificate if you do not | +| | provide the path to an existing one, and signs the | +| | :file:`Manifest.MoM` file to provide security for the | +| | updated content you create. | +| | | +| | chroot-builder uses the certificate file to sign | +| | the root :file:`Manifest.MoM` file to provide | +| | security for content verification. | +| | | +| | swupd uses this certificate to verify the | +| | :file:`Manifest.MoM` file's signature. | +| | | +| | For now, we strongly recommend that you do not modify | +| | this variable, as swupd expects a certificate with a | +| | very specific configuration to sign and verify | +| | properly. | ++-------------------------------+----------------------------------------------------------+ +| `CONTENTURL` and `VERSIONURL` | Set these variables to the IP address of the web server | +| | hosting the update content. | +| | | +| | VERSIONURL is the IP address where the swupd client | +| | looks to determine if a new version is available. | +| | | +| | CONTENTURL is the location from which swupd pulls | +| | content updates. | +| | | +| | If the web server is on the same machine as the | +| | SERVER_STATE_DIR directory, you can create a symlink to | +| | the directory in your web server's document root to | +| | easily host the content. | +| | | +| | These URLs are embedded in the images created by mixer. | ++-------------------------------+----------------------------------------------------------+ +| `DOCKER_IMAGE_PATH` | Sets the base name of the docker image that mixer pulls | +| | down to run builds in the proper container. | ++-------------------------------+----------------------------------------------------------+ +| `LOCAL_BUNDLE_DIR` | Sets the path where mixer stores the local bundle | +| | definition files. The bundle definition files include | +| | any new, original bundles you create, along with any | +| | edited versions of upstream bundles. | ++-------------------------------+----------------------------------------------------------+ +| `SERVER_STATE_DIR` | Sets the path to which mixer outputs content. By | +| | default, mixer automatically sets the path. | ++-------------------------------+----------------------------------------------------------+ +| `VERSIONS_PATH` | Sets the path for the mix version and upstream version's | +| | two state files: :file:`mixversion` and | +| | :file:`upstreamversion`. mixer creates both files for | +| | you when you set up the workspace. | ++-------------------------------+----------------------------------------------------------+ +| `YUM_CONF` | Sets the path where mixer automatically generates the | +| | :file:`.yum-mix.conf` file. | +| | | +| | The yum configuration file points the chroot-builder to | +| | where the RPMs are stored. | ++-------------------------------+----------------------------------------------------------+ +| **Table 1**: *Variables in builder.conf* | ++-------------------------------+----------------------------------------------------------+ + +Format version +-------------- + +Compatible versions of an OS are tracked with an OS *compatibility epoch*. +Versions of an OS within an epoch are fully compatible and can update to any +other version within that epoch. The compatibility epoch is set as the +`Format` variable in the :file:`mixer.state` file. Variables in the +:file:`mixer.state` are used by mixer between executions and should not be +manually changed. + +A format bump is like modifying the foundation of a house to create a new +level. If `Format` increments to a new epoch (a "format bump"), the OS has +changed in such a way that updating from build A in format X to build B in +format Y will not work. + +A format bump is required when: + +* The software updater, :command:`swupd`, or the software is no longer + compatible with the previous update scheme + +* A package is removed from the update stream and the update must ensure the + files associated with that package are removed from the system + +Using a format increment, we make sure pre- and co-requisite changes flow out +with proper ordering. The updated client will only update to the latest +release in its respective format version, unless overridden by command line +flags. In this way, we can guarantee that all clients update to the final +version in their given format. + +The given format *must* contain all the changes needed to understand the content built in the next format. Only after reaching the final release in the old format can a client continue to update to releases in the new format. + +The format version is incremented only when a compatibility breakage is +introduced. Normal updates, such as updating a software package, do not require a format increment. + +.. rst-class:: content-collapse + +Bundles +======= + +mixer stores information about the bundles included in a mix in a flat file +called :file:`mixbundles`, which is located in the path set by the VERSIONS_PATH variable in :file:`builder.conf`. :file:`mixbundles` is automatically created when the mix is initiated. mixer will refresh the file each time you change the bundles in the mix. + +Bundles can include other bundles. Nested bundles can themselves include +other bundles. If you see an unexpected bundle in your mix, it is likely a +nested bundle in one of the bundles you explicitly added. + +A bundle will fill into one of two categories: upstream or local. Upstream +bundles are those provided by |CL|. Local bundles are either modified upstream bundles or new local bundles. + +Upstream bundles +---------------- + +mixer automatically downloads and caches upstream bundle definition files. +These definition files are stored in the upstream-bundles directory in the +workspace. Do not modify the files in this directory. This directory is +simply a mirror for mixer to use. mixer will automatically delete the +contents of this directory before repopulating it on-the-fly if a new +version must be downloaded. + +The mixer tool automatically caches the bundles for the |CL| version +configured in the :file:`upstreamversion` file. mixer also cleans up old +versions once they are no longer needed. + +Local bundles +------------- + +Local bundles are bundles that you create, or are edited versions of upstream +bundles. Local bundle definition files are stored in the local-bundles +directory in the workspace. The LOCAL_BUNDLE_DIR variable sets the path of this directory in the :file:`builder.conf` file. + +*mixer always checks for local bundles first and the upstream bundles +second.* So bundles in the local-bundles directory will always take +precedence over any upstream bundles that have the same name. This +precedence enables you to copy upstream bundles locally, and edit into a +local variation. + +Bundle configuration +-------------------- + +mixer provides commands to configure the bundles for a mix, such as to add a +bundle to a mix, to create a new bundle for a mix, or to remove a bundle from a +mix. View the `mixer.bundle man page`_ for a full list of commands and more +information on configuring bundles in a mix. + +Editing an existing local bundle is as simple as opening the bundle definition +file in your favorite editor, making the desired edits, and saving your changes. + +.. note:: + + Removing bundles from a mix: By default, removing a bundle will only + remove the bundle from the mix. The local bundle definition file will + still remain. To completely remove a bundle, including its local bundle definition file, use the :command:`--local` flag. + + If you remove the bundle definition file for a local, edited version of an + upstream bundle in a mix, the mix reverts to reference the original upstream version of the bundle. + +.. rst-class:: content-collapse + +Configure and enable Docker +=========================== + +Use these steps to enable Docker for the mixer tool. Make sure to +`Configure Docker proxy info`_ first if needed. + +#. Start the Docker daemon: + + .. code-block:: bash + + sudo systemctl start docker + sudo chmod 777 /var/run/docker.sock + sudo docker info + +#. Add user to the docker group + + .. code-block:: bash + + sudo usermod -G docker -a + +Pull Docker container manually (optional) +----------------------------------------- + +By default, mixer automatically pulls a Docker container for mixing if one +does not already exist. If you need to troubleshoot the mixer container, it +may be useful to manually pull a mixer Docker container. + +Versions of the mixer Docker container are available under the tags for the +`clearlinux/mixer repo `_ +on Docker Hub. Each version of the mixer Docker container is named after the +associated |CL| upstream format version. Refer to `Format version`_ for +additional information on upstream format versions. + +Use the following steps to manually pull a mixer Docker container: + +#. Find the version of the container you need by viewing the tags for the + `clearlinux/mixer repo `_ + on Docker Hub. + +#. Pull the latest container version: + + .. code-block:: bash + + docker pull clearlinux/mixer: + +#. View local docker images: + + .. code-block:: bash + + docker images + +.. rst-class:: content-collapse + +Configure Docker proxy info +=========================== + +If needed, use these steps to configure the Docker proxy information. + +#. Create the Docker daemon proxy config directory: + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/system/docker.service.d + +#. Create :file:`/etc/systemd/system/docker.service.d/http-proxy.conf` and + add the following using your own proxy values: + + .. code-block:: console + + [Service] + Environment="HTTP_PROXY=:" + Environment="HTTPS_PROXY=:" + +#. Reload the Docker daemon: + + .. code-block:: bash + + sudo systemctl daemon-reload + +Configure the Docker container proxies, to pass proxy settings to +containers: + +#. Create a directory for your container config: + + .. code-block:: bash + + mkdir ~/.docker + +#. Create the config file :file:`~/.docker/config.json` and add the following + entries, using your own proxy values: + + .. code-block:: console + + { + "proxies": + { + "default": +   { +    "httpProxy": ":", +     "httpsProxy": ":" +   } + } + } + +#. Set ownership and permission on the docker config directory: + + .. code-block:: bash + + sudo chown "$USER":"$USER" /home/"$USER"/.docker -R + sudo chmod g+rwx "$HOME/.docker" -R + +Configure proxies to allow mixer to access upstream content from behind +a firewall. + +#. Open your :file:`$HOME/.bashrc` file and add proxy and port values for the + following: + + .. code-block:: console + + export http_proxy=":" + export https_proxy=":" + export HTTP_PROXY=":" + export HTTPS_PROXY=":" + export no_proxy="<...>" + +#. Log out and log back in for the proxies to take effect. + +.. rst-class:: content-collapse + +Set up a nginx web server for mixer +=================================== + +A web server is needed to host your update content. In this example, we use +the nginx web server, which comes with |CL|. + +Set up a nginx web server for mixer with the following steps: + +#. Install the :command:`nginx` bundle: + + .. code-block:: bash + + sudo swupd bundle-add nginx + +#. Make the directory where mixer updates will reside: + + .. code-block:: bash + + sudo mkdir -p /var/www + +#. Create a symbolic link between your workspace updates and the updates on + the local nginx web server. In this example, `$HOME/mixer` is the + workspace for the mix. + + .. code-block:: bash + + sudo ln -sf $HOME/mixer/update/www /var/www/mixer + +#. Set up ``nginx`` configuration: + + .. code-block:: bash + + sudo mkdir -p /etc/nginx/conf.d + +#. Copy the default example configuration file: + + .. code-block:: bash + + sudo cp -f /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf + +#. Configure the mixer update server. Create and add the following server + configuration content to :file:`/etc/nginx/conf.d/mixer.conf` (sudo required): + + .. code-block:: console + + server { + server_name localhost; + location / { + root /var/www/mixer; + autoindex on; + } + } + +#. Restart the daemon, enable nginx on boot, and start the service. + + .. code-block:: bash + + sudo systemctl daemon-reload + + sudo systemctl enable nginx + + sudo systemctl start nginx + +#. Verify the web server is running at \http://localhost. At this point + you should no longer see a "404 Not Found" message. + +Related topics +************** + +* :ref:`About mixer ` +* :ref:`autospec-about` +* :ref:`bundles-about` +* :ref:`swupd-about` + +.. _Docker Hub: https://hub.docker.com/r/clearlinux/mixer/tags/ +.. _mixer man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.1.rst +.. _mixer.init man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.init.1.rst +.. _mixer.bundle man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.bundle.1.rst +.. _mixer.build man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.build.1.rst +.. _releases: https://github.com/clearlinux/clr-bundles/releases diff --git a/_sources/guides/clear/security.rst.txt b/_sources/guides/clear/security.rst.txt new file mode 100644 index 00000000..c78fb6d3 --- /dev/null +++ b/_sources/guides/clear/security.rst.txt @@ -0,0 +1,156 @@ +.. _security: + +OS Security +########### + +|CL-ATTR| aims to make systemic and layered security-conscious decisions +that are both performant and practical. This security philosophy is rooted +within the project's codebase and operating culture. + +.. contents:: :local: + :depth: 1 + +Security in updates +******************* + +The |CL| team believes in the benefits of software security through open +sourcing, incremental updates, and rapidly resolving known security advisories. + +The latest Linux\* codebase +=========================== + +|CL| uses the newest version of the Linux kernel which allows the operating +system to leverage the latest features from the upstream Linux kernel, +including security fixes. + +Automated effective updating +============================ + +|CL| is incrementally updated multiple times per day. + +This `rolling release`_ model allows |CL| to consume the latest security fixes +of software packages as soon as they become available. There is no waiting for +major or minor releases on |CL|. + +An update is not effective if it is just simply downloaded onto a system. +It needs to be obtained *AND* ensured that the new patched copy is being +used; not an older copy loaded into memory. |CL| will let you know when a +service needs to be rebooted or do it for your automatically after +a software update, if desired. + +In |CL| updates are delivered automatically, efficiently, and effectively. For +more information about software updates in |CL|, refer to the :ref:`swupd-guide` +guide. + +Automated CVE scanning and remediation +====================================== + +The sheer number of software packages and security vulnerabilities is growing +exponentially. Repositories of Common Vulnerabilities and Exposures (CVEs) +and their fixes, if known, are published by :abbr:`NIST` in a +National Vulnerability Database \ |NVD|\ and at \ |MITRE|\ . + +|CL| employs a proactive and measured approach to addressing known +and fixable :abbr:`CVEs (Common Vulnerabilities and Exposures)`. +Packages are automatically scanned against CVEs daily, and security +patches are deployed as soon as they are available. + +These combined practices minimize the amount of time |CL| systems are exposed to unnecessary security risk. + +Security in software +********************* + +Minimized attack surface +======================== + +|CL| removes legacy, unneeded, or redundant standards and components as much as +possible to enable the use of best known security standards. Below are some +examples: + +* `RC4`, `SSLv3`, `3DES`, and `SHA-1` ciphers which have had known + vulnerabilities, have been explicitly disabled within many |CL| packages to + avoid their accidental usage. + +* Services and subsystems which expose sensitive system information + have been removed such as the `finger` and `tcpwrappers`. + +* `SFTP` has been disabled by default due to security considerations. + +Verified trust +============== + +|CL| encourages the use of secure practices such as encryption +and digital signature verification throughout the system and discourages blind +trust. Below are some examples: + +* All update operations from swupd are transparently encrypted and checked + against the |CL| maintainers' public key for authenticity. + More information about swupd security can be found in the + `Security for software update in Clear Linux* OS`_ blog post. + +* Before being built, packages available from |CL| verify checksums and + signatures provided by third party project codebases and maintainers. + +* |CL| features a unified certificate store, `clrtrust`_ which comes + ready to work with well-known Certificate Authorities out of the box. + clrtrust also offers an easy to use command line interface for managing + system-wide chains of trust, instead of ignoring foreign certificates. + +Compiled with secure options +============================ + +While |CL| packages are optimized for performance on Intel® architecture, +security conscious kernel and compiler options are sensibly taken advantage of. +Below are some examples: + +* Kernels shipped with |CL| are signed and disallow the usage of + custom kernel modules to maintain verifiable system integrity. + +* `Address space layout randomization (ASLR)`_ and + `Kernel address space layout randomization (KASLR)`_ are kernel features + which defend against certain memory based attacks. + More information about PIE executables can be found in the + `Recent GNU* C library improvements`_ blog post. + +Security in system design +************************* + +Simple, yet effective, techniques are used throughout the |CL| system design to +defend against common attack vectors and enable good security hygiene. Below are +some examples: + +* Full disk encryption using :abbr:`LUKS (Linux Unified Key Setup)` is available + during installation. Refer to `cryptsetup`_ for additional information about + LUKS. + +* |CL| uses the PAM cracklib module to harden user login and password + security resulting in: + + - No default username or root password set out of the box with + |CL|, you will be asked to set your own password immediately. + + - Simple password schemes, which are known to be easily compromised, + cannot be set in |CL|. + + - A password blacklist, to avoid system passwords being set to + passwords which have been compromised in the past. + +* `Tallow`_, a lightweight service which monitors and blocks suspicious SSH + login patterns, is installed with the :command:`openssh-server` bundle. + +.. _`Security for software update in Clear Linux* OS`: https://clearlinux.org/blogs/security-software-update-clear-linux-os-intel-architecture +.. _`Recent GNU* C library improvements`: https://clearlinux.org/blogs/recent-gnu-c-library-improvements +.. _`rolling release`: https://en.wikipedia.org/wiki/Rolling_release +.. _`clrtrust`: https://github.com/clearlinux/clrtrust +.. _`Address space layout randomization (ASLR)`: https://en.wikipedia.org/wiki/Address_space_layout_randomization +.. _`Kernel address space layout randomization (KASLR)`: https://lwn.net/Articles/569635/ +.. _`cryptsetup`: https://gitlab.com/cryptsetup/cryptsetup/ +.. _`Tallow`: https://github.com/clearlinux/tallow + +.. |NVD| raw:: html + + https://nvd.nist.gov/ + +.. |MITRE| raw:: html + + https://cve.mitre.org/ diff --git a/_sources/guides/clear/stateless.rst.txt b/_sources/guides/clear/stateless.rst.txt new file mode 100644 index 00000000..7d7aa9f2 --- /dev/null +++ b/_sources/guides/clear/stateless.rst.txt @@ -0,0 +1,139 @@ +.. _stateless: + +Stateless +######### + +In most operating systems, user data, system data, and configuration files +can become intermingled. + +.. figure:: figures/stateless-1.png + :scale: 45% + :align: center + :alt: Stateless: User and system files mixed + + Figure 1: Without stateless, user and system files become mixed on the filesystem over time. + +|CL-ATTR| has a stateless design philosophy with the goal to provide an +:abbr:`OS (operating system)` that functions without excessive user +configuration or customization. Stateless in this context does *not* mean +ephemeral or non-persistent. + +.. contents:: :local: + :depth: 1 + +File-level separation +********************* + +To accomplish a stateless design the Linux Filesystem Hierarchy is separated +between user-owned areas and |CL|-owned areas. + +.. figure:: figures/stateless-2.png + :scale: 45% + :align: center + :alt: Stateless: User and system files separation + + Figure 2: With stateless, user and system files are separated on the filesystem. + +System areas +============ +File under the :file:`/usr` directory are managed by |CL| as system files. +Files written under the :file:`/usr` directory by users can get removed +through system updates with :ref:`swupd `. 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-block:: bash + + sudo mkdir /etc/httpd + +#. Copy the default configuration as a reference template: + + .. code-block:: bash + + sudo cp /usr/share/defaults/httpd/httpd.conf /etc/httpd/ + +#. Make any desired modifications to the configurations: + + .. code-block:: bash + + sudoedit /etc/httpd/httpd.conf + +#. Reload the service or reboot the system to pickup any changes: + + .. code-block:: 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-block:: bash + + 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`_ + +.. _`stateless man page`: https://github.com/clearlinux/clr-man-pages/blob/master/stateless.7.rst + + diff --git a/_sources/guides/clear/swupd-guide.rst.txt b/_sources/guides/clear/swupd-guide.rst.txt new file mode 100644 index 00000000..b7ae2a41 --- /dev/null +++ b/_sources/guides/clear/swupd-guide.rst.txt @@ -0,0 +1,351 @@ +.. _swupd-guide: + +swupd +##### + +:command:`swupd` links a |CL-ATTR| installation with upstream updates and +software. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +:command:`swupd` has two main functions: + +#. Manage software and replace APT or YUM, by installing bundles + rather than packages. +#. Check for system updates and install them. + +: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 +========== + +Using package managers to monitor software version compatibility or +compare multiple systems on many Linux distributions can be cumbersome. + +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. + +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. On a daily basis, +this matters 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 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*, 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 +than entire packages. For example, it is quite common for an OS security +patch to be as small as 15 KB. Using binary deltas, |CL| is able to +apply only what is needed. + +For details on how to generate update content for |CL|, see the +:ref:`mixer ` tool. + +How it works +************ + +Prerequisites +============= + +* The device is on a well-connected network. +* The device is able to connect to an update server. The default server is: + http://update.clearlinux.org + +Updates +======= + +|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 can correct any problems. + +Manifests +--------- + +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. +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 +--------------------------------- + +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 |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. They 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). They cannot be used without having the original file content. + +Bundle search +============= + +:command:`swupd` searches download manifest data for +bundles that match the term. Enter only one term, or hyphenated term, per +search. Use the command :command:`man swupd` to learn more. + +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 are marked **(installed)** in search +results. + +Optionally, you can review our `bundles`_ on GitHub\*. + +Examples +******** + +Example 1: Disable and enable automatic updates +=============================================== + +|CL| updates are automatic by default, but can be set to occur only +on demand. + +#. Verify your current auto-update setting. + + .. code-block:: bash + + sudo swupd autoupdate + + Output: + + .. code-block:: console + + Enabled + +#. Disable automatic updates. + + .. code-block:: bash + + sudo swupd autoupdate --disable + + Output: + + .. code-block:: console + + Warning: disabling automatic updates may take you out of compliance with your IT policy + + Running systemctl to disable updates + Created symlink /etc/systemd/system/swupd-update.service → /dev/null. + Created symlink /etc/systemd/system/swupd-update.timer → /dev/null. + +#. Check manually for updates. + + .. code-block:: bash + + sudo swupd check-update + +#. Install an update after identifying one that you need. + + .. code-block:: bash + + sudo swupd update --version + +#. Re-enable automatic installs. + + .. code-block:: bash + + sudo swupd autoupdate --enable + +.. _swupd-guide-example-install-bundle: + +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:`VM (Virtual Machine)` for +improved security. + +|CL| makes it very easy to install, since you only need to add +one bundle to use `Kata Containers`_: `containers-virt`_, despite a +number of dependencies. Also, check out our tutorial: :ref:`kata`. + +#. Find the correct bundle. + + To return all possible matches for the search string, enter + :command:`swupd search`, followed by 'kata': + + .. code-block:: bash + + sudo swupd search kata + + The output should be similar to: + + .. code-block:: console + + Bundle with the best search result: + + containers-virt - Run container applications from Dockerhub in + lightweight virtual machines + + This bundle can be installed with: + + swupd bundle-add containers-virt + + Alternative bundle options are + + cloud-native-basic - Contains ClearLinux native software for Cloud + + .. note:: + + 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. + + .. code-block:: bash + + sudo swupd bundle-add containers-virt + + .. note:: + + To add multiple bundles, add a space followed by the bundle name. + + The output of a successful installation should be similar to: + + .. code-block:: console + + Downloading packs... + + Extracting containers-virt pack for version 24430 + ...50% + Extracting kernel-container pack for version 24430 + ...100% + Starting download of remaining update content. This may take a while... + ...100% + Finishing download of update content... + Installing bundle(s) files... + ...100% + Calling post-update helper scripts. + Successfully installed 1 bundle + +Example 3: Verify and correct system file mismatch +================================================== + +:command:`swupd` can determine whether system directories and files have +been added to, overwritten, removed, or modified (e.g., permissions). + +.. code-block:: bash + + sudo swupd diagnose + +All directories that are watched by :command:`swupd` are verified according +to the manifest data. Hash mismatches are flagged as follows: + +.. code-block:: console + + Verifying version 23300 + Verifying files + ...0% + Hash mismatch for file: /usr/bin/chardetect + ... + ... + Hash mismatch for file: /usr/lib/python3.6/site-packages/urllib3/util/wait.py + ...100% + Inspected 237180 files + 423 files did not match + Verify successful + +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 to be ignored. + +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 +*************** + +swupd info + Returns the currently installed version and update servers. + +swupd update + Updates to a specific version or updates to latest version if no + arguments are used. + +swupd bundle-list [--all] + Lists installed bundles. + +swupd bundle-add [-b] + Finds a bundle that contains your search term. + +swupd bundle-add + Adds a bundle. + +swupd bundle-remove + Removes a bundle. + +swupd --help + Lists additional :command:`swupd` commands. + +man swupd + Opens the :command:`swupd` man page. + +Refer to `swupd source documentation`_ on GitHub for more details. + +Related topics +************** + +* :ref:`autospec` +* :ref:`mixer` +* :ref:`bundles` + +.. _swupd source documentation: https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst + +.. _Kata Containers: https://clearlinux.org/downloads/containers + +.. _containers-virt: https://github.com/clearlinux/clr-bundles/blob/master/bundles/containers-virt + +.. _Bundle Definition Files: https://github.com/clearlinux/clr-bundles + +.. _bundles: https://github.com/clearlinux/clr-bundles/tree/master/bundles \ No newline at end of file diff --git a/_sources/guides/deploy-at-scale.rst.txt b/_sources/guides/deploy-at-scale.rst.txt new file mode 100644 index 00000000..3c5270c8 --- /dev/null +++ b/_sources/guides/deploy-at-scale.rst.txt @@ -0,0 +1,255 @@ +.. _deploy-at-scale: + +Deploy at Scale +############### + +This guide describes deployment considerations and strategies when deploying +|CL-ATTR| at scale in your environment. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +In this guide the term *endpoint* refers to a system targeted for |CL| +installation, whether that is a datacenter system or unit deployed in field. + +.. note:: + + This guide is not a replacement or blueprint for designing your own IT + operating environment. + + Implementation details for a scale deployment are beyond the scope of this + guide. + + Your |CL| deployment should complement your existing environment and + available tools. It is assumed core IT dependencies of your environment, + such as your network, are healthy and scaled to suit the deployment. + +Pick a usage and update strategy +******************************** + +Different business scenarios call for different deployment methodologies. +|CL| offers the flexibility to continue consuming the upstream |CL| +distribution or the option to fork away from the |CL| distribution and +act as your own :abbr:`OSV (Operating System Vendor)`. + +Below is an overview of some considerations. + +Create your own Linux distribution (mix) +======================================== + +This approach forks away from the |CL| upstream and has you act as your own +:abbr:`OSV (Operating System Vendor)` by leveraging the :ref:`mixer` process to +create customized images based on |CL|. This is a level of responsibility +that requires having more infrastructure and processes to adopt. In return, +this approach *offers you a high degree of control and customization*. Consider: + +* Development systems that generate bundles and updates should have + sufficient performance for the task and be separate from the swupd update + webservers that serve update content to production machines. + +* swupd update webservers that serve update content to production machines + should be appropriately scaled. Specific implementation details for a scalable, + resilient web server are beyond the scope of this document. + + (See :ref:`mixer` for more information about update servers.) + +Adopt an agile methodology +========================== + +The cloud, and other scaled deployments, are all about flexibility and speed. +It only makes sense that any |CL| deployment strategy should follow suit. + +Manually rebuilding your own bundles or mix for every release is not +sustainable at a large scale. A |CL| deployment pipeline should be agile +enough to validate and produce new versions with speed. Whether or not those +updates actually make their way to your production can be separate +business decision. However this *ability to frequently roll new versions* of +software to your endpoints is an important prerequisite. + +You own the validation and lifecycle of the OS and should treat it like any +other software development lifecycle. Below are some pointers: + +* Thoroughly understand the custom software packages that you will need to + integrate with |CL| and maintain along with their dependencies. + +* Setup a path to production for building |CL| based images. At minimum this + should include: + + * A development clr-on-clr environment to test building packages and + bundles for |CL| systems. + + * A pre-production environment to deploy |CL| versions to before + production + +* Employ a continuous integration and continuous deployment (CI/CD) + philosophy in order to: + + - Automatically pull custom packages as they are updated from their + upstream projects or vendors. + + - Generate |CL| bundles and potentially bootable images with your + customizations, if any. + + - Measure against metrics and indicators which are relevant to your + business (e.g. performance, power, etc) from release to release. + + - Integrate with your organization's governance processes, such as change + control. + +Versioning infrastructure +========================= + +|CL| version numbers are very important as they apply to the whole +infrastructure stack from OS components to libraries and applications. + +Good record keeping is important, so you should keep a detailed registry and +history of previously deployed versions and their contents. + +With a glance at the |CL| version numbers deployed, you should be able to +tell if your Clear systems are patched against a particular security +vulnerability or incorporate a critical new feature. + +Pick an image distribution strategy +*********************************** + +Once you have decided on a usage and update strategy, you should understand +*how* |CL| will be deployed to your endpoints. In a large scale deployment, +interactive installers should be avoided in favor of automated installations +or prebuilt images. + +There are many well-known ways to install an operating system at scale. Each +have their own benefits, and one may lend itself easier in your environment +depending on the resources available to you. + +See the available :ref:`image-types`. + +Below are some common ways to install |CL| to systems at scale: + +Bare metal +========== + +Preboot Execution Environments (PXE) or other out-of-band booting options are +one way to distribute |CL| to physical bare metal systems on a LAN. + +This option works well if your customizations are fairly small in size +and infrastructure can be stateless. + +The |CL| `Downloads`_ page offers a live image that can be deployed as +a PXE boot server if one doesn't already exist in your environment. Also see +documentation on how to :ref:`bare-metal-install-server`. + +Cloud instances or virtual machines +=================================== + +Image templates in the form of cloneable disks are an effective way to +distribute |CL| for virtual machine environments, whether on-premises or +hosted by a Cloud Solution Provider (CSP). + +When used in concert with cloud VM migration features, this can be a good option +for allowing your applications a degree of high availability and workload +mobility; VMs can be restarted on a cluster of hypervisor host or moved between +datacenters transparently. + +The |CL| `Downloads`_ page offers example prebuilt VM images and is readily +available on popular CSPs. Also see documentation on how to +:ref:`virtual-machine-install`. + +Containers +========== + +Containerization platforms allow images to be pulled from a repository and +deployed repeatedly as isolated containers. + +Containers with a |CL| image can be a good option to blueprint and ship +your application, including all its dependencies, as an artifact while +allowing you or your customers to dynamically orchestrate and scale +applications. + +|CL| is capable of running a Docker host, has a container image which can +be pulled from DockerHub, or can be built as a customized container. +For more information visit the `Containers`_ page. + +Considerations with stateless systems +************************************* + +An important |CL| concept is statelessness and partitioning of system data +from user data. This concept can change the way you think about an at scale +deployment. + +Backup strategy +=============== + +A |CL| system and its infrastructure should be considered a commodity and +be easily reproducible. Avoid focusing on backing up the operating system +itself or default values. + +Instead, focus on backing up what's important and unique - the application +and data. In other words, only focus on backing up critical areas like +:file:`/home`, :file:`/etc`, and :file:`/var`. + +Meaningful logging & telemetry +============================== + +Offload logging and telemetry from endpoints to external servers, so it is +persistent and can be accessed on another server when an issue occurs. + +* Remote syslogging in |CL| is available through the + `systemd-journal-remote.service`_ + +* |CL| offers a :ref:`telem-guide`, which can be a powerful tool + for a large deployment to quickly crowdsource issues of interest. Take + advantage of this feature with careful consideration of the target audience + and the kind of data that would be valuable, and expose events + appropriately. + + Like any web server, the telemetry server should be appropriately scaled and + resilient. Specific implementation details for a scalable, resilient web + server are beyond the scope of this document. + +Orchestration and configuration management +========================================== + +In cloud environments, where systems can be ephemeral, being able to +configure and maintain generic instances is valuable. + +|CL| offers an efficient cloud-init style solution, `micro-config-drive`_, +through the *os-cloudguest* bundles which allow you to configure many Day 1 +tasks such as setting hostname, creating users, or placing +SSH keys in an automated way at boot. For more information on +automating configuration during deployment of |CL| endpoints see the +:ref:`bulk-provision` guide. + +A configuration management tool is useful for maintaining consistent system +and application-level configuration. Ansible\* is offered through the +*sysadmin-hostmgmt* bundle as a configuration management and automation +tool. + +Cloud-native applications +========================= + +An Infrastructure OS can design for good behavior, but it is ultimately up +to applications to make agile design choices. Applications deployed +on |CL| should aim to be host-aware but not depend on any specific host to +run. References should be relative and dynamic when possible. + +The application architecture should incorporate an appropriate tolerance for +infrastructure outages. Don't just keep stateless design as a noted feature. +Continuously test its use; Automate its use by redeploying |CL| and +application on new hosts. This naturally minimizes configuration drift, +challenges your monitoring systems, and business continuity plans. + +.. _`Downloads`: https://clearlinux.org/downloads/ +.. _`Containers`: https://clearlinux.org/downloads/containers +.. _`systemd-journal-remote.service`: https://www.freedesktop.org/software/systemd/man/systemd-journal-remote.service.html +.. _`micro-config-drive`: https://github.com/clearlinux/micro-config-drive + +.. |WEB-SERVER-SCALE| replace:: + There are many well-known ways to achieve a scalable and resilient web + server for this purpose, however implementation details are not in the + scope of this document. In general, they should be close to your + endpoints, highly available, and easy to scale with a load balancer when + necessary. \ No newline at end of file diff --git a/_sources/guides/guides.rst.txt b/_sources/guides/guides.rst.txt new file mode 100644 index 00000000..1c17266b --- /dev/null +++ b/_sources/guides/guides.rst.txt @@ -0,0 +1,58 @@ +.. _guides: + +Guides +###### + +The following guides provide step-by-step instructions on using |CL|. + +.. note:: + + As of 22 May 2019 :file:`mixin` is no longer supported. + +Clear Linux +=========== + +.. toctree:: + :maxdepth: 1 + :glob: + + clear/* + telemetrics/* + +Maintenance +=========== + +.. toctree:: + :maxdepth: 1 + :glob: + + maintenance/* + deploy-at-scale + +Network +======= + +.. toctree:: + :maxdepth: 1 + :glob: + + network/* + +Kernel +======= + +.. toctree:: + :maxdepth: 1 + :glob: + + kernel/* + +Stacks +======= + +.. toctree:: + :maxdepth: 1 + :glob: + + stacks/* + stacks/dlrs/* diff --git a/_sources/guides/kernel/kernel-development.rst.txt b/_sources/guides/kernel/kernel-development.rst.txt new file mode 100644 index 00000000..841eae4d --- /dev/null +++ b/_sources/guides/kernel/kernel-development.rst.txt @@ -0,0 +1,454 @@ +.. _kernel-development: + +Kernel development +################## + +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. + +Request changes be included with the |CL| kernel +************************************************ + +If the kernel modification you need is already open source and likely to be +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\*. + +Set up kernel development environment +************************************* + +In some cases, it may be necessary to modify the kernel to suit your specific +needs or to test new kernel code. + +You can build and install a custom kernel; however you must: + +* Disable Secure Boot +* Maintain any updates to the kernel going forward + +To create a custom kernel, start with the |CL| development environment. +Then make changes to the kernel, build it, and install it. + + +Install the |CL| development tooling framework +============================================== + +.. include:: ../clear/autospec.rst + :start-after: install-tooling-after-header: + :end-before: install-tooling-end: + +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 + :command:`make clone_` command in the + :file:`clearlinux/` directory clones the package from the + `clearlinux-pkgs`_ repo on GitHub. + + .. code-block:: bash + + cd ~/clearlinux + make clone_linux + +#. Navigate into the cloned package directory. + + .. code-block:: bash + + cd ~/clearlinux/packages/linux + + +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. + +.. 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/`. + +Change the kernel version +========================= + +|CL| tends to use the latest kernel available from `kernel.org`_, the Linux +upstream. The kernel version that will be built can be changed in the +RPM SPEC file. While most packages in Clear Linux are typically packaged +using :ref:`autospec-about`, the kernel is not. This means control files +provided by autospec are not available and changes must be made manually. + +#. Open the Linux kernel package RPM SPEC file in an editor. + + .. code-block:: bash + + $EDITOR linux.spec + +#. Modify the Version, Release, and Source0 URL entries at the top of the + file to change the version of Linux kernel that will be compiled. + + A list of current and available kernel release can be found on + `kernel.org`_. + + .. code-block:: bash + + Name: linux + Version: 4.20.8 + Release: 696 + License: GPL-2.0 + Summary: The Linux kernel + Url: http://www.kernel.org/ + Group: kernel + Source0: https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.8.tar.xz + Source1: config + Source2: cmdline + + %define ktarget native + + .. note:: + - 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. + +#. Commit and save the changes to the file. + +.. _pull-copy-kernel-source: + +Pull a copy of the Linux kernel source code +=========================================== + +Obtain a local copy of the source code to make modifications against. + +#. Run make sources to pull the kernel source code specified in the RPM + SPEC file. In the example, it downloads the :file:`linux-4.20.8.tar.xz` file. + + .. code-block:: bash + + make sources + + +#. Extract the kernel source code archive. This will create a working copy + of the Linux source that you can modify. + + .. code-block:: bash + + tar -xvf linux-4.20.8.tar.xz + +#. Navigate to the extracted directory. In this example, it has been + extracted into a :file:`linux-4.20.8` directory. + + .. code-block:: bash + + cd linux-4.20.8/ + + +Customize the Linux kernel source +********************************* + +After the kernel sources have been obtained, customizations to the kernel +configuration or source code can be made for inclusion with the kernel +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. + +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 :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 + into the working directory as :file:`.config` for comparison. + Otherwise, use the |CL| kernel configuration file as template + + .. code-block:: bash + + cp ~/clearlinux/packages/linux/config .config + + +#. Make any desired changes to the :file:`.config` using a kernel + configuration tool. Below are some popular options: + + - :command:`$EDITOR .config` - the .config file can be directly edited + for simple changes with names that are already known. + + - :command:`make config` - a text-based tool that asks questions + one-by-one to decide configuration options. + + - :command:`make menuconfig` - a terminal user interface that provides + menus to decide configuration options. + + - :command:`make xconfig` - a graphical user interface that provides + tree views to decide configuration options. + + + More configuration tools can be found by looking at the make help: + :command:`make help | grep config` + +#. Commit and save the changes to the :file:`.config` file. + +#. Copy the :file:`.config` file from the kernel source directory into + the kernel package directory as :file:`config` for inclusion in the build. + + .. code-block:: bash + + cp .config ../config + +Modify kernel source code +========================= + +Changes to kernel code are applied with patch files. Patch files are +formatted git commits that can be applied to the main source code. + +You will need to obtain a copy of the source code, +make modifications, generate patch file(s), and add them to the RPM SPEC +file for inclusion during the kernel build. + +If you have a large number of patches or a more complex workflow, +consider using a patch management tool in addition to Git such as +`Quilt`_. + + +#. 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 + commit with all the existing source files to begin tracking changes. + + .. code-block:: bash + + git init + git add -A + git commit -m "Initial commit of Linux kernel source" + + +#. Apply patches provided by the |CL| kernel package to the kernel source + in the working directory. + + .. code-block:: bash + + git am ../*.patch + + +#. Make any of your desired code changes to the Linux source code files. + + +#. Track and commit your changes to the local git repo. + + .. code-block:: bash + + git add + git commit -m "My patch for driver A" + + +#. Generate a patch file based on your git commits. + represents the number of local commits to create patch file. + See the `git-format-patch`_ documentation for detailed information + on using :command:`git format-patch` + + .. code-block:: bash + + git format-patch - + +#. Copy the patch files from the patches directory in the linux + source tree to the RPM build directory. + + .. code-block:: bash + + cp *.patch ~/clearlinux/packages/linux/ + + +#. Navigate back to the RPM build directory. + + .. code-block:: bash + + cd ~/clearlinux/packages/linux/ + +#. Open the Linux kernel package RPM SPEC file in an editor. + + .. code-block:: bash + + $EDITOR linux.spec + +#. Locate the section of the SPEC file that contains existing patch + variable definitions and append your patch file name. Ensure the + patch number does not collide with an existing patch. + In this example, the patch file is called + :file:`2001-my-patch-for-driver-A.patch` + + .. code-block:: bash + + # + # Small Clear Linux Tweaks + # + Patch0501: 0501-zero-extra-registers.patch + Patch0502: 0502-locking-rwsem-spin-faster.patch + + #Serie1.name WireGuard + #Serie1.git https://git.zx2c4.com/WireGuard + #Serie1.tag 00bf4f8c8c0ec006633a48fd9ee746b30bb9df17 + Patch1001: 1001-WireGuard-fast-modern-secure-kernel-VPN-tunnel.patch + #Serie1.end + + Patch2001: 2001-my-patch-for-driver-A.patch + + +#. Locate the section of the SPEC file further down that contains + patch application and append your patch file number used in the step above. + In this example, patch2001 is added. + + .. code-block:: bash + + # + # Small tweaks + # + %patch0501 -p1 + %patch0502 -p1 + + #Serie1.patch.start + %patch1001 -p1 + #Serie1.patch.end + + %patch2001 -p1 + + +#. Commit and save the changes to the RPM SPEC file. + +Modify kernel boot parameters +============================= +The kernel boot options are passed from the bootloader to the kernel with +command-line parameters. + +While temporary changes can be made to kernel parameters on a running +system or on a during boot, you can also modify the default parameters that +are persistent and distributed with a customized kernel. + + +#. Open the kernel :file:`cmdline` file in an editor. + + .. code-block:: bash + + $EDITOR cmdline + + +#. Make any desired change to the kernel parameters. + For example, you can remove the :command:`quiet` parameter to see more + verbose output of kernel log messages during the boot process. + +#. Commit and save the changes to the :file:`cmdline` file. + +See the `kernel parameters`_ documentation for a list of available +parameters. + +Build and install the kernel +**************************** +After changes have been made to the kernel source and RPM SPEC file, +the kernel is ready to be compiled and packaged into an RPM. + +The |CL| development tooling makes use of :command:`mock` environments to +isolate building of packages in a sanitized workspace. + +#. Start the compilation process by issuing the :command:`make build` + command. This process is typically resource intensive and will take a while. + + .. code-block:: bash + + make build + + .. note:: + The mock plugin `ccache`_ can be enabled to help speed up any future + rebuilds of the kernel package by caching compiler outputs and reusing + them. + + +#. The result will be multiple :file:`.rpm` files in the :file:`rpms` + directory as output. + + .. code-block:: bash + + ls rpms/ + + The kernel RPM will be named + :file:`linux--.x86_64.rpm` + + +#. The kernel RPM file can be input to the :ref:`mixer` to create a + custom bundle and mix of |CL|. + +Alternatively, the kernel RPM bundle can be installed manually on a local +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. + +#. Install the kernel onto the local system by extracting the RPM with the + :command:`rpm2cpio` command. + + .. code-block:: bash + + rpm2cpio linux--.x86_64.rpm | (cd /; sudo cpio -i -d -u -v); + + +#. Update the |CL| boot manager using :command:`clr-boot-manager` and reboot. + + .. code-block:: bash + + sudo clr-boot-manager list-kernels + sudo clr-boot-manager set-kernel org.clearlinux..- + + sudo reboot + + +#. After a reboot, verify the customized kernel is running. + + .. code-block:: bash + + uname -a + +Related topics +************** + +* :ref:`kernel-modules` +* :ref:`mixer` + +.. _Distribution Project: https://github.com/clearlinux/distribution/issues/new/choose + +.. _Source RPMs (SRPMS): https://cdn.download.clearlinux.org/current/source/SRPMS/ + +.. _Quilt: http://savannah.nongnu.org/projects/quilt + +.. _clearlinux-pkgs: https://github.com/clearlinux-pkgs + +.. _kernel.org: https://www.kernel.org/ + +.. _kernel parameters: https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt + +.. _ccache: https://fedoraproject.org/wiki/Mock/Plugin/CCache?rd=Subprojects/Mock/Plugin/CCache + +.. _git-format-patch: https://git-scm.com/docs/git-format-patch diff --git a/_sources/guides/kernel/kernel-modules-dkms.rst.txt b/_sources/guides/kernel/kernel-modules-dkms.rst.txt new file mode 100644 index 00000000..bda29de0 --- /dev/null +++ b/_sources/guides/kernel/kernel-modules-dkms.rst.txt @@ -0,0 +1,312 @@ +.. _kernel-modules-dkms: + +Add kernel modules with DKMS +############################ + +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 +*********** + +Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree). + +:abbr:`DKMS (Dynamic Kernel Module System)` is a framework that facilitates +the building and installation of kernel modules. DKMS allows |CL| to provide +hooks that automatically rebuild modules against new kernel versions. + +.. include:: kernel-modules.rst + :start-after: kernel-modules-availability-begin: + :end-before: kernel-modules-availability-end: + +Install DKMS +************ + +.. _kernel-modules-dkms-install-begin: + +The :command:`kernel-native-dkms` bundle provides the :command:`dkms` program and +Linux kernel headers, which are required for compiling kernel modules. + +The :command:`kernel-native-dkms` bundle also: + +* 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 `. + +* Disables kernel module signature verification by appending a kernel + command-line parameter (:command:`module.sig_unenforce`) from the + :file:`/usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf` file. + +* Adds a notification to the Message of the Day (MOTD) indicating kernel + module signature verification is disabled. + +.. warning:: + + We recommend that you always review the :command:`swupd update` output + to make sure kernel modules were successfully rebuilt against the new + kernel. This is especially important for systems where a successful boot + relies on a kernel module. + +Install the :command:`kernel-native-dkms` or :command:`kernel-lts-dkms` +bundle: + +#. Determine which kernel variant is running on |CL|. Only the *native* + and *lts* kernels are enabled to build and load out-of-tree kernel modules + with DKMS. + + .. code-block:: bash + + $ uname -r + 5.XX.YY-ZZZZ.native + + Ensure *.native* or *.lts* is in the kernel name. + +#. Install the DKMS bundle corresponding to the installed kernel. Use + :command:`kernel-native-dkms` for the native kernel or + :command:`kernel-lts-dkms` for the lts kernel. + + .. code-block:: bash + + sudo swupd bundle-add kernel-native-dkms + + or + + .. code-block:: bash + + sudo swupd bundle-add kernel-lts-dkms + + +#. Update the |CL| bootloader and reboot. + + .. code-block:: bash + + sudo clr-boot-manager update + reboot + +.. _kernel-modules-dkms-install-end: + +Build, install, and load an out-of-tree module +********************************************** + +Follow the steps in this section if you are an individual user or testing, +and you need an out-of-tree kernel module that is not available through +|CL|. For a more scalable and customizable approach, we recommend using +:ref:`mixer` to provide a custom kernel and updates. + +Prerequisites +============= + +Before you begin, you must: + +* Disable Secure Boot in UEFI/BIOS. The loading of new out-of-tree modules + modifies the signatures that Secure Boot relies on for trust. + +* Obtain a kernel module package in the form of source code or + pre-compiled binaries. + +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. + +Kernel modules may come packaged as: + +- Source code without a :file:`dkms.conf` file +- Source code with a premade :file:`dkms.conf` file +- Source code with a premade :file:`dkms.conf` file and precompiled module + binaries +- 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. + +#. Download the kernel module's source code. + + * Review the available download options. Some kernel modules provide + separate archives that are specifically enabled for DKMS support. + + * Review the README documentation, because it often provides required + information to build the module with DKMS support. + + .. code-block:: bash + + curl -O http://.tar.gz + tar -xvf .tar.gz + cd / + cat README + +Build kernel module with an existing dkms.conf +============================================== + +If the kernel module maintainer packaged the source archive with the +:command:`dkms mktarball` command, the entire archive can be passed to the +:command:`dkms ldtarball` which completes many steps for you. + +The archive contains the required :file:`dkms.conf` file, and may contain +a :file:`dkms_source_tree` directory and a :file:`dkms_binaries_only` +directory. + +#. Run the :command:`dkms ldtarball` command against the kernel + module archive. + + .. code-block:: bash + + dkms ldtarball .tar.gz + + + :command:`dkms ldtarball` places the kernel module source under + :file:`/usr/src/-/`, builds it if necessary, + and adds the module into the DKMS tree. + + +#. Verify the kernel module is detected by checking the output of the + :command:`dkms status` command. + + .. code-block:: bash + + dkms status + + +#. Install the kernel module. + + .. code-block:: bash + + dkms install -m -v + +Build kernel module without an existing dkms.conf +================================================= + +If the kernel module source does not contain a :file:`dkms.conf` file or the +:command:`dkms ldtarball` command encounters errors, you must manually +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. + +Here are some additional resources that can be used for reference: + +* DKMS manual page (:command:`man dkms`) shows detailed syntax in the + DKMS.CONF section. + +* Ubuntu community wiki entry for the `Kernel DKMS Package`_ shows an example + where a single package contains multiple modules. + +* 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: + +#. Create or modify the :file:`dkms.conf` file inside of the extracted source + code directory. + + .. code-block:: bash + + $EDITOR dkms.conf + + MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build" + CLEAN="make -C src/ clean" + BUILT_MODULE_NAME=custom_module + BUILT_MODULE_LOCATION=src/ + 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*. + +#. Copy the kernel module source code into the :file:`/usr/src/` directory. + + .. code-block:: bash + + sudo mkdir /usr/src/- + sudo cp -Rv . /usr/src/- + + .. note:: + + ** and ** must match the entries in the + :file:`dkms.conf` file. + +#. Add the kernel module to the DKMS tree so that it is tracked by DKMS. + + .. code-block:: bash + + sudo dkms add -m + +#. Build the kernel module using DKMS. If the build encounters errors, + you may need to edit the :file:`dkms.conf` file. + + .. code-block:: bash + + sudo dkms build -m -v + +#. Install the kernel module using DKMS. + + .. code-block:: bash + + sudo dkms install -m -v + +Load kernel module +================== + +By default, DKMS installs modules "in-tree" under :file:`/lib/modules` so the +:command:`modprobe` command can be used to load them. + +#. Load the installed module with the :command:`modprobe` command. + + .. code-block:: bash + + sudo modprobe + +#. Validate the kernel module is loaded. + + .. code-block:: bash + + lsmod | grep + +Examples +******** + +.. include:: kernel-modules.rst + :start-after: kernel-modules-autoload-begin: + :end-before: kernel-modules-autoload-end: + +Related topics +************** + +* `Dynamic Kernel Module System (DKMS)`_ + +* `Dell Linux Engineering Dynamic Kernel Module Support: From Theory to Practice `_ + +* `Linux Journal: Exploring Dynamic Kernel Module Support `_ + +.. _Dynamic Kernel Module System (DKMS): https://github.com/dell/dkms + +.. _Kernel DKMS Package: https://help.ubuntu.com/community/Kernel/DkmsDriverPackage#Configure_DKMS + +.. _dkms.conf: https://github.com/dell/dkms/blob/master/sample.conf diff --git a/_sources/guides/kernel/kernel-modules.rst.txt b/_sources/guides/kernel/kernel-modules.rst.txt new file mode 100644 index 00000000..eae7f04a --- /dev/null +++ b/_sources/guides/kernel/kernel-modules.rst.txt @@ -0,0 +1,223 @@ +.. _kernel-modules: + +Add kernel modules manually +########################### + +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 +*********** + +Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree). + + +.. _kernel-modules-availability-begin: + +Kernel module availability +************************** + +|CL| comes with many upstream kernel modules available for use. Using an +existing module is significantly easier to maintain and retains signature +verification of the |CL| kernel. For more information on |CL| security +practices, see the :ref:`security` page. + +Before continuing, check if the kernel module you're looking for is already +available in |CL| or submit a request to add the module. + + +Check if the module is already available +======================================== + + +You can search for kernel module file names, which end with the :file:`.ko` +file extension, using the :command:`swupd search` command, as shown in the +following example. See :ref:`swupd-guide` for more information. + +.. code-block:: bash + + sudo swupd search ${module_name}.ko + + +Submit a request to add the module +================================== + +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'_ on GitHub. + +.. _kernel-modules-availability-end: + + +Build, install, and load an out-of-tree module +********************************************** + +Follow the steps in this section if you are an individual user or testing, and +you need an out-of-tree kernel module that is not available through |CL|. For +a more scalable and customizable approach, we recommend using the +:ref:`mixer` to provide a custom kernel and updates. + + +Prerequisites +============= + +Before you begin, you must: + +* Disable Secure Boot. +* Disable kernel module integrity checking. +* Have a kernel module package in the form of source code. +* Rebuild the module against new versions of the Linux kernel. + +.. note:: + + Any time the kernel is upgraded on your Clear Linux system, you must + rebuild your out-of-tree modules. + + +Build and install kernel module +=============================== + +#. Determine which kernel variant is running on |CL|. In the example below, + the *native* kernel is in use. + + .. code-block:: bash + + $ uname -r + 5.XX.YY-ZZZZ.native + +#. Install the kernel dev bundle corresponding to the installed kernel. The + kernel dev bundle contains the kernel headers, which are required for + compiling kernel modules. For example: + + * :command:`linux-dev` for developing against the native kernel. + * :command:`linux-lts-dev` for developing against the LTS kernel. + + .. code-block:: bash + + sudo swupd bundle-add linux-dev + +#. Follow instructions from the kernel module source code to compile the + kernel module. For example: + + .. code-block:: bash + + curl -O http://.tar.gz + tar -xvf .tar.gz + cd / + cat README + + + +Load kernel module +================== + +#. Disable Secure Boot in your system's UEFI settings, if you have enabled + it. The loading of new out-of-tree modules modifies the signatures that + Secure Boot relies on for trust. + +#. Disable signature checking for the kernel by modifying the kernel boot + parameters and reboot the system. + + All kernel modules from |CL| have been signed to enforce kernel security. + However, out-of-tree modules break this chain of trust so this mechanism + needs to be disabled. + + .. code-block:: bash + + sudo mkdir -p /etc/kernel/cmdline.d + echo "module.sig_unenforce" | sudo tee /etc/kernel/cmdline.d/allow-unsigned-modules.conf + +#. Update the boot manager and reboot the system to implement the changed + kernel parameters. + + .. code-block:: bash + + sudo clr-boot-manager update + sudo reboot + + .. note:: + + If successful, the :command:`clr-boot-manager update` command does not + return any console output. + +#. After rebooting, manually load out-of-tree modules using the + :command:`insmod` command. + + .. code-block:: bash + + sudo insmod + +Examples +******** + +.. _kernel-modules-autoload-begin: + +Optional: Specify module options and aliases +============================================ + +Use the :command:`modprobe` command to load a module and set options. + +:command:`modprobe` may add or remove more than one module due to module +interdependencies. You can specify which options to use with individual modules, +by using configuration files under the :file:`/etc/modprobe.d` directory. + +.. code-block:: bash + + sudo mkdir /etc/modprobe.d + +All files underneath the :file:`/etc/modprobe.d` directory that end with the +:file:`.conf` extension specify module options to use when loading. You can use +:file:`.conf` files to create convenient aliases for modules or to override the +normal loading behavior altogether for those with special requirements. + +Learn more about :command:`modprobe` on the modprobe.d manual page: + +.. code-block:: bash + + man modprobe.d + +Optional: Configure kernel modules to load at boot +================================================== + +Use the :file:`/etc/modules-load.d` configuration directory to specify kernel +modules to load automatically at boot. + +.. code-block:: bash + + sudo mkdir /etc/modules-load.d + +All files underneath the :file:`/etc/modules-load.d` directory that end with +the :file:`.conf` extension contain a list of module names of aliases (one per +line) to load at boot. + +Learn more about module loading in the modules-load.d manual page: + +.. code-block:: bash + + man modules-load.d + + +.. _kernel-modules-autoload-end: + +Related topic +************* + +* :ref:`kernel-modules-dkms` + +.. _`Distribution Project`: https://github.com/clearlinux/distribution diff --git a/_sources/guides/maintenance/architect-lifecycle.rst.txt b/_sources/guides/maintenance/architect-lifecycle.rst.txt new file mode 100644 index 00000000..ed328711 --- /dev/null +++ b/_sources/guides/maintenance/architect-lifecycle.rst.txt @@ -0,0 +1,78 @@ +.. _architect-lifecycle: + +Architect the life-cycle of |CL-ATTR| +##################################### + +This guide describes the basic, recommended infrastructure and workflow for +maintaining a |CL-ATTR| derivative. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +* A repository with software RPM artifacts and a CI/CD system with a |CL| + machine for building `mixes` + +* Experience using :ref:`mixer ` to create a |CL|-based distro + +* Experience using :ref:`swupd ` for maintaining the |CL| + build environment + +* Familiarity with |CL| architecture and reuse of its content in releases + +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. + +.. figure:: figures/architect-lifecycle-1.png + :scale: 100% + :alt: Architect the life-cycle + + Figure 1: Architect the life-cycle + +Content Workflow +**************** + +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 +`Watcher Pipeline`_ checks |CL| and a content provider, such as Koji, to +determine if a new release is necessary. + +Release Workflow +**************** + +The Release Workflow (Figure 1) gathers the content of the RPMs and +ensures it can be consumed by :ref:`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 +derivatives to incorporate |CL| content into their own custom +content. The Watcher Pipeline triggers the Release Pipeline to create +new releases. + +Implementation +************** + +The |CL| Distro Factory manages the Release Workflow. For detailed information +about Distro Factory deployment, refer to the `clr-distro-factory`_ GitHub\* repo. + +.. _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 + +.. _Watcher Pipeline: https://github.com/clearlinux/clr-distro-factory/wiki/Watcher diff --git a/_sources/guides/maintenance/assign-static-ip.rst.txt b/_sources/guides/maintenance/assign-static-ip.rst.txt new file mode 100644 index 00000000..14fc8694 --- /dev/null +++ b/_sources/guides/maintenance/assign-static-ip.rst.txt @@ -0,0 +1,184 @@ +.. _assign-static-ip: + +Assign a static IP address +########################## + + +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: + :depth: 1 + +Identify which program is managing the 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 + network connections. + + * 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, verify which +program is managing the network interface. + +#. Check the output of :command:`nmcli device` to see if NetworkManager is + managing the device. + + .. code-block:: bash + + nmcli device status + + If the STATE column for the device shows *connected* or *disconnected*, the + network configuration is being managed by NetworkManager, then use the + instructions for :ref:`using NetworkManager `. + + 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. + + .. code-block:: bash + + networkctl list + + If the SETUP column for the device shows *configured*, the network + configuration is being managed by `systemd-networkd`, then use the + instructions for :ref:`using systemd-networkd `. + + +.. _nm-static-ip: + +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 + + 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, 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. Replace *[CONNECTION_NAME]* 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. + + +#. Restart the NetworkManager server to reload the DNS servers: + + .. code-block:: bash + + sudo systemctl restart NetworkManager + + +#. 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 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. Replace *[INTERFACE_NAME]* + with LINK from the output of the :command:`networkctl list` command that was + run 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 + diff --git a/_sources/guides/maintenance/bulk-provision.rst.txt b/_sources/guides/maintenance/bulk-provision.rst.txt new file mode 100644 index 00000000..a609fa6a --- /dev/null +++ b/_sources/guides/maintenance/bulk-provision.rst.txt @@ -0,0 +1,172 @@ +.. _bulk-provision: + +Bulk provision +############## + +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)`. + +.. 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. + +.. figure:: ./figures/bulk-provision-flow.png + :alt: Bulk provision information flow + + 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 +:ref:`guide on how to perform an iPXE boot` using +:abbr:`NAT (network address translation)` for details. + +Because a bulk provision relies on a reboot, ensure the following +preparations have been made: + +* No existing disks are bootable. +* The network boot option must come immediately after the disk boot option + on any computer performing the installation. + +Configuration +************* + +#. 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 + with the steps it needs to perform an installation. The file outlines + 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: + + .. code-block:: json + + { + "DestinationType":"physical", + "PartitionLayout":[ + {"disk":"sda", "partition":1, "size":"512M", "type":"EFI"}, + {"disk":"sda", "partition":2, "size":"512M", "type":"swap"}, + {"disk":"sda", "partition":3, "size":"rest", "type":"linux"} + ], + "FilesystemTypes":[ + {"disk":"sda", "partition":1, "type":"vfat"}, + {"disk":"sda", "partition":2, "type":"swap"}, + {"disk":"sda", "partition":3, "type":"ext4"} + ], + "PartitionMountPoints":[ + {"disk":"sda", "partition":1, "mount":"/boot"}, + {"disk":"sda", "partition":3, "mount":"/"} + ], + "Version":"latest", + "Bundles":[ + "kernel-native", + "os-core", + "os-core-update", + "os-cloudguest" + ], + "IsterCloudInitSvc":"http://192.168.1.1:60000/icis/" + } + + .. important:: + + 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 + an Ister configuration file: + + .. code-block:: none + + 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 + kernel parameter value. The following example shows an iPXE boot script + with the `isterconf` parameter: + + .. code-block:: none + + #!ipxe + kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug tsc=reliable no_timer_check noreplace-smp rw initrd=initrd isterconf=http://192.168.1.1:60000/icis/static/ister/ister.conf + initrd initrd + boot + + .. note:: + + 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. + +#. Write a cloud-init document to customize the instance of the installation + according to your requirements. The `cloud-init`_ documentation provides a + guide on how to write a cloud-init document. The guide covers the + 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 + 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 :file:`static` directory within the web hosting directory of ICIS. + The following example shows an example assignment: + + .. code-block:: none + + # MAC address,role + 00:01:02:03:04:05,ciao + + If MAC addresses of PXE clients are not listed within the + :file:`config.txt` file, a default role for those MAC address may be + defined as follows: + + .. code-block:: none + + # MAC address,role + default,ciao + +#. 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/ + * \http://192.168.1.1:60000/icis/get_role/ + * \http://192.168.1.1:60000/ipxe/ipxe_boot_script.txt + +#. Power on the PXE client and watch it boot and install |CL|. + +#. Power-cycle the PXE client and watch it customize the |CL| installation. + +**Congratulations!** You have successfully performed a bulk provision of |CL|. + + +.. _ICIS: + https://github.com/clearlinux/ister-cloud-init-svc + +.. _cloud-init: + https://cloudinit.readthedocs.io diff --git a/_sources/guides/maintenance/cpu-performance.rst.txt b/_sources/guides/maintenance/cpu-performance.rst.txt new file mode 100644 index 00000000..299514e7 --- /dev/null +++ b/_sources/guides/maintenance/cpu-performance.rst.txt @@ -0,0 +1,208 @@ +.. _cpu-performance: + +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. + +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 *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. + +P-states can typically be limited or disabled in a system's firmware (UEFI/BIOS). + +Turbo boost +----------- + +`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. + +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`_, :command:`intel_pstate`, for modern Intel +processors from the Sandy Bridge generation or newer. Other processors may +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: + +.. 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 +:command:`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 effect. + + +.. _`Intel P-state driver`: https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt + +.. _`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 + +.. _`Intel® Turbo Boost Technology`: https://www.intel.com/content/www/us/en/architecture-and-technology/turbo-boost/turbo-boost-technology.html diff --git a/_sources/guides/maintenance/developer-workstation.rst.txt b/_sources/guides/maintenance/developer-workstation.rst.txt new file mode 100644 index 00000000..2e487536 --- /dev/null +++ b/_sources/guides/maintenance/developer-workstation.rst.txt @@ -0,0 +1,112 @@ +.. _developer-workstation: + +Developer Workstation +##################### + +This guide helps you find the minimum set of bundles needed to start your +|CL-ATTR| development project. + +Before continuing, review the :ref:`swupd ` 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 +***************** + +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* `. 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 +Table 1 as a starting point. + +.. list-table:: **Table 1. Developer Profiles** + :widths: 20, 20, 20, 20 + :header-rows: 1 + + * - |CL| Bundle + - *Internet of Things (IoT)* + - *System Administrator* + - *Client/Cloud/Web Developer* + + * - :command:`editors` + - ✓ + - ✓ + - ✓ + + * - :command:`network-basic` + - ✓ + - ✓ + - ✓ + + * - :command:`openssh-server` + - ✓ + - ✓ + - ✓ + + * - :command:`webserver-basic` + - + - ✓ + - ✓ + + * - :command:`application-server` + - + - ✓ + - ✓ + + * - :command:`database-basic` + - + - ✓ + - ✓ + + * - :command:`desktop-autostart` + - ✓ + - ✓ + - ✓ + + * - :command:`dev-utils` + - + - + - ✓ + +swupd search +************ + +We recommend learning about :ref:`swupd `, to learn the +commands to search for and add bundles relevant to your project. + +The guide provides an :ref:`example ` +that shows you how to: + +* Use swupd to search for bundles +* Use swupd to add bundles + +Core Concepts +************* + +We recommend that you understand these core concepts in |CL| *before* +developing your project. + +* :ref:`Software update ` +* :ref:`Mixer ` +* :ref:`Autospec ` + +Other resources for developers +----------------------------------- + +* `Developer Tooling Framework`_ for |CL| +* `Bundle Definition Files`_ + +.. _Bundle Definition Files: https://github.com/clearlinux/clr-bundles + +.. _Developer Tooling Framework: https://github.com/clearlinux/common diff --git a/_sources/guides/maintenance/download-verify-decompress.rst.txt b/_sources/guides/maintenance/download-verify-decompress.rst.txt new file mode 100644 index 00000000..1dc74083 --- /dev/null +++ b/_sources/guides/maintenance/download-verify-decompress.rst.txt @@ -0,0 +1,176 @@ +.. _download-verify-decompress: + +Download, verify, and decompress a |CL-ATTR| image +################################################## + +This guide describes the available types of |CL| images, where to +download them, how to verify their integrity, and how to decompress them. +Follow the steps for your OS. + +.. contents:: + :local: + :depth: 1 + + +.. include:: ../../reference/image-types.rst + :start-after: image-types-content: + :end-before: incl-image-filename-end: + +.. _download-verify-decompress-linux: + +Linux OS steps +************** + +.. _verify-linux: + +Verify the integrity of the |CL| image +====================================== + +Before you use a downloaded |CL| image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released |CL| image has a corresponding SHA512 +checksum file designated with the suffix `-SHA512SUMS`. + +#. Download the corresponding SHA512 checksum file of your |CL| `image`_. +#. Open a Terminal. +#. Go to the directory with the downloaded image and checksum files. +#. Verify the integrity of the image and compare it to its original checksum + with the command: + + .. code-block:: bash + + sha512sum -c ./clear-[version number]-[image type].[compression type]-SHA512SUMS + +If the checksum of the downloaded image is different than the original +checksum, a warning is displayed with a message indicating the computed +checksum does **not** match. Otherwise, the name of the image is printed on +the screen followed by `OK`. + +For a more in-depth discussion of image verification including checking the +certificate see :ref:`image-content-validation`. + +.. incl-decompress-image: + +Decompress the |CL| image +========================= + +Released |CL| images are compressed with either GNU zip (*.gz*) or XZ +(*.xz*). The compression type depends on the target platform or +environment. To decompress the image, follow these steps: + +#. Open a Terminal. +#. Go to the directory with the downloaded image. + + To decompress an XZ image, enter: + + .. code-block:: bash + + unxz clear-[version number]-[image type].xz + + To decompress a GZ image, enter: + + .. code-block:: bash + + gunzip clear-[version number]-[image type].gz + +.. incl-decompress-image-end: + +.. _download-verify-decompress-mac: + +macOS\* steps +************* + +.. _verify-mac: + +Verify the integrity of the |CL| image +====================================== + +Before you use a downloaded |CL| image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released |CL| image has a corresponding SHA512 +checksum file designated with the suffix `-SHA512SUMS`. + +#. Download the corresponding SHA512 checksum file of your |CL| `image`_. +#. Open a Terminal. +#. Go to the directory with the downloaded image and checksum files. +#. Verify the integrity of the image and compare it to its original checksum + with the command: + + .. code-block:: bash + + shasum -a512 clear-[version number]-[image type].[compression type] | diff clear-[version number]-[image type].[compression type]-SHA512SUMS - + +If the checksum of the downloaded image is different than the original +checksum, the differences will be displayed. Otherwise, an empty output indicates +a match and your downloaded image is good. + +Decompress the |CL| image +========================= + +We compress all released |CL| images by default with either GNU zip +(`.gz`) or xz (`.xz`). The compression type we use depends on the target +platform or environment. To decompress the image, follow these steps: + +#. Open a Terminal. +#. Go to the directory with the downloaded image. +#. Use the :command:`gunzip` command to decompress either compression type. For example: + + .. code-block:: bash + + gunzip clear-[version number]-[image type].xz + gunzip clear-[version number]-[image type].gz + +.. _download-verify-decompress-windows: + +Windows\* OS steps +****************** + +.. _verify-windows: + +Verify the integrity of the |CL| image +====================================== + +Before you use a downloaded |CL| image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released |CL| image has a corresponding SHA512 +checksum file designated with the suffix `-SHA512SUMS`. + +#. Download the corresponding SHA512 checksum file of your |CL| `image`_. +#. Start Command Prompt. +#. Go to the directory with the downloaded image and checksum files. +#. Get the SHA512 checksum of the image with the command: + + .. code-block:: bash + + CertUtil -hashfile ./clear-[version number]-[image type].[compression type] sha512 + +#. Manually compare the output with the original checksum value shown in + the downloaded checksum file and make sure they match. + +Decompress the |CL| image +========================= + +Released |CL| images are compressed with either GNU zip (*.gz*) or XZ +(*.xz*). The compression type depends on the target platform or +environment. To decompress the image, follow these steps: + +#. Download and install `7-Zip`_. +#. Go to the directory with the downloaded image and right-click it. +#. From the pop-up menu, select :guilabel:`7-Zip` and select + :guilabel:`Extract Here` as shown in Figure 1. + + .. figure:: figures/download-verify-decompress-windows-fig-1.png + :scale: 80 % + :alt: 7-Zip extract file + + Figure 1: Windows 7-Zip extract file. + +.. _7-Zip: http://www.7-zip.org/ + +Image types +*********** + +.. include:: ../../reference/image-types.rst + :start-after: incl-image-filename-end: + +.. _image: https://clearlinux.org/downloads \ No newline at end of file diff --git a/_sources/guides/maintenance/enable-user-space.rst.txt b/_sources/guides/maintenance/enable-user-space.rst.txt new file mode 100644 index 00000000..e51fa59e --- /dev/null +++ b/_sources/guides/maintenance/enable-user-space.rst.txt @@ -0,0 +1,103 @@ +.. _enable-user-space: + +Create and enable a new user space +################################## + +This guide provides steps to complete the following basic setup tasks for +a newly installed |CL-ATTR| system: + +.. contents:: + :local: + :depth: 1 + +Create a new user +***************** + +To create a new user and set a password for that user, enter the following +commands as a root user: + +.. code-block:: bash + + useradd + passwd + +Replace the with the name of the user account you want to create +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 +************************************* + +Before logging off as root and logging into your new user account, +enable the :command:`sudo` command for your new . + +To be able to execute all applications with root privileges, add the + to the `wheel group`_. + +#. Add to the wheel group: + + .. code-block:: bash + + usermod -G wheel -a + +#. Log out of root and into the new . + + To log off as root, enter :command:`exit`. + +#. Enter the new and the password created earlier. + + You will now be in the home directory of . + +Install and update the OS software to its current version +********************************************************* + +The |CL| software utility :ref:`swupd ` allows you to perform +system updates while reaping the benefits of upstream development. + +To update your newly installed OS, run: + +.. code-block:: bash + + sudo swupd update + +Add a bundle +************ + +Software applications are installed as bundles using the command +:command:`swupd bundle-add`. Experienced Linux users might compare swupd +to running :command:`apt-get` or :command:`yum install` for package +management. However |CL| manages packages at the level of bundles, which +are integrated stacks of packages. + +For example, the :command:`sysadmin-basic` bundle installs the majority of +applications useful to a system administrator. To install it, enter: + +.. code-block:: bash + + swupd bundle-add sysadmin-basic + +View a full list of bundles and packages installed with the `sysadmin-basic`_ +bundle. You can also view all `bundles`_ for |CL|, active or deprecated. + +Expand your knowledge of :command:`swupd` and check out our developer resources: + +* :ref:`swupd-guide` +* :ref:`developer-workstation` + +Next steps +********** + +Check out our guides and tutorials. + +* :ref:`guides` +* :ref:`tutorials` + +.. _`sysadmin-basic`: + https://github.com/clearlinux/clr-bundles/blob/master/bundles/sysadmin-basic + +.. _`bundles`: + https://github.com/clearlinux/clr-bundles/tree/master/bundles + +.. _`wheel group`: + https://en.wikipedia.org/wiki/Wheel_(Unix_term) diff --git a/_sources/guides/maintenance/fix-broken-install.rst.txt b/_sources/guides/maintenance/fix-broken-install.rst.txt new file mode 100644 index 00000000..33765b89 --- /dev/null +++ b/_sources/guides/maintenance/fix-broken-install.rst.txt @@ -0,0 +1,91 @@ +.. _fix-broken-install: + +Fix a broken installation +######################### + +This guide explains how to fix a broken installation of |CL-ATTR| using a live +desktop image on a USB. + +.. 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` 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 +************* + +* 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 +********************************************** + +#. Boot the |CL| live desktop image. + +.. include:: ../../get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst + :start-after: install-on-target-start: + :end-before: install-on-target-end: + +Mount root partition, verify, and fix +************************************* + +#. Open a Terminal window. + +#. Ensure the system is connected to the network. + +#. Mount the system’s root partition. + + #. To find the root partition, run: + + .. code-block:: bash + + lsblk + + We'll use :file:`/dev/sda3/` as the root partition example. + + #. Next, mount the partition to the :file:`/mnt` folder. + + .. code-block:: bash + + sudo mount /dev/sda3 /mnt + +#. Verify that you mounted the correct root partition by checking for some + files commonly found on |CL| systems. + + .. code-block:: bash + + cat /mnt/usr/lib/os-release + ls /mnt/usr/share/clear/bundles + +#. Next, run swupd to fix any issues on the target system. + + .. code-block:: bash + + sudo swupd repair --picky --path=/mnt + + :ref:`Learn more about how swupd works `. + +#. After the process is complete, unmount the root partition: + + .. code-block:: bash + + sudo umount /mnt + +#. Reboot the system, remove the live desktop USB drive, + and boot into the repaired system. + + .. code-block:: bash + + sudo reboot + +**Congratulations!** You successfully restored |CL|. diff --git a/_sources/guides/maintenance/hostname.rst.txt b/_sources/guides/maintenance/hostname.rst.txt new file mode 100644 index 00000000..ce0c225c --- /dev/null +++ b/_sources/guides/maintenance/hostname.rst.txt @@ -0,0 +1,81 @@ +.. _hostname: + +Modify hostname +############### + +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 +but is not human-friendly. Administrators and users will often want to rename +their machines with a name that is easier to remember, type, and search +for. Renaming a machine also makes it easier to identify, by including +meaningful data in the name. The following examples show human-friendly machine +names: + +* *regression-test* +* *sally-test-box1* +* *az-bldg2-lab* + +Set your hostname +***************** + +|CL| uses the :command:`hostnamectl` command to display and modify the machine +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. +Make sure to reboot after setting a new hostname. + +.. code-block:: bash + + sudo hostnamectl set-hostname telemetry-test-2-h15 + sudo reboot + +.. note:: + + There are three types of hostname: *static*, *transient*, and *pretty*. + The most common is the static hostname. Static hostnames must be between + two and 63 characters long, must start and end with a letter or number, + and may contain letters (case-insensitive), numbers, dashes, or dots. + + If the static hostname exists, it is used to generate the transient hostname, + which is maintained by the kernel. The transient hostname can be changed + by DHCP or mDNS at runtime. + + The pretty hostname is a free-form UTF8 name used for presentation to the user. + +View your hostname +****************** + +View your current hostname using the following command: + +.. code-block:: bash + + hostnamectl + +You should see output similar to: + +.. code-block:: console + + Static hostname : telemetry-test-2-h15 + Pretty hostname : telemetry-test-2-h15 + Icon name : computer-desktop + Chassis : desktop + Machine ID : 4d0d60207a904ebbab96680a51ac1339 + Boot ID : 98d3514e5a984e8cbbdf46a2f0d6b397 + Operating System : Clear Linux OS + Kernel : Linux 4.18.8-632.native + Architecture : x86-64 + + +**Congratulations!** You successfully modified the hostname of your |CL| system. diff --git a/_sources/guides/maintenance/increase-virtual-disk-size.rst.txt b/_sources/guides/maintenance/increase-virtual-disk-size.rst.txt new file mode 100644 index 00000000..e633f506 --- /dev/null +++ b/_sources/guides/maintenance/increase-virtual-disk-size.rst.txt @@ -0,0 +1,174 @@ +.. _increase-virtual-disk-size: + +Increase virtual disk size of an image +###################################### + +This guide describes how to increase the disk size of your prebuilt |CL-ATTR| +image if you need more capacity. + +.. 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 +: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: + +.. code-block:: bash + + sudo lsblk + +An example output of the :command:`lsblk` command: + +.. code-block:: console + + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sda 8:0 0 8.5G 0 disk + ├─sda1 8:1 0 512M 0 part + ├─sda2 8:2 0 32M 0 part [SWAP] + └─sda3 8:3 0 8G 0 part / + +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. +For example, to find the size of the Hyper-V\* image version number 20450, +follow these steps: + +#. Go to the `releases`_ repository. +#. Drill down into the `20450 > clear > config > image` directory. +#. Open the :file:`hyperv-config.json` file. +#. Locate the `PartitionLayout` key. + + The example shows 512 MB for the EFI partition, 32 MB for the swap + partition, and 8 GB for the root partition. + + + .. code-block:: console + + "PartitionLayout" : [ { "disk" : "hyperv.img", + "partition" : 1, + "size" : "512M", + "type" : "EFI" }, + { "disk" : "hyperv.img", + "partition" : 2, + "size" : "32M", + "type" : "swap" }, + { "disk" : "hyperv.img", + "partition" : 3, + "size" : "8G", + "type" : "linux" } ], + +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 +=========================================== + +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 + the virtual disk size of your |CL| VM. +#. Power up the VM. + + +Resize the partition of the virtual disk +======================================== + +#. Log in to an account with root privileges. +#. Open a terminal emulator. +#. Add the :command:`storage-utils` bundle to install the + :command:`parted` and :command:`resize2fs` tools. + + .. code-block:: bash + + sudo swupd bundle-add storage-utils + +#. Launch the `parted` tool. + + .. code-block:: bash + + sudo parted + +#. In the `parted` tool, perform these steps: + + #. Press :command:`p` to print the partitions table. + #. If the warning message below is displayed, enter :command:`Fix`. + + .. code-block:: console + + 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? + + Fix/Ignore? + + #. 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. + + .. 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 :guilabel:`Disk` label. + + An example of this can be seen in Figure 1. + + #. Enter :command:`q` to exit `parted` when you are finished resizing the + image. + + Figure 1 depicts the described steps to resize the partition of the virtual disk from 8.5GB to 20GB. + + .. figure:: figures/increase-virtual-disk-size-1.png + :scale: 100 % + :alt: Increase root partition size + + Figure 1: Increase root partition size. + +Resize the filesystem +===================== + +#. Enter :command:`sudo resize2fs -p /dev/[modified partition name]` where + *[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:: figures/increase-virtual-disk-size-2.png + :scale: 100 % + :alt: Increase root filesystem with resize2fs + + Figure 2: Increase root filesystem size after partition has been expanded. + +**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/ \ No newline at end of file diff --git a/_sources/guides/maintenance/query-upstream.rst.txt b/_sources/guides/maintenance/query-upstream.rst.txt new file mode 100644 index 00000000..65bd614f --- /dev/null +++ b/_sources/guides/maintenance/query-upstream.rst.txt @@ -0,0 +1,226 @@ +.. _query-upstream: + +Query package info from upstream repository +########################################### + +This guide describes how to query package information from the |CL| upstream +repositories. This guide is intended for developers and advanced users. + +.. contents:: + :local: + :depth: 1 + :backlinks: top + +Overview +******** + +In |CL-ATTR|, the :ref:`swupd` tool manages software +dependencies and installs bundles instead of packages. Although a bundle is +a collection of one or more packages, |CL| does not work with packages on +the client side. However, on the upstream/factory side, |CL| does work with +packages using a process called *mixing*. + +Currently, :command:`swupd` does not report which packages are installed, +provide package version information, or return other package details. This +guide describes a method for retrieving package information from the |CL| +upstream repositories using :abbr:`DNF(Dandified Yum)` commands. + +Prerequisites +************* + +This guide 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 `. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Configure DNF +************* + +#. Install the DNF bundle with the command: + + .. code-block:: bash + + sudo swupd bundle-add dnf + +#. Create a :file:`dnf.conf` file with the commands: + + .. code-block:: bash + + sudo mkdir -p /etc/dnf + sudo curl -L https://github.com/clearlinux/common/raw/master/conf/dnf.conf --output /etc/dnf/dnf.conf + + +#. Edit the :file:`/etc/dnf/dnf.conf` file and set the **baseurl** variable + for binary and source RPMs as shown in lines 3 and 9 in the following + example. + + .. code-block:: bash + :linenos: + :emphasize-lines: 3,9 + + [clear] + name=Clear + baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/x86_64/os/ + enabled=1 + gpgcheck=0 + [clear-source] + name=Clear sources + failovermethod=priority + baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/source/SRPMS/ + enabled=1 + gpgcheck=0 + +#. Initialize the RPM database with the command: + + .. code-block:: bash + + sudo rpm --initdb + + +DNF command usage examples +************************** + +.. contents:: :local: + :depth: 1 + :backlinks: top + +List all binary and source RPMs in the current release +====================================================== + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current + +Sample output: + +.. code-block:: console + + Clear 5.1 MB/s | 13 MB 00:02 + Clear sources 1.8 MB/s | 1.7 MB 00:00 + AVB-AudioModules-0:4.1.0-1.src + AVB-AudioModules-0:4.1.0-1.x86_64 + AVB-AudioModules-data-0:4.1.0-1.x86_64 + AVB-AudioModules-dev-0:4.1.0-1.x86_64 + AVB-AudioModules-lib-0:4.1.0-1.x86_64 + AVB-AudioModules-license-0:4.1.0-1.x86_64 + AVBStreamHandler-0:1.1.0-21.src + AVBStreamHandler-0:1.1.0-21.x86_64 + AVBStreamHandler-abi-0:1.1.0-21.x86_64 + AVBStreamHandler-bin-0:1.1.0-21.x86_64 + AVBStreamHandler-data-0:1.1.0-21.x86_64 + AVBStreamHandler-dev-0:1.1.0-21.x86_64 + AVBStreamHandler-lib-0:1.1.0-21.x86_64 + AVBStreamHandler-license-0:1.1.0-21.x86_64 + ... + + +Show version information for a package in current release +========================================================= + +This example queries version information for the zstd package. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current zstd + +Sample output: + +.. code-block:: console + + Last metadata expiration check: 0:02:30 ago on Tue 16 Jul 2019 03:03:34 PM PDT. + zstd-0:1.4.0-46.src + zstd-0:1.4.0-46.x86_64 + + +Show version information for a package in a specific release +============================================================ + +This example queries version information for the zstd package in release +21000. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=21000 zstd + +Sample output: + +.. code-block:: console + + Clear + 2.7 MB/s | 3.9 MB 00:01 + Clear sources + 628 kB/s | 559 kB 00:00 + zstd-0:1.3.3-20.src + zstd-0:1.3.3-20.x86_64 + +Show only version and release information for a package in a specific release +============================================================================= + +This example queries version and release information for the zstd package in +release 15000. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=15000 --qf="%{VERSION}\n%{RELEASE}" zstd + +Sample output: + +.. code-block:: console + + Clear + 3.4 MB/s | 3.9 MB 00:01 + Clear sources + 345 kB/s | 528 kB 00:01 + 1.1.4 + 5 + +Show the binary package for a specified binary file +=================================================== + +This example returns the binary package that contains the +:file:`/usr/bin/zip` binary file. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current --whatprovides /usr/bin/zip + +Sample output: + +.. code-block:: console + + Last metadata expiration check: 0:04:47 ago on Tue 16 Jul 2019 03:03:34 PM PDT. + zip-bin-0:3.0-23.x86_64 + +Show the source package for a specified binary file +=================================================== + +This example returns the source package that contains the +:file:`/usr/bin/zip` binary file. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current --whatprovides /usr/bin/zip --srpm + +Sample output: + +.. code-block:: console + + Last metadata expiration check: 0:05:50 ago on Tue 16 Jul 2019 03:03:34 PM PDT. + zip-0:3.0-23.src diff --git a/_sources/guides/maintenance/resource-limits.rst.txt b/_sources/guides/maintenance/resource-limits.rst.txt new file mode 100644 index 00000000..c753992f --- /dev/null +++ b/_sources/guides/maintenance/resource-limits.rst.txt @@ -0,0 +1,123 @@ +.. _resource-limits: + +Resource limits +############### + +Linux systems employ limiting or quota mechanisms to provide quality of +service for system resources and contain rogue processes. + +These limits are layered at the system-level and user-level. If these limits +need to be modified, it is useful to understand the different limit +configurations. + +.. contents:: :local: + :depth: 2 + + +System-wide limits +================== + +Some global resource limits are implemented in the Linux kernel and are +controllable with kernel parameters. + +For example, a global limit for the maximum number of open files is set with +the *fs.file-max* parameter. This limit applies to all processes and users an +cannot be exceeded other limit values. + +Checking limit +************** + +You can check a current value with :command:`sysctl -n `. For +example: + +.. code:: bash + + sysctl -n fs.file-max + + +This *fs.file-max* value is set intentionally high on |CL| systems by +default. You can check the maximum value supported by the system with: + +.. code:: + + cat /proc/sys/fs/file-max + + +Overriding limit +**************** + +You can override a value with :command:`sysctl -w `. For +example: + +.. code:: bash + + sudo sysctl -w fs.file-max= + +If needed permanently, the value can be set by creating a +:file:`/etc/sysctl.d/*.conf` file (see :command:`man sysctl.d` for details). +For example: + +.. code:: bash + + sudo mkdir -p /etc/sysctl.d/ + + sudo tee /etc/sysctl.d/fs-file-max.conf > /dev/null <<'EOF' + fs.file-max= + EOF + + + + + +Per-user limits +=============== + +For processes not managed by systemd, resource limits can be set for PAM +logins on a per-user basis with upper and lower limits in the +:file:`/etc/security/limits.conf` file. + +You can set temporary values and check the current values with the +:command:`ulimit` command. For example, to change the soft limit of maximum +number of open file descriptors for the current user: + +.. code:: + + ulimit -S -n + +See :command:`man limits.conf` for details. + + +Service limits +============== + +Resource limits for services started with systemd units do not follow normal +user limits because the process is started in a seperate `Linux control group +(cgroup) `_ Linux +cgroups associate related process groups and provide resource accounting. + +Resource limits for individual systemd services can be controlled inside their +unit files or its configuration drop-in directory with the resource Limit +directives. See `process properties section of the systemd.exec man page +`_. + +Resource limits for all systemd services can be controlled with a file in the +:file:`/etc/systemd/system.conf.d/` directory. For example, to have no +restriction on the number of open files: + +.. code:: + + sudo mkdir -p /etc/systemd/system.conf.d/ + + sudo tee /etc/systemd/system.conf.d/50-nfiles.conf > /dev/null <<'EOF' + [Manager] + DefaultLimitNOFILE=infinity + EOF + + + + + + + + + diff --git a/_sources/guides/maintenance/restart.rst.txt b/_sources/guides/maintenance/restart.rst.txt new file mode 100644 index 00000000..ddd4a17c --- /dev/null +++ b/_sources/guides/maintenance/restart.rst.txt @@ -0,0 +1,164 @@ +.. _restart: + +Restart system services after an OS update +########################################## + +This guide describes how to use the :command:`clr-service-restart` tool. + +.. contents:: + :local: + :depth: 1 + +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 +determine which services to restart. + + +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 :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: :command:`allow`, +:command:`disallow`, and :command:`default`. + +allow +===== + +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 +OS software update. + +.. code-block:: bash + + sudo clr-service-restart allow tallow.service + +disallow +======== + +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 +record. The example below tells :command:`clr-service-restart` not to +restart the *rngd* daemon after an OS software update. + +.. code-block:: bash + + sudo clr-service-restart disallow rngd + +default +======= + +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|. + +.. code-block:: bash + + sudo clr-service-restart default rngd + +Monitor options +*************** + +:command:`clr-service-restart` works in the background and is invoked with +:command:`swupd` automatically. Review the journal output to verify that +services are restarted after an OS software update. + +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. + + +-n option +========= + +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. +* What unit it is. +* Why it needs a restart. +* Which command is required to restart the unit. + +-a option +========= + +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 +:command:`-a` and :command:`-n` options, which displays a complete list of system +services that require a restart. + +Command: + +.. code-block:: bash + + sudo clr-service-restart -a -n + +Sample output: + +.. code-block:: console + + upower.service: needs a restart (a library dependency was updated) + /usr/bin/systemctl --no-ask-password try-restart upower.service + NetworkManager.service: needs a restart (a library dependency was + updated) + /usr/bin/systemctl --no-ask-password try-restart NetworkManager.service + .... + +Telemetry +********* + +:command:`clr-service-restart` may cause problems such as a short service +outage when a daemon is being restarted, or if a daemon fails to properly +restart. To minimize issues, :command:`clr-service-restart` creates a +telemetry record and sends it to the optional |CL| telemetry service if both +conditions below are met: + +* If a unit fails to automatically restart after an OS update. +* If that unit resides in the system location :file:`/usr/lib/systemd/system`. + +If you do not install the |CL| telemetrics bundle, the data is discarded. If +you install the telemetrics bundle and you opt to send telemetry, then the +system unit name is sent to the |CL| telemetry service. We evaluate the +report and update the whitelist to remove services that are not safe to +restart. + + +Conclusion +********** + +The |CL| team enjoys coming up with simple and efficient solutions to make +your work easier. We made a GitHub\* project of :command:`clr-service-restart` +and we invite you to look at the code, share your thoughts, and work with us +on improving the project. You can find the project at: + +https://github.com/clearlinux/clr-service-restart diff --git a/_sources/guides/maintenance/time.rst.txt b/_sources/guides/maintenance/time.rst.txt new file mode 100644 index 00000000..caa0be16 --- /dev/null +++ b/_sources/guides/maintenance/time.rst.txt @@ -0,0 +1,59 @@ +.. _time: + +Set the time +############ + +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. + +|CL| uses the `systemd-timesyncd.service` daemon to synchronize time. + + +#. Install the :command:`sysadmin-basic` bundle. + + .. code-block:: bash + + sudo swupd bundle-add sysadmin-basic + +#. Set your time zone. This example uses Los Angeles. + + .. code-block:: bash + + timedatectl set-timezone America/Los_Angeles + + .. note:: + + To see a list of time zones, use the command: + :command:`timedatectl list-timezones | grep ` + +#. Create a :file:`/etc/systemd/` directory. + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/ + +#. Create a new file named :file:`/etc/systemd/timesyncd.conf` and enter the + following text. + + .. code-block:: console + + [Time] + NTP= + FallbackNTP= + +#. Enable the `systemd-timesyncd` service. + + .. code-block:: bash + + timedatectl set-ntp true + +.. note:: + + To check the service status, use the :command:`timedatectl status` command. + + To restart the `timesyncd` daemon, enter :command:`systemctl restart + systemd-timesyncd` into your terminal emulator. + +**Congratulations!** You successfully set up the time in your |CL| system. + + diff --git a/_sources/guides/maintenance/validate-signatures.rst.txt b/_sources/guides/maintenance/validate-signatures.rst.txt new file mode 100644 index 00000000..f9d2fd21 --- /dev/null +++ b/_sources/guides/maintenance/validate-signatures.rst.txt @@ -0,0 +1,139 @@ +.. _validate-signatures: + +Validate signatures +################### + + +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 +that :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. + + +.. _image-content-validation: + +Image content validation +************************ + +In the steps below, we used the installer image of the latest release +of |CL|. You may use any image of |CL| you choose. + +#. Download the image, the signature of the SHA512 sum of the image, and the + |CL| certificate used for signing the SHA512 sum. + + .. code-block:: console + + # Image + curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz + # Signature of SHA512 sum of image + curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig + # Certificate + curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/ClearLinuxRoot.pem + +#. Generate the SHA256 sum of the |CL| certificate. + + .. code-block:: console + + sha256sum ClearLinuxRoot.pem + +#. Ensure the generated SHA256 sum of the |CL| certificate matches the + following SHA256 sum to verify the integrity of the certificate. + + .. code-block:: console + + 4b0ca67300727477913c331ff124928a98bcf2fb12c011a855f17cd73137a890 ClearLinuxRoot.pem + +#. Generate the SHA512 sum of the image and save it to a file. + + .. code-block:: console + + sha512sum clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz > sha512sum.out + +#. Ensure the signature of the SHA512 sum of the image was created using the + |CL| certificate. This confirms that the image is trusted and has not + been modified. + + .. code-block:: console + + openssl smime -verify -purpose any -in clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig -inform der -content sha512sum.out -CAfile ClearLinuxRoot.pem + + .. note:: + + The :command:`-purpose any` option is required when using OpenSSL 1.1. + If you use 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. + +Update content validation +************************* + +**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 :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. + + .. code-block:: console + + # MoM + curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM + # Signature of MoM + curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM.sig + # Swupd certificate + curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/Swupd_Root.pem + +#. Generate the SHA256 sum of the swupd certificate. + + .. code-block:: console + + sha256sum Swupd_Root.pem + +#. Confirm that the generated SHA256 sum of the swupd certificate matches the + SHA256 sum shown below to verify the integrity of the certificate. + + .. code-block:: console + + ff06fc76ec5148040acb4fcb2bc8105cc72f1963b55de0daf3a4ed664c6fe72c Swupd_Root.pem + +#. Confirm that the signature of the MoM was created using the Swupd + certificate. This signature validates the update content is trustworthy and + has not been modified. + + .. code-block:: console + + openssl smime -verify -purpose any -in Manifest.MoM.sig -inform der -content Manifest.MoM -CAfile Swupd_Root.pem + + .. note:: + + The :command:`-purpose any` option is required when using OpenSSL 1.1. + If you use 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:: + + The SHA512 sum of the MoM is not generated and then signed. Instead, the + 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. + Because the MoM contains a list of hashes for bundle manifests, if the MoM + cannot be trusted, then the bundle content cannot be trusted. diff --git a/_sources/guides/network/custom-clear-container.rst.txt b/_sources/guides/network/custom-clear-container.rst.txt new file mode 100644 index 00000000..d3657c10 --- /dev/null +++ b/_sources/guides/network/custom-clear-container.rst.txt @@ -0,0 +1,326 @@ +.. _custom-clear-container: + +Build a custom |CL-ATTR| based Docker container image +####################################################### + +This guide contains the steps to build a custom container image. The official +base |CL-ATTR| container image is published on Docker\* Hub and is updated on a +regular basis. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +* You must perform these steps on a |CL| system because the + :abbr:`swupd (software updater)` is used to manage bundles in the + container. +* You must install the :file:`containers-basic` bundle on the |CL| system + or Docker will not work. +* You have a basic understanding of Docker. + +Build the base container image +****************************** + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Verify Docker is installed and running. + + .. code-block:: bash + + docker info + + If Docker is installed and running, the output is similar to + this example: + + .. code-block:: console + + Containers: 0 + Running: 0 + Paused: 0 + Stopped: 0 + Images: 4 + Server Version: 17.05.0-ce + Storage Driver: overlay + Backing Filesystem: extfs + Supports d_type: true + Logging Driver: json-file + Cgroup Driver: cgroupfs + Plugins: + Volume: local + Network: bridge host macvlan null overlay + Swarm: inactive + Runtimes: runc + Default Runtime: runc + Init Binary: docker-init + containerd version: (expected: 9048e5e50717ea4497b757314bad98ea3763c145) + runc version: N/A (expected: 9c2d8d184e5da67c95d601382adf14862e4f2228) + init version: N/A (expected: ) + Kernel Version: 4.12.7-377.native + Operating System: Clear Linux OS for Intel Architecture + OSType: linux + Architecture: x86_64 + CPUs: 4 + Total Memory: 15.62GiB + Name: clr-os + ID: XQHJ:DYEM:3Q4D:DKLM:JOA4:RUSF:GAFR:DLPA:HOJP:W5FF:ULEE:7HZ3 + Docker Root Dir: /var/lib/docker + Debug Mode (client): false + Debug Mode (server): false + Registry: https://index.docker.io/v1/ + Experimental: false + Insecure Registries: + 127.0.0.0/8 + Live Restore Enabled: false + + If Docker is not installed, enter the commands: + + .. code-block:: bash + + swupd bundle-add containers-basic + systemctl start docker + +#. Use :command:`os-install` to download and install the bundles. + + .. code-block:: bash + + swupd os-install --url https://cdn.download.clearlinux.org/update --statedir "$PWD"/swupd-state --no-boot-update --version 29790 -B os-core-update,editors,network-basic base + + + The swupd example uses the following flags: + + * :command:`os-install` tells swupd to download and install. + * :command:`-V / --version` specifies the version of the |CL| bundles. + * :command:`--url` specifies the URL of the bundles repository. + * :command:`--statedir` specifies the state directory where downloaded bundles + and any state information are stored. + * :command:`--no-boot-update` tells swupd to skip updating boot files because + boot files are not required for a container. + + For more information on swupd flags, enter the :command:`swupd os-install -h` + command. + + Example output: + + .. code-block:: console + + swupd-client software verify 3.12.2 + Copyright (C) 2012-2017 Intel Corporation + + Verifying version 17870 + Attempting to download version string to memory + Downloading packs... + + Extracting python-basic pack for version 17820 + ...14% + Extracting perl-basic pack for version 17790 + ...28% + Extracting openssh-server pack for version 17660 + ...42% + Extracting editors pack for version 17850 + ...57% + Extracting network-basic pack for version 17650 + ...71% + Extracting os-core pack for version 17870 + ...85% + Extracting os-core-update pack for version 17870 + ...100% + Adding any missing files + ...88% + Inspected 33982 files + 33974 files were missing + 33974 of 33974 missing files were replaced + 0 of 33974 missing files were not replaced + Calling post-update helper scripts. + WARNING: boot files update skipped due to --no-boot-update argument + Fix successful + + .. note:: + + The WARNING message is expected and can be ignored. + +#. Create a tarball and compress it. + + .. code-block:: bash + + tar -C base -cf base.tar . + xz -v -T0 base.tar + +#. Create the Dockerfile to build the image. + + .. code-block:: bash + + cat > Dockerfile << EOF + FROM scratch + MAINTAINER First Last + ADD base.tar.xz / + CMD ["/bin/bash"] + EOF + +#. Build the |CL| container image. + + .. code-block:: bash + + docker build -t my-custom-clear-linux-container . + + Example output: + + .. code-block:: console + + Sending build context to Docker daemon 806.5MB + Step 1/4 : FROM scratch + ---> + Step 2/4 : MAINTAINER First Last + ---> Running in 7238f35abcd0 + ---> ec5064287c60 + Removing intermediate container 7238f35abcd0 + Step 3/4 : ADD base.tar.xz / + ---> 2723b7d20716 + Removing intermediate container 16e3ed0df8da + Step 4/4 : CMD /bin/bash + ---> Running in efa893350647 + ---> 5414c3a12993 + Removing intermediate container efa893350647 + Successfully built 5414c3a12993 + Successfully tagged my-custom-clear-linux-container:latest + +#. List the newly created |CL| container image. + + .. code-block:: bash + + docker images + + Example output: + + .. code-block:: console + + REPOSITORY TAG IMAGE ID CREATED SIZE + my-custom-clear-linux-container latest 5414c3a12993 About a minute ago 616MB + +#. Launch the built |CL| container. + + .. code-block:: bash + + docker run -it my-custom-clear-linux-container + +Manage bundles in a container +***************************** + +You can add and remove bundles from a |CL| container using the +:command:`RUN swupd` command in the Dockerfile. + +Add a bundle +============ + +This example Dockerfile adds the :file:`pxe-server` bundle to an existing |CL| +Docker image: + +.. code-block:: bash + + cat > Dockerfile << EOF + FROM my-customer-clear-linux-container + MAINTAINER First Last + RUN swupd bundle-add pxe-server + CMD ["/bin/bash/bash"] + EOF + +Example output: + +.. code-block:: console + + docker build -t my-clearlinux-with-pxe-server-bundle . + + Sending build context to Docker daemon 806.5MB + Step 1/4 : FROM my-custom-clear-linux-container + ---> 5414c3a12993 + Step 2/4 : MAINTAINER First Last + ---> Running in 19b4411cf4bd + ---> 08d400baffde + Removing intermediate container 19b4411cf4bd + Step 3/4 : RUN swupd bundle-add pxe-server + ---> Running in 3e634d6e0792 + swupd-client bundle adder 3.12.2 + Copyright (C) 2012-2017 Intel Corporation + + Attempting to download version string to memory + Downloading packs... + + Extracting pxe-server pack for version 17820 + . + Installing bundle(s) files... + .............................................................................. + .............................................................................. + .............................................................................. + .............................................................................. + .............................................................................. + .............................................................................. + Calling post-update helper scripts. + WARNING: systemctl not operable, unable to run systemd update triggers + Bundle(s) installation done. + ---> 8ead5f2c0c33 + Removing intermediate container 3e634d6e0792 + Step 4/4 : CMD /bin/bash + ---> Running in 0ceae320279b + ---> dcd9adb40611 + Removing intermediate container 0ceae320279b + Successfully built dcd9adb40611 + Successfully tagged my-clearlinux-with-pxe-server-bundle:latest + +.. note:: + + The WARNING message can be ignored because systemd does not run inside + a container. + +Remove a bundle +=============== + +This example Dockerfile removes the :file:`pxe-server` bundle from an existing +|CL| Docker image: + +.. code-block:: bash + + cat > Dockerfile << EOF + FROM my-clearlinux-with-pxe-server-bundle + MAINTAINER First Last + RUN swupd bundle-remove pxe-server + CMD ["/bin/bash/bash"] + EOF + +Example output: + +.. code-block:: console + + docker build -t my-clearlinux-remove-pxe-server-bundle . + + Sending build context to Docker daemon 806.5MB + Step 1/4 : FROM my-clearlinux-with-pxe-server-bundle + ---> dcd9adb40611 + Step 2/4 : MAINTAINER First Last + ---> Running in 71b60f15003e + ---> 742192751c1a + Removing intermediate container 71b60f15003e + Step 3/4 : RUN swupd bundle-remove pxe-server + ---> Running in ad28a3390ecc + swupd-client bundle remover 3.12.2 + Copyright (C) 2012-2017 Intel Corporation + + Removing bundle: pxe-server + Deleting bundle files... + Total deleted files: 92 + Untracking bundle from system... + Success: Bundle removed + 1 bundle(s) were removed successfully + ---> d6ee7903e14d + Removing intermediate container ad28a3390ecc + Step 4/4 : CMD /bin/bash + ---> Running in 7694989e97de + ---> ec23189ef954 + Removing intermediate container 7694989e97de + Successfully built ec23189ef954 + Successfully tagged my-clearlinux-remove-pxe-server-bundle:latest \ No newline at end of file diff --git a/_sources/guides/network/dpdk.rst.txt b/_sources/guides/network/dpdk.rst.txt new file mode 100644 index 00000000..5b1ccc65 --- /dev/null +++ b/_sources/guides/network/dpdk.rst.txt @@ -0,0 +1,352 @@ +.. _dpdk: + +Use DPDK to send packets between platforms +########################################## + +This guide describes how to send packets between two platforms. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +Figure 1 shows how to send packets between two platforms in a simple +configuration. The example uses the :abbr:`Data Plane Development Kit (DPDK)`, +which is a set of libraries, drivers, sample applications, and tools for fast +packet processing. + +.. figure:: ./figures/pktgen_lw3fd.png + :align: center + :alt: Platform A and B + + Figure 1: Environment for l3fwd DPDK application + +This example uses the following DPDK components: + +* pktgen: Traffic generator. See `pktgen`_ documentation for details. +* l3fwd: Layer 3 forwarding example application. See + `l3fwd`_ documentation for details. + +Prerequisites +************* + +* Two platforms using |CL-ATTR| release `13330`_ or higher. +* Both images must include the :command:`kernel-native` bundle. +* Install the :command:`network-basic-dev` bundle with the command: + + .. code-block:: bash + + sudo swupd bundle-add network-basic-dev + +* Each platform must have at least one :abbr:`NIC (Network Interface Card)`. + Check the `DPDK project`_ for the list of supported `dpdk.org NICs`_. + +* Two network cables. + +Install dpdk and build l3fwd example (Platform B) +************************************************* + +#. Change to the :file:`l3fwd` example directory. + + .. code-block:: bash + + sudo cd /usr/share/dpdk/examples/l3fwd + +#. Assign :envvar:`RTE_SDK` variable to the makefiles path. + + .. code-block:: bash + + sudo export RTE_SDK=/usr/share/dpdk/ + +#. Assign :envvar:`RTE_TARGET` variable to the location of the gcc\* config + file. + + .. code-block:: bash + + sudo export RTE_TARGET=x86_64-native-linuxapp-gcc + +#. Build the `l3fwd` application and add the configuration header to + the :makevar:`CFLAGS` variable. + + .. code-block:: bash + + sudo make CFLAGS+="-include /usr/include/rte_config.h" + + +Build pktgen (Platform A) +************************* + +#. Download the `pktgen tar package`_ v3.1.2 or newer. + +#. Decompress packages and move to uncompressed source directory. + +#. Assign :envvar:`RTE_SDK` variable to the path where makefiles are located. + + .. code-block:: bash + + sudo export RTE_SDK=/usr/share/dpdk/ + +#. Assign :envvar:`RTE_TARGET` to the location of the gcc config file. + + .. code-block:: bash + + sudo export RTE_TARGET=x86_64-native-linuxapp-gcc + +#. Build the `pktgen` project and set the :makevar:`CONFIG_RTE_BUILD_SHARED_LIB` variable + to "n". + + .. code-block:: bash + + sudo make CONFIG_RTE_BUILD_SHARED_LIB=n + +Bind NICs to DPDK kernel drivers (Platforms A and B) +**************************************************** + +The `l3fwd` application uses two NICs. The DPDK includes tools for binding +NICs to DPDK modules to run DPDK applications. + +#. Load the DPDK I/O kernel module. + + .. code-block:: bash + + sudo modprobe vfio-pci + +#. Check the NIC status to determine which network cards are not + busy. When another application is using them, the status shows "Active", + and those NICs cannot be bound. + + .. code-block:: bash + + sudo dpdk-devbind --status + +#. Bind two available NICs. The general syntax for binding is: + :command:`dpdk-devbind --bind=vfio-pci `. + A working example is shown below: + + .. code-block:: bash + + sudo dpdk-devbind --bind=vfio-pci 01:00.0 + +#. Check the NIC status to verify that the NICs are bound correctly. If + successful, `drv` displays the value `igb_uio`, which confirms + that the NICs are using the DPDK modules. + + +Set hugepages (Platforms A and B) +********************************* + +|CL| supports `hugepages` for the large memory pool allocation used for +packet buffers. + +#. Set the number of hugepages. + + .. code-block:: bash + + sudo echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + +#. Allocate pages on NUMA machines. + + .. code-block:: bash + + sudo echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages + sudo echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages + +#. Make memory available for DPDK. + + .. code-block:: bash + + sudo mkdir -p /mnt/huge $ mount -t hugetlbfs nodev /mnt/huge + + For more information, refer to the `DPDK guide`_ System Requirements + section. + + +Set up the physical environment (Platforms A and B) +*************************************************** + +Connect the NICs on Platform A to the NICs on Platform B using the network +cables as shown in figure 2. + +.. figure:: ./figures/pyshical_net.png + + Figure 2: Physical network environment + + +Run l3fwd application (Platform B) +********************************** + +The `l3fwd` application is one of the DPDK examples available when you +install the :file:`dpdk-dev` bundle. `l3fwd` forwards packets from one +NIC to another. For details, refer to the `l3fwd`_ documentation. + +#. Open the l3fwd example directory. + + .. code-block:: bash + + sudo cd /usr/share/dpdk/examples/l3fwd + +#. **This step is very important.** + + #. DPDK needs poll mode drivers to operate. + #. Poll mode drivers are shared objects in :file:`/usr/lib64`. + #. See the full list of supported NICs at `dpdk.org NICs`_. + #. You must know which kernel module each NIC is using and choose a poll + mode driver that corresponds to your NICs. + +#. NIC binding and `pktgen` configuration depends upon network use cases and + available system resources. Use the :command:`-d` flag to set the poll mode + driver. + + The following example assumes that the NICs use the `e1000` network driver + and the `e1000` poll mode driver. The :file:`librte_pmd_e1000.so` is + located in :file:`/usr/lib64` in |CL|. + + .. code-block:: bash + + sudo ./build/l3fwd -c 0x3 -n 2 -d librte_pmd_e1000.so -- -p 0x3 --config="(0,0,0),(1,0,1)" + +#. The `l3fwd` application shows port initialization details at startup. + After port 0 initialization completes, `l3fwd` shows a MAC address and + information for port 1. + + Save the MAC address for configuring the `pktgen` project. + +Run pktgen application (Platform A) +*********************************** + +`pktgen` is a network traffic generator included in the DPDK. + +#. `pktgen` configuration depends upon the network setup and the + available system resources. The following example shows a basic + configuration. + + .. code-block:: bash + + sudo ./app/app/x86_64-native-linuxapp-gcc/pktgen -c 0xf -n 4 -- -p 0xf -P -m "1.0, 2.1" + +#. Enable active colorful output (optional). + + .. code-block:: bash + + Pktgen> theme enable + +#. Use the MAC addresses shown by the `l3fwd` application during initialization. + The command to set the MAC addresses in `pktgen` has the format: + + .. code-block:: bash + + set mac + + Here is a working example: + + .. code-block:: bash + + Pktgen> set mac 0 00:1E:67:CB:E8:C9 + Pktgen> set mac 1 00:1E:67:CB:E8:C9 + +#. Send packets. + + .. code-block:: bash + + Pktgen> start 0-1 + +For more details, see the `pktgen`_ documentation. + +Appendix A: Use pass-through for virtual machines +************************************************* + +This section explains how to set up a virtual environment where virtual +machines control the NICs on the host. + +#. Create a new directory and move to it. + +#. Download or create a :file:`start_qemu.sh` script for running a kvm virtual + machine: + + .. code-block:: bash + + sudo curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh + +#. Download a bare-metal image of |CL| and rename it as :file:`clear.img`. + +#. Look for an Ethernet\* device entry that contains vendor and device ID: + + .. code-block:: bash + + sudo lspci -nn | grep Ethernet + + An example output: + + .. code-block:: console + + 03:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] + + where `03:00.0` is the device entry and `8086:1521` is the `vendor:device + ID`. Record this information, because you need it to unbind the NICs from a + host. + + +#. Unbind the NICs from the host to do pass-through with virtual machines. |CL| + supports this action. The commands take the format: + + .. code-block:: bash + + echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/new_id + echo "entry for device" > /sys/bus/pci/drivers/igb/unbind + echo "entry for device" > /sys/bus/pci/drivers/pci-stub/bind + echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/remove_id + + Here is a working example: + + .. code-block:: bash + + sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/new_id + sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/igb/unbind + sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/pci-stub/bind + sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/remove_id + +#. Assign the unbound NICs to the KVM virtual machine (guest). + Modify the :file:`start_qemu.sh` script in `qemu-system-x86_64` arguments, and + add the lines with the host's NICs information in the format: + + .. code-block:: bash + + -device pci-assign,host="",id=passnic0,addr=03.0 + -device pci-assign,host="",id=passnic1,addr=04.0 + + Here is a working example: + + .. code-block:: bash + + -device pci-assign,host=03:00.0,id=passnic0,addr=03.0 \ + -device pci-assign,host=03:00.3,id=passnic1,addr=04.0 \ + +#. Add more NUMA machines to the virtual machine by adding lines to the + Makefile boot target in the format: + + .. code-block:: bash + + -numa node,mem=,cpus= + + Here is a working example for a virtual machine with 4096 memory and four + CPUs: + + .. code-block:: bash + + -numa node,mem=2048,cpus=0-1 \ + -numa node,mem=2048,cpus=2-3 \ + + .. note:: Each NUMA machine must use the same quantity of memory. + +#. Run the :file:`start_qemu.sh` script. + + +.. _13330: https://cdn.download.clearlinux.org/releases/13330/ +.. _DPDK project: http://dpdk.org +.. _dpdk.org NICs: http://dpdk.org/doc/nics +.. _pktgen tar package: http://dpdk.org/browse/apps/pktgen-dpdk/refs +.. _DPDK guide: http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html +.. _l3fwd: http://dpdk.org/doc/guides/sample_app_ug/l3_forward.html +.. _pktgen: http://pktgen-dpdk.readthedocs.io/en/latest/index.html diff --git a/_sources/guides/network/ipxe-install.rst.txt b/_sources/guides/network/ipxe-install.rst.txt new file mode 100644 index 00000000..70e6e7fa --- /dev/null +++ b/_sources/guides/network/ipxe-install.rst.txt @@ -0,0 +1,340 @@ +.. _ipxe-install: + +Install over the network with iPXE +################################## + +This guide describes how to install |CL-ATTR| using :abbr:`PXE (Pre-boot +Execution Environment)` over the network. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +PXE is an industry standard that describes client-server interaction with +network-boot software and uses the DHCP and TFTP protocols. This guide shows one +method of using the PXE environment to install |CL|. + +The PXE extension called `iPXE`_ adds support for additional protocols such as +HTTP, :abbr:`iSCSI (Internet Small Computer Systems Interface)`, :abbr:`AoE +(ATA over Ethernet\*)`, and :abbr:`FCoE (Fiber Channel over Ethernet\*)`. iPXE +enables network booting on computers with no built-in PXE support. + +To install |CL| through iPXE, you must create a PXE client. Figure 1 depicts +the flow of information between a PXE server and a PXE client. + +.. figure:: ./figures/network-boot-flow.png + :alt: PXE information flow + + Figure 1: PXE information flow. + +.. caution:: + + The |CL| image that boots through the PXE process automatically erases all + data and partitions on the PXE client system and creates 3 new partitions + to install onto. + +Prerequisites +************* + +Before booting with iPXE, make the following preparations. + +Connect the PXE server and PXE clients to a switch on a private network, as +shown in figure 2. + +.. figure:: ./figures/network-boot-setup.png + :alt: Network topology + + Figure 2: Network topology. + +Your PXE client must have a boot order where the network boot option is +prioritized before the disk boot option. + +Your PXE server must have: + +* Ethernet/LAN boot option. +* At least two network adapters. +* Connection to a public network. +* Secure boot option disabled. + +.. note:: + + You must disable the secure boot option in the BIOS because the UEFI + binaries used to boot |CL| are not signed. + + +Configuration +************* + +To set up |CL| using iPXE automatically, use the :file:`configure-ipxe.sh` +script included with :abbr:`ICIS (Ister Cloud Init Service)`. For additional +instructions on the script, refer to the guide on the `ister-cloud-init-svc`_ +GitHub\* repository. + +To set up |CL| manually, perform the steps below. + +#. Define the variables used for iPXE boot configuration. + + .. code-block:: console + + ipxe_app_name=ipxe + ipxe_port=50000 + web_root=/var/www + ipxe_root=$web_root/$ipxe_app_name + tftp_root=/srv/tftp + external_iface=eno1 + internal_iface=eno2 + pxe_subnet=192.168.1 + pxe_internal_ip=$pxe_subnet.1 + pxe_subnet_mask_ip=255.255.255.0 + pxe_subnet_bitmask=16 + +#. Log in and get root privilege. + + .. code-block:: bash + + sudo -s + +#. Add the :command:`pxe-server` bundle to your |CL| system. The bundle contains all + files needed to run a PXE server. + + .. code-block:: bash + + sudo swupd bundle-add pxe-server + +#. Download the latest network-bootable release of |CL| and extract the + files. + + .. code-block:: bash + + sudo mkdir -p $ipxe_root + sudo curl -o /tmp/clear-pxe.tar.xz \ + https://cdn.download.clearlinux.org/current/clear-$(curl \ + https://cdn.download.clearlinux.org/latest)-pxe.tar.xz + sudo tar -xJf /tmp/clear-pxe.tar.xz -C $ipxe_root + sudo ln -sf $(ls $ipxe_root | grep 'org.clearlinux.*') $ipxe_root/linux + + .. note:: + + Ensure that the initial ramdisk file is named :file:`initrd` and + the kernel file is named :file:`linux`, which is a symbolic link to the + actual kernel file. + +#. Create an iPXE boot script with the following contents. During an iPXE + boot, the iPXE boot script directs the PXE client to download the files to + boot and install |CL|. Use the names previously given to the initial + ramdisk and kernel files. + + .. code-block:: console + + sudo cat > $ipxe_root/ipxe_boot_script.ipxe << EOF + #!ipxe + kernel linux quiet init=/usr/lib/systemd/systemd-bootchart \ + initcall_debug tsc=reliable no_timer_check noreplace-smp rw \ + initrd=initrd + initrd initrd + boot + EOF + +#. The :command:`pxe-server` bundle contains a lightweight web-server known as + nginx. Create a configuration file for nginx to serve |CL| to PXE + clients with the following contents: + + .. code-block:: console + + sudo mkdir -p /etc/nginx/conf.d + sudo cat > /etc/nginx/conf.d/$ipxe_app_name.conf << EOF + server { + listen $ipxe_port; + server_name localhost; + location /$ipxe_app_name/ { + root $web_root; + autoindex on; + } + } + EOF + + sudo cp /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf + + .. note:: + + Create a separate nginx configuration file to serve network-bootable + images on a non-standard port number. This action saves existing nginx + configurations. + +#. Start nginx and enable the startup on boot option. + + .. code-block:: bash + + sudo systemctl start nginx + sudo systemctl enable nginx + +#. The :command:`pxe-server` bundle contains a lightweight DNS server which + conflicts with the DNS stub listener provided in `systemd-resolved`. + Disable the DNS stub listener and temporarily stop `systemd-resolved`. + + .. code-block:: console + + sudo mkdir -p /etc/systemd + sudo cat > /etc/systemd/resolved.conf << EOF + [Resolve] + DNSStubListener=no + EOF + + sudo systemctl stop systemd-resolved + +#. Assign a static IP address to the network adapter for the private network + and restart `systemd-networkd` with the following commands: + + .. code-block:: console + + sudo mkdir -p /etc/systemd/network + sudo cat > /etc/systemd/network/70-internal-static.network << EOF + [Match] + Name=$internal_iface + [Network] + DHCP=no + Address=$pxe_internal_ip/$pxe_subnet_bitmask + EOF + + sudo systemctl restart systemd-networkd + +#. Configure :abbr:`NAT (Network Address Translation)` to route traffic from + the private network to the public network. This action makes the PXE + server act as a router. To make these changes persistent during reboots, save the + changes to the firewall with the following commands: + + .. code-block:: bash + + sudo iptables -t nat -F POSTROUTING + sudo iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE + sudo systemctl enable iptables-save.service + sudo systemctl restart iptables-save.service + sudo systemctl enable iptables-restore.service + sudo systemctl restart iptables-restore.service + + .. note:: + + The firewall masks packets to make them appear as coming from the PXE + server and hides PXE clients from the public network. + +#. Configure the kernel to forward network packets to different + interfaces. Otherwise, NAT will not work. + + .. code-block:: bash + + sudo mkdir -p /etc/sysctl.d + sudo echo net.ipv4.ip_forward=1 > /etc/sysctl.d/80-nat-forwarding.conf + sudo echo 1 > /proc/sys/net/ipv4/ip_forward + +#. The :command:`pxe-server` bundle contains iPXE firmware images that allow computers + without an iPXE implementation to perform an iPXE boot. Create a TFTP + hosting directory and populate the directory with the iPXE firmware images + with the following commands: + + .. code-block:: bash + + sudo mkdir -p $tftp_root + sudo ln -sf /usr/share/ipxe/undionly.kpxe $tftp_root/undionly.kpxe + +#. The :command:`pxe-server` bundle contains a lightweight TFTP, DNS, and DHCP + server known as `dnsmasq`. Create a configuration file for `dnsmasq` + to listen on a dedicated IP address for those functions. PXE clients on + the private network will use this IP address. + + .. code-block:: console + + sudo cat > /etc/dnsmasq.conf << EOF + listen-address=$pxe_internal_ip + EOF + +#. Add the options to serve iPXE firmware images to PXE clients over TFTP to + the `dnsmasq` configuration file. + + .. code-block:: console + + sudo cat >> /etc/dnsmasq.conf << EOF + enable-tftp + tftp-root=$tftp_root + EOF + +#. Add the options to host a DHCP server for PXE clients to the :file:`dnsmasq` + configuration file. + + .. code-block:: console + + sudo cat >> /etc/dnsmasq.conf << EOF + dhcp-leasefile=/var/db/dnsmasq.leases + + dhcp-authoritative + dhcp-option=option:router,$pxe_internal_ip + dhcp-option=option:dns-server,$pxe_internal_ip + + dhcp-match=set:pxeclient,60,PXEClient* + dhcp-range=tag:pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,15m + dhcp-range=tag:!pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,6h + + dhcp-match=set:ipxeboot,175 + dhcp-boot=tag:ipxeboot,http://$pxe_internal_ip:$ipxe_port/$ipxe_app_name/ipxe_boot_script.ipxe + dhcp-boot=tag:!ipxeboot,undionly.kpxe,$pxe_internal_ip + EOF + + + The configuration provides the following important functions: + + * Directs PXE clients without an iPXE implementation to the TFTP server + to acquire architecture-specific iPXE firmware images that allow them + to perform an iPXE boot. + * Activates only on the network adapter that has an IP address on the + defined subnet. + * Directs PXE clients to the DNS server. + * Directs PXE clients to the PXE server for routing via NAT. + * Divides the private network into two pools of IP addresses. One pool + is for network boot and one pool is used after boot. Each pool has + their own lease times. + +#. Create a file for `dnsmasq` to record the IP addresses it provides + to PXE clients. + + .. code-block:: bash + + sudo mkdir -p /var/db + sudo touch /var/db/dnsmasq.leases + +#. Start `dnsmasq` and enable startup on boot. + + .. code-block:: bash + + sudo systemctl enable dnsmasq + sudo systemctl restart dnsmasq + +#. Start `systemd-resolved`. + + .. code-block:: bash + + sudo systemctl start systemd-resolved + + .. note:: + + `systemd-resolved` dynamically updates the list of DNS servers for the + private network if you use the `dnsmasq` DNS server. The setup creates a + pass-through DNS server that relies on the DNS servers listed in + :file:`/etc/resolv.conf`. + +#. Power on the PXE client and watch the client boot and install |CL|. + + After booting, |CL| automatically partitions the hard drive, + installs itself, updates to the latest version, and reboots. + + +**Congratulations!** You have successfully installed and configured a PXE +server that enables PXE clients to boot and install |CL| over the network. + + +.. _iPXE: + http://ipxe.org/ + +.. _ister-cloud-init-svc: + https://github.com/clearlinux/ister-cloud-init-svc diff --git a/_sources/guides/network/network-bonding.rst.txt b/_sources/guides/network/network-bonding.rst.txt new file mode 100644 index 00000000..41ba15b9 --- /dev/null +++ b/_sources/guides/network/network-bonding.rst.txt @@ -0,0 +1,130 @@ +.. _network-bonding: + +Combine multiple interfaces with network bonding +################################################ + +This guide describes how to configure systemd to use the :command:`bonding` +driver. + +Network bonding combines multiple network interfaces into a single logical +interface to provide redundancy and bandwidth aggregation. + +|CL-ATTR| includes the Linux `Bonding driver`_ and `Team driver`_ . + +The example demonstrates how to: + +* Bond all four ports of a quad-port NIC in 802.3ad mode. + +* Enable jumbo frames to optimize large data transfers on the local network. + +Your NICs and network switch must support 802.3ad mode and jumbo frames. The +example explains how to configure your NICs for both features. Your switch may +require additional configuration. See your switch documentation for details. + +.. note:: + + You must run all commands in this guide as root. + +#. Log in and get root privileges. + + .. code-block:: console + + sudo -s + +#. Create the :file:`/etc/systemd/network` directory. + + .. code-block:: bash + + mkdir -p /etc/systemd/network + + The :file:`/etc/systemd/network` directory contains configuration files and + network settings for the virtual device and its underlying physical + interfaces. + +#. Configure systemd to create a virtual network device called `bond1`. Use a + text editor to create a file named :file:`30-bond1.netdev`. + + .. code-block:: console + + [NetDev] + Name=bond1 + Kind=bond + + [Bond] + Mode=802.3ad + TransmitHashPolicy=layer3+4 + MIIMonitorSec=1s + LACPTransmitRate=fast + + Refer to the `systemd.netdev`_ manpage for :file:`30-bond1.netdev` file + syntax. This example is based on Example 9 on the manpage. Modify the + example for your configuration. + +#. Configure the slave interfaces. Create a text file named + :file:`30-bond1-enp1s0.network`. Assign the slave interfaces to the virtual + `bond1` device and use the syntax shown in `systemd.network`_. + + .. code-block:: console + + [Match] + Name=enp1s0f* + + [Network] + Bond=bond1 + + [Link] + MTUBytes=9000 + + The example bonds all four ports of a quad-port NIC as a slave of `bond1`. + The example uses a wildcard match because the NIC names are in the range + `enp1s0f0-enp1s0f3`. If your NIC names are not wildcard-compatible, create + a separate :file:`.network` file for each NIC. + + For best results, do not assign addresses or DHCP support to the individual + NICs. + + The `MTUBytes` setting enables jumbo frames of up to 9000 bytes. Your + switch may require additional configuration to support this setting. + +#. Configure the bonded interface in a file named :file:`30-bond1.network`. + + .. code-block:: console + + [Match] + Name=bond1 + + [Network] + BindCarrier=enp1s0f0 enp1s0f1 enp1s0f2 enp1s0f3 + Address=192.168.1.201/24 + + [Link] + MTUBytes=9000 + + `bond1` is a virtual interface with no physical link status. + + `BindCarrier` indicates that the `bond1` link status is determined by the + status of the listed slave devices. + + `Address` contains an IP address that you assign to the logical interface. + DHCP bonded interfaces are complex and outside the scope of this example. + + `MTUBytes` must be set to 9000 on all slave interfaces and on the bonded + interface for successful jumbo frames operation. If `MTUBytes` is not the + same on all interfaces, then the lowest value is used. + +#. Apply the new network configuration with the command: + + .. code-block:: bash + + systemctl restart systemd-networkd + + The `MTUBytes` settings do not take effect until you reboot or manually + apply the settings with a utility such as ifconfig. + +.. _Bonding driver: https://www.kernel.org/doc/Documentation/networking/bonding.txt + +.. _Team driver: https://www.kernel.org/doc/Documentation/networking/team.txt + +.. _systemd.netdev: https://www.freedesktop.org/software/systemd/man/systemd.netdev.html + +.. _systemd.network: https://www.freedesktop.org/software/systemd/man/systemd.network.html diff --git a/_sources/guides/network/vnc.rst.txt b/_sources/guides/network/vnc.rst.txt new file mode 100644 index 00000000..a734a782 --- /dev/null +++ b/_sources/guides/network/vnc.rst.txt @@ -0,0 +1,791 @@ +.. _vnc: + +Remote-desktop to a host using VNC +################################## + +This guide describes how to use :abbr:`VNC (Virtual Network Computing)` to +connect to a remote |CL-ATTR| host. + +VNC is a client-server GUI-based tool that allows you to connect via +remote-desktop to your |CL| host. + +.. contents:: + :local: + :depth: 1 + +Install the VNC server and misc. components on your host +******************************************************** + +To configure VNC to work on your |CL| host, install these bundles: + +* :command:`desktop-autostart`: Installs :abbr:`GDM (Gnome Desktop Manager)`, sets + it to start automatically on boot, and installs TigerVNC Viewer. +* :command:`vnc-server`: Installs the TigerVNC server. + +Follow these steps: + +#. Log into your |CL| host and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Install the |CL| bundles. + + .. code-block:: bash + + swupd bundle-add desktop-autostart vnc-server + +#. Reboot your |CL| host. + +Configure a VNC-server-start method on your host +************************************************ + +There are three methods you can use to configure and start the VNC server on +your |CL| host: + +.. list-table:: Table 1: VNC-server-start Configuration Methods + :widths: 10,20,20,20 + :header-rows: 1 + + * - Attribute + - Method 1: Manually start a VNC session + - Method 2: Automatically start a VNC session via a systemd service script + - Method 3: Create multi-user logins with authentication through GDM + * - Description + - This is the traditional method where you SSH into the |CL| host, manually + start a VNC session to get a display ID, and connect to it by + supplying the display ID. + - The system administrator sets up a systemd service script for you with + a pre-assigned display ID. You make a VNC connection and supply + your pre-assigned display ID. + - The system adminstrator configures GDM to accept connection requests. + When you make a VNC connection to the |CL| host, you see + the GDM login screen and authenticate as if you are local. + * - Who configures VNC settings? + - You + - System adminstrator + - System adminstrator + * - Who starts VNC session? + - You + - Set to start automatically on boot by system administrator + - Set to start automatically on boot by system administrator + * - Who ends VNC sesssion? + - You + - You + - System administrator can disable VNC service altogether + * - Requires VNC password to authenticate? + - Yes + - Yes + - No. Use |CL| account username and password through GDM + + +Although all three methods can coexist on the same |CL| host, we recommend +you pick a method that suits your needs. + +For simplicity, the rest of this guide refers to these methods as +Method 1, Method 2, and Method 3. + +Method 1: Manually start a VNC session +====================================== + +You (and each user) must perform these steps to initialize your VNC settings. + +#. Log in. +#. Open a terminal emulator. +#. Start VNC with the :command:`vncserver` command. Since this is your + first time starting VNC, it adds default configuration files and asks you + to set a VNC password. + + .. code-block:: bash + + vncserver + + Example output: + + .. code-block:: console + + You will require a password to access your desktops. + + Password: + Verify: + Would you like to enter a view-only password (y/n)? n + xauth: file /home/vnc-user-a/.Xauthority does not exist + + New 'clr-linux:2 (vnc-user-a)' desktop is clr-linux:2 + + Creating default startup script /home/vnc-user-a/.vnc/xstartup + Creating default config /home/vnc-user-a/.vnc/config + Starting applications specified in /home/vnc-user-a/.vnc/xstartup + Log file is /home/vnc-user-a/.vnc/clr-linux:2.log + + Upon completion, you can find the default configuration files and the + password file hidden in the :file:`.vnc` directory in your home directory. + + A VNC session starts and shows a unique display ID, which is the + number following the hostname and the colon ":". In the above example, the + display ID is 2. In a later step, you will supply the display ID to + your VNC viewer app for connection. + +#. Kill the active VNC session for the time being with the + :command:`vncserver -kill :[display ID]` command. Substitute [display ID] + with your active VNC session display ID. For example: + + .. code-block:: bash + + vncserver -kill :2 + + .. note:: + + If you do not recall the active session display ID, use the + :command:`vncserver -list` command to find it. + +#. Optional configurations: + + * To customize settings such as screen size, security type, etc., + modify the :file:`$HOME/.vnc/config` file. + * To customize the applications to run at startup, modify the + :file:`$HOME/.vnc/xstartup` file. + +Method 2: Automatically start a VNC session via a systemd service script +======================================================================== + +To configure VNC for this method, you must have root privileges. You will +set up a systemd service file for all intended VNC users with their own +preassigned unique display ID. + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Make sure the user accounts already exist. Use the following command to + list all users. + + + .. code-block:: bash + + cut -d: -f1 /etc/passwd + +#. Create the path :file:`/etc/systemd/system`. + + .. code-block:: bash + + mkdir -p /etc/systemd/system + +#. Create a systemd service script file :file:`vncserver@:[X].service`, + where [X] is the display ID, for each user in :file:`/etc/systemd/system` + Each user must be assigned a unique display ID. Be sure the correct + username is entered in the :guilabel:`User` field. The example below shows user + vnc-user-b who is assigned the display ID 5. + + .. code-block:: console + + # cat > /etc/systemd/system/vncserver@:5.service << EOF + + [Unit] + Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5" + After=syslog.target network.target + + [Service] + Type=simple + User=vnc-user-b + PAMName=login + PIDFile=/home/%u/.vnc/%H%i.pid + ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' + ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -alwaysshared -fg + ExecStop=/usr/bin/vncserver -kill %i + + [Install] + WantedBy=multi-user.target + + EOF + +#. Have each user log into their account and set a VNC password with + the :command:`vncpasswd` command before proceeding to the next step. + +#. Start the VNC service script and set it to start automatically on + boot for each user. Replace the [X] with the display ID. + + .. code-block:: bash + + systemctl daemon-reload + systemctl start vncserver@:[X].service + systemctl enable vncserver@:[X].service + +#. After starting the services, verify they are running. + + .. code-block:: bash + + systemctl | grep vnc + + The example below shows 2 VNC sessions that were successfully started for + users vnc-user-b with display ID 5 and vnc-user-c with display ID 6. + + .. code-block:: console + + # systemctl | grep vnc + + vncserver@:5.services loaded active running VNC Remote Desktop Service for "vnc-user-b" with display ID "5" + vncserver@:6.services loaded active running VNC Remote Desktop Service for "vnc-user-c" with display ID "6" + system-vncserver.slice loaded active active system-vncserver.slice + +Method 3: Multi-user logins with authentication through GDM +=========================================================== + +For this method, VNC is configured as a systemd service that listens on port +5900 and GDM is configured to accept access requests from VNC. When you +make a VNC connection to your |CL| host, you are presented with the GDM login +screen and you authenticate as if you are local. You must have root privileges +to perform this configuration. + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Create the path :file:`/etc/systemd/system`. + + .. code-block:: bash + + mkdir -p /etc/systemd/system + +#. Create a systemd socket file :file:`xvnc.socket` and add the following: + + .. code-block:: console + + # cat > /etc/systemd/system/xvnc.socket << EOF + + [Unit] + Description=XVNC Server on port 5900 + + [Socket] + ListenStream=5900 + Accept=yes + + [Install] + WantedBy=sockets.target + + EOF + +#. Create a systemd service file :file:`xvnc@.service` and add the following: + + .. code-block:: console + + # cat > /etc/systemd/system/xvnc@.service << EOF + + [Unit] + Description=Daemon for each XVNC connection + + [Service] + ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 2000x1200 -once -SecurityTypes=None + User=nobody + StandardInput=socket + StandardError=syslog + + EOF + +#. Create the path :file:`/etc/gdm`. + + .. code-block:: bash + + mkdir -p /etc/gdm + + +#. Create a GDM :file:`custom.conf` file and add the following: + + .. code-block:: console + + # cat > /etc/gdm/custom.conf << EOF + + [xdmcp] + Enable=true + Port=177 + + EOF + +#. Start the VNC socket script and set it to start automatically on boot. + + .. code-block:: bash + + systemctl daemon-reload + systemctl start xvnc.socket + systemctl enable xvnc.socket + +#. After starting the socket, verify it is running. + + .. code-block:: bash + + systemctl | grep vnc + + The example below shows the xvnc.socket is running. + + .. code-block:: console + + # systemctl | grep vnc + + xvnc.socket loaded active listening XVNC Server on port 5900 + system-xvnc.slice loaded active active system-xvnc.slice + +See the vncserver Man page for additional information. + +Install a VNC viewer app and an SSH client on your client system +**************************************************************** + +You need a VNC viewer app on your client system to connect to your |CL| host. +An SSH client is only needed if you chose to use Method 1 or you plan to +encrypt your VNC traffic, which is discussed later in this guide. + +Perform the steps below to add these apps to your client system. + +Install a VNC viewer app +======================== + +On |CL|: + +.. code-block:: bash + + swupd bundle-add desktop-autostart + +On Ubuntu\*, Mint\*: + +.. code-block:: bash + + apt-get install xtightvncviewer + +On Fedora\*: + +.. code-block:: bash + + dnf install tigervnc + +On Windows\*: + +* Install `RealVNC for Windows`_ + +On macOS\*: + +* Install `RealVNC for macOS`_ + +Install an SSH client +===================== + +* On most Linux distros (|CL|, Ubuntu, Mint, Fedora, etc.) and macOS, + SSH is built-in so you don't need to install it. +* On Windows, you can install `Putty`_. + +Establish a VNC connection to your host +*************************************** + +Depending on the VNC-server-configuration method chosen, use the appropriate VNC +connection: + +* If you chose Method 1, you must take a few extra steps by using SSH to connect + to your |CL| host and then manually launching VNC. + +* If you chose Method 2, get your preassigned VNC display ID from your system + administrator first and then proceed to the :ref:`connect-to-vnc-session` + section below. + +* If you chose Method 3, proceed to the :ref:`connect-to-vnc-session` below. + + +SSH into your host and launch VNC +================================= + +#. SSH into your |CL| host + + #. On Linux distros and macOS: + + .. code-block:: bash + + ssh [username]@[clear-linux-host-ip-address] + + #. On Windows: + + #. Launch Putty. + #. Under the :guilabel:`Category` section, select :guilabel:`Session`. + See Figure 1. + #. Enter the IP address of your |CL| host in the + :guilabel:`Host Name (or IP address)` field. + #. Set the :guilabel:`Connection type` option to :guilabel:`SSH`. + #. Click the :guilabel:`Open` button. + + .. figure:: figures/vnc/vnc-1.png + :scale: 90 % + :alt: Putty - configure SSH session settings + + Figure 1: Putty - configure SSH session settings + +#. Log in with your |CL| username and password. Do not use your VNC password. +#. Start a VNC session. + + .. code-block:: bash + + vncserver + + Example output: + + .. code-block:: console + + New 'clr-linux:3 (vnc-user-c)' desktop is clr-linux:3 + + Starting applications specified in /home/vnc-user-c/.vnc/xstartup + Log file is /home/vnc-user-c/.vnc/clr-linux:3.log + +#. Take note of the generated display ID because you will input it into + the VNC viewer app to establish the connection. The above example shows + the display ID is 3. + + .. note:: + + VNC automatically picks a unique display ID unless you specify one. + To specify a display ID, enter a unique number that is not already + in use after the colon. For example: + + .. code-block:: bash + + vncserver :8 + +#. You can now end the SSH connection by logging out. This does + not terminate your active VNC session. + +.. _connect-to-vnc-session: + +Connect to your VNC session +=========================== + +For Method 1 and Method 2, you must connect to a specific active session +or display ID using one of two options: + +* Use a fully-qualified VNC port number, which consists of the default VNC + server port (5900) plus the display ID +* Use the display ID + +For example, if the display ID is 3, it can be specified as 5903 or just +as 3. For Method 3, VNC does not expect a display ID. Use 5900. For simplicity, +the instructions below use the fully-qualified VNC port number. + +**On Linux distros:** + +#. Open a terminal emulator and enter: + + .. code-block:: bash + + vncviewer [clear-linux-host-ip-address]:[fully-qualified VNC port number] + +#. Enter your credentials. + + * For Method 1 and Method 2, enter your VNC password. No username is + required. + * For Method 3, enter your |CL| account username and password through + GDM. + + .. note:: + + With Method 3, you cannot remotely log into your |CL| host through + VNC if you are logged in locally and vice versa. + +**On Windows and macOS using RealVNC app:** + +#. Start the RealVNC viewer app. See Figure 2. +#. Enter the IP address of the |CL| host and the fully-qualified + VNC port number. + + The following screenshot shows connecting to |CL| host + 192.168.25.54 with a fully-qualified VNC port number 5902. + + .. figure:: figures/vnc/vnc-2.png + :scale: 90 % + :alt: RealVNC Viewer + + Figure 2: RealVNC Viewer + +#. Press the :kbd:`Enter` key. + +#. Enter your credentials. + + * For Method 1 and Method 2, enter your VNC password. No username is + required. + * For Method 3, enter your |CL| account username and password through + GDM. + + .. note:: + + With Method 3, you cannot remotely log into your |CL| host through + VNC if you are logged in locally and vice versa. + +Optional: Configure RealVNC Image Quality +----------------------------------------- + +To increase the RealVNC viewer image quality, manually change the :guilabel:`ColorLevel` +value. Follow these steps: + +#. Right-click a connection node and select :guilabel:`Properties...`. + See Figure 3. + + .. figure:: figures/vnc/vnc-3.png + :scale: 90 % + :alt: RealVNC Viewer - change connection node properties + + Figure 3: RealVNC Viewer - change connection node properties + +#. Select the :guilabel:`Expert` tab. See Figure 4. + +#. Select the :guilabel:`ColorLevel` setting and change it to your + preferred setting. + + .. figure:: figures/vnc/vnc-4.png + :scale: 90 % + :alt: RealVNC Viewer - change ColorLevel + + Figure 4: RealVNC Viewer - change :guilabel:`ColorLevel` + +Terminate a VNC connection to your host +*************************************** + +For Method 1 and Method 2, once started, a VNC session remains active +on your |CL| host even if you close your VNC viewer app. If you want to +truly terminate an active VNC session, follow these steps: + +#. SSH into your |CL| host. +#. Open a terminal emulator. +#. Find the active VNC session display ID with the command + :command:`vncserver -list`. + + .. code-block:: bash + + vncserver -list + +#. Terminate it with the :command:`vncserver -kill` command followed by a + colon and the display ID. + + .. code-block:: bash + + vncserver -kill :[display ID] + +#. For Method 3, only the system administrator can stop and disable the + VNC service by using these commands: + + .. code-block:: bash + + systemctl stop xvnc.socket + systemctl disable xnvc.socket + + +Encrypt VNC traffic through an SSH tunnel +***************************************** + +By default, VNC traffic is not encrypted. Figure 6 shows an example warning +from RealVNC Viewer. + +.. figure:: figures/vnc/vnc-6.png + :scale: 90 % + :alt: RealVNC Viewer - Connection not encrypted warning + + Figure 6: RealVNC Viewer - Connection not encrypted warning + +To add security, VNC traffic can be routed through an SSH tunnel. This is +accomplished by following these steps: + +#. Configure the VNC server to only accept connection from localhost by + adding the :command:`-localhost` option. +#. Set up an SSH tunnel between your client system and your |CL| host. + Your client system will forward traffic from the localhost (the client) + destined for a specified fully-qualified VNC port number (on the client) + to your |CL| host with the same port number. +#. The VNC viewer app on your client system will now connect to localhost, + instead of the IP address of your |CL| host. + +Configure VNC to only accept connection from localhost +====================================================== + +For Method 1: + +#. Edit the :file:`config` file located in :file:`$HOME/.vnc` and uncomment + the `# localhost` line. It should look like this: + + .. code-block:: console + + ## Supported server options to pass to vncserver upon invocation can be listed + ## in this file. See the following manpages for more: vncserver(1) + Xvnc(1). + ## Several common ones are shown below. Uncomment and modify to your liking. + ## + # securitytypes=vncauth,tlsvnc + # desktop=sandbox + # geometry=2000x1200 + localhost + # alwaysshared + +#. If an active session exists, kill it, and then restart it. + +For Method 2: + +#. Edit the systemd service script :file:`vncserver@:[X].service` located in + :file:`/etc/systemd/system` and add :command:`-localhost` to the `ExecStart` + line. The example below uses vncserver@:5.service: + + .. code-block:: console + + [Unit] + Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5" + After=syslog.target network.target + + [Service] + Type=simple + User=vnc-user-b + PAMName=login + PIDFile=/home/%u/.vnc/%H%i.pid + ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' + ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -localhost -alwaysshared -fg + ExecStop=/usr/bin/vncserver -kill %i + + [Install] + WantedBy=multi-user.target + +#. Restart the service script: + + .. code-block:: bash + + systemctl daemon-load + systemctl restart vncserver@:5.service + +For Method 3: + +#. No change is needed to the :file:`xvnc@service` script. + + After you have restarted your VNC session, you can verify that it only + accepts connections from localhost by using the :command:`netstat` + command like this: + + .. code-block:: bash + + netstat -plant + + .. note:: + + Add the |CL| :command:`network-basic` bundle to get the :command:`netstat` + command. + +Figure 7 shows two VNC sessions (5901 and 5905) accepting connections from +any host as specified by the `0.0.0.0`'s. This is before the +:command:`-localhost` option was used. + +.. figure:: figures/vnc/vnc-7.png + :scale: 100 % + :alt: VNC session accepting connection from any host + + Figure 7: VNC sessions (5901 and 5905) accepting connections from any host + +Figure 8 shows two VNC sessions (5901 and 5905) only accepting connections from +localhost as specified by `127.0.0.1`'s. This is after the +:command:`-localhost` option was used. + +.. figure:: figures/vnc/vnc-8.png + :scale: 100 % + :alt: VNC session only accepting connection from localhost + + Figure 8: VNC sessions (5901 and 5905) only accepting connections from localhost + +Set up an SSH tunnel from your client system to your |CL| host +============================================================== + +**On Linux distros and macOS:** + +#. Open terminal emulator and enter: + + .. code-block:: bash + + ssh -L [client port number]:localhost:[fully-qualified VNC port number] \ + -N -f -l [username] [clear-linux-host-ip-address] + +#. Enter your |CL| account password (not your VNC password). + + .. note:: + + * `-L` specifies that [client port number] on the localhost (on the + client side) is forwarded to [fully-qualified VNC port number] + (on the server side). + * Replace `[client port number]` with an available client port number + (for example: 1234). For simplicity, you can make the + `[client port number]` the same as the `[fully-qualified VNC port number]`. + * Replace `[fully-qualified VNC port number]` with 5900 (default VNC + port) plus the display ID. For example, if the display ID is 2, + the fully-qualified VNC port number is is 5902. + * `-N` tells SSH to only forward ports and not execute a remote + command. + * `-f` tells SSH to go into the background before command execution. + * `-l` specifies the username to log in as. + +**On Windows:** + +#. Launch Putty. +#. Specify the |CL| VNC host to connect to. + + #. Under the :guilabel:`Category` section, select :guilabel:`Session`. + See Figure 1. + #. Enter the IP address of your |CL| host in the + :guilabel:`Host Name (or IP address)` field. + #. Set the :guilabel:`Connection type` option to :guilabel:`SSH`. + +#. Configure the SSH tunnel. See Figure 9 for an example. + + #. Under the :guilabel:`Category` section, go to + :guilabel:`Connection` > :guilabel:`SSH` > :guilabel:`Tunnels`. + + #. In the :guilabel:`Source port` field, enter an available client + port number (for example: 1234). For simplicity, you can make the + `Source port` the same as the fully-qualified VNC port number. + + #. In the :guilabel:`Destination` field, enter + `localhost:` plus the fully-qualified VNC port number. + + #. Click the :guilabel:`Add` button. + + .. figure:: figures/vnc/vnc-9.png + :scale: 100 % + :alt: Putty - configure SSH tunnel + + Figure 9: Putty - configure SSH tunnel + +#. Click the :guilabel:`Open` button. +#. Enter your |CL| account password (not your VNC password). + +Connect to a VNC session through an SSH tunnel +============================================== + +After you have set up an SSH tunnel, follow these instructions to connect to +your VNC session. + +**On Linux distros:** + +#. Open terminal emulator and enter: + + .. code-block:: bash + + vncviewer localhost:[client port number] + +**On Windows and macOS using `RealVNC`:** + +#. Start the RealVNC viewer app. +#. Enter `localhost` and the fully-qualified VNC port number. See Figure 10 + for an example. + + .. figure:: figures/vnc/vnc-10.png + :scale: 100 % + :alt: RealVNC viewer app connecting to localhost:1234 + + Figure 10: RealVNC viewer app connecting to `localhost:1234` + + .. note:: + + RealVNC will still warn that the connection is not encrypted even + though its traffic is going through the SSH tunnel. You can ignore + this warning. + +.. _RealVNC for Windows: https://www.realvnc.com/en/connect/download/viewer/windows/ +.. _RealVNC for macOS: https://www.realvnc.com/en/connect/download/viewer/macos/ +.. _Putty: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html diff --git a/_sources/guides/stacks/dars.rst.txt b/_sources/guides/stacks/dars.rst.txt new file mode 100644 index 00000000..396dbefe --- /dev/null +++ b/_sources/guides/stacks/dars.rst.txt @@ -0,0 +1,133 @@ +.. _dars: + +Data Analytics Reference Stack +############################## + +This guide explains how to use the :abbr:`DARS (Data Analytics Reference Stack)`, +and to optionally build your own DARS container image. + +Any system that supports Docker\* containers can be used with DARS. This steps +in this guide use |CL-ATTR| as the host system. + +.. contents:: + :local: + :depth: 1 + +The Data Analytics Reference Stack release +****************************************** + +The Data Analytics Reference Stack (DARS) provides developers and enterprises a straightforward, highly optimized software stack for storing and processing large +amounts of data. More detail is available on the +`DARS architecture and performance benchmarks`_. + +The Data Analytics Reference Stack provides two pre-built Docker images, +available on `Docker Hub`_: + +* A |CL|-derived `DARS with OpenBlas`_ stack optimized for `OpenBLAS`_ +* A |CL|-derived `DARS with Intel® MKL`_ stack optimized for `MKL`_ + +We recommend you view the latest component versions for each image in the +:file:`README` found in the `Data Analytics Reference Stack`_ GitHub\* +repository. Because |CL| is a rolling distribution, the package version numbers +in the |CL|-based containers may not be the latest released by |CL|. + +.. note:: + + The Data Analytics Reference Stack is a collective work, and each piece + of software within the work has its own license. Please see the + `DARS Terms of Use`_ for more details about licensing and usage of the Data + Analytics Reference Stack. + +Using the Docker images +*********************** + +#. To immediately start using the latest stable DARS images, pull an image + directly from `Docker Hub`_. This example uses the + `DARS with Intel® MKL`_ Docker image. + +#. Once you have downloaded the image, you can run it with + + .. code-block:: bash + + docker run -it --ulimit nofile=1000000:1000000 --name mkl + + This will launch the image and drop you into a bash shell inside the + container. You will see output similar to the following: + + .. code-block:: console + + root@fd5155b89857 /root # spark-shell + spark-shell + Config directory: /usr/share/defaults/spark/ + Welcome to + ____ __ + / __/__ ___ _____/ /__ + _\ \/ _ \/ _ `/ __/ '_/ + /___/ .__/\_,_/_/ /_/\_\ version 2.4.0 + /_/ + + Using Scala version 2.12.7 (OpenJDK 64-Bit Server VM, Java 1.8.0-internal) + Type in expressions to have them evaluated. + Type :help for more information. + + scala> + + The :command:`--ulimit nofile` parameter is currently required in order to + increase the number of open files opened at certain point by the spark + engine. + +Building DARS images +******************** + +If you choose to build your own DARS container images, you can customize +them as needed. Use the provided Dockerfile as a baseline. + +To construct images with |CL|, start with a |CL| development platform that +has the :command:`containers-basic-dev` bundle installed. Learn more about +bundles and installing them by using :ref:`swupd-guide`. + +#. Clone the `Data Analytics Reference Stack`_ GitHub\* repository. + + .. code-block:: bash + + git clone https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars -b master + +#. Inside the DARS directory, run :command:`make` to build OpenBLAS and MKL images. + + .. code-block:: bash + + make + + Run :command:`make baseline` to build the baseline CentOS image. Depending on + the system, it may take a while to finish building. + + .. code-block:: bash + + make baseline + +#. Once completed, check the resulting images with :command:`Docker` + + .. code-block:: bash + + docker images | grep dars + +#. You can use any of the resulting images to launch fully functional containers. + If you need to customize the containers, you can edit the provided :file:`Dockerfile`. + +.. _Data Analytics Reference Stack: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars + +.. _Docker Hub: https://hub.docker.com/ + +.. _OpenBLAS: http://www.openblas.net/ + +.. _MKL: https://software.intel.com/en-us/mkl + +.. _CentOS: https://www.centos.org/ + +.. _DARS with OpenBLAS: https://hub.docker.com/r/clearlinux/stacks-dars-openblas/ + +.. _DARS with Intel® MKL: https://hub.docker.com/r/clearlinux/stacks-dars-mkl/ + +.. _DARS architecture and performance benchmarks: https://clearlinux.org/stacks/data-analytics-stack-v1 + +.. _DARS Terms of Use: https://clearlinux.org/stacks/data-analytics/terms-of-use diff --git a/_sources/guides/stacks/dlrs/dlrs.rst.txt b/_sources/guides/stacks/dlrs/dlrs.rst.txt new file mode 100644 index 00000000..b61bde10 --- /dev/null +++ b/_sources/guides/stacks/dlrs/dlrs.rst.txt @@ -0,0 +1,592 @@ +.. _dlrs: + +Deep Learning Reference Stack +############################# + +This guide describes how to run benchmarking workloads for TensorFlow\*, +PyTorch\*, and Kubeflow in |CL-ATTR| using the Deep Learning Reference Stack. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +We created the Deep Learning Reference Stack to help AI developers deliver +the best experience on Intel® Architecture. This stack reduces complexity +common with deep learning software components, provides flexibility for +customized solutions, and enables you to quickly prototype and deploy Deep +Learning workloads. Use this guide to run benchmarking workloads on your +solution. + +The Deep Learning Reference Stack is available in the following versions: + +* `Intel MKL-DNN-VNNI`_, which is optimized using Intel® Math Kernel Library + 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. +* `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. + +.. important:: + + To take advantage of the Intel® AVX-512 and VNNI functionality with the Deep + Learning Reference Stack, you must use the following hardware: + + * Intel® AVX-512 images require an Intel® Xeon® Scalable Platform + * VNNI requires a 2nd generation Intel® Xeon® Scalable Platform + +Stack features +============== + +* `DLRS V3.0`_ release announcement. +* Deep Learning Reference Stack v2.0 including current + `PyTorch benchmark`_. +* Deep Learning Reference Stack v1.0 including current + `TensorFlow benchmark`_ results. +* `DLRS Release notes`_ on Github\* for the latest release of Deep Learning + Reference Stack. + +.. note:: + + The Deep Learning Reference Stack is a collective work, and each piece of + software within the work has its own license. Please see the `DLRS Terms of Use`_ + for more details about licensing and usage of the Deep Learning Reference Stack. + +Prerequisites +============= + +* :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: + +.. code-block:: bash + + sudo swupd bundle-list + +To install the :command:`containers-basic` or :command:`cloud-native-basic` +bundles, enter: + +.. code-block:: bash + + sudo swupd bundle-add containers-basic cloud-native-basic + +Docker is not started upon installation of the :command:`containers-basic` +bundle. To start Docker, enter: + +.. code-block:: bash + + sudo systemctl start docker + +To ensure that Kubernetes is correctly installed and configured, follow the +instructions in :ref:`kubernetes`. + +Version compatibility +===================== + +We validated these steps against the following software package versions: + +* |CL| 26240 (Minimum supported version) +* Docker 18.06.1 +* Kubernetes 1.11.3 +* Go 1.11.12 + + +.. note:: + + The Deep Learning Reference Stack was developed to provide the best user + experience when executed on a |CL| host. However, as the stack runs in a + container environment, you should be able to complete the following sections of this guide on other Linux* distributions, provided they comply with the Docker*, Kubernetes* and Go* package versions listed above. Look for your distribution documentation on how to update packages and manage Docker services. + +TensorFlow single and multi-node benchmarks +******************************************* + +This section describes running the `TensorFlow Benchmarks`_ in single node. +For multi-node testing, replicate these steps for each node. These steps +provide a template to run other benchmarks, provided that they can invoke +TensorFlow. + +.. note:: + + Performance test results for the Deep Learning Reference Stack and for this + guide were obtained using `runc` as the runtime. + +#. Download either the `Eigen`_ or the `Intel MKL-DNN`_ Docker image + from `Docker Hub`_. + +#. Run the image with Docker: + + .. code-block:: bash + + docker run --name --rm -i -t bash + + .. note:: + + Launching the Docker image with the :command:`-i` argument starts + interactive mode within the container. Enter the following commands in + the running container. + +#. Clone the benchmark repository in the container: + + .. code-block:: bash + + git clone http://github.com/tensorflow/benchmarks -b cnn_tf_v1.12_compatible + +#. Execute the benchmark script: + + .. code-block:: bash + + python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --device=cpu --model=resnet50 --data_format=NHWC + +.. note:: + + 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`_. + +PyTorch single and multi-node benchmarks +**************************************** + +This section describes running the `PyTorch benchmarks`_ for Caffe2 in +single node. + +#. Download either the `PyTorch with OpenBLAS`_ or the `PyTorch with Intel + MKL-DNN`_ Docker image from `Docker Hub`_. + +#. Run the image with Docker: + + .. code-block:: bash + + docker run --name --rm -i -t bash + + .. note:: + + Launching the Docker image with the :command:`-i` argument starts + interactive mode within the container. Enter the following commands in + the running container. + +#. Clone the benchmark repository: + + .. code-block:: bash + + git clone https://github.com/pytorch/pytorch.git + +#. Execute the benchmark script: + + .. code-block:: bash + + cd pytorch/caffe2/python + python convnet_benchmarks.py --batch_size 32 \ + --cpu \ + --model AlexNet + +Kubeflow multi-node benchmarks +****************************** + +The benchmark workload runs in a Kubernetes cluster. The guide 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 guide. + + +Kubernetes setup +================ + +Follow the instructions in the :ref:`kubernetes` tutorial to get set up on +|CL|. The Kubernetes community also has instructions for creating a cluster, +described in `Creating a single control-plane cluster with kubeadm`_. + +Kubernetes networking +===================== + +We used `flannel`_ as the network provider for these tests. If you +prefer a different network layer, refer to the Kubernetes network documentation +described in `Creating a single control-plane cluster with kubeadm`_ for setup. + +Kubectl +======= + +You can use kubectl to run commands against your Kubernetes cluster. Refer to +the `Overview of kubectl`_ 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 +====== + +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. Note that this guide 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 + + mkdir -p /opt + git clone https://github.com/tensorflow/benchmarks.git /opt/tf-benchmarks + cp launcher.py /opt + chmod u+x /opt/* + +Your entry point becomes: :file:`/opt/launcher.py`. + +This builds an image that can be consumed directly by TFJob from Kubeflow. + +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. + +On |CL|, follow these steps: + +.. code-block:: bash + + swupd bundle-add go-basic-dev + export GOPATH=$HOME/go + export PATH=$PATH:$GOPATH/bin + go get github.com/ksonnet/ksonnet + cd $GOPATH/src/github.com/ksonnet/ksonnet + make install + +After the ksonnet installation is complete, ensure that binary `ks` is +accessible across the environment. + +Kubeflow +======== + +Once you have Kubernetes running on your nodes, set up `Kubeflow`_ by +following these instructions from the `Getting Started with Kubeflow`_ guide. + +.. code-block:: bash + + export KUBEFLOW_SRC=$HOME/kflow + export KUBEFLOW_TAG="v0.4.1" + export KFAPP="kflow_app" + export K8S_NAMESPACE="kubeflow" + + mkdir ${KUBEFLOW_SRC} + cd ${KUBEFLOW_SRC} + ks init ${KFAPP} + cd ${KFAPP} + ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${KUBEFLOW_TAG}/kubeflow + ks pkg install kubeflow/common + ks pkg install kubeflow/tf-training + +Next, deploy the primary package for our purposes: tf-job-operator. + +.. code-block:: bash + + ks env rm default + kubectl create namespace ${K8S_NAMESPACE} + ks env add default --namespace "${K8S_NAMESPACE}" + ks generate tf-job-operator tf-job-operator + ks apply default -c tf-job-operator + +This creates the CustomResourceDefinition (CRD) endpoint to launch a TFJob. + +Run a TFJob +=========== + +#. Get the ksonnet registries for deploying TFJobs from `dlrs-tfjob`_. + +#. Install the TFJob components as follows: + + .. code-block:: bash + + ks registry add dlrs-tfjob github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob + + ks pkg install dlrs-tfjob/dlrs-bench + +#. Export the image name to use for the deployment: + + .. code-block:: bash + + export DLRS_IMAGE= + + .. note:: + + Replace with the image name you specified in previous steps. + +#. Generate Kubernetes manifests for the workloads and apply them using these + commands: + + .. code-block:: bash + + ks generate dlrs-resnet50 dlrsresnet50 --name=dlrsresnet50 --image=${DLRS_IMAGE} + ks generate dlrs-alexnet dlrsalexnet --name=dlrsalexnet --image=${DLRS_IMAGE} + ks apply default -c dlrsresnet50 + ks apply default -c dlrsalexnet + +This replicates and deploys three test setups in your Kubernetes cluster. + +Results of running this guide +============================= + +You must parse the logs of the Kubernetes pod to retrieve performance +data. The pods will still exist post-completion and will be in +‘Completed’ state. You can get the logs from any of the pods to inspect the +benchmark results. More information about Kubernetes logging is available +in the Kubernetes `Logging Architecture`_ documentation. + +Use Jupyter Notebook +******************** + +This example uses the `PyTorch with OpenBLAS`_ container image. After it is +downloaded, run the Docker image with :command:`-p` to specify the shared port +between the container and the host. This example uses port 8888. + +.. code-block:: bash + + docker run --name pytorchtest --rm -i -t -p 8888:8888 clearlinux/stacks-pytorch-oss bash + +After you start the container, launch the Jupyter Notebook. This +command is executed inside the container image. + +.. code-block:: bash + + jupyter notebook --ip 0.0.0.0 --no-browser --allow-root + +After the notebook has loaded, you will see output similar to the following: + +.. code-block:: console + + To access the notebook, open this file in a browser: file:///.local/share/jupyter/runtime/nbserver-16-open.html + Or copy and paste one of these URLs: + http://(846e526765e3 or 127.0.0.1):8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09 + +From your host system, or any system that can access the host's IP address, +start a web browser with the following. If you are not running the browser on +the host system, replace :command:`127.0.0.1` with the IP address of the host. + +.. code-block:: bash + + http://127.0.0.1:8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09 + +Your browser displays the following: + +.. figure:: figures/dlrs-fig-1.png + :scale: 50 % + :alt: Jupyter Notebook + +Figure 1: :guilabel:`Jupyter Notebook` + + +To create a new notebook, click :guilabel:`New` and select :guilabel:`Python 3`. + +.. figure:: figures/dlrs-fig-2.png + :scale: 50% + :alt: Create a new notebook + +Figure 2: Create a new notebook + +A new, blank notebook is displayed, with a cell ready for input. + +.. figure:: figures/dlrs-fig-3.png + :scale: 50% + :alt: New blank notebook + + +To verify that PyTorch is working, copy the following snippet into the blank +cell, and run the cell. + +.. code-block:: console + + from __future__ import print_function + import torch + x = torch.rand(5, 3) + print(x) + +.. figure:: figures/dlrs-fig-4.png + :scale: 50% + :alt: Sample code snippet + +When you run the cell, your output will look something like this: + +.. figure:: figures/dlrs-fig-5.png + :scale: 50% + :alt: code output + +You can continue working in this notebook, or you can download existing +notebooks to take advantage of the Deep Learning Reference Stack's optimized +deep learning frameworks. Refer to `Jupyter Notebook`_ for details. + +Uninstallation +************** + +To uninstall the Deep Learning Reference Stack, you can choose to stop the +container so that it is not using system resources, or you can stop the +container and delete it to free storage space. + +To stop the container, execute the following from your host system: + +#. Find the container's ID + + .. code-block:: bash + + docker container ls + + This will result in output similar to the following: + + .. code-block:: console + + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + e131dc71d339 clearlinux/stacks-dlrs-oss "/bin/sh -c 'bash'" 23 seconds ago Up 21 seconds oss + +#. You can then use the ID or container name to stop the container. This example + uses the name "oss": + + .. code-block:: bash + + docker container stop oss + + +#. Verify that the container is not running + + .. code-block:: bash + + docker container ls + + +#. To delete the container from your system you need to know the Image ID: + + .. code-block:: bash + + docker images + + This command results in output similar to the following: + + .. code-block:: console + + REPOSITORY TAG IMAGE ID CREATED SIZE + clearlinux/stacks-dlrs-oss latest 82757ec1648a 4 weeks ago 3.43GB + clearlinux/stacks-dlrs-mkl latest 61c178102228 4 weeks ago 2.76GB + +#. To remove an image use the image ID: + + .. code-block:: bash + + docker rmi 82757ec1648a + + .. code-block:: console + + # docker rmi 827 + Untagged: clearlinux/stacks-dlrs-oss:latest + Untagged: clearlinux/stacks-dlrs-oss@sha256:381f4b604537b2cb7fb5b583a8a847a50c4ed776f8e677e2354932eb82f18898 + Deleted: sha256:82757ec1648a906c504e50e43df74ad5fc333deee043dbfe6559c86908fac15e + Deleted: sha256:e47ecc039d48409b1c62e5ba874921d7f640243a4c3115bb41b3e1009ecb48e4 + Deleted: sha256:50c212235d3c33a3c035e586ff14359d03895c7bc701bb5dfd62dbe0e91fb486 + + + Note that you can execute the :command:`docker rmi` command using only the first few characters of the image ID, provided they are unique on the system. + +#. Once you have removed the image, you can verify it has been deleted with: + + .. code-block:: bash + + docker images + + +Related topics +************** + +* `DLRS V3.0`_ release announcement +* `TensorFlow Benchmarks`_ +* `PyTorch benchmarks`_ +* `Kubeflow`_ +* :ref:`kubernetes` tutorial +* `Jupyter Notebook`_ + +.. _TensorFlow: https://www.tensorflow.org/ + +.. _Kubeflow: https://www.kubeflow.org/ + +.. _Docker Hub: https://hub.docker.com/ + +.. _TensorFlow Benchmarks: https://www.tensorflow.org/guide/performance/benchmarks + +.. _PyTorch benchmarks: https://github.com/pytorch/pytorch/blob/master/caffe2/python/convnet_benchmarks.py + +.. _Creating a single control-plane cluster with kubeadm: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ + +.. _flannel: https://github.com/coreos/flannel + +.. _Getting Started with Kubeflow: https://www.kubeflow.org/docs/started/getting-started/ + +.. _Eigen: https://hub.docker.com/r/clearlinux/stacks-dlrs-oss/ + +.. _Intel MKL-DNN: https://hub.docker.com/r/clearlinux/stacks-dlrs-mkl/ + +.. _PyTorch with OpenBLAS: https://hub.docker.com/r/clearlinux/stacks-pytorch-oss + +.. _PyTorch with Intel MKL-DNN: https://hub.docker.com/r/clearlinux/stacks-pytorch-mkl + +.. _Intel MKL-DNN-VNNI: https://hub.docker.com/r/clearlinux/stacks-dlrs-mkl-vnni + +.. _DLRS V3.0: https://clearlinux.org/stacks/deep-learning-reference-stack-v3 + +.. _dlrs-tfjob: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob + +.. _Logging Architecture: https://kubernetes.io/docs/concepts/cluster-administration/logging/ + +.. _TensorFlow benchmark: https://clearlinux.org/stacks/deep-learning-reference-stack + +.. _PyTorch benchmark: https://clearlinux.org/stacks/deep-learning-reference-stack-pytorch + +.. _Jupyter Notebook: https://jupyter.org/ + +.. _Overview of kubectl: https://kubernetes.io/docs/reference/kubectl/overview/ + +.. _launcher.py: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow + +.. _DLRS Terms of Use: https://clearlinux.org/stacks/deep-learning/terms-of-use + +.. _DLRS Release notes: 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 diff --git a/_sources/guides/stacks/greengrass.rst.txt b/_sources/guides/stacks/greengrass.rst.txt new file mode 100644 index 00000000..d2b3f416 --- /dev/null +++ b/_sources/guides/stacks/greengrass.rst.txt @@ -0,0 +1,423 @@ +.. _greengrass: + +Enable AWS Greengrass\* and OpenVINO™ toolkit +############################################# + +This guide explains how to enable AWS Greengrass\* and OpenVINO™ toolkit. +Specifically, the guide demonstrates how to: + +* Set up the Intel® edge device with |CL-ATTR| +* Install the OpenVINO™ toolkit and Amazon Web Services\* (AWS\*) + Greengrass\* software stacks +* Use AWS Greengrass\* and AWS Lambda\* to deploy the FaaS samples from + the cloud + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +Hardware accelerated Function-as-a-Service (FaaS) enables cloud developers to +deploy inference functionalities [1] on Intel® IoT edge devices with +accelerators (CPU, Integrated GPU, Intel® FPGA, and Intel® Movidius™ +technology). These functions provide a great developer experience and +seamless migration of visual analytics from cloud to edge in a secure manner +using a containerized environment. Hardware-accelerated FaaS provides the +best-in-class performance by accessing optimized deep learning libraries on +Intel® IoT edge devices with accelerators. + +Supported platforms +******************* + +* Operating System: |CL| latest release +* Hardware: Intel® core platforms (that support inference on CPU only) + +Sample description +================== + +The AWS Greengrass samples are located at `Edge-Analytics-FaaS`_. This +guide uses the 1.0 version of the source code. + +|CL| provides the following AWS Greengrass samples: + +* `greengrass_classification_sample.py`_ + + This AWS Greengrass sample classifies a video stream using classification + networks such as AlexNet and GoogLeNet and publishes top-10 results on AWS\* + IoT Cloud every second. + +* `greengrass_object_detection_sample_ssd.py`_ + + This AWS Greengrass sample detects objects in a video stream and + classifies them using single-shot multi-box detection (SSD) networks such + as SSD Squeezenet, SSD Mobilenet, and SSD300. This sample publishes + detection outputs such as class label, class confidence, and bounding box + coordinates on AWS IoT Cloud every second. + + +Install the OS on the edge device +********************************* + +Start with a clean installation of |CL| on a new system, using the +:ref:`bare-metal-install-desktop`, found in :ref:`get-started`. + +Create user accounts +==================== + +After |CL| is installed, create two user accounts. Create an administrative +user in |CL| and create a user account for the Greengrass services to use ( +see Greengrass user below). + +#. Create a new user and set a password for that user. Enter the following + commands as ``root``: + + .. code-block:: bash + + useradd + passwd + +#. Next, enable the :command:`sudo` command for your new . Add + to the `wheel` group: + + .. code-block:: bash + + usermod -G wheel -a + +#. Create a :file:`/etc/fstab` file. + + .. code-block:: bash + + touch /etc/fstab + + .. note:: + + By default, |CL| does not create an :file:`/etc/fstab` file. + You must create this file before the Greengrass service runs. + +Add required bundles +==================== + +Use the :command:`swupd` software updater utility to add the prerequisite bundles +for the OpenVINO software stack: + +.. code-block:: bash + + swupd bundle-add os-clr-on-clr desktop-autostart computer-vision-basic + +.. note:: + + Learn more about how to :ref:`swupd-guide`. + +The :command:`computer-vision-basic` bundle installs the OpenVINO™ toolkit, +and the sample models optimized for Intel® edge platforms. + +Convert deep learning models +============================ + +Locate sample models +-------------------- + +There are two types of provided models that can be used in conjunction with +AWS Greengrass for this guide: classification or object detection. + +To complete this guide using an image classification model, +download the BVLC AlexNet model files `bvlc_alexnet.caffemodel`_ and +`deploy.prototxt`_ to the default model_location at +:file:`/usr/share/openvino/models`. Any custom pre-trained classification models +can be used with the classification sample. + +For object detection, the sample models optimized for Intel® edge platforms +are included with the computer-vision-basic bundle installation at +:file:`/usr/share/openvino/models`. These models are provided as an example; +you may also use a custom SSD model with the Greengrass object detection sample. + +Run model optimizer +------------------- + +Follow the instructions in the `Model Optimizer Developer Guide`_ for converting +deep learning models to Intermediate Representation using Model Optimizer. To +optimize either of the sample models described above, run one of the following commands. + +For classification using BVLC AlexNet model: + +.. code-block:: bash + + python3 mo.py --framework caffe --input_model + /bvlc_alexnet.caffemodel --input_proto + /deploy.prototxt --data_type --output_dir + --input_shape [1,3,227,227] + +For object detection using SqueezeNetSSD-5Class model: + +.. code-block:: bash + + python3 mo.py --framework caffe --input_model + /'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.caffemodel + --input_proto /'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.prototxt + --data_type --output_dir + +In these examples: + +* `` is :file:`/usr/share/openvino/models`. + +* `` is FP32 or FP16, depending on target device. + +* `` is the directory where the Intermediate Representation + (IR) is stored. IR contains .xml format corresponding to the network + structure and .bin format corresponding to weights. This .xml file should be + passed to :command:``. + +* In the BVLC AlexNet model, the prototxt defines the input shape with + batch size 10 by default. In order to use any other batch size, the + entire input shape must be provided as an argument to the model + optimizer. For example, to use batch size 1, you must provide: + `--input_shape [1,3,227,227]` + + +Configure AWS Greengrass group +****************************** + +For each Intel® edge platform, you must create a new AWS Greengrass group +and install AWS Greengrass core software to establish the connection between +cloud and edge. + +#. To create an AWS Greengrass group, follow the instructions in + `Configure AWS IoT Greengrass on AWS IoT`_. + +#. To install and configure AWS Greengrass core on edge platform, follow + the instructions in `Start AWS Greengrass on the Core Device`_. In + step 8(b), download the x86_64 Ubuntu\* configuration of the AWS Greengrass + core software. + + .. note:: + + You do not need to run the :file:`cgroupfs-mount.sh` script in step #6 + of Module 1 of the `AWS Greengrass Developer Guide`_ because this is + enabled already in |CL|. + +#. Be sure to download both the security resources and the AWS Greengrass + core software. + + .. note:: + + Security certificates are linked to your AWS account. + + +Create and package Lambda function +********************************** + +#. Complete steps 1-4 of the AWS Greengrass guide at + `Create and Package a Lambda Function`_. + + .. note:: + + This creates the tarball needed to create the AWS Greengrass + environment on the edge device. + + +#. In step 5, replace :file:`greengrassHelloWorld.py` with the classification or + object detection Greengrass sample from `Edge-Analytics-Faas`_: + + * Classification: `greengrass_classification_sample.py`_ + + * Object Detection: `greengrass_object_detection_sample_ssd.py`_ + +#. Zip the selected Greengrass sample with the extracted Greengrass SDK folders + from the previous step into :file:`greengrass_sample_python_lambda.zip`. + + The zip should contain: + + * greengrasssdk + + * greengrass classification or object detection sample + + For example: + + .. code-block:: bash + + zip -r greengrass_lambda.zip greengrasssdk + greengrass_object_detection_sample_ssd.py + +#. Return to the AWS documentation section called + `Create and Package a Lambda Function`_ and complete the procedure. + + .. note:: + + In step 9(a) of the AWS documentation, while uploading the zip file, + make sure to name the handler to one of the following, depending on the + AWS Greengrass sample you are using: + + * greengrass_object_detection_sample_ssd.function_handler + * greengrass_classification_sample.function_handler + + +Configure Lambda function +************************* + +After creating the Greengrass group and the Lambda function, start +configuring the Lambda function for AWS Greengrass. + +#. Follow steps 1-8 in `Configure the Lambda Function for AWS IoT Greengrass`_ + in the AWS documentation. + +#. In addition to the details mentioned in step 8, change the Memory limit + to 2048 MB to accommodate large input video streams. + +#. Add the following environment variables as key-value pairs when editing + the Lambda configuration and click on update: + + .. list-table:: **Table 1. Environment variables: Lambda configuration** + :widths: 20 80 + :header-rows: 1 + + * - Key + - Value + * - PARAM_MODEL_XML + - /, where is user specified and + contains IR.xml, the Intermediate Representation file from Intel® Model Optimizer. + For this guide, should be set to '/usr/share/openvino/models' + or one of its subdirectories. + * - PARAM_INPUT_SOURCE + - /input.webm to be specified by user. Holds both input and + output data. For webcam, set PARAM_INPUT_SOURCE to ‘/dev/video0’ + * - PARAM_DEVICE + - "CPU" + * - PARAM_CPU_EXTENSION_PATH + - /usr/lib64/libcpu_extension.so + * - PARAM_OUTPUT_DIRECTORY + - to be specified by user. Holds both input and output + data + * - PARAM_NUM_TOP_RESULTS + - User specified for classification sample. + (e.g. 1 for top-1 result, 5 for top-5 results) + +#. Add subscription to subscribe, or publish messages from AWS Greengrass + Lambda function by completing the procedure in `Configure the Lambda Function for AWS IoT Greengrass`_. + + .. note:: + + The optional topic filter field is the topic mentioned inside the Lambda function. In this guide, sample topics include the following: + :command:`openvino/ssd` or :command:`openvino/classification` + +Add local resources +=================== + +Refer to the AWS documentation `Access Local Resources with Lambda Functions and Connectors`_ +for details about local resources and access privileges. + +The following table describes the local resources needed for the CPU: + +.. list-table:: **Local resources** + :widths: 20, 20, 20, 20 + :header-rows: 1 + + * - Name + - Resource type + - Local path + - Access + + * - ModelDir + - Volume + - to be specified by user + - Read-Only + + * - Webcam + - Device + - /dev/video0 + - Read-Only + + * - DataDir + - Volume + - to be specified by user. Holds both input and output + data. + - Read and Write + +Deploy Lambda function +********************** + +Refer to the AWS documentation `Deploy Cloud Configurations to an AWS IoT Greengrass Core Device`_ for instructions on how to deploy the lambda function to AWS +Greengrass core device. Select *Deployments* on the group page and follow the instructions. + +Output consumption +================== + +There are four options available for output consumption. These options are +used to report, stream, upload, or store inference output at an interval +defined by the variable :command:`reporting_interval` in the AWS Greengrass samples. + +#. IoT cloud output: + + This option is enabled by default in the AWS Greengrass samples using the + :command:`enable_iot_cloud_output` variable. You can use it to verify the lambda + running on the edge device. It enables publishing messages to IoT cloud + using the subscription topic specified in the lambda. (For example, topics + may include :command:`openvino/classification` for classification and :command:`openvino/ssd` + for object detection samples.) For classification, top-1 result with class + label are published to IoT cloud. For SSD object detection, detection + results such as bounding box coordinates of objects, class label, and + class confidence are published. + + Refer to the AWS documentation + `Verify the Lambda Function Is Running on the Device`_ for instructions on + how to view the output on IoT cloud. + +#. Kinesis streaming: + + This option enables inference output to be streamed from the edge device + to cloud using Kinesis [3] streams when :command:`enable_kinesis_output` is set + to True. The edge devices act as data producers and continually push + processed data to the cloud. You must set up and specify + Kinesis stream name, Kinesis shard, and AWS region in the AWS Greengrass + samples. + +#. Cloud storage using AWS S3 bucket: + + When the :command:`enable_s3_jpeg_output` variable is set to True, it enables + uploading and storing processed frames (in jpeg format) in an AWS S3 + bucket. You must set up and specify the S3 bucket name in the AWS + Greengrass samples to store the JPEG images. The images are named using the + timestamp and uploaded to S3. + +#. Local storage: + + When the :command:`enable_s3_jpeg_output` variable is set to True, it enables + storing processed frames (in jpeg format) on the edge device. The images + are named using the timestamp and stored in a directory specified by + :command:`PARAM_OUTPUT_DIRECTORY`. + +References +********** + +#. AWS Greengrass: https://aws.amazon.com/greengrass/ +#. AWS Lambda: https://aws.amazon.com/lambda/ +#. AWS Kinesis: https://aws.amazon.com/kinesis/ + +.. _Edge-Analytics-FaaS: https://github.com/intel/Edge-Analytics-FaaS/tree/v1.0/AWS%20Greengrass + +.. _bvlc_alexnet.caffemodel: http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel + +.. _deploy.prototxt: https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/deploy.prototxt + +.. _greengrass_classification_sample.py: https://github.com/intel/Edge-Analytics-FaaS/blob/v1.0/AWS%20Greengrass/greengrass_classification_sample.py + +.. _greengrass_object_detection_sample_ssd.py: https://github.com/intel/Edge-Analytics-FaaS/blob/v1.0/AWS%20Greengrass/greengrass_object_detection_sample_ssd.py + +.. _Model Optimizer Developer Guide: https://software.intel.com/en-us/articles/OpenVINO-ModelOptimizer + +.. _AWS Greengrass Developer Guide: https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html + +.. _Configure AWS IoT Greengrass on AWS IoT: https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-config.html + +.. _Start AWS Greengrass on the Core Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-device-start.html + +.. _Configure the Lambda Function for AWS IoT Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/config-lambda.html + +.. _Access Local Resources with Lambda Functions and Connectors: https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html + +.. _Deploy Cloud Configurations to an AWS IoT Greengrass Core Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/configs-core.html + +.. _Verify the Lambda Function Is Running on the Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/lambda-check.html + +.. _Create and Package a Lambda Function: https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html diff --git a/_sources/guides/telemetrics/telem-guide.rst.txt b/_sources/guides/telemetrics/telem-guide.rst.txt new file mode 100644 index 00000000..aa68b3aa --- /dev/null +++ b/_sources/guides/telemetrics/telem-guide.rst.txt @@ -0,0 +1,862 @@ +.. _telem-guide: + +Telemetrics +########### + +This guide describes the |CL-ATTR| telemetry solution. + +.. important:: + + Telemetry in |CL| is **opt-in**. The telemetry client is **not** active + and sends **no** data until you explicitly enable it. + +.. note:: + + The telemetry functionality adheres to `Intel privacy policies`_ regarding + the collection and use of :abbr:`PII (Personally Identifiable Information)` + and is open source. + + No intentionally identifiable information about the user or system owner is + collected. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +Telemetrics in |CL| is a client and server solution used to collect +data from running |CL| systems to help quickly identify and fix bugs in the +OS. Both client and server are customizable, and an API is available on the +client side for instrumenting your code for debug and analysis. + +Telemetry, one of the key features of |CL|, enables developers to observe and +proactively address issues in the OS before end users are impacted. + +Telemetrics is a combination word made from: + +* Telemetry, which is sensing and reporting data. +* Analytics, which is using visualization and statistical inferencing to make + sense of the reported data. + +|CL| telemetry reports system-level debug/crash information using specialized +probes. The probes monitor system tasks such as swupd, kernel oops, machine +error checks, and the BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to focus quickly on an issue and monitor corrective actions. + +|CL| telemetry is fully customizable and can be used during software +development for debugging purposes. You can use the libtelemetry library in +your code to create custom telemetry records. You can also use the +telem-record-gen utility in script files for light-touch record creation +where instrumenting code files doesn't make sense. + +The |CL| telemetrics solution is an **opt-in** choice on the client side. +By default, the telemetry client is disabled until you choose to enable it. +Enabling the client is covered in this guide. + +Architecture +============ + +|CL| telemetry has two fundamental components, which are shown in Figure 1: + +* Client: generates and delivers records to the backend server via the network. + +* Backend: receives records sent from the client and displays the cumulative + content through a specialized web interface. + +.. figure:: figures/telemetry-e2e.png + :alt: Figure 1, Telemetry Architecture + + Figure 1: :guilabel:`|CL| Telemetry Architecture` + +The telemetry client provides the front end of the telemetrics solution and +includes the following components: + +* telemprobd, which is a daemon that receives and prepares telemetry records + from probes and spools them to disk. +* telempostd, which is a daemon that manages spooled telemetry records and + delivers these records according to configurable settings. +* probes, which collect specific types of data from the operating system. +* libtelemetry, which is the API that telemetrics probes use to create records. + +The telemetry backend provides the server-side component of the telemetrics +solution and consists of: + +* Nginx web server. +* Two Flask apps: + + * Collector, which is an ingestion web app for records received from client + probes. + * TelemetryUI, which is a web app that exposes different views to visualize + the telemetry data. +* PostgreSQL as the underlying database server. + +.. note:: + + The default telemetry backend server is hosted by the Intel |CL| development + team and is not viewable outside the Intel firewall. To collect your own + records, you must set up your own telemetry backend server. + +How to use +********** + +From a workflow perspective, the |CL| telemetrics system is straightforward. +On the client side, the main decisions after installation and enabling +telemetry involve what to do with the record data generated by the probes. +You can send the data to the default or a custom backend server, keep the data +local to the system, or both. The backend server has a more complex setup, but +once it's running, it is simple to use and configure. + +This section describes some of the possible scenarios for configuring +the |CL| telemetrics system, and suggests which ones make sense according to +your needs. + +Scenarios +========= + +#. Enable telemetry: + + Before probes can generate records, the telemetry client daemons must be + enabled. You can configure the client before enabling by creating a custom + :file:`telemetrics.conf` file that you place in the :file:`/etc/telemetrics` + directory. If you choose to use the default settings, records will be sent + to the telemetrics backend server managed by the |CL| development team at + Intel. + +#. Save record data locally: + + You can configure the telemetry client to save records locally. This is + convenient when you want instant feedback during a development cycle, or to + track system issues if you believe there is a machine specific problem. The + client can be set not to send records at all, or to both keep the records + locally and send to the backend server. + +#. Set up a server to collect data: + + Whether you are managing a network of |CL| systems or you don't want to + send records to the default telemetry server, you can set up a backend + server to collect your records. The backend server can be installed on any + Linux system and provides the same dashboard as the default server. + + +#. Instrument your code with the libtelemetry API: + + The :command:`telemetrics` bundle includes the libtelemetry C library, which + exposes an API used by the telemprobd and telempostd daemons. You can use + these in your applications as well. The API documentation is found in the + :file:`telemetry.h` file in `Telemetrics client`_ repository. + + +Examples +******** + +.. contents:: + :local: + :depth: 1 + +Enable or disable telemetry +=========================== + +#. Enabling during installation: + + During the initial installation of |CL|, you are requested to join the + stability enhancement program and allow |CL| to collect anonymous reports to + improve system stability. If you choose not to join this program, then the + telemetry software bundle is not added to your system. Choosing to join will + automatically enable telemetry on your system after installation is + complete. + +#. Enabling after install: + + To start telemetry on your system, run the following command: + + .. code-block:: bash + + sudo telemctl start + + This enables and starts the :command:`telemprobd` and :command:`telempostd` + daemons. Your system will begin to send telemetry data to the server defined + in the file :file:`/etc/telemetrics/telemetrics.conf`. If this file does not + exist, the :command:`telemprobd` and :command:`telempostd` daemons will use + the file :file:`/usr/share/defaults/telemetrics/telemetrics.conf`. + +#. Disabling after install: + + To disable both of the telemetry daemons, run the following command: + + .. code-block:: bash + + sudo telemctl stop + +#. Opt in to telemetry: + + To opt-in to the telemetry services, simply enter the opt-in command, which + also starts the service: + + .. code-block:: bash + + sudo telemctl opt-in + + This removes the :file:`/etc/telemetrics/opt-out` file, if it exists, and + starts the telemetry services. + + .. note:: + + To opt-in but not immediately start telemetry services, you must + run the command :command:`sudo telemctl stop` after the :command:`opt-in` + command is entered. Once you are ready to start the service, enter the + command :command:`sudo telemctl start`. + +#. Opt out of telemetry: + + To stop sending telemetrics data from your system, opt out of the telemetry + service: + + .. code-block:: bash + + sudo telemctl opt-out + + This creates the file :file:`/etc/telemetrics/opt-out` and stops the + telemetry services. + + +Saving data locally +=================== + +This example requires |CL| to be installed and telemetry to be enabled on the +system. + +To change how records are managed, copy the default +:file:`/usr/share/defaults/telemetrics/telemetrics.conf` file to +:file:`/etc/telemetrics/telemetrics.conf` and edit it. The changes in the +:file:`/etc/telemetrics/telemetrics.conf` file will override the defaults in +the :file:`/usr/share/defaults/telemetrics/telemetrics.conf` file. You may need +root permissions to create and edit files in :file:`/etc`. For each +example, and for any time you make changes to the configuration file, you must +restart the client daemons to pick up the changes: + +.. code-block:: bash + + sudo telemctl restart + + +The :command:`telemctl journal` command gives you access to features and +options of the telemetry journal to assist with system analytics and debug. +:command:`telemctl journal` has a number of options to help filter records. +Use :command:`-h` or :command:`--help` to view usage options. + + +#. Keep a local copy and send records to backend server: + + To keep a local copy of the telemetry record and also send it on to the + backend server, we will need to change the + :guilabel:`record_retention_enabled` configuration key value to + :guilabel:`true`. + +#. Keep all records -- don't send to backend server: + + To keep records on the system without sending them to a backend server, set + the :guilabel:`record_server_delivery_enabled` key value to + :guilabel:`false`. Note that you will also need to ensure the + :guilabel:`record_retention_enabled` configuration key value is set to + :guilabel:`true` or the system will not keep local copies. + +#. Keep and send records to custom server: + + This assumes you have set up a custom server according to the next example. + + The server is identified by the :guilabel:`server` setting, and by default + records are sent to the |CL| server + :guilabel:`server=https://clr.telemetry.intel.com/v2/collector`. To change + this, you can use an IP address or fully qualified domain name. + + +Set up a back-end server to collect telemetry records +===================================================== + +For this example, start with a clean installation of |CL| on a new system +using the :ref:`bare-metal-install-server` getting started guide and: + +#. Join the :guilabel:`Stability Enhancement Program` to install and + enable the telemetrics components. + +#. Select the manual installation method with the following settings: + + * Set the hostname to :guilabel:`clr-telem-server`, + * Create an administrative user named :guilabel:`clear` and add this user + to sudoers + +#. Log in with your administrative user, from your :file:`$HOME` directory, + run :command:`git` to clone the :guilabel:`telemetrics-backend` repository + into the :file:`$HOME/telemetrics-backend` directory: + + .. code-block:: console + + git clone https://github.com/clearlinux/telemetrics-backend + + .. note:: + + You may need to set up the :envvar:`https_proxy` environment variable if + you have issues reaching github.com. + +#. Change your current working directory to :file:`telemetrics-backend/scripts`. +#. Before you install the telemetrics backend with the :file:`deploy.sh` script + file in the next step, here is an explanation of the options to be specified: + + * :command:`-a install` to perform an install + * :command:`-d clr` to install to a |CL| distro + * :command:`-H localhost` to set the domain to localhost + + .. caution:: + The :file:`deploy.sh` shell script has minimal error checking and makes + several changes to your system. Be sure that the options you define on + the cmdline are correct before proceeding. + +#. Run the shell script from the :file:`$HOME/telemetrics-backend/scripts` + directory: + + .. code-block:: console + + ./deploy.sh -H localhost -a install -d clr + + + + The script starts and lists all the defined options and prompts you for + the :guilabel:`PostgreSQL` database password. + + .. code-block:: console + + Options: + host: localhost + distro: clr + action: install + repo: https://github.com/clearlinux/telemetrics-backend + source: master + type: git + DB password: (default: postgres): + +#. For the :guilabel:`DB password:`, press the :kbd:`Enter` key to accept the + default password `postgres`. + + .. note:: + + The :file:`deploy.sh` script uses :command:`sudo` to run commands and you + may be prompted to enter your user password at any time while the script + is executing. If this occurs, enter your user password to execute the + :command:`sudo` command. + + +#. After all the server components have been installed, you are prompted to + enter the :guilabel:`PostgreSQL` database password to change it as + illustrated below: + + .. code-block:: console + + Enter password for 'postgres' user: + New password: + Retype new password: + passwd: password updated successfully + + Enter `postgres` for the current value of the password and then enter a new + password, retype it to verify the new password and the :guilabel:`PostgreSQL` + database password will be updated. + +#. After the installation is complete, you can use your web browser to view the + new server by opening the browser on the system and typing in localhost + in the address bar. You should see a web page similar to the one shown in + Figure 2 below. + + .. figure:: figures/telemetry-backend-1.png + :alt: Telemetry UI + + Figure 2: :guilabel:`Telemetry UI` + +Create records with telem-record-gen +==================================== + +The telemetrics bundle provides a record generator tool called +`telem-record-gen`. This tool can be used to create records from shell +scripts or the command line when writing a probe in C is not desirable. +Records are sent to the backend server, and can also be echoed to stdout. + +There are three ways to supply the payload to the record. + +#. On the command line, use the :command:`-p ` option: + + .. code-block:: bash + + telem-record-gen -c a/b/c -n -o -p 'payload goes here' + + .. code-block:: console + + record_format_version: 4 + classification: a/b/c + severity: 1 + machine_id: FFFFFFFF + creation_timestamp: 1539023189 + arch: x86_64 + host_type: innotek GmbH|VirtualBox|1.2 + build: 25180 + kernel_version: 4.14.71-404.lts + payload_format_version: 1 + system_name: clear-linux-os + board_name: VirtualBox|Oracle Corporation + cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz + bios_version: VirtualBox + event_id: 2236710e4fc11e4a646ce956c7802788 + + payload goes here + +#. Specify a file that contains the payload with the option + :command:`-P path/to/file`. + + .. code-block:: bash + + telem-record-gen -c a/b/c -n -o -P ./payload_file.txt + + .. code-block:: console + + record_format_version: 4 + classification: a/b/c + severity: 1 + machine_id: FFFFFFFF + creation_timestamp: 1539023621 + arch: x86_64 + host_type: innotek GmbH|VirtualBox|1.2 + build: 25180 + kernel_version: 4.14.71-404.lts + payload_format_version: 1 + system_name: clear-linux-os + board_name: VirtualBox|Oracle Corporation + cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz + bios_version: VirtualBox + event_id: d73d6040afd7693cccdfece479df9795 + + payload read from file + +#. If the :command:`-p` or :command:`-P` options are absent, the tool reads + from stdin so you can use it in a :file:`heredoc` in scripts. + + .. code-block:: bash + + #telem-record-gen -c a/b/c -n -o << HEOF + payload read from stdin + HEOF + + .. code-block:: console + + record_format_version: 4 + classification: a/b/c + severity: 1 + machine_id: FFFFFFFF + creation_timestamp: 1539023621 + arch: x86_64 + host_type: innotek GmbH|VirtualBox|1.2 + build: 25180 + kernel_version: 4.14.71-404.lts + payload_format_version: 1 + system_name: clear-linux-os + board_name: VirtualBox|Oracle Corporation + cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz + bios_version: VirtualBox + event_id: 2f070e8e71679f2b1f28794e3a6c42ee + + payload read from stdin + +Set a static machine id +======================= + +The machine id reported by the telemetry client is rotated every three days +for privacy reasons. If you wish to have a static machine id for testing +purposes, you can opt in by creating a file named `opt-in-static-machine-id` +in the directory :file:`/etc/telemetrics/`. + +#. Create a directory `telemetrics`. + + .. code-block:: bash + + sudo mkdir -p /etc/telemetrics + + +#. Create the file and replace the "unique machine ID" with your desired + static machine ID. + + .. code-block:: bash + + echo "unique machine ID" | sudo tee /etc/telemetrics/opt-in-static-machine-id + +.. note:: + + The machine ID is different than the system hostname. + +Instrument your code with the libtelemetry API +============================================== + +Prerequisites +------------- + +Confirm that the telemetrics header file is located on the system at +:file:`usr/include/telemetry.h` The `latest version`_ of the file can also be +found on github for reference, but installing the :command:`telemetry` bundle +will install the header file that matches your |CL| version. + +#. Includes and variables: + + You must include the following headers in your code to use the API: + + .. code-block:: console + + #define _GNU_SOURCE + #include + #include + #include + #include + + + Use the following code to create the variables needed to hold the data for + the record to be created: + + .. code-block:: console + + uint32_t severity = 1; + uint32_t payload_version = 1; + char classification[30] = "org.clearlinux/hello/world"; + struct telem_ref *tm_handle = NULL; + char *payload; + int ret = 0; + + + + Severity: + Type: uint32_t + Value: Severity field value. Accepted values are in the range 1-4, with + 1 being the lowest severity, and 4 being the highest severity. Values + provided outside of this range are clamped to 1 or 4. [low, med, high, + crit] + + Payload_version: + Type: uint32_t + Value: Payload format version. The only supported value right now is 1, + which indicates that the payload is a freely-formatted (unstructured) + string. Values greater than 1 are reserved for future use. + + Classification: + Type: char array + Value: It should have the form, DOMAIN/PROBENAME/REST: DOMAIN is the + reverse domain to use as a namespace for the probe (e.g. org.clearlinux); + PROBENAME is the name of the probe; and REST is an arbitrary value that + the probe should use to classify the record. The maximum length for the + classification string is 122 bytes. Each sub-category may be no longer + than 40 bytes long. Two / delimiters are required. + + Tm_handle: + Type: Telem_ref struct pointer + Value: Struct pointer declared by the caller, The struct is initialized + if the function returns success. + + Payload: + Type: char pointer + Value: The payload to set + +#. For this example, we'll set the payload to “hello” by using + :command:`asprintf()`: + + .. code-block:: console + + if (asprintf(&payload, "hello\n") < 0) { + exit(EXIT_FAILURE); + } + + The functions :command:`asprintf()` and :command:`vasprintf()` are analogs of + :command:`sprintf(3)` and :command:`vsprintf(3)`, except that they allocate a + string large enough to hold the output including the terminating null byte + ('\0'), and return a pointer to it via the first argument. This pointer + should be passed to :command:`free(3)` to release the allocated storage when + it is no longer needed. + +#. Create the new telemetry record: + + The function :command:`tm_create_record()` initializes a telemetry record and + sets the severity and classification of that record, as well as the payload + version number. The memory needed to store the telemetry record is allocated + and should be freed with :command:`tm_free_record()` when no longer needed. + + .. code-block:: console + + if ((ret = tm_create_record(&tm_handle, severity, classification, payload_version)) < 0) { + printf("Failed to create record: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + +#. Set the payload field of a telemetrics record: + + The function :command:`tm_set_payload()` attaches the provided telemetry record + data to the telemetry record. The current maximum payload size is 8192b. + + .. code-block:: console + + if ((ret = tm_set_payload(tm_handle, payload)) < 0) { + printf("Failed to set record payload: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + free(payload); + + The :command:`free()` function frees the memory space pointed to by `ptr`, which + must have been returned by a previous call to :command:`malloc()`, + :command:`calloc()`, or :command:`realloc()`. Otherwise, or if + :command:`free(ptr)` has already been called before, undefined behavior + occurs. If `ptr` is NULL, no operation is performed. + +#. Send a record to the telemetrics daemon: + + The function :command:`tm_send_record()` delivers the record to the local + :command:`telemprobd(1)` service. Since the telemetry record was allocated by + the program it should be freed with :command:`tm_free_record()` when it is no + longer needed. + + .. code-block:: console + + if ((ret = tm_send_record(tm_handle)) < 0) { + printf("Failed to send record to daemon: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } else { + printf("Successfully sent record to daemon.\n"); + ret = 0; + } + fail: + tm_free_record(tm_handle); + tm_handle = NULL; + + return ret; + + +#. A full sample application with compiling flags: + + Create a new file :file:`test.c` and add the following code: + + .. code-block:: console + + #define _GNU_SOURCE + #include + #include + #include + #include + + int main(int argc, char **argv) + { + uint32_t severity = 1; + uint32_t payload_version = 1; + char classification[30] = "org.clearlinux/hello/world"; + struct telem_ref *tm_handle = NULL; + char *payload; + + int ret = 0; + + if (asprintf(&payload, "hello\n") < 0) { + exit(EXIT_FAILURE); + } + + if ((ret = tm_create_record(&tm_handle, severity, classification, payload_version)) < 0) { + printf("Failed to create record: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + + if ((ret = tm_set_payload(tm_handle, payload)) < 0) { + printf("Failed to set record payload: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + + free(payload); + + if ((ret = tm_send_record(tm_handle)) < 0) { + printf("Failed to send record to daemon: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } else { + printf("Successfully sent record to daemon.\n"); + ret = 0; + } + fail: + tm_free_record(tm_handle); + tm_handle = NULL; + + return ret; + } + + + + Compile with the gcc compiler, using this command: + + .. code-block:: bash + + gcc test.c -ltelemetry -o test_telem + + + Test to ensure the program is working: + + .. code-block:: bash + + ./test_telem + Successfully sent record to daemon. + + .. note:: + + A full example of the `heartbeat probe`_ in C is documented in the + source code. + +Reference +********* + +.. contents:: + :local: + :depth: 1 + +The telemetry API +================= + +Installing the :command:`telemetrics` bundle includes the libtelemetry C library, +which exposes an API used by the telemprobd and telempostd daemons. You can +use these in your applications as well. The API documentation is found in the +:file:`telemetry.h` file in `Telemetrics client`_ repository. + +Client configuration +==================== + +The telemetry client will look for the configuration file located at +:file:`/etc/telemetrics/telemetrics.conf` and use it if it exists. If the +file does not exist, the client will use the default configuration located +at :file:`/usr/share/defaults telemetrics/telemetrics.conf`. To modify or +customize the configuration, copy the file from +:file:`/usr/share/defaults/telemetrics` to :file:`/etc/telemetrics` and edit it. + +Configuration options +--------------------- + +The client uses the following configuration options from the config file: + +server + This specifies the web server to which telempostd sends the telemetry records. +socket_path + This specifies the path of the unix domain socket on which the telemprobd + listens for connections from the probes. +spool_dir + This configuration option is related to spooling. If the daemon is not able + to send the telemetry records to the backend server due to reasons such as + the network availability, then it stores the records in a spool directory. + This option specifies the path of the spool directory. This directory should + be owned by the same user as the daemon. +record_expiry + This is the time, in minutes, after which the records in the spool directory + are deleted by the daemon. +spool_process_time + This specifies the time interval, in seconds, that the daemon waits for + before checking the spool directory for records. The daemon picks up the + records in the order of modification date and tries to send the record to the + server. It sends a maximum of 10 records at a time. If it was able to send a + record successfully, it deletes the record from the spool. If the daemon + finds a record older than the "record_expiry" time, then it deletes that + record. The daemon looks at a maximum of 20 records in a single spool run loop. +rate_limit_enabled + This determines whether rate-limiting is enabled or disabled. When enabled, + there is a threshold on both records sent within a window of time, and record + bytes sent within a window a time. +record_burst_limit + This is the maximum amount of records allowed to be passed by the daemon + within the record_window_length of time. If set to -1, the rate-limiting for + record bursts is disabled. +record_window_length + The time, in minutes (0-59), that establishes the window length for the + record_burst_limit. For example, if record_burst_window=1000 and + record_window_length=15, then no more than 1000 records can be passed within + any given fifteen-minute window. +byte_burst_limit + This is the maximum amount of bytes that can be passed by the daemon within + the byte_window_length of time. If set to -1, the rate-limiting for byte + bursts is disabled. +byte_window_length + This is the time, in minutes (0-59), that establishes the window length for + the byte_burst_limit. +rate_limit_strategy + This is the strategy chosen once the rate-limiting threshold has been + reached. Currently the options are 'drop' or 'spool', with spool being the + default. If spool is chosen, records will be spooled and sent at a later time. +record_retention_enabled + When this key is enabled (true) the daemon saves a copy of the payload on + disk from all valid records. To avoid the excessive use of disk space only + the latest 100 records are kept. The default value for this configuration key + is false. +record_server_delivery_enabled + This key controls the delivery of records to server; when enabled (default + value), the record will be posted to the address in the configuration file. + If this configuration key is disabled (false), records will not be spooled or + posted to backend. This configuration key can be used in combination with + record_retention_enabled to keep copies of telemetry records locally only. + + .. note:: + + Configuration options may change as the telemetry client evolves. + Please use the comments in the file itself as the most accurate + reference for configuration. + + +Client run-time options +======================= + +The |CL| telemetry client provides an admin tool called :guilabel:`telemctl` +for managing the telemetry services and probes. The tool is located in +:file:`/usr/bin`. Running it with no argument results in the following: + +.. code-block:: bash + + sudo telemctl + +.. code-block:: console + + /usr/bin/telemctl - Control actions for telemetry services + stop Stops all running telemetry services + start Starts all telemetry services + restart Restarts all telemetry services + is-active Checks if telemprobd and telempostd are active + opt-in Opts in to telemetry, and starts telemetry services + opt-out Opts out of telemetry, and stops telemetry services + journal Prints telemetry journal contents. Use -h argument for more + options + +start/stop/restart +------------------ + +The commands to start, stop and restart the telemetry services manage all +required services and probes on the system. There is no need to separately +start/stop/restart the two client daemons telemprobd and telempostd. +The :command:`restart` command option will call :command:`telemctl stop` +followed by :command:`telemctl start` . + +is-active +--------- + +The :command:`is-active` option reports whether the two client daemons are +active. This is useful to verify that the :command:`opt-in` and +:command:`opt-out` options have taken effect, or to ensure that telemetry is +functioning on the system. Note that both daemons are verified. + +.. code-block:: bash + + sudo telemctl is-active + +.. code-block:: console + + telemprobd : active + telempostd : active + + +.. _Telemetrics client: https://github.com/clearlinux/telemetrics-client/ +.. _latest version: https://github.com/clearlinux/telemetrics-client/tree/master/src +.. _heartbeat probe: https://github.com/clearlinux/telemetrics-client/tree/master/src/probes/hello.c +.. _Intel privacy policies: https://www.intel.com/content/www/us/en/privacy/intel-privacy-notice.html diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..d8df5d08 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,47 @@ +.. _clear-linux: + +|CL-PRJ| +############################################# + +Welcome to the |CL-ATTR| documentation pages, the source for |CL| documentation. + +.. raw:: html + + + +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. + +:ref:`about` + Clear Linux is a little different from other distros. Here are some + important tools and concepts for managing your install. + +:ref:`guides` + Guides show how to complete common tasks that help you leverage |CL| native + features effectively. From basic system configuration to advanced + management of a cloud installation, there is a guide for you. + +:ref:`tutorials` + |CL| tutorials provide step-by-step instructions on how |CL| features can + be used and extended, frequently with third-party tools. + +:ref:`reference` + 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: + + get-started/get-started + about + guides/guides + tutorials/tutorials + reference/reference + FAQ/faq \ No newline at end of file diff --git a/_sources/reference/bundle-commands.rst.txt b/_sources/reference/bundle-commands.rst.txt new file mode 100644 index 00000000..4b5593d2 --- /dev/null +++ b/_sources/reference/bundle-commands.rst.txt @@ -0,0 +1,47 @@ +.. _bundle-commands: + +Useful bundle commands +###################### + +To see a list of currently installed bundles, enter: + +.. code-block:: bash + + sudo swupd bundle-list + +To see the list of all available bundles, enter: + +.. code-block:: bash + + sudo swupd bundle-list --all + +Alternatively, you can view our :ref:`available bundles ` +webpage. + +To search for bundles and their contents, enter: + +.. code-block:: bash + + sudo swupd search [bundle name] + +To add a bundle, enter: + +.. code-block:: bash + + sudo swupd bundle-add [bundle name] + +Additional information +====================== + +For additional :command:`swupd` commands, enter: + +.. code-block:: bash + + swupd --help + +To reference the :command:`swupd` man page, enter: + +.. code-block:: bash + + man swupd + diff --git a/_sources/reference/bundles/bundles.rst.txt b/_sources/reference/bundles/bundles.rst.txt new file mode 100644 index 00000000..a6423e9c --- /dev/null +++ b/_sources/reference/bundles/bundles.rst.txt @@ -0,0 +1,18 @@ +.. _bundles: + +Available bundles +################# + +This document provides a current list of available bundles. View the `clr-bundles repo`_ on GitHub\*, or select the bundle +:file:`Name` for more details. + +To learn more about how |CL-ATTR| uses bundles for software deployment, visit +:ref:`bundles-about`. + +Bundle list +=========== + +.. raw:: html + :file: bundles.html.txt + +.. _clr-bundles repo: https://github.com/clearlinux/clr-bundles/tree/master/bundles diff --git a/_sources/reference/bundles/openssh-server.rst.txt b/_sources/reference/bundles/openssh-server.rst.txt new file mode 100644 index 00000000..02e65cb4 --- /dev/null +++ b/_sources/reference/bundles/openssh-server.rst.txt @@ -0,0 +1,169 @@ +.. _openssh-server: + +openssh-server +############## + +The **openssh-server** bundle provides the OpenSSH\* package needed to enable +an SSH service in |CL-ATTR|. Remote users require an SSH service to be able +to use an encrypted login shell. + +|CL| enables the `sshd.socket` unit, which will listen on port 22 by default +and start the OpenSSH service as required. The first time OpenSSH starts, it +generates the server SSH keys needed for the service. + +Prerequisites +************* + +Assure the bundle :file:`openssh-server` is installed. + +To check it it's on your host, enter: + +.. code-block:: bash + + sudo swupd bundle-list + +To add it, enter: + +.. code-block:: bash + + sudo swupd bundle-add openssh-server + +Change default port +******************* + +Perform the following steps to change the default listening port for the +OpenSSH service: + +#. Open the sshd.socket file: + + .. code-block:: bash + + sudo systemctl edit sshd.socket + +#. Add the `[Socket]` section and `ListenStream` option to the sshd.socket + file as shown below. The first `ListenStream` entry removes the |CL| + default listen port value. The second `ListenStream` entry sets the new + default listen port value. In this example, we set the new default port + to 4200: + + .. code-block:: console + + [Socket] + ListenStream= + ListenStream=4200 + + + Make sure to include a new line after the last line of text in the sshd.socket file. + +#. Verify your changes: + + .. code-block:: bash + + cat /etc/systemd/system/sshd.socket.d/override.conf + + You should see the following output: + + .. code-block:: console + + [Socket] + ListenStream= + ListenStream=4200 + +#. Reload the systemd daemon configurations: + + .. code-block:: bash + + sudo systemctl daemon-reload + +#. Restart the sshd.socket unit: + + .. code-block:: bash + + sudo systemctl restart sshd.socket + +#. Confirm the the sshd.socket unit is listening on your new port: + + .. code-block:: bash + + sudo systemctl status sshd.socket + + .. note:: + + Output should show :guilabel:`Active:` as `active(listening)`. + +Enable SFTP +*********** + +|CL| *disables* the :abbr:`SFTP (SSH File Transfer Protocol)` subsystem by +default due to security considerations. To enable the SFTP subsystem, perform +the following configuration of the :abbr:`SSHD (SSH Daemon)` service file: + +#. Create a systemd drop-in directory for the SSHD service: + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/system/sshd@.service.d + +#. Create the following file: + :file:`/etc/systemd/system/sshd@.service.d/sftp.conf` + +#. Add the OPTIONS environment variable to the sftp.conf file. + + .. code-block:: console + + [Service] + Environment="OPTIONS=-o Subsystem=\"sftp /usr/libexec/sftp-server\"" + +#. Reload systemd configuration: + + .. code-block:: bash + + sudo systemctl daemon-reload + +Congratulations! The SFTP subsystem is enabled. + +Enable root login +***************** + +To enable root login via SSH, perform the following steps: + +#. Create a *ssh* directory in :file:`/etc`, if it does not already exist. + + .. code-block:: bash + + mkdir /etc/ssh + +#. Create the following file, if it does not already exist: + :file:`/etc/ssh/sshd_config` + +#. Set the configuration variable in /etc/ssh/sshd_config + + .. code-block:: console + + PermitRootLogin yes + +Enable X11-forwarding +********************* + +X11 forwarding allows you to securely run graphical applications +(i.e., X clients) over the ssh conection. This will alow for remote gui apps +without the need for full VNC/remotedesktop. To enable X11-forwarding via +SSH, perform the following steps: + +#. Create a *ssh* directory in :file:`/etc`, if it does not already exist. + + .. code-block:: bash + + mkdir /etc/ssh + +#. Create the following file, if it does not already exist: + :file:`/etc/ssh/sshd_config` + +#. Set the configuration variables. + + .. code-block:: bash + + AllowTcpForwarding yes + X11UseLocalhost yes + X11DisplayOffset 10 + X11Forwarding yes \ No newline at end of file diff --git a/_sources/reference/collaboration/collaboration.rst.txt b/_sources/reference/collaboration/collaboration.rst.txt new file mode 100644 index 00000000..fb7b5369 --- /dev/null +++ b/_sources/reference/collaboration/collaboration.rst.txt @@ -0,0 +1,83 @@ +.. _collaboration: + +Documentation guidelines +######################## + +See a missing topic in the documentation? Find an existing document that could +be improved? Help us out by contributing! If you haven't contributed before, +take a moment to review our `Contribution guidelines`_. + +Do you have questions about the documentation that were not answered by these +guidelines? Send your question to the `mailing list`_. + +Contribution guidelines +*********************** + +The |CL| documentation is hosted in GitHub and is written using +reStructuredText. Use our guidelines and best practices to write consistent, +readable documentation. + +.. toctree:: + :maxdepth: 1 + + Writing guide: Describes the style we use to keep our documents clear and concise. + Structure and formatting guide: Explains how we organize and format content, using reStructuredText and Sphinx. + +How to contribute +***************** + +There are multiple ways to contribute and help improve our documentation: + +* **Make a suggestion**: Have a documentation suggestion but no time to write it + yourself? Send your suggestion to the `mailing list`_. +* **Log an issue**: If you find a problem in our documentation (such as typos or + out-of-date information), log an issue in the `documentation repository`_. +* **Contribute directly via GitHub**: Whether you've found a typo, have better + instructions or examples, or have a new page to add, submit your improvement + or addition as a pull request on the `documentation repository`_. +* **Test documentation**: Step through our instructional guides and tutorials to + verify the instructions. Log or correct any out-of-date information. + +All contributions must follow our `code of conduct`_. + +Contribute via GitHub +********************* + +Our documentation is hosted in GitHub and we follow the standard `GitHub flow`_: + +#. Clone the `documentation repository`_. + +#. Create your own fork of the repository. + +#. Create a branch for your contribution. + +#. Add your commits. + +#. Open a pull request. + +#. Discuss, review, and update your contributions. + +#. Once the maintainer approves, your contribution is merged and published as + part of the documentation. + +.. _references: + +References +********** + +We use the following references to guide the grammar, style, and formatting of +our documentation: + +* `Microsoft Writing Style Guide`_ +* `Merriam-Webster Dictionary`_ +* The Chicago Manual of Style (15th edition), The University of Chicago Press +* Microsoft Press Computer Dictionary, Microsoft Press +* Read Me First!, Oracle Technical Publications + + +.. _`code of conduct`: https://clearlinux.org/community/code-of-conduct +.. _mailing list: https://lists.clearlinux.org/mailman/listinfo/dev +.. _GitHub flow: https://guides.github.com/introduction/flow/ +.. _documentation repository: https://github.com/clearlinux/clear-linux-documentation +.. _Microsoft Writing Style Guide: https://docs.microsoft.com/en-us/style-guide/welcome/ +.. _Merriam-Webster Dictionary: https://www.merriam-webster.com/ \ No newline at end of file diff --git a/_sources/reference/collaboration/structure-formatting.rst.txt b/_sources/reference/collaboration/structure-formatting.rst.txt new file mode 100644 index 00000000..6391dccb --- /dev/null +++ b/_sources/reference/collaboration/structure-formatting.rst.txt @@ -0,0 +1,482 @@ +.. _structure-formatting: + +Structure and formatting +######################## + +Content should be organized to support scanning. Consistent organization, +formatting, and writing style helps readers quickly find what they need and to +understand the content more effectively. This document describes our +organization and formatting guidelines. + +Refer to :ref:`writing-guide` to learn how we keep our documents clear and +concise. + +.. contents:: :local: + :depth: 1 + +Markup +****** + +Our documentation is written in the reStructuredText markup language, using +Sphinx roles and directives. We use Sphinx to generate the final documentation. +You can read more about reStructuredText and Sphinx on their respective +websites: + +* `Sphinx documentation`_ +* `reStructuredText Primer`_ + +You can view the content directly in the .rst markup files, or generate the HTML +content by installing and building the documentation locally. To run the +documentation locally, follow the instructions found in the +`documentation repository`_ README. + +New pages +========= + +There are a few additional steps to consider when adding a new page to the +documentation. First, identify where your new page should be located within the +existing `Documentation organization`_. Second, make sure the new page is picked +up in the Sphinx build and easily linkable from other content. + +Each page must be included in a `Sphinx toctree`_ in order to be included in the +documentation content tree. Typically, pages are added to the section landing +page toctree. + +For example, the :ref:`collaboration` page toctree looks like: + +.. code-block:: rest + + .. toctree:: + :maxdepth: 1 + + writing-guide + structure-formatting + +Additionally, each page must include a uniquely named reST label directly before +the page title, to enable the `Sphinx ref role`_ for linking to a page. + +For example, this page "Structure and formating" has the label +``.. _structure-formatting``: + +.. code-block:: rest + + .. _structure-formatting: + + Structure and formatting + ######################## + +This page can then be referenced from other pages in the documentation using the +`:ref:` role: + +.. code-block:: rest + + :ref:`structure-formatting` + +Documentation organization +************************** + +The documentation is organized into five general sections: + +#. **Concepts**: Introduction and overview of |CL| specific concepts or + features. +#. **Get started**: Information about getting started with |CL|. +#. **Guides**: Detailed information and instruction on using |CL| features. +#. **Tutorials**: Step-by-step instruction for using |CL| in specific use cases. +#. **Reference**: Supplementary and reference information for |CL|. + +Page structure +============== + +Each page in the documentation should follow the basic format of: + +* Overview: 1-2 sentences describing what this page shows and why it matters +* Prerequisites: Describe any pre-work necessary to the content (if appropriate) +* Content +* Next steps: List links to next steps (if appropriate) +* Related topics: List links to related content (if appropriate) + +Headings +======== + +Use headings to section and organize your content for better readability and +clarity. + +* All files must have a top level heading, which is the title for the page. +* Up to three additional levels of headings are allowed under the title heading. +* Each heading should be followed by at least one paragraph of content. Avoid + two or more consecutive headings. + +Refer to the :ref:`writing-guide` for tips on using headings to create +:ref:`scannable content `. + +To mark up headings in the .rst file: + +* Use hash-tags to underline the file's main title: + + .. code-block:: rest + + Main title + ########## + +* Use asterisks to underline the file's first level headings: + + .. code-block:: rest + + First level heading + ******************* + +* Use equal signs to underline the file's second level of headings: + + .. code-block:: rest + + Second level heading + ==================== + +* Use dashes to underline the file's third level of headings: + + .. code-block:: rest + + Third level heading + ------------------- + +In-page navigation +================== + +If a page has three or more sections, provide quick links to each section. Place +the quick links after the overview section. + +Use the standard `reST contents directive`_ with depth: 1 for quick links. + +Inline text formatting +********************** + +We use the `Microsoft Writing Style Guide`_ as our starting point for text +formatting. We apply the formatting using reST and Sphinx markup. + +Use our quick reference for the most commonly used inline text elements: + ++--------------------------------+---------------------------------------+-----------------------------+ +| **Element** | **Convention** | **reST/Sphinx** | ++--------------------------------+---------------------------------------+-----------------------------+ +| Acronyms | Define acronym when first used. After | Use the ``:abbr:`` role, in | +| | first use and definition, use the | the following format: | +| | acronym only. | | +| | | ``:abbr:`Acronym (Def)``` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Bundle names | Bold | Use the ``:command:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Callouts | | Use ``.. note::`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Code/command examples | Monospace, visually distinct | Use ``.. code-block::`` | +| | from rest of text. Use an | with the correct language | +| | indented call-out box. | setting. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Commands | Bold | Use the ``:command:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Command flags | Bold | Use the ``:command:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Console output | Monospace, visual distinction | Use ``.. code-block::`` | +| | from rest of text. Use an | with console as the | +| | indented call-out box. | language setting. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Emphasis | Italic | ``*strong*`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Environment variables | Use the case format of the | Use ``:envvar:`` | +| | environment variable. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Example commands with | Use angle brackets for swapping | | +| optional or replaceable | in the specific name, | | +| parts | e.g. . | | +| | | | +| | Use square brackets for optional | | +| | parts, | | +| | e.g. [--build]. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Example URLs (not linked) | Plain text | | ++--------------------------------+---------------------------------------+-----------------------------+ +| File extensions | Lowercase | | ++--------------------------------+---------------------------------------+-----------------------------+ +| File names, directories, paths | Title style capitalization | Use the ``:file:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| GUI labels | | Use ``:guilabel:`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Inline comments | | Use ``..`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Keystrokes | | Use ``:kbd:`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Local navigation | | ``.. contents:: :local:`` | +| | | with a depth of 1 | ++--------------------------------+---------------------------------------+-----------------------------+ +| Menu selection | | Use ``:menuselection:`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| New terms | Italic for first use, normal for all | ``*term*`` | +| | subsequent uses. | | +| | | | +| | If it is used outside of the source | | +| | of definition, link the term. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Product name | Follow correct trademark and | | +| | attribution guidelines. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Tool names | Correctly capitalized, no quotes, | | +| | bold, or italics as the basic rule. | | +| | | | +| | If the tool name is the command, like | | +| | most Linux tools, treat it like a | | +| | command. | | +| | | | +| | If the tool name is lowercase and | | +| | used at the start of a sentence, use | | +| | bold. | | ++--------------------------------+---------------------------------------+-----------------------------+ + +White space and line length +=========================== + +Limit line length to 78 characters. The GitHub web interface forces this +limitation for readability. + +Remove trailing whitespace from your documents. + +Code blocks and examples +************************ + +When providing example code or commands use the `Sphinx code-block directive`_. +Select the appropriate syntax highlighting for the example command or code. + +For example, if showing console output, use console highlighting: + +.. code-block:: rest + + .. code-block:: console + +Sphinx provides other ways of `marking up example code`_ if needed. + +Lists and instructions +********************** + +Use a numbered list when the order or priority of the items is important, such +as step-by-step instructions. + +Use a bulleted list when the order of the items is not important. + +For both list types, keep all items in the list parallel. See +:ref:`parallelism`. + +Use standard `reST list markup`_. + +Numbered lists +============== + +Numbered lists are most frequently used for procedures. Use numbered lists to +show sequence for the items. Follow our guidelines for numbered lists: + +* Make sure the list is sequential and not just a collection of items. +* Introduce a numbered list with a sentence. End the setup text with a + colon. Example: "To configure the unit, perform the following steps:" +* Each item in the list should be parallel. +* Treat numbered list items as full sentences with correct ending + punctuation. +* You may interrupt numbered lists with other content, if relevant, + e.g. explanatory text, commands, or code. +* Second-level steps are acceptable; avoid third-level steps. +* Avoid single-step procedures; the minimum number of steps in a procedure + is two. +* Do not create numbered lists that emulate flowcharts. The reader should be + able to execute the list of steps from first to last without branching or + looping. +* Avoid over-using numbered lists, except in procedural documents such as + tutorials and step-by-step guides. + +Bulleted lists +============== + +Use bulleted lists to reduce wordiness and paragraph density, especially when +a sequence is not required. Here are some guidelines for bulleted lists: + +* Introduce a bulleted list with a sentence. End the setup text with a + colon. Example: "To repair the unit, you will need the following items:" +* Each item in the list should be parallel. +* Avoid interrupting bulleted lists with other paragraph styles. +* Second-level bullets are acceptable; avoid third-level bullets. + +Use the correct ending punctuation for sentence style bullet lists. For example: + +**Use this:** + +:: + + When setting the user code, remember: + + * Use a number that has a meaning for you. + * Change the code once a month. + * Do not disclose the user code to anyone, including the security company. + +**Not this:** + +:: + + When setting the user code remember: + + * make the user code easy to remember. Use a number that has a meaning for you + * change the code once a month + * do not disclose the user code to anyone else. This includes the security + company + +Instructions +============ + +When presenting instructions, such as in a tutorial, present them in a numbered +list according to these guidelines: + +* Each step (list item) should describe one action. + +* If the same steps are repeated, refer to the earlier steps rather than + repeating them. + +* When a step includes a command or code block as an example, put the command + or code block after the step that includes them. + +* Use supporting images where appropriate. If the series of steps is supported + by one figure, refer to the figure in the introductory text. + + For example: "See Figure 15 and do the following:" + + When a series of steps is supported by two or more figures, refer to the + specific figure in the relevant step and show the figure immediately after + the reference. **Do not write**: "See figures 15 through 22 and do the + following:" + +Notices +******* + +We use four special types of notices: notes, cautions, warnings, and dangers. +Here are some specific rules and tips regarding use of these notices: + +* Do not use a notice directly after a heading. Notices must follow a variant of + body text. +* Do not include more than one notice in a single notice block. +* Avoid back-to-back notices. +* If back-to-back notices are not avoidable, make sure each distinct notice in + the notice block is clearly defined. + +Use the standard `reST admonition directive`_. + +Notes, cautions, and warnings +============================= + +Use notes sparingly. Avoid having more than one note per section. If you exceed +this number consistently, consider rewriting the notes as main body text. + +Use cautions and warnings to alert readers of potential problems or pitfalls. +Use conditional phrases in cautions and warnings, such as "If you do X, then Y +will occur." + +These are examples of typical notices and the conditions for their usage: + +.. note:: + Notes are extra bits of information that supplement the main content. Notes + should be relatively short. + +.. caution:: + Cautions are low-level hazard messages that alert the user of possible + equipment, product, and software damage, including loss of data. + +.. warning:: + Warnings are mid-level hazards that are likely to cause product damage. + +Links +***** + +Use the standard `reST markup for links`_. + +To add a cross-reference to another documentation page, use the `:ref:` role: + +.. code-block:: rest + + :ref:`structure-formatting` + +To add an external link, we use named references that refer to a defined +link/label at the bottom of the page. + +For example, an external link is defined at the bottom of the page like this: + +.. code-block:: rest + + .. _wiki about dogs: https://en.wikipedia.org/wiki/Dog + +The defined link is then used in the content like this: + +.. code-block:: rest + + Check out the great `wiki about dogs`_. + +Images +****** + +Use images or figures to convey information that may be difficult to explain +using words alone. Well-planned graphics reduce the amount of text required to +explain a topic or example. + +Follow these guidelines when using graphics in support of your documentation: + +* Keep it simple. Use images that serve a specific purpose in your document, + and contain only the information the reader needs. + +* Avoid graphics that will need frequent updating. Don't include information in + a graphic that might change with each release, such as product versions. + +* Use either PNG or JPEG bitmap files for screenshots and SVG files for vector + graphics. + +* Place the image immediately after the text it helps clarify, or as close as + possible. + +* Use the `Sphinx figure directive`_ to insert images and figures into the + document. Include both alt text, a figure name, and caption. + + For example: + + .. code-block:: rest + + .. figure:: figures/topic-1.png + :alt: An image supporting the topic. + + Figure 1: This is the figure 1 caption. + +* Include at least one direct reference to an image from the main text, using + the figure number. For example: + + **Use this:** :: + + Figure 1 + + **Not this:** :: + + The figure above or below + +Images should follow these naming and location conventions: + +* Save the image files in a :file:`figures` folder at the same level as the file + that will reference the image. +* Name image files according to the following rules: + + * Use only lower case letters. + * Separate multiple words in filenames using dashes. + * Name images using the filename of the file they appear on and add a number + to indicate their place in the file. For example, the third figure added to + the :file:`welcome.rst` file must be named :file:`welcome-3.png`. + +.. _Sphinx documentation: http://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html +.. _reStructuredText Primer: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html +.. _documentation repository: https://github.com/clearlinux/clear-linux-documentation +.. _Sphinx toctree: https://www.sphinx-doc.org/en/master/usage/quickstart.html?highlight=toctree#defining-document-structure +.. _Sphinx ref role: https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref +.. _reST contents directive: http://docutils.sourceforge.net/docs/ref/rst/directives.html#table-of-contents +.. _Microsoft Writing Style Guide: https://docs.microsoft.com/en-us/style-guide/welcome/ +.. _Sphinx code-block directive: http://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block +.. _marking up example code: http://www.sphinx-doc.org/en/1.6/markup/code.html +.. _reST list markup: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#lists-and-quote-like-blocks +.. _reST admonition directive: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#directives +.. _reST markup for links: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#hyperlinks +.. _Sphinx figure directive: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#directives diff --git a/_sources/reference/collaboration/writing-guide.rst.txt b/_sources/reference/collaboration/writing-guide.rst.txt new file mode 100644 index 00000000..f69a0344 --- /dev/null +++ b/_sources/reference/collaboration/writing-guide.rst.txt @@ -0,0 +1,410 @@ +.. _writing-guide: + +Writing guide +############# + +We want our documentation to be easy to read and understand. This document +describes guidelines for writing documentation that is clear, concise, +confident, and courteous. + +Refer to :ref:`structure-formatting` for details on organizing content and how +we use reStructuredText and Sphinx. + +.. contents:: :local: + :depth: 1 + +Use simple English +****************** + +Write using simple English: Be brief and communicate only the information that +is needed. Be friendly and informative. Emphasize clarity and avoid +unecessary complicated or technical terms. Make the content accessible to +non-native speakers. + +Be brief +======== + +Use short sentences and paragraphs. Stick to the principle of one main +idea per sentence, plus one additional point if needed. Each paragraph +should address one main idea. Remember the basic structure of a paragraph: +Introduction, body, and conclusion. + +Be friendly +=========== + +We write for our peers and want to be familiar. Take a personal tone as if you +were speaking directly to the reader. Use "you" to address the reader and "we" +to refer to our view. Be professional, respectful, and cooperative. + +Assume your audience has the same level of technical understanding and expertise +as you did when you first started collaborating. Do not talk down to our +readers, but also do not assume they know everything about the subject. Offer +brief explanations or summaries of common knowledge if a significant portion of +readers might benefit. + +Use simple words +================ + +Use simple words to increase reader comprehension and reduce ambiguity. Follow +our tips for making good word choices: + +* **Avoid jargon**: Write for your audience, using everyday language where + possible, and technical terms where appropriate. Avoid clichés, idioms, and + metaphors. +* **Be consistent**: Use one term for each concept or action and use it + consistently. +* **Avoid "fancy" words and phrases**: If there is a simpler word or phrase, + use it. + + For example: + + =================== =================== + Use this Not this + =================== =================== + start, begin commence + so consequently + more than in excess of + if in the event of + before prior to + if you want should one wish + use utilize + example instance + =================== =================== + +Avoid overuse of product name +============================= + +Use product names only when necessary. Typically, you can rewrite sentences to +remove the product name with no change in meaning, which keeps the content +concise and scannable. + +Avoid using the product name in page titles and headings. + +.. _scannable-content: + +Make content scannable +********************** + +Organize your content to make it scannable for the reader, which helps them find +what they need quickly, and to understand the information more efficiently. + +* **Put the most important content first.** Make sure your introduction clearly + communicates what the reader can find on the page. Present the point of the + document first, and organize supporting information towards the end of the + page. +* **Write scannable headings.** Expect readers of documentation to skim and scan + the content, and to leave if they dont find what they need quickly. Good + headings add organization to your content and help the reader to find and + understand content more effectively. Follow our guidelines for writing + effective `Headings`_. +* **Write great link text.** Great link text tells the reader what they can + expect when they click on a link. It also helps make the page more scannable. + Follow our guidelines for writing `Link text`_. + +Headings +======== + +Use these guidelines to write effective headings: + +* **Be concise and descriptive.** Use only the words necessary to describe the + section. +* **Use sentence case.** Capitalize only the first word and proper nouns in a + heading. +* **Avoid punctuation.** Unless your heading is a question, don't use sentence + punctuation in headings. +* **Use parallel structure.** Headings at the same level should use the same + grammatical pattern. This provides structure to the document and helps users + find information more easily. See :ref:`parallelism`. +* **Use strong verbs.** Strong, active verbs get to the point. Avoid -ing verbs, + such as *Running*, *Testing*, etc. + +For example, two headings at the same level: + +**Use this:** :: + + Install software + + Configure software + +**Not this:** :: + + Installing the Software on the Platform + + Software Configuration. + +Link text +========= + +All links in content should follow these guidelines: + +* **Write descriptive link text**: Link text should describe where the link + goes, without having to read the surrounding text. +* **Keep link text concise**: Use only the words needed to accurately describe + the destination. +* **Use unique link text**: Each link on a page should be unique. If users see + the same link text twice on a page, they'll assume it goes to the same place. +* **Start link text with keywords**: Frontload the link text with the most + important words to help users scan the text. +* **Avoid generic text**: Don't use generic, uninformative link text such as + "click here" or "read more". + +For example: + +**Use this:** :: + + For more information about dogs, read the `dog wiki article`_. + +**Not this:** :: + + For more information about dogs, `click here`_. + +Use strong verbs +**************** + +Passive verbs make writing stuffy and formal. Use strong verbs to get to the +point and avoid unnecessary words and phrases. + +Use imperatives +=============== + +Commands, also called imperatives, are the fastest and most direct way of giving +someone instructions. For example: + +**Use this:** :: + + Send it to me. + +**Not this:** :: + + I would appreciate it if you would send it to me. + +Use present tense +================= + +Use simple present tense instead of future tense for most text. Search for the +words "will" or "shall" to find future tense instances. Future tense is +acceptable for conditional statements, such as in a caution or a warning. For +example: + +**Use this:** :: + + The system operates at a nominal temperature of 180 degrees Fahrenheit. + +**Not this:** :: + + The system will operate at a nominal temperature of 180 degrees Fahrenheit. + +Avoid nominalizations +===================== + +Avoid nominalizations, which are nouns formed from verbs. + +For example: + +===================== ===================== + Verb Nominalization +===================== ===================== + complete completion + provide provision + fail failure + install installation +===================== ===================== + +For example: + +**Use this:** :: + + We discussed the matter. + +**Not this:** :: + + We had a discussion about the matter. + +Or: + +**Use this:** :: + + IT has installed the software. + +**Not this:** :: + + IT has completed the installation of the software. + +Avoid words ending in -ing +========================== + +Avoid using words ending in -ing unless they are part of a technical name. For +example: + +**Use this:** :: + + There is no way to verify this. + +**Not this:** :: + + There is no way of verifying this. + +Use the active voice +==================== + +Use active voice whenever possible to show who or what is performing an +action. + +* Active voice follows standard English word order: SUBJECT–VERB–OBJECT + (where the OBJECT is optional). +* Passive voice reverses the order and weakens the verb: OBJECT–be VERB–by + SUBJECT (where the OBJECT is optional). + +For example: + +**Use this:** :: + + I made a mistake. + +**Not this:** :: + + A mistake was made. *(By whom?)* + +Or: + +**Use this:** :: + + We released version 2.0 in June. + +**Not this:** :: + + Version 2.0 was released in June. + +Avoid long noun phrases +*********************** + +Noun phrases (a noun and other words that describe or modify it) can be +difficult to understand. Try to limit the number of modifiers in a noun phrase +to two. For example: + +**Use this:** :: + + Integration policies for power management mechanisms. + +**Not this:** :: + + Power management mechanism integration policies. + +.. _parallelism: + +Parallelism +*********** + +Parallelism refers to the practice of using similar patterns of grammar, and +sometimes length, to coordinate words, phrases, and clauses. + +Use parallel construction in lists. The table below shows some unparallel +structures and how they can be made parallel with a little rewording. + ++----------------------------------+----------------------------------+ +| Parallel (do) | Unparallel (don't) | ++==================================+==================================+ +| 1. Mount the panel. | 1. Mount the panel. | +| 2. Install the battery. | 2. Battery installation. | +| 3. Wire the keypad. | 3. Wiring the keypad. | ++----------------------------------+----------------------------------+ +| I like practicing my accordion, | I like practicing my accordion, | +| reading sci-fi, and eating | reading sci-fi, and to eat | +| peanut butter and pickle | peanut butter and pickle | +| sandwiches. | sandwiches. | ++----------------------------------+----------------------------------+ +| For breakfast he likes coffee | For breakfast he likes coffee | +| and bacon. | and to fry bacon. | ++----------------------------------+----------------------------------+ +| Apples or bananas are a good | Apples or a banana are a good | +| snack. | snack. | ++----------------------------------+----------------------------------+ + +Grammar and punctuation +*********************** + +This section covers common grammatical topics relevant to our +documentation. For detailed explanations of correct grammar and punctuation, +use one of our :ref:`preferred references `. + +Capitalization +============== + +The capitalization style for all documentation is sentence case. Words should +only be capitalized when they are proper nouns or refer to trademarked product +names. + +.. note:: + Do not capitalize a word to indicate it is more important than other + words. Never change the case of variable, function or file names - always + keep the original case. + +Menu capitalization +------------------- + +When referring to software menu items by name, use the same capitalization as +seen in the actual menu. + +A few other tips when referring to menu items: + +* Reference the specific menu item using "Select :menuselection:`File --> New`." + +* Put the option to be selected last. "Select + :menuselection:`View --> Side Bar --> Hide Side Bar`" + +* Do not include more than 3 navigation steps in a menu selection. If + more than three steps are needed, divide the steps using + ``:guilabel:`` or ``:menuselection:``. + + For example: "Go to :guilabel:`File` and select + :menuselection:`Print --> Print Preview --> Set Up`." + +Software version capitalization +------------------------------- + +When listing software or hardware version numbers, the word “version” or letter +"v" are lowercase. The v is closed with the number (no period). + +For example: + +* Widget Pro version 5.0 +* Widget Master v2.1.12 + +Contractions +============ + +Avoid using contractions, such as it's, they're, and you're, because they may be +unclear to non-native English-speaking audiences. + +Quotation marks +=============== + +Follow these guidelines for quotation marks: + +* Restrict use of quotation marks to terms as terms. +* Do not use quotation marks for emphasis; use *italics* for emphasis. +* Avoid using single-quote marks. + +Commas and colons +================= + +This section addresses common use of commas, semicolons, and colons in our +documentation. Refer to one of our :ref:`preferred references ` +for further details. + +Use the serial comma +-------------------- + +When writing a series of items, use the serial comma before the final *and* and +*or* to avoid confusion and ambiguity. For example: + +**Use this:** :: + + Mom, Dad, and I are going to the game. + +**Not this:** :: + + Mom, Dad and I are going to the game. + +.. _click here: https://en.wikipedia.org/wiki/Dog +.. _dog wiki article: https://en.wikipedia.org/wiki/Dog diff --git a/_sources/reference/compatible-hardware.rst.txt b/_sources/reference/compatible-hardware.rst.txt new file mode 100644 index 00000000..3f8b23a3 --- /dev/null +++ b/_sources/reference/compatible-hardware.rst.txt @@ -0,0 +1,113 @@ +.. _compatible-hardware: + +Compatible Hardware +################### + +This document describes hardware that has been tested and confirmed as +compatible with |CL-ATTR|. This list is not comprehensive and will continue to +grow. + +.. list-table:: **Table 1. Compatible Hardware** + :widths: 20, 20 + :header-rows: 1 + + * - Processor SKU + - Platform + + * - Intel® Core™ i5-6260U + - + + * - Intel® Core™ i5-6560U + - Dell XPS\* 13 9350 + + * - Intel® Celeron® J3455 + - NUC6CAYS + + * - Intel® Core™ i5-4250U + - + + * - Intel® Core™ i7-5557U + - + + * - Intel® Core™ i9-7900X + - Gigabyte\* X299 + + * - Intel® Core™ i3-4130 + - Lenovo Thinkserver\* TS140 + + * - Intel® Core™ i7-7567U + - NUC7i7BNH + + * - Intel® Core™ i7-8809G + - NUC8i7HVK + + * - Intel® Core™ i5-7260U + - NUC7i5BNH + + * - Intel® Core™ i7-8650U + - NUC7i7DNKE + + * - Intel® Core™ i5-7300U + - NUC7i5DNHE + + * - Intel® Xeon® Gold 6138 + - + + * - Intel® Xeon® E5-2699A v4 + - Dell PowerEdge\* R630 + + * - Intel® Xeon® E5-2620 v3 + - + + * - Intel® Core™ i5-6600 + - Gigabyte\* Z170X-UD5 + + * - Intel® Core™ i5-4250U + - D54250WYK + + * - Intel® Xeon® E5-2699 v3 + - S2600WT2 + + * - Intel® Atom™ J3455 + - NUC6CAYB + + * - Intel® Xeon® Bronze 3104 + - 0W23H8 + + * - Intel® Atom™ C2750 + - SuperMicro\* A1SAi + + * - Intel® Atom™ E3825 + - CircuitCo MinnowBoard MAX\* + + * - Intel® Core™ i7-8700 + - Gigabyte\* H370 WIFI + + * - Intel® Core™ i7-3667U + - Lenovo ThinkPad\* X1 Carbon laptop + + * - Intel® Core™ i5-4210U + - Dell XPS\* 13 laptop + + * - Intel® Celeron® J3455 + - NUC6CAYB + + * - Intel® Core™ i7-4790 + - Gigabyte\* desktop + + * - Intel® Core™ i5-6260U + - NUC6I6SYH + + * - Intel® Core™ i7-5557U + - NUC5I7RYH + + * - Intel® Core™ i7-4700MQ + - Lenovo ThinkPad\* T540p + + * - Intel® Core™ i7-5557U + - NUC5I7RYB + + * - Intel® Core™ i5-6260U + - NUC6I5SYH + +\* Other names and brands may be claimed as the property of others. \ No newline at end of file diff --git a/_sources/reference/image-types.rst.txt b/_sources/reference/image-types.rst.txt new file mode 100644 index 00000000..cc5d1325 --- /dev/null +++ b/_sources/reference/image-types.rst.txt @@ -0,0 +1,87 @@ +.. _image-types: + +|CL-ATTR| image types +######################### + +.. _image-types-content: + +|CL-ATTR| offers many types of `images`_ for different platforms and environments. + +.. _incl-image-filename: + +The naming convention of a |CL| image filename is: + +.. code-block:: console + + clear-[version number]-[image type].[compression type] + +* The *[version number]* field specifies the version number. + +* The *[image type]* field specifies the type of image and its corresponding + file format. + +* The *[compression type]* field specifies the compression type. Two types of + compressions are used: GNU\* zip (*.gz*) and XZ (*.xz*). + +.. _incl-image-filename-end: + +Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific. + +.. list-table:: Table 1: Types of platform-independent |CL| images + :widths: 15, 85 + :header-rows: 1 + + * - Image Type + - Description + + * - live-desktop.img or live-desktop.iso + - Image for booting to GNOME\* desktop to preview or install the OS. + + * - 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 + :header-rows: 1 + + * - Image Type + - Description + + * - aws.img + - Image suitable for use with Amazon\* AWS\*. + + * - azure.vhd + - 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. + + * - azure-machine-learning.vhd + - Virtual Hard Disk for use on Microsoft Azure cloud platform with the `machine-learning-basic` bundle installed. + + * - cloudguest.img + - Image with generic cloud guest virtual machine (VM) requirements installed. + + * - 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. + + * - kvm.img + - 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://clearlinux.org/downloads +.. _`optimized kernel`: https://clearlinux.org/documentation/clear-linux/reference/compatible-kernels + diff --git a/_sources/reference/reference.rst.txt b/_sources/reference/reference.rst.txt new file mode 100644 index 00000000..3578753e --- /dev/null +++ b/_sources/reference/reference.rst.txt @@ -0,0 +1,31 @@ +.. _reference: + +Reference +######### + +This section provides additional information on the |CL| project and +features. + +.. toctree:: + :maxdepth: 1 + + compatible-hardware + bundle-commands + bundles/bundles + bundles/openssh-server + collaboration/collaboration + system-requirements + image-types + +.. _concepts: + +Clear Linux concepts +******************** + +.. toctree:: + :maxdepth: 1 + :glob: + + ../concepts/* + ../guides/clear/stateless + ../guides/clear/security \ No newline at end of file diff --git a/_sources/reference/system-requirements.rst.txt b/_sources/reference/system-requirements.rst.txt new file mode 100644 index 00000000..c0974923 --- /dev/null +++ b/_sources/reference/system-requirements.rst.txt @@ -0,0 +1,79 @@ +.. _system-requirements: + +Recommended minimum system requirements +####################################### + +|CL-ATTR| can run on most modern hardware and is capable of running with +modest hardware resources. Out of the box, |CL| can run on a single CPU core, 1 +GB RAM, and 2 GB of disk space. + +For use cases requiring minimal resources, |CL| :ref:`about ` can +be used to create a highly customized installation that can even run on a +system with a 128MB of memory and 600MB of disk space, for example. + + +Installer requirements +********************** + +The *live desktop* installer requires at least 1 GB of RAM because more +resources are required to run in live mode than after |CL| is installed onto +persistent storage. + +For hardware with less resources, use the *live server* installer because it +has a smaller memory footprint. + +See https://clearlinux.org/downloads for more download options. + + +System requirements +******************* + +|CL| requires an x86 64-bit processor which supports Intel® Streaming SIMD +Extensions 4.1 (Intel® SSE 4.1), and it requires a system that supports UEFI. + +The |CL| installer performs a system compatibility check upon booting. To +manually verify system compatibility with |CL|, run the :ref:`compatibility +check tool` or go to http://ark.intel.com and check for +these features: + +* Instruction Set: + + - 64-bit + +* Instruction Set Extensions: + + - Supplemental Streaming SIMD Extension 3 (Intel® SSSE3) + - Intel® Streaming SIMD Extensions 4.1 (Intel® SSE 4.1) + - Intel® Streaming SIMD Extensions 4.2 (Intel® SSE 4.2) + - Intel® Advanced Encryption Standard New Instructions (Intel® AES-NI) + - Carry-less Multiplication (PCLMUL) + +The following processor families have been verified to run |CL|: + +* Intel® Core™ Processor Family (2nd generation or greater) +* Intel® Xeon® E3-xxxx processor +* Intel® Xeon® E5-xxxx processor +* Intel® Xeon® E7-xxxx processor +* Intel® Atom® processor C Series +* Intel® Atom® processor E Series + + +Recommended configurations +************************** + +For general |CL| desktop use the recommended minimum requirements include: + +========= =============================== +Component Configuration +--------- ------------------------------- +Processor Compatible x86 64-bit processor +--------- ------------------------------- +Memory 4GB RAM +--------- ------------------------------- +Disk 20 GB +--------- ------------------------------- +Graphics Device with openGL support (e.g. Intel HD/UHD Graphics) +--------- ------------------------------- +Network Active Internet connection +========= =============================== + diff --git a/_sources/tutorials/aws-web/aws-web.rst.txt b/_sources/tutorials/aws-web/aws-web.rst.txt new file mode 100644 index 00000000..4dea6423 --- /dev/null +++ b/_sources/tutorials/aws-web/aws-web.rst.txt @@ -0,0 +1,276 @@ +.. _aws-web: + +Create and launch |CL-ATTR| from Amazon Web Services +###################################################### + +This tutorial walks you through creating and launching a |CL| +:abbr:`AMI (Amazon Machine Image)` instance from the +:abbr:`AWS (Amazon Web Services)` console and complete the following tasks: + +#. Locate and select the |CL| OS Basic AMI in the AWS Marketplace. +#. Create a new public and private key pair to allow you to connect to your + |CL| instance securely. +#. Launch the new |CL| instance and connect to it. +#. Update your instance of |CL| using the :command:`swupd` command. +#. Stop the |CL| instance. + +Prerequisites +************* + +This tutorial assumes the following statements are true: + +* You are using a linux-based system to access AWS and can run :command:`SSH` + to access the remote |CL| AWS image. +* Your browser puts downloaded files in the :file:`$HOME/Downloads` + directory. +* You have already set up an AWS user account and logged into the AWS + console. + +.. note:: + This tutorial uses a |CL| AMI t2.micro instance that is eligible for the + AWS free tier. To learn more about AWS and setting up an account, visit the + AWS website at http://aws.amazon.com. + +Locate, select, and launch the |CL| Basic AMI +********************************************* + +#. Start from your main AWS services console menu in your browser and select the + :guilabel:`EC2` text as shown in figure 1: + + .. figure:: figures/aws-web-1.png + :scale: 50 % + :alt: AWS Console + + Figure 1: :guilabel:`AWS Console` + + This selection brings up your :guilabel:`EC2 Dashboard` menu. + +#. To create a new |CL| instance from the :guilabel:`EC2 Dashboard` menu, + select the :guilabel:`Launch Instance` button as shown in figure 2: + + .. figure:: figures/aws-web-2.png + :scale: 50 % + :alt: EC2 Dashboard + + Figure 2: :guilabel:`EC2 Dashboard` + + This selection takes you to the + :guilabel:`Step 1: Choose an Amazon Machine Image (AMI)` menu. + +#. To find the :guilabel:`Clear Linux OS Basic` AMI in the + :guilabel:`Step 1: Choose an Amazon Machine Image (AMI)` menu, do the + following: + + #. In the lefthand navigation window, select the + :guilabel:`AWS Marketplace` menu item to bring up the search bar to + :guilabel:`Search AWS Marketplace Products`. + + #. In the search bar, type "clear linux os" and hit the :kbd:`Enter` key to + search for and locate the :guilabel:`Clear Linux OS Basic` AMI. + + #. Select the :guilabel:`Clear Linux OS Basic` AMI by clicking on the + :guilabel:`Select` button as shown in figure 3: + + .. figure:: figures/aws-web-3.png + :scale: 50 % + :alt: Step 1: Choose AMI + + Figure 3: :guilabel:`Step 1: Choose AMI` + + #. A pop-up dialog box appears showing you more information about the + :guilabel:`Clear Linux OS Basic` AMI along with the pricing details for running + |CL| on different platform configurations as shown in figure 4. Select + the :guilabel:`Continue` button. + + .. figure:: figures/aws-web-4.png + :scale: 50 % + :alt: Clear Linux OS Basic + + Figure 4: :guilabel:`Clear Linux OS Basic` + +#. The :guilabel:`Choose Instance Type` menu appears as shown in figure 5. + + .. figure:: figures/aws-web-5.png + :scale: 50 % + :alt: Choose an Instance Type + + Figure 5: :guilabel:`Choose an Instance Type` + + Select the :guilabel:`t2.micro` type by clicking the box on the left side + of the instance and then select the :guilabel:`Review and Launch` button to + move to the :guilabel:`Step 7: Review the Instance Launch` menu. + + .. note:: + + You can configure the instance details, add additional storage, add + tags, and configure the security group before selecting the + :guilabel:`Review and Launch` button if you want to further customize + this |CL| instance. + +#. The :guilabel:`Step 7: Review the Instance Launch` menu, shown in figure 6, + allows you to + :guilabel:`Cancel` the process, return to the :guilabel:`Previous` screen + to change the configuration or :guilabel:`Launch` the instance defined. + + .. figure:: figures/aws-web-6.png + :scale: 50 % + :alt: Step 7: Review the Instance Launch + + Figure 6: :guilabel:`Step 7: Review the Instance Launch` + + #. Select the :guilabel:`Launch` button. A dialog box appears, as shown in + figure 7, asking you to + :guilabel:`Select an existing key pair or create a new pair`. + + .. figure:: figures/aws-web-7.png + :scale: 50 % + :alt: Select an existing key pair or create a new pair + + Figure 7: :guilabel:`Select an existing key pair or create a new pair` + + #. Select the :guilabel:`Create a new key pair` option. + + #. For the :guilabel:`Key pair name` field, enter `AWSClearTestKey`. + + #. Select the :guilabel:`Download Key Pair` button to download the + :file:`AWSClearTestKey.pem` to your browser's defined + :file:`Downloads` directory. + + #. When the file finishes downloading, select the + :guilabel:`Launch Instances` button to proceed to the + :guilabel:`Launch Status` menu shown in figure 8. + + .. figure:: figures/aws-web-8.png + :scale: 50 % + :alt: Launch Status + + Figure 8: :guilabel:`Launch Status` + + #. Once the :guilabel:`Launch Status` page changes to what is shown in + figure 9, select the :guilabel:`View Instances` button to view your + :guilabel:`Instances` dashboard. + + .. figure:: figures/aws-web-9.png + :scale: 50 % + :alt: View Instance + + Figure 9: :guilabel:`View Instance` + +Connect to your Clear Linux OS Basic instance +********************************************* + +Your :guilabel:`Instances` Dashboard is shown in figure 10 with the new |CL| +OS basic instance already selected and in the running state. If there are +other instances available, they are also listed but not selected. + +.. figure:: figures/aws-web-10.png + :scale: 50 % + :alt: Instance Dashboard + + Figure 10: :guilabel:`Instance Dashboard` + +#. To connect to your running instance, click the :guilabel:`Connect` button + located at the top of your dashboard. AWS brings up the pop-up dialog + box shown in figure 11 describing how to connect to your running instance. + +.. _fig-aws-web-11: + +.. figure:: figures/aws-web-11.png + :scale: 50 % + :alt: Connect to Your Instance + + Figure 11: :guilabel:`Connect to Your Instance` + +#. Open a terminal on your system. You should be in your :file:`$HOME` + directory. + +#. Copy the previously downloaded keyfile from the :file:`Downloads` + directory to the current directory. + + .. code-block:: console + + cp Downloads/AWSClearTestKey.pem . + +#. Change the attributes of the :file:`AWSClearTestKey.pem` using the + :command:`chmod` command as instructed in the dialog box shown in figure + 11. + + .. code-block:: console + + chmod 400 AWSClearTestKey.pem + +#. Copy the text highlighted in the :guilabel:`Example:` section that is + shown in :ref:`figure 11`. Paste the copied text into your + terminal, change the text before the `@` sign to the username `clear`, and + press the :kbd:`Enter` key to execute the command. + + .. code-block:: console + + ssh -i "AWSClearTestKey.pem" clear@ec2-34-209-39-184.us-west-2.compute.amazonaws.com + +#. A message appears on the terminal stating the authenticity of the host can't + be established and prompts you with the message: + + .. code-block:: console + + The authenticity of host 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com (34.209.39.184)' can't be established. + ECDSA key fingerprint is SHA256:LrziT5Ar66iBTfia8qmiIsrfBUm/UGam76U8bDR6yJc. + Are you sure you want to continue connecting (yes/no)? + +#. Type `yes` and hit the :kbd:`Enter` key. Another warning is printed to the + terminal and you are now at the command prompt of your new |CL| instance. + + .. code-block:: console + + Warning: Permanently added 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com,34.209.39.184' (ECDSA) to the list of known hosts. + clear@clr-96a8565d0ca54b0c80364a1e5e7b0f88 ~ $ + +Update the |CL| instance +************************ + +Run the :command:`sudo swupd update` command to update the operating +system as shown in figure 12: + +.. figure:: figures/aws-web-12.png + :scale: 50 % + :alt: sudo swupd update + + Figure 12: :guilabel:`sudo swupd update` + +In this example we updated from version 18940 to 19100. + +Stop the |CL| instance +********************** + +When you are finished using your AWS |CL| instance you need to stop it using +the :guilabel:`Instances` dashboard to stop accruing charges. Complete the +following steps from the :guilabel:`Instances` dashboard to stop your AWS |CL| +instance from running. + +#. Select the :guilabel:`Actions` button to bring up a pull-down menu. + +#. Select the :guilabel:`Instance State` menu item to expand the options. + +#. Select :guilabel:`Stop` menu item to shut down the running instance. + + Figure 13 illustrates these steps. + + .. figure:: figures/aws-web-13.png + :scale: 50 % + :alt: Stop Instance + + Figure 13: :guilabel:`Stop Instance` + +#. A pop-up dialog box appears warning you that any ephemeral storage of + your instance will be lost. Select the :guilabel:`Yes, Stop` button to stop + your |CL| instance. + +.. figure:: figures/aws-web-14.png + :scale: 50 % + :alt: Stop Instances + + Figure 14: :guilabel:`Stop Instances` + +Congratulations! You are up and running with |CL| on AWS. To see what you +can do with your |CL| instance, visit our :ref:`tutorials ` +section for examples on using your |CL| system. diff --git a/_sources/tutorials/azure.rst.txt b/_sources/tutorials/azure.rst.txt new file mode 100644 index 00000000..82f3f319 --- /dev/null +++ b/_sources/tutorials/azure.rst.txt @@ -0,0 +1,544 @@ +.. _azure: + +Run |CL-ATTR| using Microsoft Azure CLI 2.0 +########################################### + +|CL-ATTR| is available for you to use in the Microsoft* Azure* marketplace and +is offered with three different images, also known as a +:abbr:`SKU (Stock Keeping Unit)`. + +* |CL| Basic - This SKU consists of a bare-bones system which can be used as a + starting point for those wanting to explore and build out a system with + additional software bundles of their choosing. + +* |CL| Containers - This SKU comes with the containers-basic software bundle + already installed. + +* |CL| Machine-learning - This SKU comes pre-loaded with popular open source + tools for developing machine learning applications. + +You can access these images directly from your MS Azure dashboard through the +`Azure portal`_ or by using the MS Azure :abbr:`CLI (Command Line Interface)` +2.0. If you do not already have an account set up with MS Azure, you can sign +up for a `MS Azure free account`_ to access the |CL| +:abbr:`VM(Virtual Machine)` images. + +The Azure CLI offers the ability to create and manage resources in MS Azure +from the command line. In this tutorial you learn to: + +#. Install the latest MS Azure CLI on your |CL| machine. + +#. Log into MS Azure using the CLI 2.0 interface. + +#. Create a MS Azure resource group. + +#. Locate the |CL| images. + +#. Create and log into the |CL| virtual machine. + +#. Stop and deallocate the |CL| VM and resources. + +To use the MS Azure CLI 2.0 on your |CL| system, your system must have the +following packages installed: + +* Python 2.7 or later + +* libffi + +* OpenSSL 1.0.2 + +You can check to see what versions you have installed on your system by +running the individual commands as follows: + +.. code-block:: bash + + python --version + +.. code-block:: console + + python 2.7.12 + +.. code-block:: bash + + openssl version + +.. code-block:: console + + OpenSSL 1.0.2n 7 Dec 2017 + +.. code-block:: bash + + ls -l /usr/lib64/libffi* + +.. code-block:: console + + lrwxrwxrwx 1 root root 15 Jan 12 2017 /usr/lib64/libffi.so.6 -> libffi.so.6.0.4 + -rwxr-xr-x 1 root root 38792 Jan 12 2017 /usr/lib64/libffi.so.6.0.4 + +If you do not have these packages installed on your |CL| system, install the +sysadmin-basic software bundle using the :command:`swupd` command: + +.. code-block:: bash + + sudo swupd bundle-add sysadmin-basic + +.. note:: + + These instructions are for installing the MS Azure CLI 2.0 tools on a |CL| + system. If you are installing the CLI on another platform, follow the + instructions in the `MS Azure Install Azure CLI tutorial`_ for your + specific operating system. + +Install MS Azure CLI 2.0 on |CL| +******************************** + +#. To install the MS Azure CLI 2.0 on |CL|, use the :command:`curl` command as + follows: + + .. code-block:: bash + + curl -L https://aka.ms/InstallAzureCli | bash + + If you get an error message from :command:`curl` related to the -L + parameter or an error message is generated that includes the text "Object + Moved", use the full URL instead of the aka.ms redirect address: + + .. code-block:: bash + + curl https://azurecliprod.blob.core.windows.net/install | bash + +#. The installation script begins and prompts you several times during + execution for information. + + .. note:: + + The console output from the script displays your username instead of the + **[user]** variable shown on this tutorial. + + .. code-block:: console + + ===> In what directory would you like to place the install? (leave blank to use '/home/[user]/lib/azure-cli'): + + Press the :kbd:`Enter` key to accept the default or you can chose another + directory to install the MS Azure CLI 2.0 tools into. + + .. code-block:: console + + ===> In what directory would you like to place the 'az' executable? (leave blank to use '/home/[user]/bin'): + + Press the :kbd:`Enter` key to accept the default or you can chose another + directory to install the :command:`az` executable in. + +#. The installation downloads and builds all required tools and when complete + prompts you with: + + .. code-block:: console + + ===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): Y + + Type :kbd:`Y` and press the :kbd:`Enter` key to allow this modification. + + .. code-block:: console + + ===> Enter a path to an rc file to update (leave blank to use '/home/[user]/.bashrc'): + + Press the :kbd:`Enter` key to accept the default or enter the pathname to + your :file:`.bashrc` file. The installation completes with the final output + shown below: + + .. code-block:: console + + -- Backed up '/home/[user].bashrc' to '/home/[user]/.bashrc.backup' + -- Tab completion set up complete. + -- If tab completion is not activated, verify that '/home/[user]/.bashrc' is sourced by your shell. + -- + -- ** Run `exec -l $SHELL` to restart your shell. ** + -- + -- Installation successful. + -- Run the CLI with /home/[user]/bin/az --help + +#. The installation program finishes and you must restart your shell for + the changes to take effect. When the installation is successful, run the + following command to restart your shell. + + .. code-block:: bash + + exec -l $SHELL + +With the MS Azure CLI 2.0 executable successfully built and installed, run +the :command:`az` command. + +.. code-block:: bash + + az + +The output from the :command:`az` command is shown below: + +.. code-block:: console + + + /\ + / \ _____ _ _ __ ___ + / /\ \ |_ / | | | \'__/ _ \ + / ____ \ / /| |_| | | | __/ + /_/ \_\/___|\__,_|_| \___| + + + Welcome to the cool new Azure CLI! + + Here are the base commands: + + account : Manage Azure subscription information. + acr : Manage Azure Container Registries. + acs : Manage Azure Container Services. + ad : Synchronize on-premises directories and manage Azure Active Directory + resources. + advisor : (PREVIEW) Manage Azure Advisor. + aks : Manage Kubernetes clusters. + appservice : Manage App Service plans. + backup : Commands to manage Azure Backups. + batch : Manage Azure Batch. + batchai : Batch AI. + billing : Manage Azure Billing. + cdn : Manage Azure Content Delivery Networks (CDNs). + cloud : Manage registered Azure clouds. + cognitiveservices: Manage Azure Cognitive Services accounts. + configure : Display and manage the Azure CLI 2.0 configuration. This command is + interactive. + consumption : Manage consumption of Azure resources. + container : (PREVIEW) Manage Azure Container Instances. + cosmosdb : Manage Azure Cosmos DB database accounts. + disk : Manage Azure Managed Disks. + dla : (PREVIEW) Manage Data Lake Analytics accounts, jobs, and catalogs. + dls : (PREVIEW) Manage Data Lake Store accounts and filesystems. + eventgrid : Manage Azure Event Grid topics and subscriptions. + extension : Manage and update CLI extensions. + feature : Manage resource provider features. + feedback : Loving or hating the CLI? Let us know! + find : Find Azure CLI commands. + functionapp : Manage function apps. + group : Manage resource groups and template deployments. + image : Manage custom virtual machine images. + interactive : Start interactive mode. + iot : (PREVIEW) Manage Internet of Things (IoT) assets. + keyvault : Safeguard and maintain control of keys, secrets, and certificates. + lab : Manage Azure DevTest Labs. + lock : Manage Azure locks. + login : Log in to Azure. + logout : Log out to remove access to Azure subscriptions. + managedapp : Manage template solutions provided and maintained by Independent Software + Vendors (ISVs). + monitor : Manage the Azure Monitor Service. + mysql : Manage Azure Database for MySQL servers. + network : Manage Azure Network resources. + policy : Manage resource policies. + postgres : Manage Azure Database for PostgreSQL servers. + provider : Manage resource providers. + redis : Access to a secure, dedicated Redis cache for your Azure applications. + reservations : Manage Azure Reservations. + resource : Manage Azure resources. + role : Manage user roles for access control with Azure Active Directory and service + principals. + sf : Manage and administer Azure Service Fabric clusters. + snapshot : Manage point-in-time copies of managed disks, native blobs, or other + snapshots. + sql : Manage Azure SQL Databases and Data Warehouses. + storage : Manage Azure Cloud Storage resources. + tag : Manage resource tags. + vm : Provision Linux or Windows virtual machines. + vmss : Manage groupings of virtual machines in an Azure Virtual Machine Scale Set + (VMSS). + webapp : Manage web apps. + +Log into your Microsoft Azure account +************************************* + +#. With the :command:`az` command properly installed and functional, login to + your MS Azure account using the :command:`az login` command shown below: + + .. code-block:: bash + + az login + + The output from this command is: + + .. code-block:: console + + To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code BQ9MG442B to authenticate. + +#. Open your browser and enter the page `https://aka.ms/devicelogin` as shown + in figure 1: + + .. figure:: azure/figures/azure-1.png + :scale: 50 % + :alt: Microsoft Device Login + + Figure 1: :guilabel:`Microsoft Device Login` + +#. Enter the code `BQ9MG442B` to authenticate your device as shown in figure + 2. The code `BQ9MG442B` is a random authentication code generated for each + session login and will be different each time you log into MS Azure using + the :command:`az login` command. + + .. figure:: azure/figures/azure-2.png + :scale: 50 % + :alt: Microsoft Device Login - Azure CLI + + Figure 2: :guilabel:`Microsoft Device Login - Azure CLI` + +#. Once you enter the authentication code, the website changes to a screen to + enter your existing Microsoft Azure credentials. + +#. Log in with your existing MS Azure account credentials. Once complete, the + browser screen changes again as shown in figure 3. The screen shows you + have signed into the Microsoft Cross-platform Command Line Interface + application on your device and you can close the window. + + .. figure:: azure/figures/azure-3.png + :scale: 50 % + :alt: Microsoft Azure Cross-platform CLI + + Figure 3: :guilabel:`Microsoft Azure Cross-platform CLI` + +The MS Azure CLI 2.0 interface is now active using your existing MS Azure +account credentials. + +Create a MS Azure resource group +******************************** + +To learn more about MS Azure resource groups, visit the +`Azure Resource Manager overview`_ for an overview and detailed description +of resources within MS Azure. + +#. To create our new resource group, run the :command:`az group create ...` + command shown below to create a resource group named `ClearResourceGroup` + using the `-n` parameter and locate it in the `westus` region using the + `-l` parameter. + + .. code-block:: bash + + az group create -n ClearResourceGroup -l westus + +#. When the command has completed, the output from this command is similar to + the following: + + .. code-block:: console + + { + "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup", + "location": "westus", + "managedBy": null, + "name": "ClearResourceGroup", + "properties": { + "provisioningState": "Succeeded" + }, + "tags": null + } + +Create and log into the |CL| virtual machine +******************************************** + +For this tutorial, we are using the |CL| Basic SKU for our VM. + +#. To locate the available |CL| Basic VM SKU images in the MS Azure + marketplace, run the :command:`az vm image ...` command: + + .. code-block:: bash + + az vm image list --offer clear-linux --sku basic --all --output table + + This command may take some time to finish. The output lists all available + |CL| Basic images available in the Microsoft Azure marketplace as shown + below: + + .. code-block:: console + + Offer Publisher Sku Urn Version + -------------- ------------------- ---------------- ------------------------------------------------------------- --------- + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:15780.0.0 15780.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:15960.0.0 15960.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16050.0.0 16050.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16150.0.0 16150.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16500.0.0 16500.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16810.0.0 16810.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:18080.0.0 18080.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:18620.0.0 18620.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:18860.0.0 18860.0.0 + + .. note:: + + The output list shows current offerings. New versions are added to the + MS Azure marketplace all the time. To reference the latest version of an + image, you can use the version label `latest` when specifying an image. + +#. The information shown in the `Urn` column lists the + `Publisher:Offer:Sku:Version` for each image available and this is the + information we want to create the |CL| Basic VM. Since we are creating a + |CL| Basic VM, highlight the `clear-linux-project:clear-linux-os:basic:` + string and copy it to your clipboard. Use the label + `latest` instead of referencing a specific version. + +#. Create the new |CL| Basic VM. Run the :command:`az vm create ...` + command using the URN `:clear-linux-project:clear-linux-os:basic:latest` + that we copied to the clipboard on the previous step. + + .. code-block:: bash + + az vm create --resource-group ClearResourceGroup --name ClearVM --image clear-linux-project:clear-linux-os:basic:latest --generate-ssh-keys + + .. note:: + + If you have already defined your public/private SSH key pair and they + are stored in your :file:`$HOME/.ssh` directory, you do not need to + include the *--generate-ssh-keys* option. + + Your output from this command will look similar to this output, where + [user] is your user name: + + .. code-block:: console + + SSH key files '/home/[user]/.ssh/id_rsa' and '/home/[user]/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage, back up your keys to a safe location. + + running... + + { + "fqdns": "", + "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup/providers/Microsoft.Compute/virtualMachines/ClearVM", + "location": "westus", + "macAddress": "00-0D-3A-37-C7-59", + "powerState": "VM running", + "privateIpAddress": "10.0.0.4", + "publicIpAddress": "13.91.4.245", + "resourceGroup": "ClearResourceGroup", + "zones": "" + } + + Take note of the public IP address from the output. + +#. Login into the new |CL| Basic VM, run the :command:`ssh` command with the + public IP address obtained from the previous step as shown: + + .. code-block:: bash + + ssh [user]@13.91.4.245 + + You may see the following message about the authenticity of the host. If + this appears, type `yes` to proceed connecting to your new |CL| VM. + + .. code-block:: console + + The authenticity of host '13.91.4.245 (13.91.4.245)' can't be established. + RSA key fingerprint is SHA256:{unique-number}. + Are you sure you want to continue connecting (yes/no)? yes + Warning: Permanently added '13.91.4.245' (RSA) to the list of known hosts. + + [user]@ClearVM ~ $ + + You are now logged into your new |CL| VM as [user], where [user] is your + user name. To check which software bundles are included with + this VM image, run the :command:`sudo swupd bundle-list` command inside the VM: + + .. code-block:: bash + + sudo swupd bundle-list + + The output shown should be similar to: + + .. code-block:: console + + swupd-client bundle list 3.14.1 + Copyright (C) 2012-2017 Intel Corporation + + bootloader + editors + kernel-hyperv + network-basic + openssh-server + os-cloudguest-azure + os-core + os-core-update + perl-basic + python-basic + python3-basic + storage-utils + sysadmin-basic + Current OS version: 19600 + + When you are finished using your new |CL| VM, type :command:`exit` to close + the :command:`SSH` terminal and logout. + +Stop and deallocate the |CL| VM and resources +********************************************* + +When you finish using your new |CL| instance, you must stop the VM and +deallocate the resources in your resource group. If you only stop a VM, the OS +image shuts down but the resources associated with it in your resource group +remain allocated and incurring charges. For instance, if you stop and then +later start the VM using the :command:`az vm start...` without deallocating +the resources, the IP address is retained and you can access the VM using that +same IP address. To release the resources associated with the VM and stop +incurring charges for them, you must deallocate the resources as well. + +#. At the command prompt, enter the :command:`az vm stop...` command as + follows: + + .. code-block:: bash + + az vm stop --resource-group ClearResourceGroup --name ClearVM + + This will stop the VM and then output text similar to: + + .. code-block:: console + + { + "endTime": "2017-12-13T23:04:02.346676+00:00", + "error": null, + "name": "{unique-name}", + "startTime": "2017-12-13T23:03:59.018536+00:00", + "status": "Succeeded" + } + +#. Once the VM stops, deallocate the VM resources to stop incurring + charges for the |CL| instance. Enter the following command: + + .. code-block:: console + + az vm deallocate --resource-group ClearResourceGroup --name ClearVM + +**Congratulations!** + +You are up and running with |CL| on MS Azure using the Azure +CLI 2.0 command line tools. + +Next steps +********** + +To see use cases you can fulfill with your |CL| instance, visit our +:ref:`tutorials ` section. + +For additional information visit the |CL| +`Azure Partner Mini Case Study`_ and the `Azure Partner Datasheet`_. + +To learn more about the MS Azure CLI 2.0 tool and options that are available, +visit the `MS Azure documentation and tutorials`_ website. + +.. _`Azure Portal`: + https://portal.azure.com + +.. _`MS Azure free account`: + https://azure.microsoft.com/en-us/free/ + +.. _`MS Azure documentation and tutorials`: + https://docs.microsoft.com/en-us/cli/azure/overview?view=azure-cli-latest + +.. _`MS Azure Install Azure CLI tutorial`: + https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest + +.. _`Azure Resource Manager overview`: + https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview + +.. _Azure Partner Datasheet: + http://download.microsoft.com/download/D/9/E/D9E22342-96D9-4455-BB15-99A1AF514DDD/Microsoft%20Azure%20Partner%20Datasheet%20-%20Intel%20Clear%20Linux.pdf + +.. _Azure Partner Mini Case Study: + http://download.microsoft.com/download/D/9/E/D9E22342-96D9-4455-BB15-99A1AF514DDD/Microsoft%20Azure%20Partner%20Mini%20Case%20Study%20-%20Intel%20Clear%20Linux.pdf diff --git a/_sources/tutorials/docker/docker.rst.txt b/_sources/tutorials/docker/docker.rst.txt new file mode 100644 index 00000000..2c885f77 --- /dev/null +++ b/_sources/tutorials/docker/docker.rst.txt @@ -0,0 +1,244 @@ +.. _docker: + +Run Docker\* on |CL-ATTR| +######################### + +|CL-ATTR| supports multiple containerization platforms, including a Docker +solution. |CL| has many unique features including a minimal default +installation, which makes it compelling to use as a host for container +workloads, management, and orchestration. + +This tutorial covers: + +.. contents:: :local: + :depth: 1 + +.. note:: + + This tutorial focuses on the installaton of the Docker ecosystem. + If you want to use |CL| as a Docker container image, refer to the + official |CL| container image + `published on Docker* Hub `_ + and our guide to :ref:`custom-clear-container`. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, follow +the :ref:`bare metal installation instructions`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Additionally, you should have: + +* A basic understanding of Linux\* and Docker. + +* |CL| environment that has transparent network access to the Internet. + If you are behind a HTTP proxy server, in a corporate setting for example, + please refer to the `Docker proxy instructions`_ . + +Install the containers-basic bundle +*********************************** + +Software in |CL| is offered in the form of `bundles`_ to provide a +complete function. The *containers-basic* provides all the required software +packages to run Docker images as containers. + +#. First, install the *containers-basic* bundle by running this + :command:`swupd` command: + + .. code-block:: bash + + sudo swupd bundle-add containers-basic + +#. Start the Docker daemon through systemd manager by running this command: + + .. code-block:: bash + + sudo systemctl start docker + + If you want Docker to start automatically on boot, enable the + systemd service by running this command: + + .. code-block:: bash + + sudo systemctl enable docker + +#. Finally, verify :command:`docker` has been installed by running this + command and checking the version output for both *client* and *server*: + + .. code-block:: bash + + sudo docker version + +Congratulations! At this point, you have a working installation of Docker +on |CL|. You are ready to start using container images on your system. + +Integration with Kata Containers\* (optional) +********************************************* + +`Kata Containers`_, is an open source project aiming to increase security +of containers by using a hardware-backed virtual machine container runtime +rather than software namespace containers that are provided by the standard +Docker *runc* runtime. + +|CL| provides easy integration of the *kata-runtime* with Docker. +More information on installing and using the *kata-runtime* may be found at :ref:`kata`. + + +.. note:: + + The remaining sections of this tutorial are standard to Docker setup + and configuration. If you are familiar with Docker basics, you do not + need to continue reading. The following sections are provided here for + sake of completeness. + +.. _additional-docker-configuration: + +Additional Docker configuration +******************************* + +Perform additional Docker daemon configuration via a configuration file +typically located at :file:`/etc/docker/daemon.json`. |CL| features a +:ref:`stateless` system so the configuration file :file:`daemon.json` does +*NOT* exist by default. + +#. Create the :file:`daemon.json` by running this command: + + .. code-block:: bash + + sudo touch /etc/docker/daemon.json + + .. note:: + + Refer to the `Docker documentation on daemon configuration`_ for the + full list of available configuration options and examples. + +#. For production systems, we follow Docker's recommendation to use the + `OverlayFS storage driver`_ `overlay2`, shown below: + + .. code-block:: json + + { + "storage-driver": "overlay2" + } + + .. note:: + + A testing version is found in `Docker Device Mapper storage driver`_. + If using this storage driver, a warning message may appear: "usage of + loopback devices is strongly discouraged for production use". + +#. Save and close :file:`daemon.json`. + +#. Once you've made any required changes, be sure to restart the + Docker daemon through systemd manager by running this command: + + .. code-block:: bash + + sudo systemctl restart docker + +Pulling and running an image from Docker Hub +******************************************** + +`Docker Hub`_ is a publically available container image repository which +comes preconfigured with Docker. In the example below we will pull and run +an the official Docker image for nginx\*, an open source reverse proxy server. + +#. First, pull a container image from Docker Hub using the + :command:`docker pull` command. Download the latest nginx\* Docker + container image by running this command: + + .. code-block:: bash + + sudo docker pull nginx + +#. Create and launch a new container using the :command:`docker run` + command. Launch a nginx container by running this command: + + .. code-block:: bash + + sudo docker run --name test-nginx -d -p 8080:80 nginx + + .. note:: + + Below is an explanation of switches used in the command above. For + detailed :command:`docker run` switches and syntax, refer to the + `Docker Documentation`_ . + + * The *--name* switch lets you provide a friendly name to + target the container for future operations + + * The *-d* switch launches the container in the background + + * The *-p* switch allows the container's HTTP port (80) to be + accessible from the |CL| host on port 8080 + +#. You can access the Welcome to Nginx! splash page running in the container + by browsing to \http://127.0.0.1:8080 or by running this :command:`curl` + command from your |CL| machine: + + .. code-block:: bash + + curl 127.0.0.1:8080 + +#. Finally, stop and delete the nginx container by running the + :command:`docker stop` and :command:`docker rm` commands. + + .. code-block:: bash + + sudo docker stop test-nginx + sudo docker rm test-nginx + +Congratulations! At this point, you have successfully pulled a nginx +container image from `Docker Hub`_ and have run an example container. + +Creating a Docker swarm cluster +******************************* + +Clusters of Docker hosts are referred to as *swarms*. + +The process in this tutorial can be repeated to install Docker on multiple +|CL| hosts with the intent to form a Docker swarm cluster. + +The `Docker documentation on swarm key concepts`_ and +`Docker documentation on creating a swarm`_ can be referenced +for further instructions on setting up a swarm. + +Related topics +************** + +* `Docker Home`_ +* `Docker Documentation`_ +* `Docker Hub`_ +* `Kata Containers`_ + + +.. _Docker proxy instructions: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy + +.. _bundles: https://clearlinux.org/documentation/clear-linux/concepts/bundles-about#related-concepts + +.. _Docker documentation on daemon configuration: https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file + +.. _Kata Containers: https://katacontainers.io/ + +.. _Docker Home: https://www.docker.com/ + +.. _Docker Documentation: https://docs.docker.com/ + +.. _Docker Hub: https://hub.docker.com/ + +.. _Docker documentation on swarm key concepts: https://docs.docker.com/engine/swarm/key-concepts/ + +.. _Docker documentation on creating a swarm: https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/ + +.. _Configure direct lvm mode for production: https://docs.docker.com/storage/storagedriver/device-mapper-driver/ + +.. _OverlayFS storage driver: https://docs.docker.com/storage/storagedriver/overlayfs-driver/ + +.. _Docker Device Mapper storage driver: https://docs.docker.com/storage/storagedriver/device-mapper-driver/ \ No newline at end of file diff --git a/_sources/tutorials/flatpak/flatpak.rst.txt b/_sources/tutorials/flatpak/flatpak.rst.txt new file mode 100644 index 00000000..1ca74e39 --- /dev/null +++ b/_sources/tutorials/flatpak/flatpak.rst.txt @@ -0,0 +1,103 @@ +.. _flatpak: + +Use Flatpak\* to install applications on |CL-ATTR| +################################################## + +This tutorial provides all the required steps to install Flatpak as well as +downloading, installing, and running LibreOffice\* on |CL-ATTR|. + +Please visit the `Flatpak website`_ for more information about Flatpak and +how to use it. You can also `download it here`_. + +Before you begin +**************** + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, visit +our :ref:`bare metal installation guide `. + +Install Flatpak on your host system +=================================== + +Flatpak is included as part of the bundle `desktop`. To install the +application, log in to your user account and enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add desktop + +Install and run the LibreOffice Flatpak image +============================================= + +Application developers have the option to bundle their applications using +Flatpak to allow the installation of a single distribution of their +application on different distributions of Linux, including |CL|. +Flatpak provides a `list of applications`_ available through Flathub. + +|CL| enables the Flathub repository by default. + + +Installing using gnome software +------------------------------- + +All you need to do is to launch `gnome software`, search for the LibreOffice +app, and click the install button. + +.. figure:: figures/01-install-libreoffice.gif + :alt: install libreoffice step by step + + Figure 1: Installing LibreOffice using gnome-software + + + +Installing using the command line +--------------------------------- + +Open the `gnome-terminal` and type the following command to install the +LibreOffice app. + +.. code-block:: bash + + flatpak install --user flathub org.libreoffice.LibreOffice + Installing in user: + org.libreoffice.LibreOffice/x86_64/stable flathub 2aff77bd5cf1 + permissions: ipc, network, pulseaudio, wayland, x11, dri + file access: host, xdg-run/dconf + dbus access: ca.desrt.dconf, org.gtk.vfs.* + dbus ownership: org.libreoffice.LibreOfficeIpc0 + org.libreoffice.LibreOffice.Locale/x86_64/stable flathub 924157b3b009 + Is this ok [y/n]: y + Installing for user: org.libreoffice.LibreOffice/x86_64/stable from flathub + [####################] 403 metadata, 4661 content objects fetched; 222574 KiB transferred in 99 seconds + Now at 2aff77bd5cf1. + Installing for user: org.libreoffice.LibreOffice.Locale/x86_64/stable from flathub + [####################] 10 metadata, 71 content objects fetched; 1013 KiB transferred in 3 seconds + Now at 924157b3b009. + + +Launch LibreOffice +================== +A new set of icons will appear in your Gnome applications list titled :guilabel:`LibreOffice.` To +execute the application, highlight the application and click on the :guilabel:`LibreOffice` icon. +LibreOffice will start normally. + +.. figure:: figures/02-openlibreoffice.gif + :alt: Opening LibreOffice app + + Figure 2: Select :guilabel:`LibreOffice` app + +Using the command line +---------------------- + +.. code-block:: bash + + flatpak run org.libreoffice.LibreOffice + + +.. _Flatpak website: http://flatpak.org + +.. _list of applications: http://flatpak.org/apps.html + +.. _download it here: + http://download.documentfoundation.org/libreoffice/flatpak/latest/LibreOffice.flatpak + diff --git a/_sources/tutorials/fmv.rst.txt b/_sources/tutorials/fmv.rst.txt new file mode 100644 index 00000000..2b31bde1 --- /dev/null +++ b/_sources/tutorials/fmv.rst.txt @@ -0,0 +1,273 @@ +.. _fmv: + +Use the function multi-version patch generator +############################################## + +CPU architectures often gain interesting new instructions as they evolve but +application developers find it difficult to take advantage of those +instructions. The reluctance to lose backward-compatibility is one of the +main roadblocks slowing developers from using advancements in newer computing +architectures. :abbr:`FMV (Function Multi-Versioning)`, which first appeared +in `GCC`_ 4.8, is a way to have multiple implementations of a function, each +using a different architecture specialized instruction-set extensions. GCC +6 introduces changes to FMV to make it even easier to bring architecture- +based optimizations to the application code. + +In this tutorial we will use FMV on general code and on +:abbr:`FFT (Fast Fourier Transform)` library code (FFTW). Upon completing the +tutorial, you will be able to use this technology on your code and use the +libraries to deploy architecture-based optimizations to your application code. + +Install and configure a |CL| host on bare metal +*********************************************** +First, follow our guide to :ref:`bare-metal-install-desktop`. Once the bare +metal installation and initial configuration are complete, add the +`desktop-dev` bundle to the system. `desktop-dev`: contains the necessary +development tools like GCC and Perl\*. + +To install the bundles, run the following command in the :file:`$HOME` +directory: + +.. code-block:: bash + + sudo swupd bundle-add desktop-dev + +Detect loop vectorization candidates +************************************ + +Now, we need to detect the loop vectorization candidates to be cloned for +multiple platforms with FMV. As an example, we will use the following +simple C code: + +.. code-block:: c + :linenos: + + #include + #include + #include + #define MAX 1000000 + + int a[256], b[256], c[256]; + + void foo(){ + int i,x; + for (x=0; x log + +To generate the patch files, execute: + +.. code-block:: bash + + perl ./make-fmv-patch/make-fmv-patch.pl log . + +The :file:`make-fmv-patch.pl` script takes two arguments: `` and +``. Replace `` and `` with the proper +values and execute: + +.. code-block:: bash + + perl make-fmv-patch.pl + +The command generates the following :file:`example.c.patch` patch: + +.. code-block:: console + + --- ./example.c 2017-09-27 16:05:42.279505430 +0000 + +++ ./example.c~ 2017-09-27 16:19:11.691544026 +0000 + @@ -5,6 +5,7 @@ + + int a[256], b[256], c[256]; + + +__attribute__((target_clones("avx2","arch=atom","default"))) + void foo(){ + int i,x; + for (x=0; x + #include + #include + #define MAX 1000000 + + int a[256], b[256], c[256]; + + __attribute__((target_clones("avx2","arch=atom","default"))) + void foo(){ + int i,x; + for (x=0; x y) ? x : y; } + + +__attribute__((target_clones("avx2","arch=atom","default"))) + static double aerror(C *a, C *b, int n) + { + if (n > 0) { + @@ -111,6 +112,7 @@ + } + + /* make array hermitian */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void mkhermitian(C *A, int rank, const bench_iodim *dim, int stride) + { + if (rank == 0) + @@ -148,6 +150,7 @@ + } + + /* C = A + B */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void aadd(C *c, C *a, C *b, int n) + { + int i; + @@ -159,6 +162,7 @@ + } + + /* C = A - B */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void asub(C *c, C *a, C *b, int n) + { + int i; + @@ -170,6 +174,7 @@ + } + + /* B = rotate left A (complex) */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void arol(C *b, C *a, int n, int nb, int na) + { + int i, ib, ia; + @@ -192,6 +197,7 @@ + } + } + +With these patches, we can select where to apply the FMV technology making +bringing architecture-based optimizations to application code even easier. + +**Congratulations!** + +You have successfully installed an FMV development environment on |CL|. +Furthermore, you used cutting edge compiler technology to improve the +performance of your application based on Intel Architecture technology and +profiling of the specific execution of your application. + +.. _GCC: https://gcc.gnu.org +.. _make-fmv-patch: https://github.com/clearlinux/make-fmv-patch diff --git a/_sources/tutorials/hadoop.rst.txt b/_sources/tutorials/hadoop.rst.txt new file mode 100644 index 00000000..633c84d5 --- /dev/null +++ b/_sources/tutorials/hadoop.rst.txt @@ -0,0 +1,256 @@ +.. _hadoop: + +Set up a single node cluster with Hadoop\* +########################################## + +This tutorial walks you through the process of installing, configuring, and +running Apache\* Hadoop on |CL-ATTR|. The Apache Hadoop software library is a +framework for distributed processing of large data sets across clusters of +computers using simple programming models. It is designed to scale up from +single servers to thousands of machines, with each machine offering local +computation and storage. + +Prerequisites +************* + +Before following this tutorial, you should follow the +:ref:`bare-metal-install-desktop` to ensure you have installed |CL|. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +For the purposes of this tutorial, we will install Hadoop in a single machine +running both the master and slave daemons. + +Install Apache Hadoop +********************* + +Apache Hadoop is included in the `big-data-basic` bundle. To install the +framework, enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add big-data-basic + +Configure Apache Hadoop +*********************** + +#. To create the configuration directory, enter the following command: + + .. code-block:: bash + + sudo mkdir /etc/hadoop + +#. Copy the defaults from :file:`/usr/share/defaults/hadoop` to + :file:`/etc/hadoop` with the following command: + + .. code-block:: bash + + $ sudo cp /usr/share/defaults/hadoop/* /etc/hadoop + + .. note:: Since |CL| is a stateless system, you should never modify the + files under the :file:`/usr/share/defaults` directory. The software + updater will overwrite those files. + +Once all the configuration files are in :file:`/etc/hadoop`, we must edit +them to fit our needs. The `NameNode` server is the master server. It manages +the namespace of the files system and regulates the clients' access to files. +The first file we edit, :file:`/etc/hadoop/core-site.xml`, informs the Hadoop +daemon where `NameNode` is running. + +In this tutorial, our `NameNode` runs in our `localhost`. Follow these steps +to set it up correctly: + +#. Open the :file:`/etc/hadoop/core-site.xml` file using the editor of your + choice and modify the file as follows: + + .. code-block:: xml + + + + + + fs.default.name + hdfs://localhost:9000 + + + +#. Edit the :file:`/etc/hadoop/hdfs-site.xml` file. This file configures the + :abbr:`HDFS (Hadoop Distributed File System)` daemons. This configuration + includes the list of permitted and excluded data nodes and the size of + said blocks. In this example, we are setting the number of block + replication to 1 from the default of 3 as follows: + + .. code-block:: xml + :emphasize-lines: 6 + + + + + + dfs.replication + 1 + + + dfs.permission + false + + + +#. Edit the :file:`/etc/hadoop/mapred-site.xml` file. This file configures + all daemons related to `MapReduce`: `JobTracker` and `TaskTrackers`. With + `MapReduce`, Hadoop can process big amounts of data in multiple systems. In + our example, we set :abbr:`YARN (Yet Another Resource Manager)` as our + runtime framework for executing `MapReduce` jobs as follows: + + .. code-block:: xml + :emphasize-lines: 5,6 + + + + + + mapreduce.framework.name + yarn + + + +#. Edit the :file:`/etc/hadoop/yarn-site.xml` file. This file configures all + daemons related to `YARN`: `ResourceManager` and `NodeManager`. In our + example, we implement the `mapreduce_shuffle` service, which is the + default as follows: + + .. code-block:: xml + :emphasize-lines: 4,5,8,9 + + + + + yarn.nodemanager.aux-services + mapreduce_shuffle + + + yarn.nodemanager.auxservices.mapreduce.shuffle.class + org.apache.hadoop.mapred.ShuffleHandler + + + +Configure your SSH key +********************** + +#. Create a SSH key. If you already have one, skip this step. + + .. code-block:: bash + + sudo ssh-keygen -t rsa + + +#. Copy the key to your authorized keys. + + .. code-block:: bash + + sudo cat /root/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys + +#. Log into the localhost. If no password prompt appears, you are ready to + run the Hadoop daemons. + + .. code-block:: bash + + sudo ssh localhost + +Run the Hadoop daemons +********************** + +With all the configuration files properly edited, we are ready to start the +daemons. + +When we format the `NameNode` server, it formats the meta-data related to +data nodes. Thus, all the information on the data nodes is lost and the nodes +can be reused for new data. + +#. Format the `NameNode` server with the following command: + + .. code-block:: bash + + sudo hdfs namenode -format + +#. Start the DFS in `NameNode` and `DataNodes` with the following command: + + .. code-block:: bash + + sudo start-dfs.sh + +#. The console output should be similar to: + + .. code-block:: console + + Starting namenodes on [localhost] + The authenticity of host 'localhost (::1)' can't be established. + ECDSA key fingerprint is + SHA256:97e+7TnomsS9W7GjFPjzY75HGBp+f1y6sA+ZFcOPIPU. + Are you sure you want to continue connecting (yes/no)? + + Enter `yes` to continue. + +#. Start the `YARN` daemons `ResourceManager` and `NodeManager` with the + following command: + + .. code-block:: bash + + sudo start-yarn.sh + +#. Ensure everything is running as expected with the following command: + + .. code-block:: bash + + sudo jps + +#. The console output should be similar to: + + .. code-block:: console + + 22674 DataNode + 26228 Jps + 22533 NameNode + 23046 ResourceManager + 22854 SecondaryNameNode + 23150 NodeManager + +Run the MapReduce wordcount example +*********************************** + +#. Create the input directory. + + .. code-block:: bash + + sudo hdfs dfs -mkdir -p /user/root/input + +#. Copy a file from the local file system to the HDFS. + + .. code-block:: bash + + sudo hdfs dfs -copyFromLocal local-file /user/root/input + +#. Run the `wordcount` example. + + .. code-block:: bash + + sudo hadoop jar /usr/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount input output + +#. Read output file "part-r-00000". This file contains the number of times + each word appears in the file. + + .. code-block:: bash + + sudo hdfs dfs -cat /user/root/output/part-r-00000 + +**Congratulations!** + +You successfully installed and setup a single node Hadoop cluster. +Additionally, you ran a simple wordcount example. + +Your single node Hadoop cluster is up and running! + diff --git a/_sources/tutorials/kata.rst.txt b/_sources/tutorials/kata.rst.txt new file mode 100644 index 00000000..cecd365e --- /dev/null +++ b/_sources/tutorials/kata.rst.txt @@ -0,0 +1,116 @@ + .. _kata: + +Install Kata Containers\* +######################### + +This tutorial describes how to install, configure, and run `Kata Containers`_ +on |CL-ATTR|. Kata Containers is an open source project developing a +lightweight implementation of :abbr:`VMs (Virtual Machines)` that offer the +speed of containers and the security of VMs. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, follow +the :ref:`bare metal installation tutorial`. + +If you have Clear Containers installed on your |CL| system, then follow the +:ref:`migrate Clear Containers to Kata Containers tutorial`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Install Kata Containers +*********************** + +Kata Containers is included in the :file:`containers-virt` bundle. +To install the framework, enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add containers-virt + +Restart the Docker\* and Kata Containers systemd services. + +.. code-block:: bash + + sudo systemctl daemon-reload + sudo systemctl restart docker + +Run Kata Containers +******************* + +.. code-block:: bash + + sudo docker run -ti busybox sh + +.. note:: + + If you use a proxy server and your proxy environment variables are already + set, run the following commands as a shell script to configure Docker: + + .. code-block:: bash + + docker_service_dir="/etc/systemd/system/docker.service.d/" + sudo mkdir -p "$docker_service_dir" + cat <`. +Learn about the benefits of having an up-to-date system for cloud +orchestration on the :ref:`swupd-about` page. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Install Kubernetes and CRI runtimes +*********************************** + +Kubernetes, a set of supported :abbr:`CRI (Container Runtime Interface)` +runtimes, and networking plugins, are included in the `cloud-native-basic`_ +bundle. + +To install this framework, enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add cloud-native-basic + +.. note:: + + For more on networking plugins, see `Install pod network add-on`_. + +Configure Kubernetes +******************** + +This tutorial uses the basic default Kubernetes configuration for simplicity. +You must define your Kubernetes configuration according to your specific +deployment and your security needs. + +#. Enable IP forwarding to avoid kubeadm `preflight check`_ errors: + + Create (or edit if it exists) the file :file:`/etc/sysctl.d/60-k8s.conf` + and include the following line: + + .. code-block:: bash + + net.ipv4.ip_forward = 1 + + Apply the change: + + .. code-block:: bash + + sudo systemctl restart systemd-sysctl + +#. Enable the kubelet service: + + .. code-block:: bash + + sudo systemctl enable kubelet.service + +#. Disable swap using one of the following methods, either: + + a) Temporarily: + + .. code-block:: bash + + sudo swapoff -a + + .. note:: + + Swap will be enabled at next reboot, causing failures in + your cluster. + + or: + + b) Permanently: + + Mask the swap partition: + + .. code-block:: bash + + sudo systemctl mask $(sed -n -e 's#^/dev/\([0-9a-z]*\).*#dev-\1.swap#p' /proc/swaps) 2>/dev/null + sudo swapoff -a + + .. note:: + + On systems with limited resources, some performance degradation may + be observed while swap is disabled. + +#. Switch to root to modify the `hosts` file: + + .. code-block:: bash + + sudo -s + +#. Create (or edit if it exists) the hosts file that Kubernetes will read to + locate the master's host: + + .. code-block:: bash + + echo "127.0.0.1 localhost `hostname`" >> /etc/hosts + +#. Exit root: + + .. code-block:: bash + + exit + +Configure and run Kubernetes +**************************** + +This section describes how to configure and run Kubernetes with CRI-O and +kata-runtime. + +Configure and run CRI-O + kata-runtime +====================================== + +#. Enable the CRI-O service: + + .. code-block:: bash + + sudo systemctl enable crio.service + +#. Enter the commands: + + .. code-block:: bash + + sudo systemctl daemon-reload + sudo systemctl restart crio + +#. Initialize the master control plane with the command below and follow the + displayed instructions to set up `kubectl`: + + .. code-block:: bash + + sudo kubeadm init --cri-socket=/run/crio/crio.sock + +#. Register kata-runtime as a RuntimeClass handler: + + .. code-block:: bash + + cat << EOF | kubectl apply -f - + kind: RuntimeClass + apiVersion: node.k8s.io/v1beta1 + metadata: + name: native + handler: runc + --- + kind: RuntimeClass + apiVersion: node.k8s.io/v1beta1 + metadata: + name: kata-containers + handler: kata + EOF + +Install pod network add-on +************************** + +You must choose and install a `pod network add-on`_ to allow your pods to +communicate. Check whether or not your add-on requires special flags when you +initialize the master control plane. + +**Notes about flannel add-on** + +If you choose the `flannel` add-on, then you must add the following to the +`kubeadm init` command: + +.. code-block:: bash + + --pod-network-cidr 10.244.0.0/16 + +Furthermore, if you are using CRI-O and `flannel` and you want to use +Kata Containers, edit the :file:`/etc/crio/crio.conf` file to add: + +.. code-block:: bash + + [crio.runtime] + manage_network_ns_lifecycle = true + +Use your cluster +**************** + +Once your master control plane is successfully initialized, instructions on +how to use your cluster and its *IP*, *token*, and *hash* values are +displayed. It is important that you record the cluster values because they +are needed when joining worker nodes to the cluster. Some values have a valid +period. The values are presented in a format similar to: + +.. code-block:: bash + + kubeadm join : --token --discovery-token-ca-cert-hash + +**Congratulations!** + +You've successfully installed and set up Kubernetes in |CL| using CRI-O and +kata-runtime. You are now ready to follow on-screen instructions to deploy a +pod network to the cluster and join worker nodes with the displayed token +and IP information. + +Related topics +************** + +Read the Kubernetes documentation to learn more about: + +* `Understanding basic Kubernetes architecture`_ + +* `Deploying an application to your cluster`_ + +* Installing a `pod network add-on`_ + +* `Joining your nodes`_ + +Cloud native setup automation (optional) +**************************************** + +Clone the `cloud-native-setup`_ repository on your system and follow the +instructions. This repository includes helper scripts to automate configuration. + +Package configuration customization (optional) +********************************************** + +|CL| is a stateless system that looks for user-defined package configuration +files in the :file:`/etc/` directory to be used as default. If +user-defined files are not found, |CL| uses the distribution-provided +configuration files for each package. + +If you customize any of the default package configuration files, you **must** +store the customized files in the :file:`/etc/` directory. If you edit any of +the distribution-provided default files, your changes will be lost in the +next system update. + +For example, to customize CRI-O configuration in your system, run the +following commands: + +.. code-block:: bash + + sudo mkdir /etc/crio + sudo cp /usr/share/defaults/crio/crio.conf /etc/crio/ + sudo $EDITOR /etc/crio/crio.conf + +Learn more about :ref:`stateless` in |CL| and view the |CL| `documentation`_. + +Proxy configuration (optional) +****************************** + +If you use a proxy server, you must set your proxy environment variables and +create an appropriate proxy configuration file for both CRI-O services. Consult your IT department if you are behind a corporate proxy for +the appropriate values. Ensure that your local IP is **explicitly included** +in the environment variable *NO_PROXY*. (Setting *localhost* is not enough.) + +If you have already set your proxy environment variables, run the following +commands as a shell script to configure all of these services in one step: + +.. code-block:: bash + + services=('crio') + for s in "${services[@]}"; do + sudo mkdir -p "/etc/systemd/system/${s}.service.d/" + cat << EOF | sudo tee "/etc/systemd/system/${s}.service.d/proxy.conf" + [Service] + Environment="HTTP_PROXY=${http_proxy}" + Environment="HTTPS_PROXY=${https_proxy}" + Environment="SOCKS_PROXY=${socks_proxy}" + Environment="NO_PROXY=${no_proxy}" + EOF + done + +Next steps +********** + +:ref:`kubernetes-bp` + + +Troubleshooting +*************** + +* not found in message. + + Your DNS server may not be appropriately configured. Try adding an + entry to the :file:`/etc/hosts` file with your host's IP and Name. + + For example: 100.200.50.20 myhost + + Use the commands :command:`hostname` and :command:`hostname -I` to retrieve them. + +* Images cannot be pulled. + + You may be behind a proxy server. Try configuring your proxy settings, + using the environment variables *HTTP_PROXY*, *HTTPS_PROXY*, and *NO_PROXY* + as required in your environment. + +* Connection refused error. + + If you are behind a proxy server, you may need to add the master's IP to + the environment variable *NO_PROXY*. + +* Connection timed-out or Access Refused errors. + + You must ensure that the appropriate proxy settings are available from the + same terminal where you will initialize the control plane. To verify the + proxy settings that Kubernetes will actually use, run the commands: + + .. code-block:: bash + + echo $HTTP_PROXY + echo $HTTPS_PROXY + echo $NO_PROXY + + If the displayed proxy values are different from your assigned values, the + cluster initialization will fail. Contact your IT support team to learn how + to set the proxy variables permanently, and how to make them available for + all the types of access that you will use, such as remote SSH access. + + If the result of the above commands is blank, you may need to add a + ``profile`` to the :file:`/etc` directory. To do so, follow these steps. + + #. Create a `profile` in :file:`/etc` + + .. code-block:: bash + + sudo touch profile + + #. With a preferred editor, open `profile`, and enter your proxy settings. + Example shown below. + + .. code-block:: bash + + export "HTTP_PROXY=http://proxy.example.com:443" + export "HTTPS_PROXY=http://proxy.example.com:445" + export "SOCKS_PROXY=http://proxy.example.com:1080" + export "NO_PROXY= site.com,.site.com,localhost,127.0.0.1, + + .. note:: + + can be obtained by running :command:`ifconfig`. + + #. Save and exit the `profile`. + + #. Run: + + .. code-block:: bash + + sudo source profile + + #. To ensure your system isn't running previous session variables, run: + + .. code-block:: bash + + sudo kubeadm reset --cri-socket=/run/crio/crio.sock + + #. Continue below while passing `-E` in the command as shown. + +* Missing environment variables. + + If you are behind a proxy server, pass environment variables by adding *-E* + to the command that initializes the master control plane. + + .. code-block:: bash + + /* Kubernetes with CRI-O + kata-runtime */ + sudo -E kubeadm init --cri-socket=/run/crio/crio.sock + +.. _Kubernetes container orchestration system: https://kubernetes.io/ + +.. _Kata Containers: https://katacontainers.io/ + +.. _Software Update documentation: https://clearlinux.org/documentation/clear-linux/concepts/swupd-about#updating + +.. _cloud-native-basic: https://github.com/clearlinux/clr-bundles/blob/master/bundles/cloud-native-basic + +.. _preflight check: https://kubernetes.io/docs/reference/setup-tools/kubeadm/implementation-details/#preflight-checks + +.. _Understanding basic Kubernetes architecture: https://kubernetes.io/docs/user-journeys/users/application-developer/foundational/#section-3 + +.. _Deploying an application to your cluster: https://kubernetes.io/docs/user-journeys/users/application-developer/foundational/#section-2 + +.. _pod network add-on: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network + +.. _Joining your nodes: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#join-nodes + +.. _documentation: https://clearlinux.org/documentation/clear-linux + +.. _cloud-native-setup: https://github.com/clearlinux/cloud-native-setup diff --git a/_sources/tutorials/machine-learning/machine-learning.rst.txt b/_sources/tutorials/machine-learning/machine-learning.rst.txt new file mode 100644 index 00000000..d07e0243 --- /dev/null +++ b/_sources/tutorials/machine-learning/machine-learning.rst.txt @@ -0,0 +1,242 @@ +.. _machine-learning: + +TensorFlow\* machine learning on |CL-ATTR| +########################################## + +This tutorial will demonstrate the installation and execusion of a TensorFlow\* +machine learning example on |CL-ATTR|. It uses a Jupyter\* Notebook and MNIST +data for handwriting recognition.  + +The initial steps will have you set up a Jupyter kernel and run a Notebook +on a bare-metal |CL| system. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. For +detailed instructions on installing |CL| on a bare metal system, follow the +:ref:`bare metal installation tutorial`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Once your system is updated, add the following bundles to your system: + +* `machine-learning-web-ui`: This bundle contains the Jupyter application. + +* `machine-learning-basic`: This bundle contains TensorFlow and other useful + tools. + +To install the bundles, run the following commands in your :file:`$HOME` +directory: + +.. code-block:: bash + + sudo swupd bundle-add machine-learning-web-ui + + sudo swupd bundle-add machine-learning-basic + +Set up a Jupyter notebook +************************* + +With all required packages and libraries installed, set up the file structure +for the Jupyter Notebook. + +#. In the :file:`$HOME` directory, create a directory for the Jupyter + Notebooks named :file:`Notebooks`. + + .. code-block:: bash + + mkdir Notebooks + +#. Within :file:`Notebooks`, create a directory named :file:`Handwriting`. + + .. code-block:: bash + + mkdir Notebooks/Handwriting + +#. Change to the new directory. + + .. code-block:: bash + + cd Notebooks/Handwriting + +#. Copy the :file:`MNIST_example.ipynb` file into the :file:`Handwriting` + directory. + + .. note:: + After installing the `machine-learning basic` bundle, you can find the + example code under + :file:`/usr/share/doc/tensorflow/MNIST_example.ipynb`. + + +The example code downloads and decompresses the MNIST data directly into the +:file:`./mnist` directory. Alternatively, download the four files directly +from the Yann LeCun’s `MNIST Database website`_ and save them into a +:file:`mnist` directory within the :file:`Handwriting` directory. + +The files needed are: + +* `train-images-idx3-ubyte.gz`_: Training set images (9912422 bytes) + +* `train-labels-idx1-ubyte.gz`_: Training set labels (28881 bytes) + +* `t10k-images-idx3-ubyte.gz`_: Test set images (1648877 bytes) + +* `t10k-labels-idx1-ubyte.gz`_: Test set labels (4542 bytes) + +Run the Jupyter machine learning example code +********************************************* + +With |CL|, Jupyter, and TensorFlow installed and configured, we can +run the example code. + +#. Go to the :file:`($HOME)/Notebooks` directory and start Jupyter with the + following commands: + + .. code-block:: bash + + cd ~/Notebooks + + jupyter notebook + + The Jupyter server starts and opens a web browser showing the Jupyter file + manager with a list of files in the current directory, see figure 1. + + .. figure:: figures/machine-learning-1.png + :alt: Jupyter file manager + + Figure 1: The Jupyter file manager shows the list of available files. + +#. Click on the :file:`Handwriting` directory. The :file:`MNIST_example.ipynb` + file created earlier should be listed there, see figure 2. + + .. figure:: figures/machine-learning-2.png + :alt: Example file within the Jupyter file manager + + Figure 2: The example file within the Jupyter file manager. + +#. To run the hand writing example, click on the :file:`MNIST_example.ipynb` + file to load the notebook, see figure 3. + + .. figure:: figures/machine-learning-3.png + :alt: The loaded MNIST_example notebook + + Figure 3: The loaded MNIST_example notebook within the Jupyter file + manager. + +#. Click the |run-cell| button to execute the code in the current cell and + move to the next. + +#. Select the :guilabel:`In [2]` cell and click the |run-cell| button to load + the MNIST data. The successful output is shown on figure 4. + + .. figure:: figures/machine-learning-4.png + :alt: Successful import of MNIST data + + Figure 4: Output after successfully importing the MNIST data. + + + After the MNIST data was successfully downloaded and extracted into the + :file:`mnist` directory within the :file:`($HOME)/Notebooks/Handwriting` + directory, four .gz files are present and the four data sets were created: + `trainX`, `trainY`, `testX` and `testY`. + +#. To inspect the imported data, the function in :guilabel:`In [3]` first + instructs Jupyter to reshape the data into an array of 28 x 28 images and to + plot the area in a 28 x 28 grid. Click the |run-cell| button twice to show + the first two digits in the `trainX` dataset, see figure 5. + + .. figure:: figures/machine-learning-5.png + :alt: Function to reshape data. + + Figure 5: A function reshapes the data and displays the first two + digits in the `trainX` dataset. + +#. The :guilabel:`In [4]` cell defines the neural network. It provides the + inputs, defines the hidden layers, runs the training model, and sets up + the output layer, see figure 6. Click the |run-cell| button four times to + perform these operations. + + .. figure:: figures/machine-learning-6.png + :alt: Defining, building and training the neural network model + + Figure 6: Defining, building and training the neural network model. + +#. To test the accuracy of the prediction the system makes, select the + :guilabel:`In [8]` cell and click the |run-cell| button. In this example, + the number 6 was predicted with a 99% accuracy, see figure 7. + + .. figure:: figures/machine-learning-7.png + :alt: Prediction example + + Figure 7: The system predicts a number providing the accuracy of the + prediction. + + .. note:: + + To retest the accuracy of a random data point's prediction, run the + cell :guilabel:`In [8]` again. It will take another random data point + and predict its value. + +#. To check the accuracy for the whole dataset, select the :guilabel:`In [10]` + cell and click the |run-cell| button. Our example's accuracy is + calculated as 97.17%, see figure 8. + + .. figure:: figures/machine-learning-8.png + :alt: System's accuracy + + Figure 8: The system's accuracy for the entire data set. + +For more in-depth information on the model used and the mathematics it entails, +visit the TensorFlow tutorials +`TensorFlow MNIST beginners demo`_ and `TensorFlow MNIST pros demo`_. + +**Congratulations!** + +You have successfully installed a Jupyter kernel on |CL|. In addition, you +trained a neural network to successfully predict the values contained in a +data set of hand-written number images. + +Related topics +************** + +* `MNIST Database website`_ +* `TensorFlow MNIST beginners demo`_ +* `TensorFlow MNIST pros demo`_ +* `Jupyter main website`_ +* `Jupyter documentation`_ +* `MNIST at Wikipedia`_ + +.. _MNIST Database website: + http://yann.lecun.com/exdb/mnist/ + +.. _train-images-idx3-ubyte.gz: + http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz + +.. _train-labels-idx1-ubyte.gz: + http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz + +.. _t10k-images-idx3-ubyte.gz: + http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz + +.. _t10k-labels-idx1-ubyte.gz: + http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz + +.. _Jupyter main website: http://jupyter.org/ + +.. _Jupyter documentation:  https://jupyter.readthedocs.io/en/latest/index.html + +.. _TensorFlow MNIST beginners demo: + https://www.tensorflow.org/get_started/mnist/beginners + +.. _TensorFlow MNIST pros demo: + https://www.tensorflow.org/get_started/mnist/pros + +.. _MNIST at Wikipedia: + https://en.wikipedia.org/wiki/MNIST_database + +.. |run-cell| image:: ./figures/run-cell-button.png diff --git a/_sources/tutorials/nvidia.rst.txt b/_sources/tutorials/nvidia.rst.txt new file mode 100644 index 00000000..5473bed9 --- /dev/null +++ b/_sources/tutorials/nvidia.rst.txt @@ -0,0 +1,324 @@ +.. _nvidia: + +Install NVIDIA\* Drivers +######################## + +NVIDIA manufactures graphics processing units (GPU), also known as +graphics cards. + +NVIDIA devices on Linux\* have two popular device driver options: the +opensource drivers from the `nouveau project`_ or the proprietary drivers +published by NVIDIA. The nouveau drivers are built into the |CL-ATTR| +kernel and are loaded automatically at system boot if a compatible card +is detected. + +These instructions show how to use the proprietary NVIDIA drivers, which +require a manual installation. + +.. warning:: + + Software installed outside of :ref:`swupd ` is not updated + with |CL| updates and must be updated and maintained manually. + + For example, the file :file:`/usr/lib/libGL.so` conflicts with the file + provided by the mesa package in |CL| and the file NVIDIA provides. If a |CL| + update overwrites these files, a reinstallation of the NVIDIA driver might + be required. + + + +.. contents:: :local: + :depth: 2 + + + +Prerequisites +************* + +* A |CL| system with a desktop installed +* An NVIDIA device installed + + +Install DKMS +************ + +The :ref:`Dynamic Kernel Module System (DKMS) +` allows the NVIDIA kernel modules to be automatically +integrated when kernel updates occur in |CL|. + +Install the appropriate DKMS bundle using the instructions below: + +.. note:: + The Long Term Support (LTS) kernel variant is more likely to remain + compatible between updates with NVIDIA drivers. + + +.. include:: /guides/kernel/kernel-modules-dkms.rst + :start-after: kernel-modules-dkms-install-begin: + :end-before: kernel-modules-dkms-install-end: + + +Download and install the NVIDIA drivers +*************************************** + + +Download the NVIDIA drivers for Linux +===================================== + +#. Identify the NVIDIA GPU model that is installed. + + .. code-block:: bash + + sudo lshw -C display + + +#. Go to the `NVIDIA Driver Downloads website`_ . Search for and download the + appropriate driver based on the NVIDIA GPU model you have with *Linux + 64-bit* selected as the Operating System . + + +#. Open a terminal and navigate to where the + :file:`NVIDIA-Linux-x86_64-.run` file was saved. In this + example, it was saved in the Downloads folder. + + .. code-block:: bash + + cd ~/Downloads/ + +#. Make the :file:`NVIDIA-Linux-x86_64-.run` file executable. + + .. code-block:: bash + + chmod +x :file:`NVIDIA-Linux-x86_64-.run` + + +Disable the nouveau driver +========================== + +The proprietary NVIDIA driver is incompatible with the nouveau driver and +must be disabled before installation can continue. + +#. Disable the nouveau driver by creating a blacklist file under + :file:`/etc/modprobe.d` and reboot. + + .. code-block:: bash + + sudo mkdir /etc/modprobe.d + + printf "blacklist nouveau \noptions nouveau modeset=0 \n" | sudo tee --append /etc/modprobe.d/disable-nouveau.conf + + +#. Reboot the system and log back in. It is normal for the graphical + environment not to start without the NVIDIA driver loaded. + + + + +Configure alternative software paths +==================================== + +The NVIDIA installer is directed to install files under +:file:`/opt/nvidia` as much as possible to keep its contents isolated from the +rest of the |CL| system files under :file:`/usr`. The dynamic linker and X +server must be configured to use the content under +:file:`/opt/nvidia`. + + +#. Configure the dynamic linker to look for and to cache shared libraries under + :file:`/opt/nvidia/lib` and :file:`/opt/nvidia/lib32` in addition to the + default paths. + + .. code-block:: bash + + echo "include /etc/ld.so.conf.d/*.conf" | sudo tee --append /etc/ld.so.conf + + sudo mkdir /etc/ld.so.conf.d + printf "/opt/nvidia/lib \n/opt/nvidia/lib32 \n" | sudo tee --append /etc/ld.so.conf.d/nvidia.conf + +#. Reload the dynamic linker run-time bindings and library cache. + + .. code-block:: bash + + sudo ldconfig + +#. Create a Xorg configuration file to search for modules under + :file:`/opt/nvidia` in addition to the default path. + + .. code-block:: bash + + sudo mkdir -p /etc/X11/xorg.conf.d/ + + sudo tee /etc/X11/xorg.conf.d/nvidia-files-opt.conf > /dev/null <<'EOF' + Section "Files" + ModulePath "/usr/lib64/xorg/modules" + ModulePath "/opt/nvidia/lib64/xorg/modules" + EndSection + EOF + + +Install the NVIDIA drivers +========================== + + +#. A terminal not running on */dev/tty1* is useful to view uninterrupted + installation progress. Switch to a secondary virtual terminal by pushing + :command:`CTRL + ALT + F2` or remotely login over SSH. + + +#. Navigate to the directory where the NVIDIA installer was downloaded. + + .. code-block:: bash + + cd ~/Downloads/ + + +#. Run the installer with the advanced options below. + + .. code-block:: bash + + sudo ./NVIDIA-Linux-x86_64-.run \ + --utility-prefix=/opt/nvidia \ + --opengl-prefix=/opt/nvidia \ + --compat32-prefix=/opt/nvidia \ + --compat32-libdir=lib32 \ + --x-prefix=/opt/nvidia \ + --x-module-path=/opt/nvidia/lib64/xorg/modules \ + --x-library-path=/opt/nvidia/lib64 \ + --x-sysconfig-path=/etc/X11/xorg.conf.d \ + --documentation-prefix=/opt/nvidia \ + --application-profile-path=/etc/nvidia \ + --no-precompiled-interface \ + --no-nvidia-modprobe \ + --no-distro-scripts \ + --force-libglx-indirect \ + --glvnd-egl-config-path=/etc/glvnd/egl_vendor.d \ + --egl-external-platform-config-path=/etc/egl/egl_external_platform.d \ + --dkms \ + --silent + +#. The graphical interface may automatically start after the NVIDIA driver + is loaded. Return to the working terminal and log back in if necessary. + + +#. Confirm that the NVIDIA kernel modules are loaded. + + .. code-block:: bash + + lsmod | grep ^nvidia + + +#. Run a |CL| system verification to restore files that the NVIDIA installer + likely deleted. + + .. code-block:: bash + + sudo swupd repair --quick --bundles=lib-opengl + +.. note:: + + The NVIDIA software places some files under the :file:`/usr` subdirectory + that are not managed by |CL| and conflict with the |CL| stateless design. + + Although a limited version of :command:`swupd repair` is run above, + other uses of the :command:`swupd repair` command should be avoided + with the proprietary NVIDIA drivers installed. + + +Updating the NVIDIA drivers +*************************** + +The proprietary NVIDIA drivers are installed manually outside of :ref:`swupd +` and must be updated manually when needed. + +Updating the NVIDIA drivers follows the same steps as initial installation, +however the desktop environment must first be stopped so that the drivers are +not in use. + +#. Follow the steps in the `Download the NVIDIA Drivers for Linux`_ section + to get the latest NVIDIA drivers. + +#. Temporarily set the default boot target to the *multi-user*, which is + a non-graphical runtime. + + .. code-block:: bash + + sudo systemctl set-default multi-user.target + + +#. Reboot the system and log back in. It is normal for the graphical + environment not to start. + +#. Follow the steps in the `Install the NVIDIA Drivers`_ section to update + the NVIDIA drivers. This installation will overwrite the previous NVIDIA + drivers and files. + +#. Set the default boot target back to the *graphical* target. + + .. code-block:: bash + + sudo systemctl set-default graphical.target + + +#. Reboot the system and log back in. + +#. Trigger a flatpak update that will download the runtime corresponding + with the new NVIDIA drivers for the flatpak apps that require it. + + .. code-block:: bash + + flatpak update + + +Uninstalling the NVIDIA drivers +******************************* + +The NVIDIA drivers and associated software can be uninstalled and nouveau +driver restored with the instructions in this section. + +#. Remove the :file:`modprobe.d` file that prevents nouveau from loading. + + .. code-block:: bash + + sudo rm /etc/modprobe.d/disable-nouveau.conf + + +#. Remove the :file:`xorg.conf.d` file that adds a search path for X modules. + + .. code:: bash + + sudo rm /etc/X11/xorg.conf.d/nvidia-files-opt.conf + +#. Run the :command:`sudo /opt/nvidia/bin/nvidia-uninstall` + +#. Follow the prompts on the screen and reboot the system. + + +Debugging installation of NVIDIA drivers +**************************************** + +* The NVIDIA driver places installer and uninstaller logs under + :file:`/var/log/nvidia-install` and :file:`/var/log/nvidia-uninstall`. + +* :file:`NVIDIA-Linux-x86_64-.run --advanced-options` shows many + parameters to control installation behavior. + +* :file:`NVIDIA-Linux-x86_64-.run --extract-only` extracts + installation files into a directory named + :file:`NVIDIA-Linux-x86_64-`. + + + +Additional resources +******************** + +* `Why aren't the NVIDIA Linux drivers open source? `_ + +* `Where can I get support for NVIDIA Linux drivers? `_ + +* `NVIDIA Accelerated Linux Graphics Driver Installation Guides `_ + +.. _`nouveau project`: https://nouveau.freedesktop.org/wiki/ + +.. _`NVIDIA Driver Downloads website`: https://www.nvidia.com/download/index.aspx + + diff --git a/_sources/tutorials/redis.rst.txt b/_sources/tutorials/redis.rst.txt new file mode 100644 index 00000000..1d86e4c9 --- /dev/null +++ b/_sources/tutorials/redis.rst.txt @@ -0,0 +1,215 @@ +.. _redis: + +Run Redis on |CL-ATTR| +###################### + +Redis is an in-memory key:value store designed for quick lookups, accessible +over the network. In this tutorial, you'll install redis and launch a +redis-server on |CL|, plus learn a few basic redis commands. We also invite +you to pull our `Clear Linux Redis instance`_ on dockerhub\* for application +or infrastructure development. + +While the `redis data structure store`_ can serve as a NoSQL database for a Web application, it's also easy to integrate in an existing stack. For example, you could use the Redis caching layer for real-time responses on a leaderboard in a gaming app. Redis offers many client libraries with language-specific bindings for Python, Perl, Ruby, and more. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* +* Install the `redis-native` bundle in |CL| +* Install the `containers-basic` bundle in |CL| (only required in Example 2) + +Install the redis bundle +************************ + +In |CL|, find redis in the `redis-native` bundle. + +#. Open a Terminal and login as an administrative user. + +#. Add :file:`redis-native`. + +.. code-block:: bash + + sudo swupd bundle-add redis-native + +.. note:: + + If the bundle already exists, no action is required. + +Start the redis-server +********************** + +A `systemd` service unit is available to control the redis server. +By default, redis runs on port 6379. + +#. Start the service. + + .. code-block:: bash + + systemctl start redis + + .. note:: + + To stop redis run :command:`systemctl stop redis`. + +#. Assure the service is running. + + .. code-block:: bash + + systemctl status redis + +#. Verify the redis-server sends a reply. + + .. code-block:: bash + + redis-cli ping + + .. note:: + + Expected output: `PONG`. + +#. Optional: If you wish to apply advanced configuration, copy the + `redis.conf` into /etc/ directory. + + .. code-block:: bash + + sudo cp /usr/share/defaults/etc/redis.conf /etc/ + +The redis-server is now ready to use on |CL|. Try some examples below. + +Example 1: Use the redis-cli and try commands +********************************************* + +One advantage of redis over other NoSQL databases is that developers can +easily access data structures like lists, sets, sorted sets, strings, and +hashes using collection operations commands similar to those found in many +programming languages. These exercises are inspired by `try redis io`_. + +After your `redis-server` is running, try some basic commands. + +#. Enter the `redis-cli`. It provides syntax suggestions as you type. + + .. code-block:: bash + + redis-cli + +#. SET key to hold string value. In the set create connections and increment. + + .. code-block:: bash + + SET server:name "clearlinux" + + .. code-block:: bash + + MGET server:name + + .. note:: + If the key does not exist or hold a key value, `nil` is returned. + + .. code-block:: bash + + SET connections 100 + + .. code-block:: bash + + INCR connections + + .. code-block:: bash + + INCR connections + + .. code-block:: bash + + DEL connections + +#. Create a `friends` list and insert new values at the end of the list. + + .. code-block:: bash + + RPUSH friends "Deb" + + .. code-block:: bash + + RPUSH friends "David" + + .. code-block:: bash + + RPUSH friends "Mary" + +#. Modify `friends` list, using a common slice method with a 0-index. + + .. code-block:: bash + + LRANGE friends 0 1 + + .. code-block:: bash + + LLEN friends + + .. code-block:: bash + + LPOP friends + + .. code-block:: bash + + RPOP friends + + .. code-block:: bash + + LLEN friends + +#. Consider using a hash, a very useful data type, which maps string fields + and string values, offering multiple lookup methods. + + Enter many user key:values with `HMSET`. Then try `HGET` and `HGETALL`. + + .. code-block:: bash + + HMSET user:1000 name "Robert Noyce" password "SuperEngi9eer" email "robert.noyce@intel.com" + + .. code-block:: bash + + HGET user:1000 name + + .. code-block:: bash + + HGET user:1000 email + + .. code-block:: bash + + HGETALL user:1000 + + +Example 2: Run the |CL| redis docker image +****************************************** + +We also provide a `Clear Linux Redis instance`_, which is +updated continuously and maintained by |CL| development. + +.. code-block:: bash + + sudo swupd bundle-add containers-basic + +.. code-block:: bash + + sudo systemctl start docker + +.. code-block:: bash + + sudo -E docker pull clearlinux/redis + +Next Steps +********** + +* Follow the `redis quickstart tutorial`_ to expand potential uses. + +* Learn to :ref:`docker`. + +.. _try redis io: https://try.redis.io/ + +.. _Clear Linux Redis instance: https://hub.docker.com/r/clearlinux/redis + +.. _redis data structure store: https://redis.io/ + +.. _redis quickstart tutorial: https://redis.io/topics/quickstart diff --git a/_sources/tutorials/smb/smb-desktop.rst.txt b/_sources/tutorials/smb/smb-desktop.rst.txt new file mode 100644 index 00000000..efa4c260 --- /dev/null +++ b/_sources/tutorials/smb/smb-desktop.rst.txt @@ -0,0 +1,80 @@ +.. _smb-desktop: + +Connect to Windows\* shared location from |CL-ATTR| desktop +########################################################### + +This tutorial explains how to access an existing shared drive on +Windows\* via Server Message Block (SMB) / Common Internet File System (CIFS) +from the |CL| GNOME desktop. CIFS filesystem is generally used to access +shared storage locations, or share files. + +Prerequisites +************* + +* You have already `set up a shared location on Windows`_ + +Connect to Windows shared location with Nautilus +************************************************ + +#. From the desktop, select :guilabel:`Files` from the application menu. + + .. note:: + + GNOME Files is also known as `Nautilus`. + +#. In :guilabel:`Files`, select :guilabel:`Other Locations`. + + .. figure:: figures/smb-desktop-1.png + :scale: 100% + :alt: Files, Other Locations + + Figure 1: Files, Other Locations + +#. In the lower taskbar, beside :guilabel:`Connect to Server`, + enter the file-sharing address using the Windows sharing schema: + + .. code-block:: bash + + smb://servername/Share + + .. figure:: figures/smb-desktop-2.png + :scale: 100% + :alt: Connect to Server + + Figure 2: Connect to Server + +#. Optional: If there are issues with DNS, you can use an IP address in + place of the `servername` above. You must still specify the share. + +#. Optional: On the Windows machine, in a CLI, retrieve the IP address by + entering the command: + + .. code-block:: bash + + ifconfig + + .. note:: + + If using the IP address, assure that it is accessible and secure. + +#. Select :guilabel:`Connect`. + +#. The server will request authentication, as shown in Figure 3. + + .. figure:: figures/smb-desktop-3.png + :scale: 100% + :alt: Authentication + + Figure 3: Authentication + +#. Log in with the same Windows system credentials for which you granted + access to the share. + +#. Select the appropriate checkbox to save your credentials. Consider + carefully the security risks as a result of your selection. + + +.. _set up a shared location on Windows: https://www.howtogeek.com/176471/how-to-share-files-between-windows-and-linux/ + + + diff --git a/_sources/tutorials/smb/smb.rst.txt b/_sources/tutorials/smb/smb.rst.txt new file mode 100644 index 00000000..a2892d22 --- /dev/null +++ b/_sources/tutorials/smb/smb.rst.txt @@ -0,0 +1,131 @@ +.. _clear-samba-share-to-Windows: + +Enable simple file sharing with a Windows\* machine using Samba\* +################################################################# + +This tutorial describes how to enable simple file sharing from a system +running |CL-ATTR| to a Windows machine using Samba. For more advanced sharing, +refer to the `Samba guide`_. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. For +detailed instructions, follow the steps in :ref:`bare-metal-install-desktop`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + + +Set up file sharing +******************* + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Add the storage-utils bundle, which includes the Samba binaries. + + .. code-block:: bash + + swupd bundle-add storage-utils + + .. note:: + + The os-clr-on-clr bundle also includes the Samba binaries. + +#. Create a configuration file called :file:`/etc/samba/smb.conf`. In this + example, `[Downloads]` enables a folder share with a specific user. + `[Documents]` enables a folder share with any user. The example assumes that a + user account `clearlinuxuser` already exists. + + If `valid users` is not specified, then anyone with a user account on the + machine and with their Samba password already set can access the folder. + However, the account is only able to access files and folders for which + they have appropriate permissions. + + Use :command:`chown` or :command:`chmod` to change either the owner of the + file or the permissions to allow other users to access the file. + + .. code-block:: console + + [Global] + map to guest = bad user + + [Downloads] + path=/home/clearlinuxuser/Downloads + read only = no + guest ok = no + valid users = clearlinuxuser + + [Documents] + path=/home/clearlinuxuser/Documents + read only = no + browsable = yes + guest ok = yes + +#. Enable the Samba daemon to start every time. + + .. code-block:: bash + + systemctl enable smb + systemctl start smb + +#. Use :command:`smbpasswd` to add the initial password for the user + account to access the share. Be aware that Samba maintains its own list of + passwords for user accounts. The Samba password list can be different than + the password used to log in. + + .. code-block:: bash + + smbpasswd -a clearlinuxuser + +Setup is complete and a Windows machine on the same network can access the +shares. Windows uses the format :file:`\\\\[server IP or hostname]\\folder` to +access shares. Access the shares directly with Windows Explorer or by +mapping a network drive. + +Use the IP address of the |CL| machine for an easy access method. If the +|CL| machine is behind an Active Directory domain controller or a DNS server, +use the hostname of the |CL| machine. For other ways to access shares using a +hostname instead of an IP address, see `Chapter 7 of the Samba guide`_. + + +Map |CL| drive in Windows +************************* + +#. Open Windows Explorer and click on the left sidebar on :guilabel:`This PC` + to change the options available at the top. + +#. Click the :guilabel:`Map Network Drive` icon and enter the path in the + format: :file:`\\\\[server IP or hostname]\\[shared folder]` + +#. Check the box :guilabel:`Connect using different credentials`. Enter + the Samba user `clearlinuxuser` and the password created with + :command:`smbpasswd`. See Figure 1 for details. + + .. figure:: figures/smb-1.png + :scale: 70% + :alt: Map a network drive in Windows Explorer + + Figure 1: Map a network drive in Windows Explorer. + +When complete, Windows Explorer displays the share drive as shown in Figure 2. + +.. figure:: figures/smb-2.png + :scale: 70% + :alt: View a share drive in Windows Explorer + + Figure 2: View a share drive in Windows Explorer. + + + + + +.. _Samba guide: https://www.samba.org/samba/docs/using_samba/ch00.html +.. _Chapter 7 of the Samba guide: https://www.samba.org/samba/docs/using_samba/ch07.html diff --git a/_sources/tutorials/spark.rst.txt b/_sources/tutorials/spark.rst.txt new file mode 100644 index 00000000..2f0d22ab --- /dev/null +++ b/_sources/tutorials/spark.rst.txt @@ -0,0 +1,134 @@ + .. _spark: + +Set up a standalone cluster system using Apache\* Spark\* +######################################################### + +This tutorial describes how to install, configure, and run Apache Spark on +|CL-ATTR|. Apache Spark is a fast general-purpose cluster computing system with +the following features: + +* Provides high-level APIs in Java\*, Scala\*, Python\*, and R\*. +* Includes an optimized engine that supports general execution graphs. +* Supports high-level tools including Spark SQL, MLlib, GraphX, and Spark + Streaming. + +In this tutorial, you will install Spark on a single machine running the +master daemon and a worker daemon. + +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 `. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Install Apache Spark +******************** + +Apache Spark is included in the :file:`big-data-basic` bundle. To install the +framework, enter: + +.. code-block:: bash + + sudo swupd bundle-add big-data-basic + +Configure Apache Spark +********************** + +#. Create the configuration directory with the command: + + .. code-block:: bash + + sudo mkdir /etc/spark + +#. Copy the default templates from :file:`/usr/share/defaults/spark` to + :file:`/etc/spark` with the command: + + .. code-block:: bash + + sudo cp /usr/share/defaults/spark/* /etc/spark + + .. note:: Since |CL| is a stateless system, you should never modify the + files under the :file:`/usr/share/defaults` directory. The software + updater overwrites those files. + + +#. Copy the template files below to create custom configuration files: + + .. code-block:: bash + + sudo cp /etc/spark/spark-defaults.conf.template /etc/spark/spark-defaults.conf + sudo cp /etc/spark/spark-env.sh.template /etc/spark/spark-env.sh + sudo cp /etc/spark/log4j.properties.template /etc/spark/log4j.properties + +#. Edit the :file:`/etc/spark/spark-env.sh` file and add the + :envvar:`SPARK_MASTER_HOST` variable. Replace the example address below + with your localhost IP address. View your IP address using the + :command:`hostname -I` command. + + .. code-block:: bash + + SPARK_MASTER_HOST="10.300.200.100" + + .. note:: This optional step enables the master's web user interface to + view information needed later in this tutorial. + +#. Edit the :file:`/etc/spark/spark-defaults.conf` file and update the + `spark.master` variable with the `SPARK_MASTER_HOST` address and port `7077`. + + .. code-block:: bash + + spark.master spark://10.300.200.100:7077 + +Start the master server and a worker daemon +******************************************* + +#. Start the master server using: + + .. code-block:: bash + + sudo /usr/share/apache-spark/sbin/./start-master.sh + +#. Start one worker daemon and connect it to the master using the + `spark.master` variable defined earlier: + + .. code-block:: bash + + sudo /usr/share/apache-spark/sbin/./start-slave.sh spark://10.300.200.100:7077 + +#. Open an internet browser and view the worker daemon information using + the master's IP address and port `8080`: + + .. code-block:: bash + + http://10.300.200.100:8080 + +Run the Spark wordcount example +******************************* + +#. Run the wordcount example using a file on your local host and output the + results to a new file with the following command: + + .. code-block:: bash + + sudo spark-submit /usr/share/apache-spark/examples/src/main/python/wordcount.py ~/Documents/example_file > ~/Documents/results + +#. Open an internet browser and view the application information using + the master's IP address and port `8080`: + + .. code-block:: bash + + http://10.300.200.100:8080 + +#. View the results of the wordcount application in the :file:`~/Documents/results` file. + +**Congratulations!** + +You successfully installed and set up a standalone Apache Spark cluster. +Additionally, you ran a simple wordcount example. diff --git a/_sources/tutorials/tutorial-proxy.rst.txt b/_sources/tutorials/tutorial-proxy.rst.txt new file mode 100644 index 00000000..b538dd66 --- /dev/null +++ b/_sources/tutorials/tutorial-proxy.rst.txt @@ -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| 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 < + AllowOverride none + Require all granted + + +#. Create a new ``DocumentRoot`` directory structure and copy the + :file:`index.html` file from :file:`/var/www/html` directory to + :file:`/var/www/tutorial`. + + .. code-block:: bash + + sudo mkdir –p /var/www/tutorial + cd /var/www/tutorial + sudo cp /var/www/html/index.html . + +#. To ensure a successful setup, edit the new :file:`index.html` file with an + obvious change. + + .. code-block:: bash + + sudo nano index.html + + For example, we changed the default message + + "It works!" + + to + + "It works from its new location!" + +#. Stop and then restart ``httpd.service``. + + .. code-block:: bash + + sudo systemctl stop httpd.service + sudo systemctl start httpd.service + +#. Go to \http://localhost to view the new screen. You should see your updated + default message from step 5. + +#. Change the configuration back to the default :file:`/var/www/html` + location. To do this, edit the :file:`/etc/httpd/conf.d/httpd.conf` file + again and replace any instance of /var/www/tutorial with /var/www/html. + + .. code-block:: bash + + sudo nano /etc/httpd/conf.d/httpd.conf + +#. Stop and then restart ``httpd.service``. + + .. code-block:: bash + + sudo systemctl stop httpd.service + sudo systemctl start httpd.service + +#. Go to \http://localhost and verify that you can see the default screen + again. + +#. Optionally, remove the /var/www/tutorial directory you previously created. + + .. code-block:: bash + + sudo rm /var/www/tutorial/index.html + sudo rmdir /var/www/tutorial + +Install PHP +*********** + +An Apache installation allows you to display static web pages. Enabling PHP +allows you to generate and display dynamic web pages. To add this +functionality to your web server, install PHP on your system. + +#. To get the php components, enter the following command: + + .. code-block:: bash + + sudo swupd bundle-add php-basic + +#. To enable PHP, enter the following commands: + + .. code-block:: bash + + sudo systemctl enable php-fpm.service + sudo systemctl start php-fpm.service + sudo systemctl restart httpd.service + + After restarting the Apache service, test your PHP installation. + +#. Create and open a file named :file:`phpinfo.php` in the :file:`/var/www/html/` + directory using a text editor. + + .. code-block:: bash + + sudo nano /var/www/html/phpinfo.php + +#. Add the following line to the file: + + .. code-block:: php + + + +#. Go to \http://localhost/phpinfo.php. + +#. Verify that the PHP information screen appears, similar to figure 2: + + .. figure:: figures/web-server-install-2.png + :alt: PHP information screen + :width: 600 + + `Figure 2: The PHP information screen.` + +If the PHP information screen is displayed, you have successfully installed +the PHP components and are now ready to add your database application to +complete your LAMP server implementation. + +Install MariaDB +*************** + +Install MariaDB to store content. MariaDB is a drop-in replacement for MySQL +and is available in the database-basic |CL| bundle. + +#. To install the database-basic bundle, enter the following command: + + .. code-block:: bash + + sudo swupd bundle-add database-basic + +#. To start MariaDB after it is installed, enter the following commands: + + .. code-block:: bash + + sudo systemctl enable mariadb + sudo systemctl start mariadb + +#. To check the status of MariaDB, enter the following command: + + .. code-block:: bash + + sudo systemctl status mariadb + + Press :kbd:`Ctrl` + :kbd:`c` or :kbd:`q` to exit. + +Security hardening +================== + +With the MariaDB service running, we can perform some basic security +hardening. + +#. To add a basic layer of security, enter the following command: + + .. code-block:: bash + + sudo mysql_secure_installation + +#. Respond to the questions that appear in the script below. + + .. note:: + + Our suggested responses follow each question. + + .. code-block:: bash + + Enter current password for root (enter for none): + + In order to secure MariaDB, we need the current password for the root + user. For a newly installed MariaDB without a set root password, the + password is blank. Thus, press enter to continue. + + .. code-block:: bash + + OK, successfully used password, moving on... + + Set root password? [Y/n] + + .. _set-password: + + Set the root password to prevent unauthorized MariaDB root user logins. + To set a root password, type 'y'. + + .. code-block:: bash + + New password: + + Type the desired password for the root user. + + .. code-block:: bash + + Re-enter new password: + + Re-type the desired password for the root user. + + .. code-block:: bash + + Password updated successfully! + Reloading privilege tables.. + ... Success! + + Remove anonymous users? [Y/n] + + By default, a MariaDB installation includes an anonymous user that allows + anyone to log in to MariaDB without a user account. This anonymous user + is intended only for testing and for a smoother installation. To remove + the anonymous user and make your database more secure, type 'y'. + + .. code-block:: bash + + ... Success! + Disallow root login remotely? [Y/n] + + Normally, root should only be allowed to connect from the 'localhost'. This + ensures that someone cannot guess the root password from the network. To + block any remote root login, type 'y'. + + .. code-block:: bash + + ... Success! + Remove test database and access to it? [Y/n] + + By default, MariaDB includes a database named 'test' which anyone can access. + This database is also intended only for testing and should be removed. To + remove the test database, type 'y'. + + .. code-block:: bash + + - Dropping test database... + ... Success! + - Removing privileges on test database... + ... Success! + Reload privilege tables now? [Y/n] + + Reloading the privilege tables ensures all changes made so far take + effect immediately. To reload the privilege tables, type 'y'. + + .. code-block:: bash + + ... Success! + + Cleaning up... + + All done! If you've completed all of the above steps, your MariaDB + installation should now be secure. + + Thanks for using MariaDB! + +The MariaDB installation is complete, and we can now install phpMyAdmin to +manage the databases. + +Install phpMyAdmin +****************** + +The web-based tool phpMyAdmin is a straightforward way to manage MySQL or +MariaDB databases. Visit the `phpMyAdmin`_ website for the complete +discussion regarding phpMyAdmin, its documentation, the latest downloads, +and other useful information. + +In this tutorial, we use the latest English version of phpMyAdmin. + +#. Download the :file:`phpMyAdmin--english.tar.gz` file to your + :file:`~/Downloads` directory. Here, refers to the current + version available at https://www.phpmyadmin.net/downloads. + + .. note:: + + This example downloads and uses version 4.6.4. + +#. Once the file has been successfully downloaded and verified, decompress + the file and directories into the Apache web server document root + directory. Use the following commands: + + .. code-block:: bash + + cd /var/www/html + sudo tar –xzvf ~/Downloads/phpMyAdmin-4.6.4-english.tar.gz + +#. To keep things simple, rename the newly created + :file:`phpMyAdmin-4.6.4-english` directory to :file:`phpMyAdmin` with the + following command: + + .. code-block:: bash + + sudo mv phpMyAdmin-4.6.4-english phpMyAdmin + +Use phpMyAdmin to manage a database +*********************************** + +You can use the phpMyAdmin web-based tool to manage your databases. Follow the +steps below for setting up a database called "WordPress". + +#. Verify that a successful installation of all LAMP server components by + going to \http://localhost/phpMyAdmin. See figure 3. + +#. Log in with your root userid and the password you set up when you ran the + :ref:`mysql_secure_installation command `. Enter your + credentials and select :guilabel:`Go` to log in: + + .. figure:: figures/web-server-install-3.png + :alt: phpMyAdmin login page + :width: 600 + + `Figure 3: The phpMyAdmin login page.` + +#. Verify a successful login by confirming that the main phpMyAdmin page + displays, as shown in figure 4: + + .. figure:: figures/web-server-install-4.png + :alt: phpMyAdmin dashboard + :width: 600 + + `Figure 4: The phpMyAdmin dashboard.` + +#. Set up a database by selecting the :guilabel:`Databases` tab, as shown in + figure 5. + +#. Enter `WordPress` in the text field below the :guilabel:`Create database` + label. + +#. Select the :guilabel:`utf8_unicode_ci` option from the + :guilabel:`Collation` drop-down menu beside the text field. + +#. Click :guilabel:`Create`. + + .. figure:: figures/web-server-install-5.png + :alt: Databases tab + :width: 600 + + `Figure 5: The Databases tab.` + +#. Set up user permissions by selecting the :guilabel:`WordPress` database + located in the left panel. See figure 6. + +#. Select the :guilabel:`Privileges` tab. Figure 6 shows its contents. + + .. figure:: figures/web-server-install-6.png + :alt: Privileges tab + :width: 600 + + `Figure 6: The Privileges tab.` + +#. Click :guilabel:`Add user account` located at the bottom of the + :guilabel:`Privileges` tab. The `Add user account` page appears, as shown + in figure 7. + + .. figure:: figures/web-server-install-7.png + :alt: User accounts tab + :width: 600 + + `Figure 7: The User accounts tab.` + +#. Enter the following information in the corresponding fields that appear + in figure 7 above: + + * User name: wordpressuser + + * Password: wp-example + + * Re-type: wp-example + +#. In the `Database for user account` section, select + :guilabel:`Grant all privileges on database “WordPress”.` + +#. At the bottom of the page, click :guilabel:`Go`. + +If successful, you should see the screen shown in figure 8: + +.. figure:: figures/web-server-install-8.png + :alt: User added successfully + :width: 600 + + `Figure 8: The user wordpressuser is successfully added.` + +**Congratulations!** + +You have now created a fully functional LAMP server along with a +WordPress\*-ready database using |CL|. + +Next steps +********** + +Next, add the WordPress components needed to host a WordPress website with :ref:`wp-install`. + +.. _Apache HTTP Server Project: https://httpd.apache.org/ +.. _phpMyAdmin: https://www.phpmyadmin.net/ diff --git a/_sources/tutorials/wordpress/wordpress.rst.txt b/_sources/tutorials/wordpress/wordpress.rst.txt new file mode 100644 index 00000000..6eecac79 --- /dev/null +++ b/_sources/tutorials/wordpress/wordpress.rst.txt @@ -0,0 +1,27 @@ +.. _wordpress: + +WordPress\* on |CL-ATTR| +######################## + +This tutorial describes how to setup a web server to host a WordPress\* site on a +|CL-ATTR| system. The tutorial is split into two sections: + +#. :ref:`web-server-install` + +#. :ref:`wp-install` + +If you already have a |CL| based :abbr:`LAMP (Linux, Apache, MySQL, PHP)` web server, +you can skip ahead to the second section of this tutorial. + +.. note:: + + This tutorial is for development and testing purposes only. Additional steps + are required to secure production systems. Those steps are beyond the scope + of this tutorial. + +.. toctree:: + :maxdepth: 1 + :hidden: + + web-server-install.rst + wp-install.rst diff --git a/_sources/tutorials/wordpress/wp-install.rst.txt b/_sources/tutorials/wordpress/wp-install.rst.txt new file mode 100644 index 00000000..9a0a2d0f --- /dev/null +++ b/_sources/tutorials/wordpress/wp-install.rst.txt @@ -0,0 +1,198 @@ +.. _wp-install: + +Set up WordPress\* on a LAMP web server +####################################### + +This tutorial shows you how to install the WordPress\* components on your |CL| +:abbr:`LAMP (Linux, Apache, MySQL, PHP)` server. At the end of +:ref:`web-server-install`, you created a WordPress-ready database using +phpMyAdmin\* and MariaDB\*. Now that the LAMP server is up and running, you +can add the WordPress components needed to host a WordPress website on your system. + +Before you begin +**************** + +This tutorial assumes that you have successfully completed +:ref:`bare-metal-install-desktop` and you have :ref:`web-server-install`. + +Create a WordPress server +************************* + +WordPress can be installed in a variety of ways. These instructions are +written for users who have followed our instructions for installing phpMyAdmin +when they :ref:`set up a LAMP web server `. Note that +all steps in this tutorial have been tested using a NUC6i5SYH Intel® NUC. +Visit the `NUC6i5SYH product page`_ for detailed information. + +Numerous online articles are available to help you name your website and +acquire the necessary certificates. Those tasks are beyond the scope of this tutorial. + +You can take several actions to harden your website from attacks. The security +of your website and the data it contains are complex and ever-evolving tasks. +Prioritize security if you plan to expose your website to the outside world. +This tutorial does not address security measures that you can take to harden +your site but we strongly encourage you to take action. + +.. note:: + + Throughout this tutorial, we reference your website name as . + + +Download WordPress and manage directories +========================================= + +For this tutorial, you will create a WordPress blog that can be accessed at: +\http:///blog. + +To accomplish this setup, you must add WordPress components to the :file:`/var/www/html/blog` +directory. + +Follow these steps: + + +#. Navigate to the top level of the website’s root directory: + + .. code-block:: bash + + cd /var/www/html + +#. Download the latest version of WordPress: + + .. code-block:: bash + + sudo curl -O https://wordpress.org/latest.tar.gz + +#. Extract all files and directories from the downloaded file: + + .. code-block:: bash + + sudo tar –xzvf latest.tar.gz + +#. Rename the top-level WordPress directory to “blog”: + + .. code-block:: bash + + sudo mv wordpress blog + +#. Remove the downloaded tar file: + + .. code-block:: bash + + sudo rm latest.tar.gz + +Set up WordPress with web-based GUI +=================================== + +Recall that you created a database and user when you installed phpMyAdmin when you +set up a |CL| based :ref:`web server `. Next, you must +connect WordPress to the database and install WordPress. + +To continue with the setup, go to: \http:///blog/wp-admin/install.php. +The WordPress language option screen appears, as shown in figure 1. + +#. Select :guilabel:`English` and click :guilabel:`Continue`. + + .. figure:: figures/wp-install-1.png + :alt: WordPress language selection + :width: 600 + + `Figure 1: WordPress language selection screen.` + + + The WordPress installation continues until the Welcome screen appears, as shown in + figure 2: + + .. figure:: figures/wp-install-2.png + :alt: WordPress welcome screen + :width: 600 + + `Figure 2: WordPress Welcome screen.` + +#. Click :guilabel:`Let’s go!`. + +#. Enter database connection specifics in the screen that appears, as shown in figure 3 + below. + + * Database name: WordPress + * Database username: wordpressuser + * Database password: wp-example (asterisks will not appear in the text box) + * Database host: localhost + * Table prefix: wp\_ + + .. figure:: figures/wp-install-3.png + :alt: Database connection details + :width: 600 + + `Figure 3: Information necessary for WordPress to connect to the database.` + +#. Click :guilabel:`Submit` to complete the setup. + + Figure 4 shows the confirmation screen that verifies a successful setup. WordPress + is connected to the MariaDB database. + + .. figure:: figures/wp-install-4.png + :alt: Successful database connection. + :width: 600 + + `Figure 4: Successful WordPress connection.` + +#. Click :guilabel:`Run the install`. + The installer runs until WordPress is fully installed on your system. + +Complete successful login +========================= + +Once the installation is complete, you can name your blog and create a WordPress username +and password. See figure 5. + +.. figure:: figures/wp-install-5.png + :alt: WordPress user creation + :width: 600 + + `Figure 5: WordPress site information screen.` + + +#. Enter all required information. +#. Click :guilabel:`Install WordPress`. +#. Verify that the initial login screen appears once the installation is complete. See figure 6: + + .. figure:: figures/wp-install-6.png + :alt: WordPress login + :width: 600 + + `Figure 6: The WordPress login screen.` + +#. Enter your WordPress username and password. +#. Check :guilabel:`Remember me` to save your credentials. +#. Click :guilabel:`Log in`. + +Figure 7 shows the WordPress dashboard after a successful login: + +.. figure:: figures/wp-install-7.png + :alt: WordPress Dashboard + :width: 600 + + `Figure 7: The WordPress dashboard.` + +You are ready to go! + +To check out your blog as it is seen by the outside world, enter: +\http:///blog on your browser. Figure 8 shows the result: + +.. figure:: figures/wp-install-8.png + :alt: WordPress blog + :width: 600 + + `Figure 8: Your WordPress blog.` + +**Congratulations, your WordPress blog is up and running!** + +You have successfully installed WordPress on a host system. + +Add new entries to your blog and share them with the world using |CL|! + +.. _`step-by-step guide`: + https://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install + +.. _`NUC6i5SYH product page`: + http://www.intel.com/content/www/us/en/nuc/nuc-kit-nuc6i5syh.html diff --git a/_sources/tutorials/yubikey-u2f.rst.txt b/_sources/tutorials/yubikey-u2f.rst.txt new file mode 100644 index 00000000..59401efe --- /dev/null +++ b/_sources/tutorials/yubikey-u2f.rst.txt @@ -0,0 +1,126 @@ +.. _yubikey-u2f: + +Enable YubiKey U2F Support +########################## + +YubiKey\* is a USB security token manufactured by `Yubico`_. Depending on the +model, a YubiKey can support different authentication protocols including: +One-Time Password (OTP), Smart card, FIDO2, and Universal 2nd Factor (U2F). + +These instructions will go over configuring a YubiKey for U2F authentication +through a web browser on a |CL-ATTR| system. + +A list of `websites +accepting U2F authentication with the YubiKey`_ is available on the Yubico +website. See the Yubico website to learn more about the Yubikey: +https://www.yubico.com/getstarted/meet-the-yubikey/ + + + +.. contents:: :local: + :depth: 1 + + + +Prerequisites +************* + +This tutorial assumes you have: + +#. |CL| installed and running. + +#. Mozilla Firefox installed on |CL|. + +#. A YubiKey. + + + +Enable Linux udev rules for YubiKey +*********************************** + +:command:`udev` is the Linux device manager which handles events when USB +devices are added and removed. Custom rules needs to be created to properly +identify the YubiKey and provide applications access. + +These instructions are derived from: `Yubico support article Using Your U2F +YubiKey with Linux +`_ + + +#. Create the udev rules folder under :file:`/etc` + + .. code:: bash + + sudo mkdir -p /etc/udev/rules.d/ + + +#. Download the u2f rules from the Yubico GitHub: + + .. code:: bash + + curl -O https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules + + +#. Move the downloaded :file:`70-u2f.rules` file into the :file:`/etc/udev` + folder + + .. code:: bash + + sudo mv 70-u2f.rules /etc/udev/rules.d/ + + +#. The udev rules should automatically be reloaded. However, they can be + manually reloaded or reboot the system: + + .. code:: bash + + sudo udevadm control --reload-rules && sudo udevadm trigger + + +#. Plugin and validate the YubiKey appears as a USB device: + + .. code:: bash + + lsusb + + + +Enable U2F in Mozilla Firefox +***************************** + +Firefox comes with U2F web authentication support disabled by default. U2F +needs to be enabled in the advanced settings. + +These instructions are derived from: `Yubico support article Enabling U2F +support in Mozilla Firefox +`_ + + +#. Launch Mozilla Firefox + +#. In the URL bar, type :command:`about:config` to access the advanced + settings. + + .. code:: bash + + about:config + +#. Click the *I accept the risk!* button to continue to the advanced settings + +#. Search for the :command:`security.webauth.u2f` and double-click it + so *Value* becomes **true**. + + +Your YubiKey is now usable on |CL| with Mozilla Firefox with websites that +support U2F authentication. + + +Related topics +************** + +- |CL| :ref:`security` + + +.. _`Yubico`: https://www.yubico.com/ + +.. _`websites accepting U2F authentication with the YubiKey`: https://www.yubico.com/works-with-yubikey/catalog/#protocol=universal-2nd-factor-(u2f)&usecase=all&key=all diff --git a/_static/ajax-loader.gif b/_static/ajax-loader.gif new file mode 100644 index 00000000..61faf8ca Binary files /dev/null and b/_static/ajax-loader.gif differ diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..104f076a --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/clearlinux.png b/_static/clearlinux.png new file mode 100644 index 00000000..af518c0e Binary files /dev/null and b/_static/clearlinux.png differ diff --git a/_static/comment-bright.png b/_static/comment-bright.png new file mode 100644 index 00000000..15e27edb Binary files /dev/null and b/_static/comment-bright.png differ diff --git a/_static/comment-close.png b/_static/comment-close.png new file mode 100644 index 00000000..4d91bcf5 Binary files /dev/null and b/_static/comment-close.png differ diff --git a/_static/comment.png b/_static/comment.png new file mode 100644 index 00000000..dfbc0cbd Binary files /dev/null and b/_static/comment.png differ diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 00000000..3c33cef5 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 00000000..aed8cef0 --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,6 @@ +/* sphinx_rtd_theme version 0.4.3 | MIT license */ +/* Built 20190212 16:02 */ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content .code-block-caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content .code-block-caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#3a7ca8;height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin:12px 0 0 0;display:block;font-weight:bold;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d8928926 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,313 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..168d437e --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,296 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SEARCH_LANGUAGE_STOP_WORDS: ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"] +}; + + + +/* Non-minified version JS is _stemmer.js if file is provided */ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + diff --git a/_static/down-pressed.png b/_static/down-pressed.png new file mode 100644 index 00000000..5756c8ca Binary files /dev/null and b/_static/down-pressed.png differ diff --git a/_static/down.png b/_static/down.png new file mode 100644 index 00000000..1b3bdad2 Binary files /dev/null and b/_static/down.png differ diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/fonts/Inconsolata-Bold.ttf b/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 00000000..809c1f58 Binary files /dev/null and b/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/_static/fonts/Inconsolata-Regular.ttf b/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 00000000..fc981ce7 Binary files /dev/null and b/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/_static/fonts/Inconsolata.ttf b/_static/fonts/Inconsolata.ttf new file mode 100644 index 00000000..4b8a36d2 Binary files /dev/null and b/_static/fonts/Inconsolata.ttf differ diff --git a/_static/fonts/Lato-Bold.ttf b/_static/fonts/Lato-Bold.ttf new file mode 100644 index 00000000..1d23c706 Binary files /dev/null and b/_static/fonts/Lato-Bold.ttf differ diff --git a/_static/fonts/Lato-Regular.ttf b/_static/fonts/Lato-Regular.ttf new file mode 100644 index 00000000..0f3d0f83 Binary files /dev/null and b/_static/fonts/Lato-Regular.ttf differ diff --git a/_static/fonts/Lato/lato-bold.eot b/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/_static/fonts/Lato/lato-bold.eot differ diff --git a/_static/fonts/Lato/lato-bold.ttf b/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.ttf differ diff --git a/_static/fonts/Lato/lato-bold.woff b/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff differ diff --git a/_static/fonts/Lato/lato-bold.woff2 b/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/_static/fonts/Lato/lato-bolditalic.eot b/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/_static/fonts/Lato/lato-bolditalic.ttf b/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff b/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff2 b/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/_static/fonts/Lato/lato-italic.eot b/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.eot differ diff --git a/_static/fonts/Lato/lato-italic.ttf b/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.ttf differ diff --git a/_static/fonts/Lato/lato-italic.woff b/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff differ diff --git a/_static/fonts/Lato/lato-italic.woff2 b/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/_static/fonts/Lato/lato-regular.eot b/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.eot differ diff --git a/_static/fonts/Lato/lato-regular.ttf b/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/_static/fonts/Lato/lato-regular.ttf differ diff --git a/_static/fonts/Lato/lato-regular.woff b/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff differ diff --git a/_static/fonts/Lato/lato-regular.woff2 b/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/_static/fonts/RobotoSlab-Bold.ttf b/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/_static/fonts/RobotoSlab-Regular.ttf b/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/_static/fonts/fontawesome-webfont.eot b/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.eot differ diff --git a/_static/fonts/fontawesome-webfont.svg b/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/fonts/fontawesome-webfont.ttf b/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/_static/fonts/fontawesome-webfont.ttf differ diff --git a/_static/fonts/fontawesome-webfont.woff b/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.woff differ diff --git a/_static/fonts/fontawesome-webfont.woff2 b/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/jquery-3.2.1.js b/_static/jquery-3.2.1.js new file mode 100644 index 00000000..d2d8ca47 --- /dev/null +++ b/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

About

+

Clear Linux is a little different from other distros. Here are some important +tools and concepts for managing your install.

+
+

Training

+

Additional training materials are available in the how-to-clear GitHub* +project to help you get started with Clear Linux OS tools.

+

The training helps you create a customized OS that is based on Clear Linux OS and provides +complete details on the methods and tools used to create updates and how to +deploy updates to targets.

+

To complete the training, you will need a clean Clear Linux OS installation and a network connection. The project includes all files needed to complete the exercises.

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/concepts/autospec-about.html b/concepts/autospec-about.html new file mode 100644 index 00000000..b3e76435 --- /dev/null +++ b/concepts/autospec-about.html @@ -0,0 +1,1092 @@ + + + + + + + + + + + Autospec — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Autospec

+

autospec is a tool to assist in the automated creation and maintenance of +RPM packaging in Clear Linux* OS. Where a standard RPM build process using rpmbuild +requires a tarball and .spec file to start, autospec requires only a tarball +and package name to start.

+
+

How autospec works

+

autospec attempts to infer the requirements of the .spec file by analyzing +the source code and Makefile information. It will continuously run +updated builds based on new information discovered from build failures until it +has a complete and valid .spec file. Although not required, you can influence +the behavior of autospec by providing control files.

+

The basic process is described in the following steps:

+
    +
  1. The make autospec command generates a .spec based on +analysis of code and control files, if present.
  2. +
  3. autospec creates a build root with mock config.
  4. +
  5. autospec attempts to build an RPM from the generated .spec.
  6. +
  7. autospec detects any missed declarations in the .spec.
  8. +
  9. If build errors occur, autospec will scan the build log to try and detect +the root cause.
  10. +
  11. If autospec detects the root cause and knows how to continue, it will restart the build +automatically at step 1 with updated build instructions.
  12. +
  13. Otherwise, autospec will stop the build for user inspection and editing of control files +to resolve the errors. The user resumes the process at step 1 after errors are resolved.
  14. +
+

Following these steps, autospec continues to rebuild the package, based on +new information discovered from build failures, until it has a valid .spec. If +no build errors occur, RPM packages are successfully built.

+
+
+

Control files

+

It is possible to influence the behavior of autospec by providing control +files. These files may be used to alter the default behavior of the configure +routine, to blacklist build dependencies, etc. Control files must be located +in the same directory as the resulting .spec.

+

Table 1 shows control files used to control dependencies, for example.

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Control files to control dependencies
FilenameDescription
buildreq_addEach line in the file provides the name of a package to add as a +build dependency to the .spec.
buildreq_banEach line in the file is a build dependency that under no +circumstance should be automatically added to the build dependencies. +This is useful to block automatic configuration routines adding +undesired functionality, or to omit any automatically discovered +dependencies during tarball scanning.
pkgconfig_addEach line in the file is assumed to be a pkgconfig() build +dependency. Add the pkg-config names here, as autospec will +automatically transform the names into their pkgconfig($name) +style when generating the .spec.
pkgconfig_banEach line in this file is a pkgconfig() build dependency that should +not be added automatically to the build, much the same as +`` buildreq_ban``. As with pkgconfig_add, these names are +automatically transformed by autospec into their correct +pkgconfig($name)) style.
requires_addEach line in the file provides the name of a package to add as a +runtime dependency to the .spec.
requires_banEach line in the file is a runtime dependency that under no +circumstance should be automatically added to the runtime +dependencies. This is useful to block automatic configuration +routines adding undesired functionality, or to omit any automatically +discovered dependencies during tarball scanning.
+

Further control of the build can be achieved through the use of the +options.conf file. If this file does not exist, it is created by +autospec with default values. If certain deprecated configuration +files exists autospec will use the value indicated by those files and +remove them.

+

For a comprehensive list of control files, view the autospec readme.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/concepts/bundles-about.html b/concepts/bundles-about.html new file mode 100644 index 00000000..d9b51d7f --- /dev/null +++ b/concepts/bundles-about.html @@ -0,0 +1,1016 @@ + + + + + + + + + + + Bundles — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Bundles

+

Linux-based operating systems contain the code of several hundred, if +not thousands, of open source projects. To make this manageable, +distributions use a concept called “packages” to configure and compile +the source code of these projects into binaries.

+

Many distributions then split the content of these compiled packages +into so-called sub-packages, which are the granularity at which these +distributions deploy their software. With those kinds of distributions, +system administrators can then install and update sub-packages +individually or as a set, using tools such as “yum” and “apt-get.”

+

The Clear Linux* OS takes a slightly different approach. While we also use the +concept of packages to manage compiling source code into binaries, we do not +use the package concept to deploy software. Instead, we provide software +“bundles” that are installed and managed using swupd. +Each bundle contains as many or as few open source projects needed to provide a complete functionality.

+
+

Next steps

+

To put this concept into practice, see the following resources:

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/concepts/mixer-about.html b/concepts/mixer-about.html new file mode 100644 index 00000000..087f2a50 --- /dev/null +++ b/concepts/mixer-about.html @@ -0,0 +1,1039 @@ + + + + + + + + + + + Mixer — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Mixer

+

Clear Linux* OS is a powerful, modular, and customizable OS. Upstream Clear Linux OS offers +many images to support different environments and use-cases. There are +hundreds of bundles that will meet most, if not all, of your OS and software +needs.

+

However, if you need additional customization or content, Clear Linux OS provides the +mixer tool. Depending on your needs, the mixer tool allows you to:

+
    +
  • +
    Create a mix to create a distinct derivative of the Clear Linux OS that
    +
    contains your custom software.
    +
    +
  • +
+
+

Create a mix

+

When creating a mix, you can

+
    +
  • Use any existing upstream bundles with no modification.
  • +
  • Redefine what goes into existing bundles.
  • +
  • Create completely new, custom bundles with your own custom packages.
  • +
+

With mixer you are not required to incorporate every upstream release into +your mix. You decide which upstream versions to update your derivative to, as +illustrated in Figure 1.

+
+Creating a custom mix. +

Figure 1: With a custom mix, you add your custom bundle and decide which +upstream versions to update your mix to, on your own release cycle.

+
+

Creating your own mix forks away from the Clear Linux OS upstream and requires that you +act as your own OSV. There is a greater level of responsibility, requiring +more infrastructure and processes to adopt. However, with this approach, you +have a higher degree of control and customization of your custom Clear Linux OS.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/concepts/swupd-about.html b/concepts/swupd-about.html new file mode 100644 index 00000000..6ac49529 --- /dev/null +++ b/concepts/swupd-about.html @@ -0,0 +1,1070 @@ + + + + + + + + + + + swupd: software updater — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

swupd: software updater

+

swupd is an operating system software manager and update program +that operates at a file-level to enable verifiable integrity and update +efficiency.

+

Visit the swupd man page for more details.

+
+

Versioning

+

Using package managers to keep track of software version compatibility or compare multiple systems on many Linux distributions can be cumbersome.

+

With Clear Linux OS swupd, versioning happens at the individual +file-level. This means Clear Linux OS 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 +git internal version tracking, where any of the individual file +commits are tracked and move the pointer forward when changed.

+

While administrators can pick and choose which bundles a system has +installed, a single Clear Linux OS version number strictly represents one combination +of all software versions that can be installed onto a system of that Clear Linux OS +version. This method of whole OS versioning offers unique advantages. +Namely, system administrators can quickly compare multiple Clear Linux OS systems that share the same version for important software and security fixes.

+
+
+

Updating

+

Clear Linux OS promotes regular and automated updating of software to ensure +integration of new enhancements and security fixes. Refer to OS Security +documentation for more information.

+

Learn how to update your system using swupd.

+
+

Update efficiency

+

Because swupd operates at the individual file-level instead of a +package-level, Clear Linux OS updates are small and fast.

+

On many Linux* distributions, updates to a particular software package +require the whole software package to be downloaded and replaced +–even for one line of code.

+

In Clear Linux OS, updates are generated using the mixer tool. Mixer calculates the difference between two Clear Linux OS versions and makes available +binary deltas, which contain only the changed portion of files. This +binary delta technology [1] means swupd on Clear Linux OS systems only +needs to download and apply a small fraction of a package in order to +receive an update.

+

The mixer tool additionally computes updates files in +multiple compression formats, allowing swupd to utilize the most +efficiently compressed format for a Clear Linux OS system to minimize the cost +to update.

+
+
+

Update integrity

+

This is the basis of the swupd diagnose subcommand, which allows a Clear Linux OS system to check for any discrepancies to system files. As necessary, +swupd repair provides a useful way for software developers to remediate these discrepancies and return to a known filesystem state.

+
+
+
+

Bundles

+

Clear Linux* OS approaches software management differently than many other +Linux-based operating systems.

+

Instead of deploying granular software packages, Clear Linux OS uses the concept of +bundles with pre-associated software. Each bundle encapsulates a particular +use-case, which is enabled by composing all the required upstream open-source +projects and packages into one logical unit.

+

This bundle-based approach offers some unique advantages:

+
    +
  • Bundles provide a particular functionality, or stack, which +include all associated runtime dependencies.
  • +
  • Software package dependencies are resolved on the server, so file-level +conflicts do not occur on the target system after an update.
  • +
  • All combinations of bundles are able to co-exist on a Clear Linux OS system.
  • +
+

For more information on bundles, visit:

+ + + + + + +
[1]The software update technology for Clear Linux* OS was first presented at the Linux Plumbers conference in 2012.
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/concepts/telemetry-about.html b/concepts/telemetry-about.html new file mode 100644 index 00000000..fb08a01f --- /dev/null +++ b/concepts/telemetry-about.html @@ -0,0 +1,1063 @@ + + + + + + + + + + + Telemetrics — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Telemetrics

+

One of the key features of Clear Linux* OS is telemetry, which is used to +monitor system health. Telemetry enables developers to observe and proactively +address issues before end users are impacted.

+

Telemetrics is a combination word made from:

+
    +
  • Telemetry which is sensing and reporting data.
  • +
  • Analytics which is using visualization and statistical inferencing to make +sense of the reported data.
  • +
+

Clear Linux OS telemetry reports system-level debug/crash information using specialized probes. The +probes monitor system tasks such as swupd, kernel +oops, machine error checks, and BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to quickly focus on an issue and monitor corrective actions.

+

Clear Linux OS telemetry is fully customizable and can be used during software development +for debugging purposes. You can use libtelemetry in your code to create custom +telemetry records. You can also use telem-record-gen in script files or call +it from another program.

+
+

Note

+

The Clear Linux OS telemetry client is disabled by default until you decide to enable it. Telemetry is an opt-in solution and can be easily enabled or disabled.

+
+
+

Architecture

+

Clear Linux OS telemetry has two fundamental components, which are shown in figure 1:

+
    +
  • Client: generates and delivers records to the backend server via the network.

    +
  • +
  • Backend: captures records sent from the client and displays the cumulative +content through a specialized interface.

    +
    +

    Note

    +

    If you want to capture your own records for analysis, you must set up +your own backend server.

    +
    +
  • +
+
+Clear Linux Telemetry Architecture. +

Figure 1: Clear Linux Telemetry Architecture.

+
+

The telemetry client provides the front end of a complete telemetrics solution +and includes the following components:

+
    +
  • telemprobd, a daemon that prepares the telemetry records and spools them on disk prior to delivery
  • +
  • telempostd, a daemon that sends the records to the telemetry backend server or leaves them on disk until deleting after the record expires.
  • +
  • probes, that collect specific types of data from the operating system.
  • +
  • libtelemetry, that telemetrics probes use to create telemetrics records and +send them to the telemprobd daemon for further processing.
  • +
+

The telemetry backend provides the server-side component of a complete telemetrics solution and +consists of:

+
    +
  • Nginx web server.
  • +
  • Two Flask apps:
      +
    • Collector, an ingestion web app for records received from telemetrics-client probes.
    • +
    • TelemetryUI, a web app that exposes several views to visualize the telemetry data +and also provides a REST API to perform queries.
    • +
    +
  • +
  • PostgreSQL as the underlying database server.
  • +
+

The default telemetry backend server reports back to the Clear Linux OS development team +and is not viewable outside the Intel firewall. If you want to collect your +own records, then you must set up your own telemetry backend server.

+
+
+

Next steps

+

To put this concept into practice, refer to Telemetrics.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/disclaimers.html b/disclaimers.html new file mode 100644 index 00000000..cf1d6b84 --- /dev/null +++ b/disclaimers.html @@ -0,0 +1,985 @@ + + + + + + + + + + + <no title> — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +

Disclaimer

+
+

Important

+

This documentation is a work in progress and is being provided for +informative purposes only. Because it is a work in progress, there are +parts that are either missing or will be revised as code development +continues.

+
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/documentation_license.html b/documentation_license.html new file mode 100644 index 00000000..22cea2c0 --- /dev/null +++ b/documentation_license.html @@ -0,0 +1,983 @@ + + + + + + + + + + + <no title> — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
This work is licensed under a Creative Commons +Attribution 4.0 International License + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex-E.html b/genindex-E.html new file mode 100644 index 00000000..0a3be794 --- /dev/null +++ b/genindex-E.html @@ -0,0 +1,992 @@ + + + + + + + + + + + + Index — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

Index – E

+ + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex-H.html b/genindex-H.html new file mode 100644 index 00000000..6e8b83b7 --- /dev/null +++ b/genindex-H.html @@ -0,0 +1,981 @@ + + + + + + + + + + + + Index — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

Index – H

+ + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex-R.html b/genindex-R.html new file mode 100644 index 00000000..5f4b8c16 --- /dev/null +++ b/genindex-R.html @@ -0,0 +1,985 @@ + + + + + + + + + + + + Index — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

Index – R

+ + + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex-S.html b/genindex-S.html new file mode 100644 index 00000000..901def87 --- /dev/null +++ b/genindex-S.html @@ -0,0 +1,981 @@ + + + + + + + + + + + + Index — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

Index – S

+ + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex-all.html b/genindex-all.html new file mode 100644 index 00000000..baa10495 --- /dev/null +++ b/genindex-all.html @@ -0,0 +1,1029 @@ + + + + + + + + + + + + Index — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

Index

+ +
+ E + | H + | R + | S + +
+

E

+ + +
+ +

H

+ + +
+ +

R

+ + + +
+ +

S

+ + +
+ + + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..6f38047d --- /dev/null +++ b/genindex.html @@ -0,0 +1,992 @@ + + + + + + + + + + + Index — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + +

Index

+ +

Index pages by letter:

+ +
+

E + | H + | R + | S +

+ +

Full index on one page + (can be huge)

+
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/bare-metal-install-desktop/bare-metal-install-desktop.html b/get-started/bare-metal-install-desktop/bare-metal-install-desktop.html new file mode 100644 index 00000000..6fa31135 --- /dev/null +++ b/get-started/bare-metal-install-desktop/bare-metal-install-desktop.html @@ -0,0 +1,1505 @@ + + + + + + + + + + + Install Clear Linux* OS from the live desktop — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install Clear Linux* OS from the live desktop

+

This page explains how to boot the Clear Linux* OS live desktop image, from which +you can install Clear Linux OS or explore without modifying the host system.

+ +
+

System requirements

+

Before installing Clear Linux OS, verify that the host system supports the +installation:

+ +
+
+

Preliminary steps

+
    +
  1. Visit our Downloads page.

    +
  2. +
  3. Download the file clear-<release number>-live-desktop.iso, +also called the Clear Linux OS Desktop.

    +
    +

    Note

    +

    <release-number> is the latest Clear Linux OS auto-numbered release.

    +
    +
  4. +
  5. Verify and decompress the file per your OS.

    + +
  6. +
  7. Follow your OS instructions to create a bootable USB drive.

    + +
  8. +
+
+
+

Install from live image

+

After you download and burn the live desktop image on a USB drive, follow +these steps.

+
    +
  1. Insert the USB drive into an available USB slot.

    +
  2. +
  3. Power on the system.

    +
  4. +
  5. Open the system BIOS setup menu by pressing the F2 key. +Your BIOS setup menu entry point may vary.

    +
  6. +
  7. In the setup menu, enable the UEFI boot and set the USB drive as the +first option in the device boot order.

    +
  8. +
  9. Save these settings, e.g. F10, and exit.

    +
  10. +
  11. Reboot the target system.

    +
  12. +
  13. Select Clear Linux OS in the boot menu, shown in Figure 1.

    +
    +Clear Linux OS in boot menu +

    Figure 1: Clear Linux OS in boot menu

    +
    +
  14. +
+
+

Software (optional)

+

Explore Clear Linux OS bundles and other software. Double-click the +Software icon from the Activities menu, shown in Figure 2. +Ensure a network connection exists before launching the Software application.

+
+

Note

+

While running the Clear Linux OS live desktop image, the Software application is +intended only for exploration. Do not attempt to install applications during +exploration.

+
+
+
+

Launch the Clear Linux OS installer

+
    +
  1. After the live desktop image boots, scroll over the vertical +Activities menu at left.

    +
  2. +
  3. Click the Clear Linux OS penguin icon to launch the installer, shown in Figure 2.

    +
    +Install Clear Linux OS icon +

    Figure 2: Clear Linux OS installer icon

    +
    +
  4. +
  5. After the installer is launched, it will appear as shown in Figure 3.

    +
    +|CL| Desktop Installer +

    Figure 3: Clear Linux OS OS Desktop Installer

    +
    +
  6. +
  7. In Select Language, select a language from the options, or +type your preferred language in the search bar.

    +
  8. +
  9. Select Next.

    +
  10. +
+
+
+

Checking prerequisites

+

The installer automatically launches Checking Prerequisites, +which checks your target system for compatibility and network connectivity.

+

After the installer shows Prerequisites passed, select Next to +proceed with installation.

+
+Checking Prerequisites +

Figure 4: Checking Prerequisites

+
+
+

Network Proxy (optional)

+
    +
  1. Configure Network Proxy settings.
  2. +
  3. In the top right menu bar, select the Power button.
  4. +
  5. Select Wired Connected and then Wired Settings.
      +
    1. In Network Proxy, select the Gear icon to view +options.
    2. +
    3. Select an option from Automatic, Manual or Disabled.
    4. +
    5. Close Network Proxy.
    6. +
    +
  6. +
  7. Close Settings.
  8. +
+
+
+
+
+

Minimum installation requirements

+

To fulfill minimum installation requirements, complete the +Required options. We also recommend completing Advanced options.

+
+

Note

+
    +
  • The Install button is only highlighted after you complete +Required options.
  • +
  • Check marks indicate a selection has been made.
  • +
  • An Internet connection is required. You may want to launch a browser +prior to installation to verify your Internet connection.
  • +
+
+
+
+

Clear Linux OS Desktop Installer

+

The Clear Linux OS Desktop Installer Main Menu appears as shown in Figure 5. To meet +the minimum requirements, enter values in all submenus for the +Required options. After you complete them, your selections appear +below submenus and a check mark appears at right.

+
+Clear Linux OS Desktop Installer - Main Menu +

Figure 5: Clear Linux OS Desktop Installer - Main Menu

+
+
+ +
+

Required options

+
+

Select Time Zone

+
    +
  1. From the Main Menu, select Select Time Zone. UTC is selected +by default.

    +
  2. +
  3. In Select Time Zone, navigate to the desired time zone. +Or start typing the region and then the city. +(.e.g., America/Los_Angeles).

    +
  4. +
  5. Select Confirm.

    +
    +Select System Timezone +

    Figure 6: Select System Time Zone

    +
    +
  6. +
+
+
+

Select Keyboard

+
    +
  1. From the Main Menu, select Select Keyboard.

    +
  2. +
  3. Navigate to your desired keyboard layout. We select “us” for the +United States.

    +
  4. +
  5. Select Confirm.

    +
    +Select Keyboard menu +

    Figure 7: Select Keyboard menu

    +
    +
  6. +
+
+
+

Select Installation Media

+
    +
  1. From the Main Menu, select Select Installation Media.

    +
  2. +
  3. Choose an installation method: Safe Installation or +Destructive Installation.

    +
    +Select Installation Media +

    Figure 8: Select Installation Media

    +
    +
  4. +
+
+

Safe Installation

+

Use this method to safely install Clear Linux OS on media with available space, or +alongside existing partitions, and accept the Default partition schema. +If enough free space exists, safe installation is allowed.

+
+

Note

+

Clear Linux OS allows installation alongside another OS. Typically, when you boot +your system, you can press an F key to view and select a bootable +device or partition during the BIOS POST stage. Some BIOSes present the +Clear Linux OS partition, and you can select and boot it. However, other +BIOSes may only show the primary partition, in which case you will not be +able boot Clear Linux OS. Be aware of this possible limitation.

+
+
+
+

Destructive Installation

+

Use this method to destroy the contents of the target device, install Clear Linux OS +on it, and accept the Default partition schema.

+
+
+
+

Disk encryption

+

For greater security, disk encryption is supported using LUKS. Encryption is +optional.

+
    +
  1. To encrypt the root partition, select Enable Encryption, +as shown in Figure 9.

    +
    +Enable Encryption +

    Figure 9: Enable Encryption

    +
    +
  2. +
  3. When Encryption Passphrase appears, enter a passphrase.

    +
    +Encryption Passphrase +

    Figure 10: Encryption Passphrase

    +
    +
    +

    Note

    +

    Minimum length is 8 characters. Maximum length is 94 characters.

    +
    +
  4. +
  5. Enter the same passphrase in the second field.

    +
  6. +
  7. Select Confirm in the dialogue box.

    +
    +

    Note

    +

    Confirm is only highlighted if passphrases match.

    +
    +
  8. +
  9. Select Confirm in submenu.

    +
  10. +
+
+
+

Manage User

+
    +
  1. In Required Options, select Manage User.

    +
  2. +
  3. In User Name, enter a user name.

    +
    +Manage User +

    Figure 11: Manage User

    +
    +
  4. +
  5. In Login, create a login name. It must start with a letter +and can use numbers, hyphens, and underscores. Maximum length is 31 +characters.

    +
  6. +
  7. In Password, enter a password. Minimum length is +8 characters. Maximum length is 255 characters.

    +
  8. +
  9. In Confirm, enter the same password.

    +
    +

    Note

    +

    Administrator rights are selected by default. +For security purposes, the default user must be assigned as an +Administrator.

    +
    +
  10. +
  11. Select Confirm.

    +
    +

    Note

    +

    Select Cancel to return to the Main Menu.

    +
    +
  12. +
+
+

Modify User

+
    +
  1. In Manager User, select Manage User.

    +
  2. +
  3. Modify user details as desired.

    +
  4. +
  5. Select Confirm to save the changes you made.

    +
    +

    Note

    +

    Optional: Select Cancel to return to the Main Menu to +revert changes.

    +
    +
  6. +
+

Optional: Skip to Finish installation.

+
+
+
+

Telemetry

+

Choose whether to participate in telemetry. Telemetrics is a Clear Linux OS +feature that reports failures and crashes to the Clear Linux OS development +team for improvements. For more information, see Telemetrics.

+
    +
  1. From Required Options, select Telemetry.

    +
  2. +
  3. Select Yes.

    +
    +Enable Telemetry +

    Figure 12: Enable Telemetry

    +
    +
  4. +
  5. If you don’t wish to participate, select No.

    +
  6. +
+
+
+
+

Advanced options

+

After you complete the Required options, we recommend completing +Advanced options–though they’re not required. Doing so +customizes your development environment, so you’re ready to go immediately +after reboot.

+
+

Note

+

You can always add more bundles later with swupd.

+
+
+

Bundle Selection

+
    +
  1. On the Advanced menu, select Bundle Selection

    +
  2. +
  3. Select your desired bundles.

    +
    +Bundle Selection +

    Figure 13: Bundle Selection

    +
    +
  4. +
  5. Select Confirm.

    +
  6. +
  7. View the bundles that you selected.

    +
    +Bundle Selections - Advanced Options +

    Figure 14: Bundle Selections - Advanced Options

    +
    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Assign Hostname

+
    +
  1. In Advanced Options, select Assign Hostname.

    +
  2. +
  3. In Hostname, enter the hostname only (excluding the domain).

    +
    +Assign Hostname +

    Figure 15: Assign Hostname

    +
    +
    +

    Note

    +

    Hostname does not allow empty spaces. Hostname must start with an +alphanumeric character but may also contain hyphens. Maximum length of +63 characters.

    +
    +
  4. +
  5. Select Confirm.

    +
  6. +
+

Optional: Skip to Finish installation.

+
+
+

Kernel Configuration

+
    +
  1. In Kernel Configuration, navigate to select your desired +kernel. Native is selected by default.

    +
    +Kernel Configuration +

    Figure 16: Kernel Configuration

    +
    +
  2. +
  3. To add arguments, enter the argument in Add Extra Arguments.

    +
  4. +
  5. To remove an argument, enter the argument in Remove Arguments.

    +
  6. +
  7. Select Confirm.

    +
  8. +
+
+
+

Software Updater Configuration

+
    +
  1. In Advanced Options, select Software Updater Configuration.

    +
  2. +
  3. In Mirror URL, follow the instructions if you wish to +specify a different installation source.

    +
  4. +
  5. Enable Auto Updates is selected by default. If you do not +wish to enable automatic software updates, uncheck the box.

    +
    +Software Updater Configuration +

    Figure 17: Software Updater Configuration

    +
    +
  6. +
  7. Select Confirm.

    +
  8. +
+
+
+
+

Finish installation

+
    +
  1. When you are satisfied with your installation configuration, select +Install.

    +
    +Assign Hostname +

    Figure 18: Finish installation

    +
    +
  2. +
  3. If you do not enter a selection for all Required Options, +the Install button remains disabled, as shown +in Figure 19. Return to Required Options and make selections.

    +
    +Required Options - Incomplete +

    Figure 19: Required Options - Incomplete

    +
    +
  4. +
  5. After installation is complete, select Exit.

    +
  6. +
  7. Shut down the target system.

    +
  8. +
  9. Remove the USB or any installation media.

    +
  10. +
  11. Power on your system.

    +
    +

    Note

    +

    Allow time for the graphical login to appear. A login prompt shows the administrative user that you created.

    +
    +
  12. +
  13. Log in as the administrative user.

    +
  14. +
+

Congratulations. You successfully installed Clear Linux OS.

+
+

Default partition schema

+

Create partitions per requirements in Table 1.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Default partition schema
FileSystemLabelMount PointDefault size
VFAT(FAT32)boot/boot150MB
linux-swapswap 256MB
ext[234] or XFSroot/Size depends upon use case/desired bundles.
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/bare-metal-install-server/bare-metal-install-server.html b/get-started/bare-metal-install-server/bare-metal-install-server.html new file mode 100644 index 00000000..b2bacd11 --- /dev/null +++ b/get-started/bare-metal-install-server/bare-metal-install-server.html @@ -0,0 +1,1816 @@ + + + + + + + + + + + Install Clear Linux* OS on bare metal with live server — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install Clear Linux* OS on bare metal with live server

+

This page explains how to install Clear Linux* OS on bare metal from a bootable USB +drive using a live server image.

+ +
+

System requirements

+

Before installing Clear Linux OS, verify that the host system supports the +installation:

+ +
+
+

Download the latest Clear Linux OS live server image

+

Get the latest Clear Linux OS installer image from the Downloads page. Look for the +clear-[version number]-live-server.iso file.

+
    +
  1. Verify and decompress the file per your OS. +
  2. +
  3. Follow your OS instructions to create a bootable USB drive. +
  4. +
+
+
+

Install Clear Linux OS on your target system

+

Ensure that your system is configured to boot UEFI. The installation method +described below requires a wired Internet connection with DHCP.

+
+

Note

+

Alternatively, you can install Clear Linux OS over a wireless connection by first +using nmtui. Follow the nmtui instructions shown in Figure 2.

+
+

Follow these steps to install Clear Linux OS on the target system:

+
    +
  1. Insert the USB drive into an available USB slot.

    +
  2. +
  3. Power on the system.

    +
  4. +
  5. Open the system BIOS setup menu by pressing the F2 key. +Your BIOS setup menu entry point may vary.

    +
    +

    Note

    +

    Clear Linux OS supports UEFI boot. Some hardware may list UEFI and non-UEFI USB +boot entries. In this case, you should select the UEFI boot +option.

    +
    +
  6. +
  7. In the setup menu, enable the UEFI boot and set the USB drive as the first +option in the device boot order.

    +
  8. +
  9. Save these settings and exit.

    +
  10. +
  11. Reboot the target system.

    +
  12. +
  13. This action launches the Clear Linux OS installer boot menu, shown in figure 1.

    +
    +Clear Linux OS Installer boot menu +

    Figure 1: Clear Linux OS Installer boot menu

    +
    +
  14. +
  15. With Clear Linux OS highlighted, select Enter.

    +
  16. +
+
+
+

Launch the Clear Linux OS Installer

+
    +
  1. At the login prompt, enter root.

    +
  2. +
  3. Follow the onscreen instructions, shown in Figure 2, and +enter a temporary password.

    +
    +root login +

    Figure 2: root login

    +
    +
  4. +
  5. At the root prompt, enter clr-installer and +press Enter.

    +
    +clr-installer command +

    Figure 3: clr-installer command

    +
    +
  6. +
+
+
+

Minimum installation requirements

+

To fulfill minimum installation requirements, complete the +Required options. While not required, we encourage you to apply the +Recommended options. Advanced options are optional.

+
+

Note

+
    +
  • The Install button is only highlighted after you complete +Required options.
  • +
+
+
+ + +
+

Required options

+
+

Choose Timezone

+
    +
  1. From the Main Menu, navigate to Choose Timezone. +UTC is the default.
  2. +
  3. Select Enter.
  4. +
  5. In Select System Timezone, use Up/Down arrows +navigate to the desired timezone.
  6. +
+
    +
  1. Press Enter to confirm.

    +
    +Select System Timezone +

    Figure 5: Select System Timezone

    +
    +
  2. +
+
+
+

Choose Language

+
    +
  1. From the Main Menu, navigate to Choose Language.

    +
  2. +
  3. Select Enter.

    +
  4. +
  5. In Select System Language, navigate to your desired language.

    +
  6. +
  7. Press Enter to confirm.

    +
    +Select System Language +

    Figure 6: Select System Language

    +
    +
  8. +
+
+
+

Configure the Keyboard

+
    +
  1. From the Main Menu, select Configure the Keyboard.

    +
  2. +
  3. Select Enter.

    +
  4. +
  5. In Select Keyboard, navigate to the desired option.

    +
  6. +
  7. Select Enter to Confirm.

    +
  8. +
  9. Optional: In Test keyboard, type text to assure +that the keys map to your keyboard.

    +
    +Select Keyboard menu +

    Figure 7: Select Keyboard menu

    +
    +
  10. +
+
+
+

Configure Installation Media

+
    +
  1. From the Main Menu, select Configure Installation Media.

    +
  2. +
  3. Choose an installation method: +* Safe Installation +* Destructive Installation +* Advanced Configuration

    +
    +Select Installation Media +

    Figure 8: Select Installation Media

    +
    +
  4. +
  5. Select Rescan Media to show available installation targets.

    +
  6. +
+
+

Safe Installation

+

Use this method to safely install Clear Linux OS on media with available space, or +alongside existing partitions, and accept the Default partition schema. +If enough free space exists, safe installation is allowed. See also +Troubleshooting below.

+
+
+

Destructive Installation

+

Use this method to destroy the contents of the target device, install Clear Linux OS +on it, and accept the Default partition schema.

+
+

Note

+

From the Select Installation Media menu, select +Enable Encryption to encrypt the root filesystem for either +option above. See also Disk encryption for more information.

+
+
+
+

Advanced Configuration

+

Use this method to manually configure partitions. These must meet +Default partition schema. You may also choose Disk encryption during +configuration of each partition.

+
+

Note

+

Advanced Configuration is available in the installer versions 1.2.0 and +above.

+
+
    +
  1. From Select Installation Media, shown in Figure 8 above, +select Advanced Configuration.

    +
  2. +
  3. In Advanced Configuration, navigate to /dev/sda +and then press Enter.

    +
    +Advanced configuration menu +

    Figure 9: Advanced configuration menu

    +
    +
  4. +
  5. Choose a partition method:

    + +
  6. +
+
+
+

Manual Partition

+

We provide a simple example below.

+
    +
  1. Navigate to the unallocated media (e.g.,`/dev/sda`) until highlighted, as +shown in Figure 9.

    +
  2. +
  3. Press Enter to edit the partition.

    +
  4. +
  5. The Partition Setup menu appears, shown in Figure 10.

    +
    +

    Note

    +

    After adding the first partition, select Free Space to add another partition.

    +
    +
  6. +
+
+
+

root partition

+
    +
  1. We configure the root partition as shown in Figure 10. +Configuration of the root partition varies.

    +
    +root partition +

    Figure 10: root partition

    +
    +
  2. +
  3. Navigate to Add and press Enter.

    +
  4. +
+
+
+

boot partition

+
    +
  1. We configure the boot partition as shown in Figure 11.

    +
    +boot partition +

    Figure 11: boot partition

    +
    +
  2. +
  3. Navigate to Add and press Enter.

    +
  4. +
+
+
+

swap partition

+
    +
  1. In the File System pulldown menu, select swap, and +enter a label. We enter the minimum required size (e.g., 256M).

    +
    +swap partition +

    Figure 12: swap partition

    +
    +
  2. +
  3. Navigate to Add and press Enter.

    +
  4. +
  5. Next, navigate to Confirm and press Enter, +shown in Figure 13.

    +

    Manual partitioning is complete.

    +
    +Final configuration of disk partitions +

    Figure 13: Final configuration of disk partitions

    +
    +
  6. +
  7. You may skip to the Telemetry section below.

    +
  8. +
+
+
+
+

Disk encryption

+

For greater security, disk encryption is supported using LUKS for the +any partition except /boot on Clear Linux OS. To encrypt the root partition, see the +example below. Encryption is optional.

+
+

Encryption Passphrase

+

Clear Linux OS uses a single passphrase for encrypted partitions. Additional keys may +be configured post-installation using the cryptsetup tool.

+
    +
  1. Optional: Select [X] Encrypt to encrypt the root partition, +as shown in Figure 14.

    +
    +Encrypt partition +

    Figure 14: Encrypt partition

    +
    +
  2. +
  3. The Encryption Passphrase dialogue appears.

    +
    +

    Note

    +

    Minimum length is 8 characters. Maximum length is 94 characters.

    +
    +
    +Encryption Passphrase +

    Figure 15: Encryption Passphrase

    +
    +
  4. +
  5. Enter the same passphrase in the first and second field.

    +
  6. +
  7. Navigate to Confirm and press Enter.

    +
    +

    Note

    +

    Confirm is only highlighted if passphrases match.

    +
    +
  8. +
+
+
+
+

Telemetry

+

Telemetrics is a Clear Linux OS feature that reports failures and crashes to +the Clear Linux OS development team for improvements. For more detailed information, +visit our Telemetrics page.

+

Select your desired option on whether to participate in telemetry.

+
    +
  1. In the Main Menu, navigate to Telemetry and select +Enter.

    +
  2. +
  3. Select Tab to highlight your choice.

    +
  4. +
  5. Select Enter to confirm.

    +
    +Enable Telemetry +

    Figure 16: Enable Telemetry

    +
    +
  6. +
+
+
+ +
+

Advanced options

+
+

Configure Network Interfaces

+

By default, Clear Linux OS is configured to automatically detect the host network +interface using DHCP. However, if you want to use a static IP address or if +you do not have a DHCP server on your network, follow these instructions to +manually configure the network interface. Otherwise, default network +interface settings are automatically applied.

+
+

Note

+

If DHCP is available, no user selection may be required.

+
+
    +
  1. Navigate to Configure Network Interfaces and +select Enter.

    +
  2. +
  3. Navigate to the network interface you wish to change.

    +
  4. +
  5. When the desired interface is highlighted, select +Enter to edit.

    +
    +

    Note

    +

    Multiple network interfaces may appear.

    +
    +
    +Configure Network Interfaces +

    Figure 17: Configure Network Interfaces

    +
    +
  6. +
  7. Notice Automatic / dhcp is selected by default (at bottom).

    +

    Optional: Navigate to the checkbox Automatic / dhcp and select +Spacebar to deselect.

    +
    +Network interface configuration +

    Figure 18: Network interface configuration

    +
    +
  8. +
  9. Navigate to the appropriate fields and assign the desired +network configuration.

    +
  10. +
  11. To save settings, navigate to Confirm and select +Enter.

    +
    +

    Note

    +

    To revert to previous settings, navigate to the Cancel +and select Enter.

    +
    +
  12. +
  13. Upon confirming network configuration, the Testing Networking +dialogue appears. Assure the result shows success. If a failure occurs, +your changes will not be saved.

    +
  14. +
  15. Upon confirmation, you are returned to Network interface +settings.

    +
  16. +
  17. Navigate to and select Main Menu.

    +
  18. +
+

Optional: Skip to Finish installation.

+
+
+

Proxy

+

Clear Linux OS automatically attempts to detect proxy settings, as described in +Autoproxy. If you need to manually assign proxy settings, follow this +instruction.

+
    +
  1. From the Advanced options menu, navigate to Proxy, and +select Enter.

    +
  2. +
  3. Navigate to the field HTTPS Proxy.

    +
    +Configure the network proxy +

    Figure 19: Configure the network proxy

    +
    +
  4. +
  5. Enter the desired proxy address and port using conventional syntax, +such as: http://address:port.

    +
  6. +
  7. Navigate to Confirm and select Enter.

    +
  8. +
  9. To revert to previous settings, navigate to Cancel +and select Cancel.

    +
  10. +
+

Optional: Skip to Finish installation.

+
+
+

Test Network Settings

+

To manually assure network connectivity before installing Clear Linux OS, +select Test Network Settings and select Enter.

+

A progress bar appears as shown in Figure 20.

+
+Testing Networking dialogue +

Figure 20: Testing Networking dialogue

+
+
+

Note

+

Any changes made to network settings are automatically tested +during configuration.

+
+

Optional: Skip to Finish installation.

+
+
+

Bundle Selection

+
    +
  1. On the Advanced menu, select Bundle Selection

    +
  2. +
  3. Navigate to the desired bundle using Tab or Up/Down arrows.

    +
  4. +
  5. Select Spacebar to select the checkbox for each desired bundle.

    +
    +Bundle Selection +

    Figure 21: Bundle Selection

    +
    +
  6. +
  7. Optional: To start developing with Clear Linux OS, we recommend +adding os-clr-on-clr.

    +
  8. +
  9. Navigate to and select Confirm.

    +

    You are returned to the Advanced options menu.

    +
  10. +
+

Optional: Skip to Finish installation.

+
+
+

Manage User

+
+

Add New User

+
    +
  1. In Advanced Options, select Manage User.

    +
  2. +
  3. Select Add New User as shown in Figure 22.

    +
    +Add New User, User Name +

    Figure 22: Add New User

    +
    +
  4. +
  5. Optional: Enter a User Name.

    +
    +User Name +

    Figure 23: User Name

    +
    +
  6. +
  7. Enter a Login.

    +
    +

    Note

    +

    The User Login must be alphanumeric and can include hyphens and underscores. Maximum length is 31 characters.

    +
    +
  8. +
  9. Enter a Password.

    +
  10. +
  11. In Confirm, enter the same password.

    +
  12. +
  13. Optional: Navigate to the Administrative checkbox and select +Spacebar to assign administrative rights to the user.

    +
    +

    Note

    +

    Selecting this option enables sudo privileges for the user.

    +
    +
  14. +
  15. Select Confirm.

    +
    +

    Note

    +

    If desired, select Reset to reset the form.

    +
    +
  16. +
  17. In Manage User, navigate to Confirm.

    +
  18. +
  19. With Confirm highlighted, select Enter.

    +
  20. +
+
+
+

Modify / Delete User

+
    +
  1. In Manage User, navigate to the user you wish +to modify until highlighted, as shown in Figure 24.

    +
  2. +
  3. Select Enter to modify the user.

    +
    +Modify User +

    Figure 24: Modify User

    +
    +
  4. +
  5. Modify user details as desired.

    +
  6. +
  7. Navigate to Confirm until highlighted.

    +
    +

    Note

    +

    Optional: Select Reset to rest the form.

    +
    +
  8. +
  9. Select Confirm to save the changes you made.

    +
  10. +
  11. Optional: In Modify User, to delete the user, navigate to +the Delete button and select Enter.

    +
    +Delete User +

    Figure 25: Delete User

    +
    +
  12. +
+

You are returned to Manage User.

+
    +
  1. Navigate to Confirm until highlighted.
  2. +
  3. Select Enter to complete Manage User options.
  4. +
+

Optional: Skip to Finish installation.

+
+
+
+

Kernel Command Line

+

For advanced users, Clear Linux OS provides the ability to add or remove kernel +arguments. If you want to append a new argument, enter the argument here. +This argument will be used every time you install or update a +new kernel.

+
    +
  1. In Advanced Options, select Tab to highlight +Kernel Command Line.

    +
  2. +
  3. Select Enter.

    +
    +kernel command line +

    Figure 26: kernel command line

    +
    +
  4. +
  5. Choose from the following options.

    +
      +
    • To add arguments, enter the argument in Add Extra Arguments.
    • +
    • To remove an argument, enter the argument in +Remove Arguments.
    • +
    +
  6. +
  7. Select Confirm.

    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Kernel Selection

+
    +
  1. Select a kernel option. By default, the latest kernel release is +selected. Native kernel is shown in Figure 27.

    +
  2. +
  3. To select a different kernel, navigate to it using Tab.

    +
    +Kernel selection +

    Figure 27: Kernel selection

    +
    +
  4. +
  5. Select Spacebar to select the desired option.

    +
  6. +
  7. Navigate to Confirm and select Enter.

    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Swupd Mirror

+

If you have your own custom mirror of Clear Linux OS, you can add its URL.

+
    +
  1. In Advanced Options, select Swupd Mirror.

    +
  2. +
  3. To add a local swupd mirror, enter a valid URL in Mirror URL:

    +
  4. +
  5. Select Confirm.

    +
    +Swupd Mirror +

    Figure 28: Swupd Mirror

    +
    +
  6. +
+

Optional: Skip to Finish installation.

+
+
+

Assign Hostname

+
    +
  1. In Advanced Options, select Assign Hostname.

    +
  2. +
  3. In Hostname, enter the hostname only (excluding the domain).

    +
    +

    Note

    +

    Hostname does not allow empty spaces. Hostname must start with an +alphanumeric character but may also contain hyphens. Maximum length of +63 characters.

    +
    +
    +Assign Hostname +

    Figure 29: Assign Hostname

    +
    +
  4. +
  5. Navigate to Confirm until highlighted.

    +
  6. +
  7. Select Confirm.

    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Automatic OS Updates

+

Automatical OS updates are enabled by default. In the rare case that you +need to disable automatic software updates, follow the onscreen instructions, +shown in Figure 30.

+
    +
  1. In Advanced Options, select Automatic OS Updates.

    +
  2. +
  3. Select the desired option.

    +
    +Automatic OS Updates +

    Figure 30: Automatic OS Updates

    +
    +
  4. +
+

You are returned to the Main Menu.

+
+
+

Save Configuration Settings

+
    +
  1. In Advanced Options, select Save Configuration Settings.

    +
  2. +
  3. A dialogue box shows the installation configuration was saved to +clr-installer.yaml

    +
    +Automatic OS Updates +

    Figure 31: Automatic OS Updates

    +
    +
  4. +
  5. Use the clr-installer.yaml file to install Clear Linux OS, with the same +configuration, on multiple targets.

    +
  6. +
+
+
+
+

Finish installation

+
    +
  1. When you are satisfied with your installation configuration, navigate to +Install and select Enter.

    +
    +Select Install +

    Figure 32: Select Install

    +
    +
  2. +
  3. Select reboot.

    +
    +

    Note

    +

    If you do not assign an administrative user, upon rebooting, +enter root and set the root password immediately.

    +
    +
  4. +
  5. When the system reboots, remove any installation media present.

    +
  6. +
+
+

Default partition schema

+

Create partitions per requirements in Table 1.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Default partition schema
FileSystemLabelMount PointDefault size
VFAT(FAT32)boot/boot150MB
linux-swapswap 256MB
ext[234] or XFSroot/Size depends upon use case/desired bundles.
+
+
+
+

Troubleshooting

+
+

For Configure Installation Media

+

If a warning message appears that no media or space is available after +entering Configure Installation Media:

+
    +
  • Verify that target media has enough free space.
  • +
  • Confirm the USB is properly connected to and mounted on target media.
  • +
  • Review the size of existing partitions on the target media:
      +
    • Linux* OS: lsblk -a
    • +
    • Windows* OS: diskpart, then list disk
    • +
    • macOS* platform: diskutil list
    • +
    +
  • +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/bootable-usb/bootable-usb.html b/get-started/bootable-usb/bootable-usb.html new file mode 100644 index 00000000..68fb6e29 --- /dev/null +++ b/get-started/bootable-usb/bootable-usb.html @@ -0,0 +1,1175 @@ + + + + + + + + + + + Create a bootable USB drive — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Create a bootable USB drive

+

Follow the instructions applicable to your system to create a bootable Clear Linux* OS +USB drive:

+ +
+

Prerequisites

+
    +
  • Use an 8GB or larger USB drive.
  • +
  • Download the Clear Linux OS live boot image or interactive installer image from the +Downloads page.
  • +
+
+
+

Create a bootable USB drive on Linux*

+

Make sure you have have completed all Prerequisites.

+

Before burning the image onto your USB drive, +verify and decompress your image.

+
+

Burn the Clear Linux OS image onto a USB drive

+
+

Caution

+

Burning an image formats the USB drive, and will destroy all pre-existing +content. Back up your data before proceeding.

+
+
    +
  1. Open a terminal emulator and get root privilege.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Go to the directory with the decompressed image.

    +
  4. +
  5. Plug in the USB drive.

    +
  6. +
  7. Identify the USB drive using the lsblk command. This shows all +drives attached to the system, including the primary hard disk. In the +example output below, there are 4 drives +(/dev/sda, /dev/sdb, /dev/sdc, and /dev/sdd) attached, where +/dev/sda is primary drive. The remaining are three USB drives. The output +also shows the mounted partitions (under the MOUNTPOINT column) for each +drive.

    +
    lsblk
    +
    +
    +

    Example output:

    +
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    +sdd      8:48   1    15G  0 disk
    +├─sdd2   8:50   1     5G  0 part /run/media/user1/960c184f-3bb7-42b7-bcaf-0c1282
    +├─sdd3   8:51   1     8G  0 part /run/media/user1/704f3382-b26d-4f34-af1b-cb9aab
    +└─sdd1   8:49   1     2G  0 part
    +sdb      8:16   1  14.8G  0 disk
    +└─sdb1   8:17   1  14.8G  0 part /run/media/user1/PATRIOT_USB
    +sdc      8:32   1   7.3G  0 disk
    +└─sdc1   8:33   1   7.3G  0 part /run/media/user1/LINUX MINT
    +sda      8:0    0 335.4G  0 disk
    +├─sda4   8:4    0    28G  0 part
    +├─sda2   8:2    0   3.7G  0 part [SWAP]
    +├─sda7   8:7    0     6G  0 part /home
    +├─sda5   8:5    0     1G  0 part /boot
    +├─sda3   8:3    0   954M  0 part /boot/efi
    +├─sda1   8:1    0    28G  0 part
    +├─sda8   8:8    0    30G  0 part /
    +└─sda6   8:6    0   7.9G  0 part [SWAP]
    +
    +
    +
  8. +
  9. You must unmount a USB drive before burning an image onto it. Note that +some Linux distros automatically mount a USB drive when it is plugged in. +Unmount a USB drive with the umount command followed by the device +identifier/partition. For example:

    +
    umount /dev/sdd2
    +umount /dev/sdd3
    +
    +
    +
  10. +
  11. Burn the image onto the USB drive. The example below burns an uncompressed +image onto <your USB device>:

    +
    dd if=./clear-[version number]-[image type] of=<your USB device> oflag=sync bs=4M status=progress
    +
    +
    +
  12. +
+
+

Caution

+

Not fully unmounting the USB drive before burning an image could cause +file system checksum errors in it. If this happens, burn the image again +ensuring all the USB drive partitions are unmounted first.

+
+
+
+
+

Create a bootable USB drive on macOS*

+

Make sure you have have completed all Prerequisites.

+

Before burning the image onto your USB drive, +verify and decompress your image.

+
+

Burn the Clear Linux OS image onto a USB drive

+
+

Caution

+

Burning an image formats the USB drive, and will destroy all pre-existing +content. Back up your data before proceeding.

+
+
    +
  1. Launch the Terminal app.

    +
  2. +
  3. Go to the directory with the decompressed image.

    +
  4. +
  5. Plug in a USB drive and get its identifier:

    +
    diskutil list
    +
    +
    +

    This will list available disks and their partitions, as shown in Figure 1.

    +
    +Get USB drive identifier +

    Figure 1: macOS - Get USB drive identifier

    +
    +
  6. +
  7. Unmount the USB drive identified in the previous step. For example:

    +
    diskutil umountDisk /dev/disk2
    +
    +
    +
  8. +
  9. Burn the image onto the drive using the dd command. +The example below burns an uncompressed image onto <your USB device>:

    +
    sudo dd if=./clear-[version number]-[image type] of=<your USB device> bs=4m
    +
    +
    +

    To speed up the imaging process, add an ‘r’ in front of the disk identifier. +For example /dev/rdisk2.

    +

    Press <CTL>-T to check imaging progress.

    +
  10. +
  11. Eject the USB drive.

    +
    diskutil eject /dev/disk2
    +
    +
    +
  12. +
+
+
+
+

Create a bootable USB drive on Windows*

+

Make sure you have have completed all Prerequisites.

+

Before burning the image onto your USB drive, +verify and decompress your image.

+
+

Burn the Clear Linux OS image onto a USB drive

+
+

Caution

+

Burning an image formats the USB drive, and will destroy all pre-existing +content. Back up your data before proceeding.

+
+
    +
  1. Download the Rufus utility to burn the image onto a USB drive. +We use Rufus 3.5 here. Only use the latest version of Rufus.

    +
  2. +
  3. Plug in the USB drive and open Rufus.

    +
  4. +
  5. Under Boot selection, click the SELECT button.

    +
  6. +
  7. Find and select the previously extracted Clear Linux OS image file.

    +
  8. +
  9. Click the START button. See Figure 2.

    +
    +Rufus utility +

    Figure 2: Rufus utility

    +
    +
  10. +
  11. When the dialogue appears, select +Write in ISO image mode (Recommended). See Figure 3.

    +
    +ISOHybrid image detected +

    Figure 3: ISOHybrid image detected

    +
    +
  12. +
  13. Select the Windows taskbar menu for USB and select eject.

    +
  14. +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/compatibility-check.html b/get-started/compatibility-check.html new file mode 100644 index 00000000..327045f1 --- /dev/null +++ b/get-started/compatibility-check.html @@ -0,0 +1,1050 @@ + + + + + + + + + + + Check processor and EFI firmware compatibility — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Check processor and EFI firmware compatibility

+

Before installing Clear Linux* OS, check your host system’s processor and EFI firmware +compatibility. To check compatibilty, choose one of the following paths:

+ +
+

Note

+

This does not check other system components (for example: storage and +graphics) for compatibility with Clear Linux OS.

+
+
+

Check compatibility

+
    +
  1. Download the clear-linux-check-config.sh file.

    +

    If a browser is not available, use:

    +
    curl -O https://cdn.download.clearlinux.org/current/clear-linux-check-config.sh
    +
    +
    +
  2. +
  3. Make the script executable.

    +
    chmod +x clear-linux-check-config.sh
    +
    +
    +
  4. +
  5. Run the script.

    +
      +
    1. Check to see if the host’s processor and EFI firmware is capable of +running Clear Linux OS.

      +
      ./clear-linux-check-config.sh host
      +
      +
      +
    2. +
    3. Check to see if the host is capable of running Clear Linux OS in a container.

      +
      ./clear-linux-check-config.sh container
      +
      +
      +
    4. +
    +

    The script prints a list of test results similar to the output below. +All items should return a SUCCESS status. This example indicates the +host’s processor and EFI firmware support running Clear Linux OS.

    +
    Checking if host is capable of running Clear Linux* OS
    +
    +SUCCESS: 64-bit CPU (lm)
    +SUCCESS: Supplemental Streaming SIMD Extensions 3 (ssse3)
    +SUCCESS: Streaming SIMD Extension v4.1 (sse4_1)
    +SUCCESS: Streaming SIMD Extensions v4.2 (sse4_2)
    +SUCCESS: Advanced Encryption Standard instruction set (aes)
    +SUCCESS: Carry-less Multiplication extensions (pclmulqdq)
    +SUCCESS: EFI Firmware
    +
    +
    +
  6. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/get-started.html b/get-started/get-started.html new file mode 100644 index 00000000..e786ea15 --- /dev/null +++ b/get-started/get-started.html @@ -0,0 +1,1034 @@ + + + + + + + + + + + Get started — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/install-configfile.html b/get-started/install-configfile.html new file mode 100644 index 00000000..a427c9b1 --- /dev/null +++ b/get-started/install-configfile.html @@ -0,0 +1,1222 @@ + + + + + + + + + + + Install using clr-installer and a configuration file — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install using clr-installer and a configuration file

+

This page explains how to install Clear Linux* OS using the clr-installer tool +with a configuration file. The configuration file (clr-installer.yaml) +can be reused to duplicate the same installation configuration on additional +machines.

+ +
+

Prerequisites

+

Ensure that your target system supports the installation:

+ +
+
+

Process

+

This guide describes two methods for using a configuration file with the +clr-installer tool. You can use either method to achieve the same goal. Choose +the method that works best for your setup.

+

If you are installing Clear Linux OS for the first time, we recommend Example 1.

+

To clone an existing Clear Linux OS setup on another system, we recommend Example 2.

+
+

Example 1

+

This method uses a configuration file template to perform a new installation.

+

Perform the following steps:

+
    +
  1. Go to Downloads and download the latest Clear Linux OS Server image.

    +

    For example: +https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz

    +
  2. +
  3. Follow the instructions to Create a bootable USB drive based on your OS.

    +
  4. +
  5. Boot up the USB thumb drive.

    +
  6. +
  7. Select Clear Linux OS from the menu.

    +
  8. +
  9. In the console window, log in as root and set a password.

    +
  10. +
  11. Verify you have a network connection to the Internet and configure proxy +settings if you’re working behind a firewall.

    +
  12. +
  13. Download a live-server.yaml template.

    +

    For example:

    +
    curl -O https://download.clearlinux.org/releases/30010/clear/config/image/live-server.yaml
    +
    +
    +
  14. +
  15. Edit the template and change the settings as needed.

    +

    Commonly-changed settings include:

    +
  16. +
+
+
    +
  1. Under block-devices, set “file: “/dev/sda”” or enter your preferred device.
  2. +
  3. Under targetMedia, set the third partition size to “0” to use the entire disk space.
  4. +
  5. Under bundles, add additional bundles as needed.
  6. +
  7. Delete the post-install section unless you have post-installation scripts.
  8. +
  9. Under Version, set a version number. To use the latest version, set to “0”.
  10. +
+

Commonly-changed settings are shown in lines 15, 34, 37, and 51 below. +See Installer YAML Syntax for more details.

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
          #clear-linux-config
+
+          # c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
+          # vi: set shiftwidth=2 tabstop=2 expandtab:
+          # :indentSize=2:tabSize=2:noTabs=true:
+
+          # File:         developer-live-server.yaml
+          # Use Case:     Live Image which boots into login prompt
+          #               Optionally allows for installing Clear Linux OS
+          #               using the TUI clr-installer by running clr-installer
+
+          # switch between aliases if you want to install to an actual block device
+          # i.e /dev/sda
+          block-devices: [
+             {name: "bdevice", file: "/dev/sda"}
+          ]
+
+          targetMedia:
+          - name: ${bdevice}
+            type: disk
+            children:
+            - name: ${bdevice}1
+              fstype: vfat
+              mountpoint: /boot
+              size: "150M"
+              type: part
+            - name: ${bdevice}2
+              fstype: swap
+              size: "32M"
+              type: part
+            - name: ${bdevice}3
+              fstype: ext4
+              mountpoint: /
+              size: "0"
+              type: part
+
+          bundles: [os-core, os-core-update, NetworkManager, clr-installer, vim]
+
+          autoUpdate: false
+          postArchive: false
+          postReboot: false
+          telemetry: false
+          iso: true
+          keepImage: true
+          autoUpdate: false
+
+          keyboard: us
+          language: en_US.UTF-8
+          kernel: kernel-native
+
+          version: 30010
+
+
+
+

Start the installation with the command:

+
clr-installer --config live-server.yaml
+
+
+
+
+

Example 2

+

This method uses a saved configuration file from a previous installation, +which you can use to easily duplicate the installation on additional machines.

+

Perform the following steps:

+
    +
  1. Open a console window on a system where Clear Linux OS was installed to retrieve a +copy of the configuration file.

    +
  2. +
  3. In the console window, log in as root and enter your password.

    +
  4. +
  5. Change directory to /root and copy the clr-installer.yaml +file to a USB thumb drive.

    +
    cd /root
    +cp clr-installer.yaml <USB-thumb-drive>
    +
    +
    +
  6. +
+

Start the installation on the target with the following steps:

+
    +
  1. Go to Downloads and download the latest Clear Linux OS Server image.

    +

    For example: +https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz

    +
  2. +
  3. Follow the instructions to Create a bootable USB drive based on your OS.

    +
  4. +
  5. Boot up the USB thumb drive.

    +
  6. +
  7. Select Clear Linux OS from the menu.

    +
  8. +
  9. In the console window, log in as root and set a password.

    +
  10. +
  11. Verify you have a network connection to the Internet and configure proxy +settings if you’re working behind a firewall.

    +
  12. +
  13. Plug in and mount the USB thumb drive containing the retrieved +clr-installer.yaml configuration file.

    +
  14. +
  15. Start the installation with the command:

    +
    clr-installer --config clr-installer.yaml
    +
    +
    +
  16. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/gce.html b/get-started/virtual-machine-install/gce.html new file mode 100644 index 00000000..725b95ab --- /dev/null +++ b/get-started/virtual-machine-install/gce.html @@ -0,0 +1,1219 @@ + + + + + + + + + + + Launch Clear Linux* OS Compute Engine on Google Cloud Platform* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Launch Clear Linux* OS Compute Engine on Google Cloud Platform*

+

This page explains the steps to create a virtual machine instance of +Clear Linux* OS on Google Cloud Platform (GCP).

+ +
+

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.
  • +
+
+
+

Setup Clear Linux OS VM on GCP

+
    +
  1. Sign in to your Google* account on the +Google Cloud Console:

    +
    +Sign in to Google services +

    Figure 1: Google sign in screen

    +
    +
  2. +
  3. Google Cloud Platform uses Projects to manage resources. +Select or create a new project for hosting the Clear Linux OS VM.

    +
    +

    Note

    +

    Refer to the +Quickstart Using a Linux VM +guide to learn about the process of creating VM instances on GCP.

    +
    +
  4. +
  5. Navigate to the latest Clear Linux OS +release folder +to view the currently released GCE +image, and download the clear-<release number>-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.

    +
  6. +
  7. Create a Storage Bucket for hosting the Clear Linux OS image source archive +downloaded in the previous step:

    +
      +
    • Click the Navigation menu icon on the upper left screen menu.
    • +
    • Select the Storage item from the side bar on the left. You +will be sent to the Storage Browser tool or the Cloud Storage overview page.
    • +
    +
    +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.

    +
    +
    +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 because buckets in the Cloud Storage share +a single global namespace.

      +

      Leave the remaining options set to the defaults, and click the +Create button at the bottom to create a Bucket.

      +
      +Set a unique bucket name +

      Figure 4: Set bucket name

      +
      +
    • +
    +
  8. +
  9. Once the bucket is created, click the Upload files button +on the Bucket details page to upload the Clear Linux OS GCE image archive +to the named bucket:

    +
    +Cloud Storage bucket is available for storing objects +

    Figure 5: Cloud Storage bucket

    +
    +
    +Uploading the image source archive file +

    Figure 6: Uploading the image source archive file

    +
    +
    +Image archive imported complete +

    Figure 7: Importing complete

    +
    +
  10. +
  11. Browse the Compute Engine Image library page:

    +
      +
    • Click the Navigation menu icon on the upper left screen menu.

      +
    • +
    • Select the Compute Engine ‣ Images from the side bar on +the left.

      +
      +Go to Google Compute Engine Image library +

      Figure 8: Image library

      +
      +
    • +
    +
  12. +
  13. On the Compute Engine Image library page, click the [+] CREATE IMAGE +menu item to create a custom image:

    +
    +Create a Google Compute Engine image +

    Figure 9: Create image

    +
    +
  14. +
  15. In the VM image creation page, change the image source type to +Cloud Storage file.

    +
  16. +
  17. Under Source, select Browse.

    +
  18. +
  19. Locate the clear-<release number>-gce.tar.gz file, +and click Select.

    +
    +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.

    +
    +Clear Linux Compute Engine image is created +

    Figure 11: Image is created

    +
    +
  20. +
  21. After the Clear Linux OS image is imported, you can launch a VM instance running +Clear Linux OS:

    +
      +
    • Click the Navigation menu icon on the upper left screen menu.
    • +
    • Select Compute Engine ‣ VM Instances from the side bar on +the left.
    • +
    +
    +Go to VM instances catalog +

    Figure 12: VM instances catalog

    +
    +
  22. +
  23. If no VM instance was created in this project, you will be prompted to +create one.

    +
  24. +
  25. Alternatively, click the CREATE INSTANCE button on the VM +instances page to create a VM instance.

    +
    +Prompt for VM creation +

    Figure 13: VM creation

    +
    +
    +List of VM instances +

    Figure 14: VM instances list

    +
    +
      +
    • Under Region, choose a region based on the +Best practices for Compute Engine regions selection.

      +
    • +
    • Under Boot disk, click the Change button.

      +
      +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.

      +
      +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.

      +
      +Clear Linux requires setting up SSH keys +

      Figure 17: Set up SSH keys

      +
      +
      +

      Note

      +

      Clear Linux OS does not allow SSH login with a root account by default. +As a result, you must configure the VM instance with your +SSH public key, so that you are able to access it remotely.

      +

      Refer to OS Security for more details.

      +
      +
    • +
    • Click the Security tab, copy and paste your SSH public key:

      +
      +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, +because it is an invalid character while creating user accounts in +Clear Linux OS.

      +
      +
    • +
    • Click the Create button to create the Clear Linux OS VM.

      +
    • +
    +
  26. +
  27. The Clear Linux VM instance is created and assigned a public IP address:

    +
    +Clear Linux VM instance is created and started +

    Figure 19: Clear Linux VM instance is created and started

    +
    +
  28. +
  29. 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:

    +
    +SSH login to the Clear Linux VM +

    Figure 20: SSH login to Clear Linux VM

    +
    +
  30. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/hyper-v.html b/get-started/virtual-machine-install/hyper-v.html new file mode 100644 index 00000000..1227b2b5 --- /dev/null +++ b/get-started/virtual-machine-install/hyper-v.html @@ -0,0 +1,1054 @@ + + + + + + + + + + + Use Hyper-V* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use Hyper-V*

+

This page explains how to run Clear Linux* OS inside a +Windows Server Virtualization* or Hyper-V environment.

+ +
+

Prerequisites

+ +
+
+

Enable Hyper-V

+

Please refer to Install Hyper-V on Windows 10 to enable and configure +Hyper-V on your machine.

+
+
+

Create a virtual network

+

Once Hyper-V has been enabled on your Windows system you will need to +create a virtual network in the Hyper-V Manager. Refer to the +Create a virtual network documentation to create and configure +a virtual network.

+
+
+

Create a virtual machine

+
    +
  1. Download and decompress the latest hyperv disk image +clear-XXXXX-hyperv.img.gz, where XXXXX is the latest +available version of Clear Linux OS from our Downloads page.

    +
  2. +
  3. Create a virtual machine using the Hyper-V Manager:

    +
      +
    1. Choose Generation 2 when prompted to specify VM generation.
    2. +
    3. Choose Use an existing virtual hard disk and browse to find the +clear-XXXX-hyperv.vhdx file.
    4. +
    5. When finished, open VM settings, select Firmware Section and in Secure +Boot config, uncheck Enable Secure Boot.
    6. +
    +
    +

    Note

    +

    Currently, Clear Linux OS does not boot with secure boot +enabled.

    +
    +
  4. +
  5. Connect to your new VM and start it. You should see a prompt:

    +
    > User: root
    +
    +
    +
  6. +
  7. Set a root user password.

    +
  8. +
+

Your virtual machine running Clear Linux OS is ready!

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/kvm.html b/get-started/virtual-machine-install/kvm.html new file mode 100644 index 00000000..d7d9313d --- /dev/null +++ b/get-started/virtual-machine-install/kvm.html @@ -0,0 +1,1224 @@ + + + + + + + + + + + Run Clear Linux* OS as a KVM guest OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Clear Linux* OS as a KVM guest OS

+

This page explains how to run Clear Linux* OS in a virtualized environment using +KVM.

+ +
+

Install QEMU-KVM

+
    +
  1. Enable the Intel® Virtualization Technology (Intel® VT) and the +Intel® Virtualization Technology for Directed I/O (Intel® VT-d) in the +host machine’s BIOS.

    +
  2. +
  3. Log in and open a terminal emulator.

    +
  4. +
  5. Install QEMU*-KVM on the host machine. Below are some example distros.

    +
      +
    • On Clear Linux OS:

      +
      sudo swupd bundle-add kvm-host
      +
      +
      +
    • +
    • On Ubuntu* 18.04 LTS Desktop:

      +
      sudo apt-get install qemu-kvm
      +
      +
      +
    • +
    • On Mint* 19.1 “Cinnamon” Desktop:

      +
      sudo apt-get install qemu-kvm
      +
      +
      +
    • +
    • On Fedora* 30 Workstation:

      +
      sudo dnf install qemu-kvm
      +
      +
      +
    • +
    +
  6. +
+
+
+

Download and launch the virtual machine

+
    +
  1. Download the latest pre-built Clear Linux OS KVM image file from +the image directory. Look for +clear-<version>-kvm.img.xz. You can also use this command:

    +
    curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm'\.')
    +
    +
    +
  2. +
  3. Uncompress the downloaded image:

    +
    unxz -v clear-<version>-kvm.img.xz
    +
    +
    +
  4. +
  5. Download the 3 OVMF files (OVMF.fd, OVMF_CODE.fd, OVMF_VARS.fd) that +provides UEFI support for virtual machines.

    +
    curl -O https://cdn.download.clearlinux.org/image/OVMF.fd
    +curl -O https://cdn.download.clearlinux.org/image/OVMF_CODE.fd
    +curl -O https://cdn.download.clearlinux.org/image/OVMF_VARS.fd
    +
    +
    +
    +

    Note

    +

    The default OVMF files from Clear Linux OS may not work for some distro version(s). +You may get an ASSERT in the debug.log file when starting the VM. +If that is the case, use the distro-specific-OVMF files instead. +For example, the Clear Linux OS OVMF files work for Ubuntu 18.04 LTS, but not for Ubuntu 19.04 LTS. +Installing and using the OVMF files for Ubuntu 19.04 LTS resolved the ASSERT issue.

    +
    +
  6. +
  7. Download the start_qemu.sh script from the +image directory. This script +will launch the Clear Linux OS VM and provide console interaction within the same +terminal emulator window.

    +
    curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh
    +
    +
    +
  8. +
  9. Make the script executable:

    +
    chmod +x start_qemu.sh
    +
    +
    +
  10. +
  11. Start the Clear Linux OS KVM virtual machine:

    +
    sudo ./start_qemu.sh clear-<version>-kvm.img
    +
    +
    +
  12. +
  13. Log in as root user and set a new password.

    +
  14. +
+
+
+

SSH access into the virtual machine

+

To interact with the Clear Linux OS VM through SSH instead of the console it was +launched from, follow these steps.

+
    +
  1. Configure SSH in the Clear Linux OS VM to allow root login:

    +
    cat > /etc/ssh/sshd_config << EOF
    +  PermitRootLogin yes
    +  EOF
    +
    +
    +
  2. +
  3. Enable and start SSH server in the Clear Linux OS VM:

    +
    systemctl enable sshd
    +systemctl start sshd
    +
    +
    +
  4. +
  5. Determine the IP address of the host on which you will launch the VM. +Substitute <ip-addr-of-kvm-host> in the next step with this information.

    +
    ip a
    +
    +
    +
  6. +
  7. SSH into the Clear Linux OS VM using the default port of 10022:

    +
    ssh -p 10022 root@<ip-addr-of-kvm-host>
    +
    +
    +
  8. +
+
+
+

Optional: Add the GNOME Display Manager (GDM)

+

To add GDM to the Clear Linux OS VM, follow these steps:

+
    +
  1. Shutdown the active Clear Linux OS VM.

    +
    poweroff
    +
    +
    +
  2. +
  3. Install the Spice viewer on the local host or remote system. Below are some +example distros.

    +
      +
    • On Clear Linux:

      +
      sudo swupd bundle-add virt-viewer
      +
      +
      +
    • +
    • On Ubuntu* 18.04 LTS Desktop:

      +
      sudo apt-get install virt-viewer
      +
      +
      +
    • +
    • On Mint* 19.1 “Cinnamon” Desktop:

      +
      sudo apt-get install virt-viewer
      +
      +
      +
    • +
    • On Fedora* 30 Workstation:

      +
      sudo dnf install virt-viewer
      +
      +
      +
    • +
    +
  4. +
  5. Modify the start_qemu.sh script to increase memory (-m), add +graphics driver (-vga), and add Spice (-spice, -usb, and +-device) support.

    +
    qemu-system-x86_64 \
    +    -enable-kvm \
    +    ${UEFI_BIOS} \
    +    -smp sockets=1,cpus=4,cores=2 -cpu host \
    +    -m 4096 \
    +    -vga qxl \
    +    -nographic \
    +    -spice port=5924,disable-ticketing \
    +    -usb \
    +    -device usb-tablet,bus=usb-bus.0 \
    +    -drive file="$IMAGE",if=virtio,aio=threads,format=raw \
    +    -netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \
    +    -device virtio-net-pci,netdev=mynet0 \
    +    -debugcon file:debug.log -global isa-debugcon.iobase=0x402 $@
    +
    +
    +
  6. +
  7. Due to changes in the start_qemu.sh script from the previous step, +using the same OVMF files will result in the VM not booting properly and +you end up in the the UEFI shell. The easiest way to avoid this is to delete +the OVMF files and restore the originals before relaunching the VM.

    +
  8. +
  9. Increase the size of the VM by 10GB to accommodate the GDM installation:

    +
    qemu-img resize -f raw clear-<version>-kvm.img +10G
    +
    +
    +
  10. +
  11. Relaunch the Clear Linux OS VM:

    +
    sudo ./start_qemu.sh clear-<version>-kvm.img
    +
    +
    +
  12. +
  13. Determine the IP address of the host on which you will launch the VM. +Substitute <ip-addr-of-kvm-host> in the next step with this information.

    +
    ip a
    +
    +
    +
  14. +
  15. From the local host or remote system, open a new terminal emulator window +and connect into the Clear Linux OS VM using the Spice viewer:

    +
    remote-viewer spice://<ip-address-of-kvm-host>:5924
    +
    +
    +
  16. +
  17. Log in as root user into the Clear Linux OS VM.

    +
  18. +
  19. Follow these steps from Increase virtual disk size of an image to resize the partition of the virtual disk of the VM.

    +
  20. +
  21. Add GDM to the Clear Linux OS VM:

    +
    swupd bundle-add desktop-autostart
    +
    +
    +
  22. +
  23. Reboot the Clear Linux OS VM to start GDM:

    +
    reboot
    +
    +
    +
  24. +
  25. Go through the GDM out-of-box experience (OOBE).

    +
  26. +
  27. The default aspect ratio of the GDM GUI for the Clear Linux OS VM is 4:3. To change +it, use GDM’s Devices > Displays setting tool (located at the top-right corner).

    +
  28. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/virtualbox-cl-installer.html b/get-started/virtual-machine-install/virtualbox-cl-installer.html new file mode 100644 index 00000000..c239f8d2 --- /dev/null +++ b/get-started/virtual-machine-install/virtualbox-cl-installer.html @@ -0,0 +1,1357 @@ + + + + + + + + + + + Install a Clear Linux* OS VM in VirtualBox* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install a Clear Linux* OS VM in VirtualBox*

+

This page explains how to create a virtual machine on the VirtualBox +hypervisor with Clear Linux* OS as the guest operating system. These instructions +support the Clear Linux OS live-server installer to create the Clear Linux OS virtual machine (VM).

+ +
+

Prerequisites

+
    +
  1. Enable virtualization, such as Intel® Virtualization Technology +(Intel® VT), on the host system from EFI/BIOS.
  2. +
  3. Download and install VirtualBox version 6.0 or greater from +VirtualBox using the VirtualBox Installation Instructions for your +platform.
  4. +
+
+
+

Download and extract the Clear Linux OS installer ISO

+
    +
  1. Download the clear-<VERSION>-live-server.iso.xz of +Clear Linux OS on the Downloads page.

    +
  2. +
  3. Validate the integrity of the downloaded image by checking the file hash +and signatures. Refer to Validate signatures for detailed steps.

    +
  4. +
  5. Decompress the downloaded image.

    +
      +
    • On Windows you can use 7zip to extract the file by right-clicking the +file to Extract Here (in the same directory)
    • +
    +
    +7zip extract here command +

    Figure 1: 7zip extract here command

    +
    +
      +
    • On Linux :

      +
      xz -d clear-<VERSION>-live-server.iso.xz
      +
      +
      +
    • +
    +
  6. +
  7. Delete the originally downloaded compressed file.

    +
  8. +
+
+
+

Create a new VirtualBox virtual machine

+

A new VM needs to be created in VirtualBox Manager where Clear Linux OS +will be installed. General instructions for creating a virtual machine and +details about using different settings are available in the VirtualBox manual section Creating Your First Virtual Machine.

+
    +
  1. Launch the VirtualBox Manager from your host system.

    +
  2. +
  3. Click the New button to create a new VM.

    +
  4. +
  5. Choose Expert mode.

    +
  6. +
  7. On the Create Virtual Machine screen, enter the following settings:

    +
      +
    • Name: Choose name (e.g. ClearLinuxOS-VM).

      +
    • +
    • Type: Linux

      +
    • +
    • Version: Linux 2.6 / 3.x / 4.x (64-bit)

      +
    • +
    • Hard disk: Create a virtual hard disk now

      +
    • +
    • Memory size default: 2048 MB (Adjust appropriately.)

      +
      +

      Note

      +

      Later, if you want to change the amount of RAM allocated, power down your VM. Return to Settings > System and change +Base Memory to the desired size.

      +
      +
    • +
    +
    +Create Virtual Machine +

    Figure 2: Create Virtual Machine

    +
    +
  8. +
  9. Click Create.

    +
  10. +
  11. On the Create Virtual Hard Disk screen, select:

    +
      +
    • File location
    • +
    • File size: 32.00 GB. Adjust size to your needs.
    • +
    • Hard disk file type: VDI (VirtualBox Disk Image)
    • +
    • Storage on physical hard disk:Dynamically allocated
    • +
    +
    +Create Virtual Hard Disk +

    Figure 3: Create Virtual Hard Disk

    +
    +
  12. +
  13. Click Create.

    +

    A new virtual machine will be created and appear in the VirtualBox Manager.

    +
  14. +
  15. Click Settings to configure the Clear Linux OS VM.

    +
  16. +
  17. In the left-hand menu, navigate to the System menu.

    +
  18. +
  19. On the Motherboard tab, select the Chipset menu, and +then select ICH9. See Figure 4.

    +
    +

    Note

    +

    You can select which chipset will be presented to the virtual machine. +Consult the VM VirtualBox User Manual for more details.

    +
    +
  20. +
  21. In Enabled Features, check these boxes:

    +
      +
    • Enable I/O APIC
    • +
    • Enable EFI (special OSes only)
    • +
    +
    +Settings > System +

    Figure 4: Settings > System

    +
    +
    +

    Note

    +

    By default, only 1 virtual CPU is allocated to the new VM. Consider +increasing the number of virtual processors allocated to the virtual +machine under Settings > System > Processor for increased +performance.

    +
    +
  22. +
  23. Click OK.

    +
  24. +
+
+
+

Install Clear Linux OS on the VirtualBox VM

+

Clear Linux OS is ready to be installed.

+
+

Mount the installation ISO

+

The Clear Linux OS installer ISO needs to be mounted as a virtual CD-ROM on the VM +before powering the VM on.

+
    +
  1. From the ClearLinux-OS Settings menu at left, select +Storage.

    +
  2. +
  3. From Storage Devices, middle column, click the blue +disk labeled Empty.

    +
  4. +
  5. From the Attributes menu, click the blue CD disk next to +the Optical Drive drop down menu and click +Choose Virtual Optical Disk File…

    +
    +Choose Virtual Optical Disk Drive +

    Figure 5: Choose Virtual Optical Disk Drive

    +
    +
  6. +
  7. Where there appears Please choose a virtual optical disk file, +select the ISO file and click Open.

    +
    +Mounting an ISO +

    Figure 6: Mounting an ISO

    +
    +
  8. +
  9. Click OK to exit and return to the main VirtualBox Manager.

    +
  10. +
+
+
+

Install Clear Linux OS with live-server installer

+
    +
  1. In the VirtualBox Manager, select virtual machine you created and click Start.

    +
    +Start the installer +

    Figure 7: Start the installer

    +
    +
    +

    Note

    +

    To release the mouse cursor from the VM console window, press the right +Ctrl key on the keyboard.

    +
    +
  2. +
  3. When Clear Linux Installer in boot manager appears, +select Enter. Do not install the bundle desktop-autostart.

    +
  4. +
  5. Follow the steps in Install Clear Linux* OS on bare metal with live server to +install Clear Linux OS onto the VM virtual disk. Note:

    +
      +
    1. In Configure Installation Media, navigate top +VBOX HARDDISK, and then select Confirm.
    2. +
    3. In Advanced options ‣ Manage User, create an +administrative user.
    4. +
    5. Do not install the bundle desktop-autostart.
    6. +
    +
  6. +
  7. When Clear Linux OS installation is complete, click Exit.

    +
  8. +
  9. At the prompt, enter:

    +
    shutdown now
    +
    +
    +
  10. +
+
+
+

Unmount the ISO

+

The Clear Linux OS installer ISO needs to be unmounted to allow the VM to boot from the +virtual hard disk.

+
    +
  1. Return to the VirtualBox Manager.

    +
  2. +
  3. Click Settings to configure the Clear Linux OS VM.

    +
  4. +
  5. From the VM Settings window, navigate to the Storage +pane in the left menu.

    +
  6. +
  7. From the middle Storage Devices column, click the blue CD disk +labeled clear-<VERSION>-live-server.iso under the +Controller: IDE.

    +
  8. +
  9. From the Attributes column at right, in Optical Drive, +select the blue CD icon beside and click +Remove Disk from Virtual Drive.

    +
    +Remove Disk from Virtual Drive +

    Figure 8: Remove Disk from Virtual Drive

    +
    +
  10. +
  11. Click OK to exit the VM Settings menu and return to +the main VirtualBox Manager.

    +
  12. +
+
+
+

Install VirtualBox Linux Guest Additions

+

Clear Linux OS provides Linux Guest Additions drivers for full compatibility using an +install script in the kernel-lts (Long Term Support) bundle by Clear Linux OS.

+
    +
  1. From the VirtualBox Manager select the Clear Linux OS VM, and select Start.

    +
  2. +
  3. In the VM Console, log in as the administrative user previously created.

    +
    +

    Note

    +

    A message may appear: “A kernel update is available: you may wish +to reboot the system.”

    +

    To update the kernel, enter:

    +
    sudo reboot
    +
    +
    +

    At initial login, enter the administrative user’s password and continue.

    +
    +
  4. +
  5. Validate the installed kernel is kernel-lts by checking the output +of the uname -r command. It should end in .lts or .lts2018.

    +
    uname -r
    +<VERSION>.lts
    +
    +
    +

    If the running kernel is not lts: install the LTS kernel manually, +update the bootloader, and check again:

    +
    sudo swupd bundle-add kernel-lts
    +clr-boot-manager set-kernel $(basename $(realpath /usr/lib/kernel/default-lts))
    +clr-boot-manager update
    +reboot
    +
    +
    +
  6. +
  7. Remove any kernel bundles that do not end in -lts or kernel-install +to simplify and avoid conflicts:

    +
    sudo swupd bundle-list | grep kernel
    +sudo swupd bundle-remove <NON-LTS-KERNEL>
    +
    +
    +
  8. +
  9. In the VM Console top menu, click Devices, and select +Insert Guest Additions CD image… to mount the VirtualBox driver +installation to the Clear Linux OS VM.

    +
    +Insert Guest Additions CD image +

    Figure 9: Insert Guest Additions CD image

    +
    +
  10. +
  11. If a dialogue appears, “VBx_GAs_6.0.8… Would you like to run it?”, +select Cancel.

    +

    Instead, we provide a script to patch and install VirtualBox drivers on Clear Linux OS.

    +
  12. +
  13. Open a Terminal and enter the script:

    +
    sudo install-vbox-lga
    +
    +
    +
    +

    Note

    +

    Successful installation shows: “Guest Additions installation complete”. +If drivers are already installed, don’t re-install them.

    +
    +
  14. +
  15. Shut down the system. Select Machine ‣ ACPI Shutdown.

    +
    +Powering off a VirtualBox VM +

    Figure 10: Powering off a VirtualBox VM

    +
    +
  16. +
  17. Select Settings, Display.

    +
  18. +
  19. In Graphics Controller, select VBoxSVGA +to adjust screen size dynamically.

    +
    +Remove Disk from Virtual Drive +

    Figure 11: VirtualBox hardware acceleration error

    +
    +
  20. +
  21. In the VirtualBox Manager, select Start.

    +
  22. +
  23. In the VM console, login and verify the VirtualBox drivers are loaded:

    +
    lsmod | grep ^vbox
    +
    +
    +

    You should see drivers loaded with names beginning with vbox: +(e.g., vboxvideo, vboxguest).

    +
  24. +
  25. Add desktop-autostart for a full desktop experience.

    +
    sudo swupd bundle-add desktop-autostart
    +
    +
    +
  26. +
  27. Reboot the VM and log in with the administrative user.

    +
    sudo reboot
    +
    +
    +
  28. +
+

The Clear Linux OS VM running on VirtualBox is ready to develop and explore.

+
+
+
+

Troubleshooting

+
    +
  1. Problem: On a Microsoft* Windows* OS, VirtualBox encounters an error when +trying to start a VM indicating VT-X/AMD-v hardware acceleration is not +available on your system.

    +
    +Remove Disk from Virtual Drive +

    Figure 12: VirtualBox hardware acceleration error

    +
    +

    Solution: First, double check the Prerequisites section to make +sure Hardware accelerated virtualization extensions have been enabled +in the host system’s EFI/BIOS.

    +

    Hardware accelerated virtualization, may get disabled for VirtualBox when +another hypervisor, such as Hyper-V is enabled.

    +

    To disable Hyper-V execute this command in an +Administrator: Command Prompt or Powershell, and reboot the system:

    +
    bcdedit /set {current} hypervisorlaunchtype off
    +
    +
    +

    To enable Hyper-V again, execute this command in an +Administrator: Command Prompt or Powershell, and reboot the system:

    +
    bcdedit /set {current} hypervisorlaunchtype Auto
    +
    +
    +
  2. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/vmw-player-preconf.html b/get-started/virtual-machine-install/vmw-player-preconf.html new file mode 100644 index 00000000..779334b9 --- /dev/null +++ b/get-started/virtual-machine-install/vmw-player-preconf.html @@ -0,0 +1,1390 @@ + + + + + + + + + + + Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Get started »
  • + +
  • Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS

+

This page explains how to deploy a pre-configured Clear Linux OS VMware image on +VMware Workstation 14 Player.

+ +
+

Overview

+

VMware Workstation 14 Player is a type 2 hypervisor. It runs on top of +another operating system such as Windows* or Linux*. With VMware ESXi, you +can create, configure, manage, and run Clear Linux* OS VMs +on your local system.

+
+

Note

+

Screenshots in this document show VMware Workstation 14 Player for Windows. +Menus and prompts in the Linux version have minor wording differences.

+
+
+
+

Install the VMware Workstation Player hypervisor

+
    +
  1. Enable Intel® VT and +Intel® VT-d in +your system’s BIOS.

    +
  2. +
  3. VMware Workstation 14 Player is available for Windows and Linux. +Download your preferred version.

    +
  4. +
  5. Depending on which OS you’re running, install it by following one of these +instructions:

    +
      +
    • On supported Linux distros:

      +
        +
      1. Enable a GUI desktop.

        +
      2. +
      3. Start a terminal emulator.

        +
      4. +
      5. Start the installer by issuing the command below and following the +guided steps.

        +
        sudo sh ./VMware-Player-[version number].x86_64.bundle
        +
        +
        +
      6. +
      +
    • +
    • On Windows:

      +
        +
      1. Start the installer.
      2. +
      3. Follow the setup wizard.
      4. +
      +
    • +
    +
  6. +
+

For additional help, see the VMware Workstation Player Documentation.

+
+
+

Download the latest Clear Linux OS VMware image

+

Get the latest Clear Linux OS VMware image from the image repository. +Look for clear-[version number]-vmware.vmdk.xz. You can also use +this command:

+
curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware)
+
+
+

Visit Clear Linux* OS image types for additional information about all available Clear Linux OS images.

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Start Command Prompt.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Get the SHA512 checksum of the image with the command:

    +
    CertUtil -hashfile ./clear-[version number]-[image type].[compression type] sha512
    +
    +
    +
  8. +
  9. Manually compare the output with the original checksum value shown in +the downloaded checksum file and make sure they match.

    +
  10. +
+
+
+

Decompress the Clear Linux OS image

+

Released Clear Linux OS images are compressed with either GNU zip (.gz) or XZ +(.xz). The compression type depends on the target platform or +environment. To decompress the image, follow these steps:

+
    +
  1. Download and install 7-Zip.

    +
  2. +
  3. Go to the directory with the downloaded image and right-click it.

    +
  4. +
  5. From the pop-up menu, select 7-Zip and select +Extract Here as shown in Figure 1.

    +
    +7-Zip extract file +

    Figure 1: Windows 7-Zip extract file.

    +
    +
  6. +
+
+
+
+

Image types

+

Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific.

+ + ++++ + + + + + + + + + + + + + +
Table 1: Types of platform-independent Clear Linux OS images
Image TypeDescription
live-desktop.img or live-desktop.isoImage for booting to GNOME* desktop to preview or install the OS.
live-server.img or live-server.isoImage for booting to server command prompt to preview or install the OS.
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2: Types of platform-specific Clear Linux OS images
Image TypeDescription
aws.imgImage suitable for use with Amazon* AWS*.
azure.vhdVirtual Hard Disk for use on Microsoft* Azure* cloud platform.
azure-docker.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with Docker* pre-installed.
azure-machine-learning.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with the machine-learning-basic bundle installed.
cloudguest.imgImage with generic cloud guest virtual machine (VM) requirements installed.
gce.tarImage with the Google Compute Engine (GCE) specific kernel.
hyperv.vhdxVirtual Hard Disk for use with Microsoft Hyper-V* hypervisor. Includes optimized kernel for Hyper-V.
kvm.imgImage for booting in a simple VM with start_qemu.sh. Includes +optimized kernel for KVM.
kvm-legacy.imgImage for booting in a simple VM using legacy BIOS, if using start_qemu.sh make sure to remove -bios parameter.
pxe.tarImage suitable for use with PXE server.
vmware.vmdkVirtual Machine Disk for VMware* platforms inclduing Player, Workstation, and ESXi.
+

We also provide instructions for other operating systems:

+ +
+
+

Create and configure a new VM

+
    +
  1. Start the VMware Workstation Player app.

    +
  2. +
  3. On the home screen, click Create a New Virtual Machine. See +figure 1.

    +
    +VMware Workstation 14 Player - Create a new virtual machine +

    Figure 1: VMware Workstation 14 Player - Create a new virtual machine

    +
    +
  4. +
  5. On the Welcome to the New Virtual Machine Wizard screen, +select the I will install the operating system later option. +See figure 2.

    +
    +VMware Workstation 14 Player - Select install operating system +

    Figure 2: VMware Workstation 14 Player - Select install operating +system later.

    +
    +
  6. +
  7. Click the Next button.

    +
  8. +
  9. On the Select a Guest Operating System screen, set the +Guest operating system setting to Linux. +See figure 3.

    +
    +VMware Workstation 14 Player - Select guest operating system type +

    Figure 3: VMware Workstation 14 Player - Select guest operating system +type

    +
    +
  10. +
  11. Set Version setting to +Other Linux 3.x or later kernel 64-bit.

    +
  12. +
  13. Click the Next button.

    +
  14. +
  15. On the Name the Virtual Machine screen, give your new VM a +name. See figure 4.

    +
    +VMware Workstation 14 Player - Name virtual machine +

    Figure 4: VMware Workstation 14 Player - Name virtual machine

    +
    +
  16. +
  17. Click the Next button.

    +
  18. +
  19. On the Specify Disk Capacity screen, click +the Next button. Keep the default disk settings unchanged. +When we attach the pre-configured Clear Linux OS VMware image, we will remove the +default virtual disk and replace it with the pre-configured one. See +figure 5.

    +
    +VMware Workstation 14 Player - Set disk capacity +

    Figure 5: VMware Workstation 14 Player - Set disk capacity

    +
    +
  20. +
  21. On the Ready to Create Virtual Machine screen, click the +Customize Hardware… button. See figure 6.

    +
    +VMware Workstation 14 Player - Customize hardware +

    Figure 6: VMware Workstation 14 Player - Customize hardware

    +
    +
  22. +
  23. Under the Device list, select Processors. See +figure 7.

    +
    +VMware Workstation 14 Player - Set virtualization engine option +

    Figure 7: VMware Workstation 14 Player - Set virtualization engine +option

    +
    +
  24. +
  25. Under the Virtualization engine section, +check Virtualize Intel VT-x/EPT or AMD-V/RVI.

    +
  26. +
  27. To disconnect the virtual CD/DVD (IDE) since it is not needed, under the +Device list, select New CD/DVD (IDE). See figure 8.

    +
    +VMware Workstation 14 Player - Disconnect CD/DVD (IDE) +

    Figure 8: VMware Workstation 14 Player - Disconnect CD/DVD (IDE)

    +
    +
  28. +
  29. Under the Device status section, uncheck +Connect at power on.

    +
  30. +
  31. Click the Close button.

    +
  32. +
  33. Click the Finish button.

    +
  34. +
+
+
+

Attach the pre-configured Clear Linux OS VMware image

+
    +
  1. Move the downloaded and decompressed pre-configured Clear Linux OS VMware image file +clear-[version number]-basic.vmdk to the directory where your +newly-created VM resides.

    +
    +

    Note

    +

    Depending on the OS, you can typically find the VMware VM files under:

    +
      +
    • On Linux distros: /home/username/vmware
    • +
    • On Windows: C:UsersusernameDocumentsVirtual Machines
    • +
    +
    +
  2. +
  3. On the VMware Workstation Player home screen, select your +newly-created VM. See figure 9.

    +
    +VMware Workstation 14 Player - Edit virtual machine settings +

    Figure 9: VMware Workstation 14 Player - Edit virtual machine settings

    +
    +
  4. +
  5. Click Edit virtual machine settings.

    +
  6. +
  7. To remove the default hard disk, under the Device list, select +Hard Disk (SCSI). See figure 10.

    +
    +VMware Workstation 14 Player - Remove hard drive +

    Figure 10: VMware Workstation 14 Player - Remove hard drive

    +
    +
  8. +
  9. Click the Remove button.

    +
  10. +
  11. To add a new hard disk and attach the pre-configured Clear Linux OS VMware image, +click the Add… button. See Figure 11.

    +
    +VMware Workstation 14 Player - Add new hard drive +

    Figure 11: VMware Workstation 14 Player - Add new hard drive

    +
    +
  12. +
  13. Under the Hardware types section, select Hard Disk.

    +
  14. +
  15. Click the Next button.

    +
  16. +
  17. Select your preferred Virtual disk type. See figure 12.

    +
    +VMware Workstation 14 Player - Select virtual disk type +

    Figure 12: VMware Workstation 14 Player - Select virtual disk type

    +
    +
  18. +
  19. Select the Use an existing virtual disk option. See figure 13.

    +
    +VMware Workstation 14 Player - Use existing virtual disk +

    Figure 13: VMware Workstation 14 Player - Use existing virtual disk

    +
    +
  20. +
  21. Click the Browse button and select the pre-configured Clear Linux OS +VMware image file. See figure 14.

    +
    +VMware Workstation 14 Player - Select ready-made VMware |CL| +

    Figure 14: VMware Workstation 14 Player - Select ready-made VMware Clear Linux OS +image file

    +
    +
  22. +
  23. Click the Finish button.

    +
    +

    Note

    +

    When asked to convert the existing virtual disk to a newer format, +selecting either option works.

    +
    +
  24. +
+
+
+

Enable UEFI boot support

+

Clear Linux OS needs UEFI support to boot. To enable it, add the +following line to the end of your VM’s .vmx file:

+
firmware = "efi"
+
+
+
+

Note

+

Depending on the OS, you can typically find the VMware VM files under:

+
    +
  • On Linux distros: /home/username/vmware
  • +
  • On Windows: C:\Users\username\Documents\Virtual Machines
  • +
+
+
+
+

Power on the VM

+

After configuring the settings above, power on your Clear Linux OS virtual machine.

+
    +
  1. On the VMware Workstation Player home screen, select your +VM. See figure 15.

    +
    +VMware Workstation 14 Player - Power on virtual machine +

    Figure 15: VMware Workstation 14 Player - Power on virtual machine

    +
    +
  2. +
  3. Click Play virtual machine.

    +
  4. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/vmw-player.html b/get-started/virtual-machine-install/vmw-player.html new file mode 100644 index 00000000..b04b010c --- /dev/null +++ b/get-started/virtual-machine-install/vmw-player.html @@ -0,0 +1,1264 @@ + + + + + + + + + + + Install Clear Linux* OS as a VMware* Workstation Player guest OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install Clear Linux* OS as a VMware* Workstation Player guest OS

+

This page explains how to create a new VM and install Clear Linux OS on it with the +VMware Workstation Player hypervisor.

+ +
+

Overview

+

VMware Workstation Player is a type 2 hypervisor. It runs on top of +Windows* or Linux* operating systems. With VMware ESXi, you can +create, configure, manage, and run Clear Linux* OS VMs +on your local system.

+

VMware offers a type 1 hypervisor called VMware ESXi designed for the +cloud environment. For information on how to install Clear Linux OS as guest OS on +it, see Install Clear Linux* OS as a VMware* ESXi guest OS.

+
+

Note

+

The screenshots on this document show the Windows version of the +VMware Workstation 15 Player. The menus and prompts are similar to those +in other versions and for the Linux OS save some minor wording differences.

+
+

If you prefer to use a pre-configured Clear Linux OS VMware image instead, +see our Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS guide.

+
+
+

Install the VMware Workstation Player hypervisor

+
    +
  1. Enable Intel® VT and +Intel® VT-d in +your system’s BIOS.

    +
  2. +
  3. VMware Workstation Player is available for Windows and Linux. +Download your preferred version.

    +
    +

    Note

    +

    By default, selecting download means you receive the latest version +of this application. Commands may differ based on the version.

    +
    +
  4. +
  5. Install VMware Workstation Player following the instructions +appropriate for your system’s OS:

    +
      +
    • On supported Linux distros:

      +
        +
      1. Enable a GUI desktop.

        +
      2. +
      3. Start a terminal emulator.

        +
      4. +
      5. Start the installer by issuing the command below and follow the +guided steps.

        +
        sudo sh ./VMware-Player-[version number].x86_64.bundle
        +
        +
        +
      6. +
      +
    • +
    • On Windows:

      +
        +
      1. Start the installer.
      2. +
      3. Follow the setup wizard.
      4. +
      +
    • +
    +
  6. +
+

For additional help, see the VMware Workstation Player Documentation.

+
+
+

Download the latest Clear Linux OS installer

+

Get the latest installer with Clear Linux OS OS Desktop from the downloads page.

+

Visit Clear Linux* OS image types for additional information about all available Clear Linux OS images.

+

We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to Download, verify, and decompress a Clear Linux* OS image.

+
+
+

Create and configure a new VM

+
    +
  1. Start the VMware Workstation Player app.

    +
  2. +
  3. On the home screen, click Create a New Virtual Machine. See +Figure 1.

    +
    +VMware Workstation Player - Create a new virtual machine +

    Figure 1: VMware Workstation Player - Create a new virtual +machine

    +
    +
  4. +
  5. On the Welcome to the New Virtual Machine Wizard screen, +select the Installer disc image file (iso) option. +See Figure 2.

    +
    +VMware Workstation Player - Select |CL| installer ISO +

    Figure 2: VMware Workstation Player - Select Clear Linux OS installer ISO

    +
    +
  6. +
  7. Click the Browse button and select the decompressed Clear Linux OS +installer ISO.

    +
  8. +
  9. Click the Next button.

    +
  10. +
  11. On the Select a Guest Operating System, set the +Guest operating system setting to Linux. See +Figure 3.

    +
    +VMware Workstation Player - Select guest operating system type +

    Figure 3: VMware Workstation Player - Select guest operating system +type

    +
    +
  12. +
  13. Set the Version setting to +Other Linux 4.x or later kernel 64-bit.

    +
  14. +
  15. Click the Next button.

    +
  16. +
  17. On the Name the Virtual Machine screen, name the new VM. See +Figure 4.

    +
    +VMware Workstation Player - Name virtual machine +

    Figure 4: VMware Workstation Player - Name virtual machine

    +
    +
  18. +
  19. Click the Next button.

    +
  20. +
  21. On the Specify Disk Capacity screen, set the VM’s maximum disk +size. See Figure 5.

    +
    +VMware Workstation Player - Set disk capacity +

    Figure 5: VMware Workstation Player - Set disk capacity

    +
    +
    +

    Note

    +

    For optimal performance with the Clear Linux OS Desktop image, we recommend 32GB +of drive space. See Recommended minimum system requirements for more details.

    +
    +
  22. +
  23. Click the Next button.

    +
  24. +
  25. On the Ready to Create Virtual Machine screen, click the +Customize Hardware… button. See Figure 6.

    +
    +VMware Workstation Player - Customize hardware +

    Figure 6: VMware Workstation Player - Customize hardware

    +
    +
  26. +
  27. Select Memory and set the size to 2GB. See Figure 7.

    +
    +VMware Workstation Player - Set memory size +

    Figure 7: VMware Workstation Player - Set memory size

    +
    +
    +

    Note

    +

    The Clear Linux OS installer ISO needs a minimum of 2GB of RAM. +After completing installation, Clear Linux OS can run on as little as +128MB of RAM. Thus, you can reduce the memory size if needed. +See Recommended minimum system requirements for more details.

    +
    +
  28. +
  29. Under the Device list, select Processors. See +Figure 8.

    +
    +VMware Workstation Player - Set virtualization engine option +

    Figure 8: VMware Workstation Player - Set virtualization engine +option

    +
    +
  30. +
  31. Under the Virtualization engine section, +check Virtualize Intel VT-x/EPT or AMD-V/RVI.

    +
  32. +
  33. Click the Close button.

    +
  34. +
  35. Click the Finish button.

    +
  36. +
+
+
+

Install Clear Linux OS into the new VM

+
    +
  1. Select the newly-created VM and click the Play virtual machine +button. See Figure 9.

    +
    +VMware Workstation Player - Power on virtual machine +

    Figure 9: VMware Workstation Player - Power on virtual machine

    +
    +
  2. +
  3. Follow the Install from live image guide to complete the +installation of Clear Linux OS.

    +
  4. +
  5. After the installation completes, reboot the VM. This reboot restarts the +Clear Linux OS installer.

    +
  6. +
+
+
+

Detach the Clear Linux OS installer ISO from the VM

+
    +
  1. To enable the mouse pointer so you access VMware Workstation Player’s +menus, press <CTRL> + <ALT> on the keyboard.

    +
  2. +
  3. To disconnect the CD/DVD to stop it from booting the Clear Linux OS installer ISO +again, click the Player menu. See Figure 10.

    +
    +VMware Workstation Player - Edit CD/DVD settings +

    Figure 10: VMware Workstation Player - Edit CD/DVD settings

    +
    +
  4. +
  5. Go to Removable Devices‣CD/DVD (IDE)‣Disconnect.

    +
  6. +
  7. Click the OK button.

    +
  8. +
+
+
+

Enable UEFI boot support

+

Clear Linux OS needs UEFI support to boot. To enable UEFI:

+
    +
  1. Power off the VM. click the Player menu. See Figure 11.

    +
    +VMware Workstation Player - Power off virtual machine +

    Figure 11: VMware Workstation Player - Power off virtual machine

    +
    +
  2. +
  3. Go to Power and select Shut Down Guest.

    +
  4. +
  5. Add the following line to the end of your VM’s .vmx file:

    +
    firmware = "efi"
    +
    +
    +
    +

    Note

    +

    Depending on the OS, you can typically find the VMware VM files under:

    +
      +
    • On Linux distros: /home/username/vmware
    • +
    • On Windows: C:\Users\username\Documents\Virtual Machines
    • +
    +
    +
  6. +
  7. After configuring the settings above, power on your Clear Linux OS virtual machine. +On the VMware Workstation Player home screen, select your +VM. See Figure 9.

    +
  8. +
  9. Click Play virtual machine.

    +
  10. +
  11. Install Open VM Tools. You may want to install the open-vm-tools in +your virtual machine. The Open Virtual Machine Tools (open-vm-tools) are +the open source implementation of VMware Tools for Linux guest operating +systems. In Clear Linux OS you can use the following to install the bundle in your VM

    +
    sudo swupd bundle-add os-cloudguest-vmware
    +sudo systemctl enable --now open-vm-tools
    +
    +
    +
  12. +
+

More information is available on the VMWare Tools Product Documentation site.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/vmware-esxi-install-cl.html b/get-started/virtual-machine-install/vmware-esxi-install-cl.html new file mode 100644 index 00000000..06682c61 --- /dev/null +++ b/get-started/virtual-machine-install/vmware-esxi-install-cl.html @@ -0,0 +1,1286 @@ + + + + + + + + + + + Install Clear Linux* OS as a VMware* ESXi guest OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install Clear Linux* OS as a VMware* ESXi guest OS

+

This page explains how to create a new VM and +manually install Clear Linux* OS on the new VM with VMware ESXi 6.5.

+ +
+

Overview

+

VMware ESXi is a type 1 bare-metal hypervisor that runs directly on top +of server hardware. With VMware ESXi, you can create, configure, manage, and +run Clear Linux OS virtual machines in the cloud.

+

Manually installing Clear Linux OS on a new VM gives additional configuration flexibility +during installation. For example: alternate disk sizes, number of partitions, +pre-installed bundles, etc.

+

If you prefer to use a preconfigured Clear Linux OS VMware image instead, refer to +Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS.

+
+

Note

+

VMware also offers a type 2 hypervisor designed for the desktop environment, +called VMware Workstation Player. Refer to Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS or +Install Clear Linux* OS as a VMware* Workstation Player guest OS for more information.

+

Visit Clear Linux* OS image types to learn more about all available images.

+
+
+
+

Download the latest Clear Linux OS installer ISO

+

Get the latest Clear Linux OS installer ISO image from the image repository. +Look for clear-[version number]-installer.iso.xz.

+

We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to Download, verify, and decompress a Clear Linux* OS image.

+
+
+

Upload the Clear Linux OS installer ISO to the VMware server

+
    +
  1. Connect to the VMware server and log into an account with sufficient +permission to create and manage VMs.

    +
  2. +
  3. Under the Navigator window, select Storage. +See Figure 1.

    +
  4. +
  5. Under the Datastores tab, click the Datastore browser +button.

    +
    +VMware ESXi - Navigator > Storage +

    Figure 1: VMware ESXi - Navigator > Storage

    +
    +
  6. +
  7. Click the Create directory button and name the directory ISOs. +See Figure 2.

    +
    +VMware ESXi - Datastore > Create directory +

    Figure 2: VMware ESXi - Datastore > Create directory

    +
    +
  8. +
  9. Select the newly-created directory and click the Upload button. +See Figure 3.

    +
    +VMware ESXi - Datastore > Upload ISO +

    Figure 3: VMware ESXi - Datastore > Upload ISO

    +
    +
  10. +
  11. Select the decompressed Clear Linux OS installer ISO file clear-[version number]-installer.iso +and upload it.

    +
  12. +
+
+
+

Create and configure a new VM

+

In this section, you will create a new VM, configure its basic parameters such +as drive size, number of CPUs, memory size, and then attach the Clear Linux OS installer ISO.

+
    +
  1. Under the Navigator window, select Virtual Machines. +See Figure 4.

    +
  2. +
  3. In the right window, click the Create / Register VM button.

    +
    +VMware ESXi - Navigator > Virtual Machines +

    Figure 4: VMware ESXi - Navigator > Virtual Machines

    +
    +
  4. +
  5. On the Select creation type step:

    +
      +
    1. Select the Create a new virtual machine option. +See Figure 5.

      +
    2. +
    3. Click the Next button.

      +
      +VMware ESXi - Create a new virtual machine +

      Figure 5: VMware ESXi - Create a new virtual machine

      +
      +
    4. +
    +
  6. +
  7. On the Select a name and guest OS step:

    +
      +
    1. Give the new VM a name in the Name field. See Figure 6.

      +
    2. +
    3. Set the Compatability option to ESXi 6.5 virtual machine.

      +
    4. +
    5. Set the Guest OS family option to Linux.

      +
    6. +
    7. Set the Guest OS version option to Other 3.x or later Linux (64-bit).

      +
    8. +
    9. Click the Next button.

      +
      +VMware ESXi - Give a name and select guest OS type +

      Figure 6: VMware ESXi - Give a name and select guest OS type

      +
      +
    10. +
    +
  8. +
  9. On the Select storage step:

    +
      +
    1. Accept the default option.
    2. +
    3. Click the Next button.
    4. +
    +
  10. +
  11. On the Customize settings step:

    +
      +
    1. Click the Virtual Hardware button. See Figure 7.

      +
    2. +
    3. Expand the CPU setting and enable Hardware virtualization by +checking Expose hardware assisted virtualization to the guest OS.

      +
      +VMware ESXi - Enable hardware virtualization +

      Figure 7: VMware ESXi - Enable hardware virtualization

      +
      +
    4. +
    5. Set Memory size to 2048MB (2GB). See Figure 8.

      +
      +VMware ESXi - Set memory size +

      Figure 8: VMware ESXi - Set memory size

      +
      +
      +

      Note

      +

      The Clear Linux OS installer ISO needs a minimum of 2GB of RAM to work properly. +You can reduce the memory size after the installation completes if you want, +because a minimum Clear Linux OS installation can function on as little as 128MB of RAM. +See Recommended minimum system requirements for more details.

      +
      +
    6. +
    7. Set Hard disk 1 to the desired capacity. See Figure 9.

      +
      +VMware ESXi - Set hard disk size +

      Figure 9: VMware ESXi - Set hard disk size

      +
      +
      +

      Note

      +

      A minimum Clear Linux OS installation can exist on 600MB of drive space. +See Recommended minimum system requirements for more details.

      +
      +
    8. +
    9. Attach the Clear Linux OS installer ISO. For the CD/DVD Drive 1 setting, +click the drop-down list to the right of it and select the Datastore ISO file +option. Then select the Clear Linux OS installer ISO clear-[version number]-installer.iso +that you previously uploaded to the VMware server. See Figure 10.

      +
      +VMware ESXi - Set CD/DVD to boot installer ISO +

      Figure 10: VMware ESXi - Set CD/DVD to boot installer ISO

      +
      +
    10. +
    +
  12. +
  13. Click the Next button.

    +
  14. +
  15. Click the Finish button.

    +
  16. +
+
+
+

Install Clear Linux OS into the new VM

+
    +
  1. Power on the VM.

    +
      +
    1. Under the Navigator window, select Virtual Machines. +See Figure 11.

      +
    2. +
    3. In the right window, select the newly-created VM.

      +
    4. +
    5. Click the Power on button.

      +
    6. +
    7. Click on the icon representing the VM to bring it into view and maximize +its window.

      +
      +VMware ESXi - Navigator > Virtual Machines > Power on VM +

      Figure 11: VMware ESXi - Navigator > Virtual Machines > Power on VM

      +
      +
    8. +
    +
  2. +
  3. Follow the Install from live image guide to complete the installation of +Clear Linux OS.

    +
  4. +
  5. After the installation is complete, follow the Clear Linux OS instruction to reboot it. +This will restart the installer again.

    +
  6. +
+
+
+

Reconfigure the VM’s settings to boot the newly-installed Clear Linux OS

+

After Clear Linux OS has been installed using the installer ISO, it must be detached so +it will not run again. Also, in order to boot the newly-installed Clear Linux OS, you must +enable UEFI support.

+
    +
  1. Power off the VM.

    +
      +
    1. Click the Actions button - located on the top-right corner +of the VM’s windows - and go to the Power setting and +select the Power off option. See Figure 12.

      +
      +VMware ESXi - Actions > Power off +

      Figure 12: VMware ESXi - Actions > Power off

      +
      +
    2. +
    +
  2. +
  3. Edit the VM settings.

    +
      +
    1. Click the Actions button again and select Edit settings. +See Figure 13.

      +
      +VMware ESXi - Actions > Edit settings +

      Figure 13: VMware ESXi - Actions > Edit settings

      +
      +
    2. +
    +
  4. +
  5. Disconnect the CD/DVD to stop it from booting the Clear Linux OS installer ISO again.

    +
      +
    1. Click the Virtual Hardware button. See Figure 14.

      +
    2. +
    3. For the CD/DVD Drive 1 setting, uncheck the +Connect checkbox.

      +
      +VMware ESXi - Disconnect the CD/DVD drive +

      Figure 14: VMware ESXi - Disconnect the CD/DVD drive

      +
      +
    4. +
    +
  6. +
  7. Clear Linux OS needs UEFI support in order to boot. Enable it.

    +
      +
    1. Click the VM Options button. See Figure 15.

      +
    2. +
    3. Expand the Boot Options setting.

      +
    4. +
    5. For the Firmware setting, click the drop-down list to the right +of it and select the EFI option.

      +
      +VMware ESXi - Set boot firmware to EFI +

      Figure 15: VMware ESXi - Set boot firmware to EFI

      +
      +
    6. +
    +
  8. +
  9. Click the Save button.

    +
  10. +
+
+
+

Power on the VM and boot Clear Linux OS

+

After configuring the settings above, power on the VM.

+
    +
  1. Under the Navigator window, select Virtual Machines. +See Figure 16.

    +
  2. +
  3. In the right window, select the VM.

    +
  4. +
  5. Click the Power on button.

    +
  6. +
  7. Click on the icon representing the VM to bring it into view and maximize +its window.

    +
    +VMware ESXi - Navigator > Virtual Machines > Power on VM +

    Figure 16: VMware ESXi - Navigator > Virtual Machines > Power on VM

    +
    +
  8. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.html b/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.html new file mode 100644 index 00000000..589fe02e --- /dev/null +++ b/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.html @@ -0,0 +1,1258 @@ + + + + + + + + + + + Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS

+

This page explains how to deploy a preconfigured Clear Linux OS VMware +VM image on a VMware ESXi 6.5 host.

+ +
+

Overview

+

VMware ESXi is a type 1 bare-metal hypervisor which runs directly on top +of server hardware. With VMware ESXi, you can create, configure, manage, +and run Clear Linux* OS virtual machines at scale.

+

We provide a preconfigured Clear Linux OS VMware image that can be run on a VMware ESXi +6.5 host.

+

If manuall installation is preferred, refer to Install Clear Linux* OS as a VMware* ESXi guest OS.

+
+

Note

+

VMware also offers a type 2 hypervisor designed for the desktop environment, +called VMware Workstation Player. Refer to Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS or +Install Clear Linux* OS as a VMware* Workstation Player guest OS for more information.

+
+
+
+

Download the latest Clear Linux OS VMware image

+

Get the latest Clear Linux OS VMware prebuilt image from the image repository. +Look for clear-[version number]-vmware.vmdk.xz. You can also use +this command:

+
curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware)
+
+
+

Visit Clear Linux* OS image types for additional information about all available Clear Linux OS images.

+

We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to Download, verify, and decompress a Clear Linux* OS image.

+
+
+

Upload the Clear Linux OS image to the VMware server

+

Once the Clear Linux OS VMware prebuilt image has been downloaded and +decompressed on your local system, it must be uploaded to a datastore +on the VMware ESXi server.

+

The steps in this section can also be referenced from the VMware documentation +Using Datastore File Browser in the VMware Host Client.

+
    +
  1. Connect to the VMware ESXi server and login to an account with sufficient +permission to create and manage VMs.

    +
  2. +
  3. Under the Navigator window on the left side, +select Storage. +See Figure 1

    +
  4. +
  5. Under the Datastores tab, click +the Datastore browser button.

    +
    +VMware ESXi - Navigator > Storage +

    Figure 1: VMware ESXi - Navigator > Storage

    +
    +
  6. +
  7. Click the Create directory button and name the directory +Clear Linux VM. See Figure 2.

    +
    +VMware ESXi - Datastore > Create directory +

    Figure 2: VMware ESXi - Datastore > Create directory

    +
    +
  8. +
  9. Select the newly-created directory and click the Upload +button. See Figure 3.

    +
    +VMware ESXi - Datastore > Upload VMware image +

    Figure 3: VMware ESXi - Datastore > Upload VMware image

    +
    +
  10. +
  11. Select the decompressed Clear Linux OS VMware image file +clear-[version number]-vmware.vmdk and upload it.

    +
  12. +
+
+
+

Convert the Clear Linux OS image to an ESXi-supported format

+

Once the Clear Linux OS VMware prebuilt image has been uploaded to the VMware ESXi +datastore, it must be converted to a format for usable with VMware’s ESXi +hypervisor.

+

The steps in this section can also be referenced from the VMware documentation on Cloning and converting virtual machine disks with vmkfstools

+
    +
  1. SSH into the vSphere Management Assistant appliance that is managing +the ESXi host or connect to the vSphere hosting using the vSphere CLI.

    +
    +

    Note

    +

    If there is no vMA appliance or vCLI configured and available, +you can temporarily enable SSH directly on the ESXi host by following the +steps described in Enable the Secure Shell (SSH) in the VMware Host Client .

    +

    As a security best practice, remember to disable SSH access after following the steps in this section.

    +
    +
  2. +
  3. Locate the uploaded image, which is typically found in +/vmfs/volumes/datastore1.

    +
  4. +
  5. Use the vmkfstools command to perform the conversion, as +shown below:

    +
    vmkfstools -i clear-[version number]-vmware.vmdk -d zeroedthick clear-[version number]-esxi.vmdk
    +
    +
    +

    Two files should result from this:

    +
      +
    • clear-[version number]-esxi-flat.vmdk
    • +
    • clear-[version number]-esxi.vmdk
    • +
    +

    The clear-[version number]-esxi.vmdk file will be used in the +next section when you create a new VM.

    +
  6. +
+
+
+

Create and configure a new VM

+

In this section, you will create a new VM, configure its basic parameters +such as number of CPUs, memory size, and then attach the converted Clear Linux OS +VMware image. Also, in order to boot Clear Linux OS, you must enable UEFI support.

+
    +
  1. Under the Navigator window, select +Virtual Machines. See Figure 4.

    +
  2. +
  3. In the right window, click the Create / Register VM button.

    +
    +VMware ESXi - Navigator > Virtual Machines +

    Figure 4: VMware ESXi - Navigator > Virtual Machines

    +
    +
  4. +
  5. On the Select creation type step:

    +
      +
    1. Select the Create a new virtual machine option. See +Figure 5.
    2. +
    3. Click the Next button.
    4. +
    +
    +VMware ESXi - Create a new virtual machine +

    Figure 5: VMware ESXi - Create a new virtual machine

    +
    +
  6. +
  7. On the Select a name and guest OS step:

    +
  8. +
  9. Give the new VM a name in the Name field. See Figure 6.

    +
  10. +
  11. Set the Compatability option to +ESXi 6.5 virtual machine.

    +
  12. +
  13. Set the Guest OS family option to Linux.

    +
  14. +
  15. Set the Guest OS version option to +Other 3.x or later Linux (64-bit).

    +
  16. +
  17. Click the Next button.

    +
    +VMware ESXi - Give a name and select guest OS type +

    Figure 6: VMware ESXi - Give a name and select guest OS type

    +
    +
  18. +
  19. On the Select storage step:

    +
      +
    1. Accept the default option.
    2. +
    3. Click the Next button.
    4. +
    +
  20. +
  21. On the Customize settings step:

    +
      +
    1. Click the Virtual Hardware button. See Figure 7.
    2. +
    3. Expand the CPU setting and enable +Hardware virtualization by checking +Expose hardware assisted virtualization to the guest OS.
    4. +
    +
    +VMware ESXi - Enable hardware virtualization +

    Figure 7: VMware ESXi - Enable hardware virtualization

    +
    +
      +
    1. Remove the default Hard drive 1 setting by clicking +the X icon on the right side. See Figure 8.
    2. +
    +
    +VMware ESXi - Remove hard drive +

    Figure 8: VMware ESXi - Remove hard drive

    +
    +
      +
    1. Since a preconfigured image will be used, +the CD/DVD Drive 1 setting will not be needed. Disable it +by unchecking the Connect checkbox. See Figure 9.
    2. +
    +
    +VMware ESXi - Disconnect the CD/DVD drive +

    Figure 9: VMware ESXi - Disconnect the CD/DVD drive

    +
    +
      +
    1. Attach the clear-[version number]-esxi.vmdk file that was +converted from the preconfigured Clear Linux OS VMware image.
        +
      1. Click the Add hard disk button and select the +Existing hard drive option. See Figure 10.
      2. +
      +
    2. +
    +
    +VMware ESXi - Add an existing hard drive +

    Figure 10: VMware ESXi - Add an existing hard drive

    +
    +
      +
    1. Select the converted clear-[version number]-esxi.vmdk +file. Do not use the original unconverted +clear-[version number]-vmware.vmdk file. See Figure 11.
    2. +
    +
    +
    +
    +VMware ESXi - Select the converted `vmdk` file +

    Figure 11: VMware ESXi - Select the converted +clear-[version number]-esxi.vmdk file

    +
    +
  22. +
  23. Clear Linux OS needs UEFI support in order to boot. Enable UEFI boot support.

    +
      +
    1. Click the VM Options button. See Figure 12.
    2. +
    3. Expand the Boot Options setting.
    4. +
    5. For the Firmware setting, click the drop-down list to +the right of it and select the EFI option.
    6. +
    +
    +VMware ESXi - Set boot firmware to EFI +

    Figure 12: VMware ESXi - Set boot firmware to EFI

    +
    +
  24. +
  25. Click the Save button.

    +
  26. +
  27. Click the Next button.

    +
  28. +
  29. Click the Finish button.

    +
  30. +
+
+
+

Power on the VM and boot Clear Linux OS

+

After configuring the settings above, power on the VM.

+
    +
  1. Under the Navigator window, select +Virtual Machines. See Figure 13.

    +
  2. +
  3. In the right window, select the newly-created VM.

    +
  4. +
  5. Click the Power on button.

    +
  6. +
  7. Click on the icon representing the VM to bring it into view and maximize +its window.

    +
    +VMware ESXi - Navigator > Virtual Machines > Power on VM +

    Figure 13: VMware ESXi - Navigator > Virtual Machines > Power on VM

    +
    +
  8. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/autoproxy.html b/guides/clear/autoproxy.html new file mode 100644 index 00000000..aacf045b --- /dev/null +++ b/guides/clear/autoproxy.html @@ -0,0 +1,1117 @@ + + + + + + + + + + + Autoproxy — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Autoproxy

+

Autoproxy is provided to enable Clear Linux* OS to work smoothly behind a +corporate proxy.

+ +
+

Description

+

Autoproxy tries to detect a Proxy Auto-Config (PAC) script and use it to +automatically resolve the proxy needed for a given connection. With +Autoproxy, you can use Clear Linux OS inside any proxy environment without having to +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 require manual configuration of +proxies to perform the most mundane tasks, such as cloning a repo or checking +for updates. With Clear Linux OS, all of the work is done behind the scenes to +effortlessly use your network and have connections “just work”.

+

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* +distributions with a few minor additions and modifications. We leveraged the +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 +parse it.

+
+../../_images/autoproxy_0.png +

Figure 1: Autoproxy Flow

+
+

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 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.

+
+

Troubleshooting

+

Autoproxy allows Clear Linux OS to operate seamlessly behind a proxy +because swupd and other Clear Linux OS tools are implemented on +top of libcurl. Tools that do not use libcurl, like git, must +be configured independently.

+

If you are familiar with PAC files and WPAD, you can use +pacdiscovery and FindProxyForURL to +troubleshoot problems with autproxy.

+
+

Note

+

Learn more about WPAD, PAC files, and PAC functions at findproxyforurl.

+
+

Run pacdiscovery with no arguments to indicate

+
    +
  1. if there is a problem resolving the WPAD host name resolution:

    +
    pacdiscovery
    +
    +
    +
    failed getaddrinfo: No address associated with hostname
    +Unable to find wpad host
    +
    +
    +
  2. +
  3. or if the pacrunner service is disabled (masked).

    +
    pacdiscovery
    +
    +
    +
    PAC url: http://autoproxy.your.domain.com/wpad.dat
    +Failed to create proxy config: Unit pacrunner.service is masked.
    +
    +
    +
  4. +
+

Unmask the pacrunner service by running:

+
systemctl unmask pacrunner.service
+
+
+

FindProxyForURL with busctl can also indicate if the +pacrunner.service is masked.

+
busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
+
+
+
FindProxyForURL ss "http://www.google.com" "google.com"
+Unit pacrunner.service is masked.
+dig wpad, dig wpad.<domain>
+
+
+

FindProxyForURL returns the URL and port of the proxy server when +an external URL and host are provided as arguments.

+
busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
+
+
+
FindProxyForURL ss "http://www.google.com" "google.com"
+s "PROXY proxy.your.domain.com:<port>"
+
+
+

If a proxy server is not avialable, or if pacrunner is running +without a PAC file, FindProxyForURL will return “DIRECT”.

+
busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
+
+
+
FindProxyForURL ss "http://www.google.com" "google.com"
+s "DIRECT"
+
+
+

Once pacdiscovery is able to look up WPAD, restart the +pacrunner service:

+
systemctl stop pacrunner
+systemctl restart pacdiscovery
+
+
+
+

Note

+

A “domain” or “search” entry in /etc/resolv.conf is required +for short name lookups to resolve. The resolv.conf man page has +additional details.

+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/autospec.html b/guides/clear/autospec.html new file mode 100644 index 00000000..de894556 --- /dev/null +++ b/guides/clear/autospec.html @@ -0,0 +1,1442 @@ + + + + + + + + + + + autospec — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

autospec

+

autospec is a tool used to assist with the automated creation and maintenance of +RPM packaging in Clear Linux* OS. Where a standard RPM build process using +rpmbuild requires a tarball and .spec file to start, autospec +requires only a tarball and package name to start.

+ +
+

Description

+

The autospec tool attempts to infer the requirements of the .spec file +by analyzing the source code and Makefile information. It +continuously runs updated builds based on new information discovered from build +failures until it has a complete and valid .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 +additional information on using mock.

+

For a general understanding of how an RPM works, visit +the rpm website or the RPM Packaging Guide .

+
+
+

How it works

+

Learn the autospec tool set up and process.

+ +
+

Prerequisites

+

The setup for building source in Clear Linux OS must be completed before using the +autospec tool.

+

Refer to Setup environment to build source for instructions on completing +the setup.

+
+
+

Create an RPM

+

The basic autospec process is described in the following steps:

+
    +
  1. The make autospec command generates a .spec file based on +the analysis of code and existing control files.

    +

    Any control files should be located in the same directory as the resulting +.spec file.

    +

    View the autospec README for more information on control files.

    +
  2. +
  3. autospec creates a build root with mock config.

    +
  4. +
  5. autospec attempts to build an RPM from the generated .spec.

    +
  6. +
  7. autospec detects any missed declarations in the .spec.

    +
  8. +
  9. If build errors occur, autospec scans the build log to try to detect +the root cause.

    +
  10. +
  11. If autospec detects the root cause and knows how to continue, it restarts +the build automatically at step 1 with updated build instructions.

    +
  12. +
  13. 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 +control files.

    +

    The user resumes the process at step 1 after errors are resolved.

    +

    If a binary dependency doesn’t exist in Clear Linux OS, you must build it +before running autospec again.

    +
  14. +
+

Following these steps, autospec continues to rebuild the package, based on +new information discovered from build failures, until it has a valid +.spec. If no build errors occur, RPM packages are successfully built.

+
+
+
+

Examples

+

Complete Setup environment to build source before using these examples.

+ +
+

Example 1: Build RPM with an existing spec file

+

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.

+
    +
  1. Navigate to the autospec workspace and clone the dmidecode package:

    +
    cd ~/clearlinux
    +make clone_dmidecode
    +
    +
    +
    +

    Note

    +

    You can clone all package repos at once using the following command:

    +
    make [-j NUM] clone-packages
    +
    +
    +

    The optional NUM is the number of threads to use.

    +

    For a list of available packages, view the +~/clearlinux/projects/common/packages file.

    +
    +
  2. +
  3. Navigate to the local copy of the dmidecode package and build it:

    +
    cd ~/clearlinux/packages/dmidecode/
    +make build
    +
    +
    +
  4. +
  5. The resulting RPMs are in ./rpms. Build logs and additional RPMs are +in ./results.

    +
  6. +
+
+
+

Example 2: Build a new RPM

+

This example shows how to build a new RPM with no spec file. The example will +create a simple helloclear RPM.

+
    +
  1. Navigate to the autospec workspace and build the helloclear RPM. The +Makefile provides a make autospecnew that can +automatically generate an RPM package using the autospec tool. You must pass +the URL to the source tarball and the NAME of the RPM you wish to create:

    +
    cd ~/clearlinux
    +make autospecnew URL="https://github.com/clearlinux/helloclear/archive/helloclear-v1.0.tar.gz" NAME="helloclear"
    +
    +
    +

    The resulting RPMs are in ./packages/helloclear/rpms. Build logs and +additional RPMs are in ./packages/helloclear/results.

    +
  2. +
+
+
+

Example 3: Generate a new spec file with a pre-defined package

+

This example shows how to modify an existing package to create a custom RPM. In +this example you will make a simple change to the dmidecode package and +rebuild the package.

+
    +
  1. Navigate to the autospec workspace and clone the dmidecode package:

    +
    cd ~/clearlinux
    +make clone_dmidecode
    +
    +
    +
  2. +
  3. Navigate into the dmidecode directory:

    +
    cd packages/dmidecode
    +
    +
    +
  4. +
  5. Open the excludes file with an editor and add these lines:

    +
    /usr/bin/biosdecode
    +/usr/bin/ownership
    +/usr/bin/vpddecode
    +/usr/share/man/man8/biosdecode.8
    +/usr/share/man/man8/ownership.8
    +/usr/share/man/man8/vpddecode.8
    +
    +
    +
    +

    Note

    +

    These files aren’t needed by dmidecode, so we can remove them without +any issues.

    +
    +
  6. +
  7. In the dmidecode directory, build the modified dmidecode package:

    +
    make autospec
    +
    +
    +
  8. +
  9. The resulting RPMs are in ./rpms. Logs are in ./results.

    +
  10. +
+
+
+

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 so autospec can complete a successful build.

+
    +
  1. Navigate to the autospec workspace:

    +
    cd ~/clearlinux
    +
    +
    +
  2. +
  3. If you have not already, clone all upstream package repos:

    +
    make [-j NUM] clone-packages
    +
    +
    +

    The optional NUM is the number of threads to use.

    +
    +

    Note

    +

    In a later step of this example, we will search the cloned package repos +for a missing dependency.

    +
    +
  4. +
  5. Build the opae-sdk RPM:

    +
    make autospecnew URL="https://github.com/OPAE/opae-sdk/archive/0.13.0.tar.gz" NAME="opae-sdk"
    +
    +
    +

    This results in an error for a missing license file:

    +
    [FATAL]    Cannot find any license or opae-sdk.license file!
    +
    +
    +
  6. +
  7. Navigate to the package with build failures:

    +
    cd packages/opae-sdk
    +
    +
    +
  8. +
  9. 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:

    +
    echo "BSD-3-Clause MIT" > opae-sdk.license
    +
    +
    +
  10. +
  11. Run autospec again:

    +
    make autospec
    +
    +
    +

    This results in a generic error:

    +
    [FATAL]    Build failed, aborting
    +
    +
    +
  12. +
  13. Open the build log to view the error details:

    +
    cat ./results/build.log
    +
    +
    +

    The build log contains details for the specific failures. In this +instance, there are missing dependencies:

    +
    CMake Error: The following variables are used in this project, but they are set to NOTFOUND.  Please set them or make sure they are set and tested correctly in the CMake files:
    +CJSON_LIBRARY
    +   linked by target "opae-c++-utils" in directory /builddir/build/BUILD/opae-sdk-0.13.0/tools/c++utilslib
    +json-c_LIBRARIES
    +   linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae
    +libuuid_LIBRARIES
    +   linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae
    +
    +
    +
  14. +
  15. Search the spec files of upstream Clear Linux OS packages to see if the json-c library +is available. In this case, it does exist and we’ll add the json-c ‘dev’ +package into the buildreq_add:

    +
    grep 'json-c\.so$' ~/clearlinux/packages/*/*.spec
    +echo "json-c-dev" >> buildreq_add
    +
    +
    +
    +

    Note

    +

    This search step works only if the user cloned all of the upstream package +repos. In this example, upstream package repos were cloned in a previous +step.

    +
    +
  16. +
  17. Search the spec files of upstream Clear Linux OS packages to see if the libuuid library +is available. In this case, it exists in the util-linux package, so we’ll add +util-linux-dev package into the buildreq_add:

    +
    grep 'libuuid\.so$' ~/clearlinux/packages/*/*.spec
    +echo "util-linux-dev" >> buildreq_add
    +
    +
    +
  18. +
  19. Run autospec again and find the successfully-generated RPMs in the rpms +directory:

    +
    make autospec
    +
    +
    +
  20. +
+
+

Note

+

If you need a dependency that does not exist in the Clear Linux OS repo, you must first +build it manually (see Example 2: Build a new RPM), then add the repo so +that autospec knows the package exists. For example:

+
cd ~/clearlinux/packages/<package-name>
+make repoadd
+make repostatus
+
+
+

You only need to add the dependency to the buildreq_add control file +if autospec is not able to automatically find the correct dependency on its +own.

+
+
+
+
+

Test packaged software

+

After software has been packaged with autospec, the resulting RPMs can be +tested for functionality before being integrated and deployed into a Clear Linux OS +image with the Mixer tool.

+

The Clear Linux OS development tooling offers two ways to quickly test autospec +generated RPMs.

+
+

Note

+

The methods outlined below should only be used for temporary testing on +development systems.

+
+
+

Test in a Clear Linux OS virtual machine

+

The Clear Linux OS development tooling includes a method to install RPMs into a Clear Linux OS +virtual machine running on the KVM hypervisor. Using a VM allows testing in a completely isolated environment.

+

To test an autospec-created package inside a VM:

+
    +
  1. Download the Clear Linux OS KVM image into the ~/clearlinux directory as +clear.img. The location and name clear.img.xz is important +for the tooling to work:

    +
    cd ~/clearlinux
    +curl -o clear.img.xz https://download.clearlinux.org/image/$(curl https://download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm)
    +
    +
    +
  2. +
  3. Extract the downloaded Clear Linux OS KVM image:

    +
    unxz -v clear.img.xz
    +
    +
    +
  4. +
  5. Copy the QEMU start script and virtual firmware needed for KVM into the +~/clearlinux directory:

    +
    cp ~/clearlinux/projects/common/start_qemu.sh .
    +cp /usr/share/qemu/OVMF.fd .
    +
    +
    +
  6. +
  7. Run make install from the package’s autospec directory. The +make install command mounts the downloaded Clear Linux OS KVM image and +installs the autospec-created RPM into it:

    +
    cd ~/clearlinux/packages/<package-name>
    +make install
    +
    +
    +

    The code that makes this possible can be viewed by searching for the +install: target in the Makefile.common file on GitHub.

    +
  8. +
  9. Return to the ~/clearlinux directory and start the Clear Linux OS VM:

    +
    cd ~/clearlinux/
    +sudo ./start_qemu.sh clear.img
    +
    +
    +
  10. +
  11. A new Clear Linux OS VM will launch in the console. Log into the VM as root and set +a new pasword for the VM.

    +
  12. +
  13. Check that the software is installed in the Clear Linux OS VM as expected and perform +any relevant tests.

    +
  14. +
  15. After testing has been completed, the Clear Linux OS VM can be powered off and +deleted:

    +
    poweroff
    +rm clear.img
    +
    +
    +
  16. +
+
+
+

Test directly on a development machine

+

The Clear Linux OS development tooling also includes a method to extract +autospec-created RPMs locally onto a Clear Linux OS development system for testing. +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.

+

To test an autospec created package directly on the Clear Linux OS development system:

+
    +
  1. Run make install-local from the package’s autospec directory. +The make install-local command extracts the RPM directly onto +the filesystem of the running Clear Linux OS system:

    +
    cd ~/clearlinux/packages/<package-name>
    +make install-local
    +
    +
    +

    The code that makes this possible can be viewed by searching for the +install-local: target in the Makefile.common file on GitHub.

    +
  2. +
  3. Check that the software is installed as expected and perform any relevant +tests.

    +
  4. +
  5. After testing has been completed, the software and any related files must +be identified and deleted. The swupd repair --picky +command can help restore the state of the /usr directory (see +swupd) however any other files must be cleaned up +manually.

    +
  6. +
+
+
+
+

References

+

Reference the autospec README for details regarding autospec commands and options.

+
+

Setup environment to build source

+

Setup of the workspace and tooling used for building source in Clear Linux OS is mostly +automated for you with a setup script. It uses tools from the +os-clr-on-clr bundle.

+

The setup script creates a workspace in the clearlinux folder, with the +subfolders Makefile, packages, and projects. The +projects folder contains the main tools used for making packages in +Clear Linux OS autospec and common.

+

Follow these steps to setup the workspace and tooling for building source:

+
    +
  1. Install the os-clr-on-clr bundle:

    +
    sudo swupd bundle-add os-clr-on-clr
    +
    +
    +
  2. +
  3. Download the user-setup.sh script:

    +
    curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh
    +
    +
    +
  4. +
  5. Make user-setup.sh executable:

    +
    chmod +x user-setup.sh
    +
    +
    +
  6. +
  7. Run the script as an unprivileged user:

    +
    ./user-setup.sh
    +
    +
    +
  8. +
  9. After the script completes, log out and log in again to complete the setup +process.

    +
  10. +
  11. Set your Git user email and username for the repos on your system:

    +
    git config --global user.email "you@example.com"
    +git config --global user.name "Your Name"
    +
    +
    +

    This global setting is used by Clear Linux OS tools that make use of Git.

    +
  12. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/compatible-kernels.html b/guides/clear/compatible-kernels.html new file mode 100644 index 00000000..0e7efa35 --- /dev/null +++ b/guides/clear/compatible-kernels.html @@ -0,0 +1,1057 @@ + + + + + + + + + + + Kernels — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Kernels

+

The Clear Linux* OS provides the following Linux kernels with a respective bundle. +This document describes the specific use cases these bundles serve +and provides links to their source code.

+
+

Bare metal only

+
+
Kernel native
+
The kernel-native bundle focuses on the bare metal platforms. It is +optimized for fast booting and performs best on the Intel® architectures +described on the supported hardware list. The +optimization patches are found in our Linux GitHub* repo.
+
+
+
+

Also compatible with VMs

+
+
Kernel LTS
+
The kernel-lts bundle focuses on the bare metal platforms but uses the +latest LTS Linux kernel. It is optimized for +fast booting and performs best on the Intel® architectures described on the +supported hardware list. Additionally, this +kernel includes the VirtualBox* kernel modules, see our +instructions on using Virtualbox for more +information. The optimization patches are found in our Linux-LTS GitHub +repo.
+
+
+
+

VM only

+
+
Kernel KVM
+
The kernel-kvm bundle focuses on the Linux +KVM. It is optimized for fast +booting and performs best on Virtual Machines running on the Intel® +architectures described on the +supported hardware list. Use this kernel when +running Clear Linux OS as the guest OS on top of qemu/kvm. Use this kernel with +cloud orchestrators using qemu/kvm internally as their hypervisor +. This kernel can be used as a standalone Clear Linux OS VM, see our +instructions on using KVM for more information. The +optimization patches are found in our Linux-KVM GitHub repo.
+
Kernel Hyper-V*
+
The kernel-hyperv bundle focuses on running Linux on Microsoft* +Hyper-V. It is optimized for fast booting and performs best on Virtual +Machines running on the Intel® architectures described on the +supported hardware list. +Use this kernel when running Clear Linux OS as the guest OS of Cloud Instances in +projects such as Microsoft Azure*. This kernel can be used in a +standalone Clear Linux OS VM, see our instructions on using Hyper-V +for more information. The optimization patches are found in our +Linux-HyperV GitHub repo.
+
Kernel Hyper-V LTS
+
The kernel-hyperv-lts bundle focuses on running Linux on Microsoft +Hyper-V but uses the latest LTS Linux kernel. +It is optimized for fast booting and performs best on Virtual +Machines running on the Intel® architectures described on the +supported hardware list. +Use this kernel when running Clear Linux OS as the guest OS of Cloud Instances in +projects such as Microsoft Azure. This kernel can be used in a +standalone Clear Linux OS VM, see our instructions on using Hyper-V +for more information. The optimization patches are found in our +Linux-HyperV-LTS GitHub repo.
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/debug.html b/guides/clear/debug.html new file mode 100644 index 00000000..82aef97e --- /dev/null +++ b/guides/clear/debug.html @@ -0,0 +1,1066 @@ + + + + + + + + + + + Debug system — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Debug system

+

Clear Linux* OS introduces a novel approach to system software debugging using +clr-debug-info. On the client side, the Clear Linux OS 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.

+ +
+

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, such as binaries and libraries. Extra developer data, such as 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 Clear Linux OS and seamlessly engages once +installed.

+
    +
  1. Install the dev-utils bundle.

    +
    sudo swupd bundle-add dev-utils
    +
    +
    +
    +

    Note

    +

    The telemetrics and performance-tools bundles also include +clr-debug-info.

    +
    +
  2. +
  3. Start a debugging session against a program using a debugger, such as GDB. +For example, to debug gnome-control-center execute the following +command:

    +
    gdb /usr/bin/gnome-control-center
    +
    +
    +
  4. +
+

As you step through the program and debug information is needed, the +clr_debug_daemon obtains it in the background.

+
+
+

Implementation

+

The implementation of the Clear Linux OS debug system is open source and available on +GitHub at: https://github.com/clearlinux/clr-debug-info/

+
+Debug system communication flow +

Figure 1: The communication flow of the Clear Linux OS debug system

+
+

The Clear Linux OS debug system implements a FUSE +filesystem mounted at /usr/lib/debug and /usr/src/debug. The +FUSE filesystem starts automatically. You can verify its status by executing +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 that need it. It is socket activated whenever a request to the local +FUSE filesystem occurs. You can verify its status with systemctl +status clr_debug_daemon.service.

+

Clear Linux OS hosts debuginfo content packaged for consumption by Clear Linux OS debug clients at +https://download.clearlinux.org/debuginfo/

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/ister.html b/guides/clear/ister.html new file mode 100644 index 00000000..ee997086 --- /dev/null +++ b/guides/clear/ister.html @@ -0,0 +1,1076 @@ + + + + + + + + + + + ister.py image builder — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

ister.py image builder

+

The ister.py tool is a template-based installer used by Clear Linux* OS to produce +images for each release. The same ister tool is available for use in Clear Linux OS to +create custom images based on an upstream image.

+ +
+

Description

+

Clear Linux OS is a rolling release and produces an average of 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.

+

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 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 mixer guide +for instructions on using ister to build an image for a custom mix.

+
+
+

Examples

+
+

Recreate an upstream image

+

The published configuration files for upstream images may be used to recreate an +image. Here are some examples:

+
    +
  • Use an older version of Clear Linux OS and the image is no longer available (only after +March 2017).
  • +
  • Customize the partitions of an image.
  • +
  • Customize the bundles preinstalled in an image.
  • +
  • Run your own post installation script.
  • +
+

Follow these steps to recreate an upstream image based on the image’s JSON +configuration file:

+
    +
  1. Install the os-installer bundle. Refer to swupd for +more information on installing bundles.

    +
  2. +
  3. Download the ister.py tool and grant it sudo privileges.

    +
  4. +
  5. Download the JSON configuration file for the desired image (located in +config/image/):

    + +

    For a previous release, navigate to Previous releases, select the version +you want, and find the JSON configuration file under +/clear/config/image. For example: +https://cdn.download.clearlinux.org/releases/15700/clear/config/image/

    +
  6. +
  7. 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 +process. If it does, download the script and make it executable.

    +
  8. +
  9. Edit the JSON configuration file as needed.

    +
  10. +
  11. If your configuration file has an accompanying “PostNonChroot” script, change +the default path of the script to match your path.

    +
  12. +
  13. Generate the new image with the following command:

    +
    sudo ister.py -t [JSON configuration]
    +
    +
    +
  14. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/mixer.html b/guides/clear/mixer.html new file mode 100644 index 00000000..b1472f22 --- /dev/null +++ b/guides/clear/mixer.html @@ -0,0 +1,1746 @@ + + + + + + + + + + + mixer — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

mixer

+

mixer is the tool used by the Clear Linux* OS team to generate official update +content and releases. The update content generated by mixer is then consumed +by swupd on a downstream client. The same mixer tool is available as part of +Clear Linux OS to create your own customized update content and releases.

+ +
+

Description

+

mixer uses the following sources as inputs to generate update content:

+
    +
  • Upstream Clear Linux OS bundles with their corresponding RPM packages
  • +
  • Locally-defined bundles with their corresponding local RPM packages
  • +
  • Locally-defined bundles with upstream RPM packages
  • +
+

Using the mixer tool, you select which set of content from these sources +will be part of your update. You can select content from each of these sources to make a unique combination of functionality for your custom update content, known as a mix.

+

The update content that mixer generates consists of various pieces of OS +content, update metadata, as well as a complete image. The OS content +includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via swupd. Refer to swupd for additional information regarding updates and update content.

+
+
+

How it works

+

Learn the mixer tool set up and workflow.

+ +
+

Prerequisites

+
    +
  • mixer bundle

    +

    Add the mixer tool with the mixer bundle. Refer to +swupd for more information on installing bundles.

    +
  • +
  • Docker* container

    +

    mixer by default runs all build commands in a Docker container to ensure +the correct tool versions are used. This also allows custom mixes to +automatically perform downstream format bumps when the upstream releases a +format bump. See Format version for additional information regarding +format bumps.

    +

    Refer to Configure and enable Docker for instruction.

    +
  • +
  • Docker proxy (optional)

    +

    If you use a proxy server, you must set your proxy environment variables and +create a proxy configuration file for the Docker daemon and container.

    +

    Consult your IT department for the correct values if you are behind a +corporate proxy.

    +

    Refer to Configure Docker proxy info for instruction.

    +
  • +
  • Location to host the update content and images

    +

    In order for swupd to make use of your mix, the update content for your mix +must be hosted on a web server. Your mix will be configured with an update +location URL, which swupd will use to pull down updates.

    +

    Refer to Set up a nginx web server for mixer for an simple example of +setting up an update location.

    +
  • +
+
+
+

Mix setup

+

Follow these steps to create and initialize the mixer workspace. Complete +the setup before you create a mix.

+
    +
  1. Create workspace.

    +

    The mixer tool uses a simple workspace to contain all input and output in a +basic directory structure. The workspace is simply an empty folder from +which you execute the mixer commands. Each mix uses its own separate +workspace.

    +
  2. +
  3. Initialize the workspace and mix.

    +

    Before you create a mix, you must explicitly initialize the mixer workspace. +During initialization, the mixer workspace is configured and the base for +your mix is defined. By default, your mix is based on the latest +upstream version and starts with the minimum set of bundles. Your first custom +mix version number starts at 10. Alternatively, you can select other +versions or bundle sets from which to start.

    +

    Initialization creates the directory structure within the workspace and adds +the builder.conf file, which is used to configure the mixer tool.

    +

    View the mixer.init man page for more information on mixer +initialization.

    +

    View the list of suitable releases from which to mix.

    +
  4. +
  5. Edit builder.conf.

    +

    builder.conf tells the mixer tool how to configure the mix. For +example, it allows you to configure where mixer output is located and where +swupd update content will be located.

    +

    At minimum, set the URL of your update server so your custom OS knows where +to get update content.

    +

    Refer to the builder.conf section for more information.

    +
  6. +
+
+
+

Create a mix

+

A mix is created with the following steps:

+
    +
  1. Add custom RPMs and set up local repo (optional).

    +

    If you are adding custom RPMs to your mix, you must add the RPMs to +your mix workspace and set up a corresponding local repository.

    +

    Go to the autospec guide to learn to build RPMs from +scratch. If the RPMs are not built on Clear Linux OS, make sure your +configuration and toolchain builds them correctly for Clear Linux OS. Otherwise there +is no guarantee they will be compatible.

    +

    Refer to the autospec guide for more information on using autospec to +build RPMs.

    +
  2. +
  3. Update and build bundles.

    +

    Add, edit, or remove bundles that will be part of your content and build +them. mixer automatically updates the mixbundles file when you +update the bundles in your mix.

    +

    View the mixer.bundle man page for more information on configuring bundles +in a mix.

    +

    View the mixer.build man page for more information on building bundles.

    +

    View the Bundles section for more information on how mixer manages +bundles.

    +
  4. +
  5. Create the update content.

    +

    mixer creates update content with this step. Zero-packs are created +automatically, and delta-packs can be optionally created at the same time +(for all builds after version 0).

    +

    A zero-pack is the full set of content needed to go from mix version 0 +(nothing) to the mix version for which you just built content.

    +

    A delta-pack provides the content delta between a PAST_VERSION to a +MIX_VERSION that allows the transition from one mix version to another.

    +

    View swupd for more information on update content.

    +
  6. +
  7. Create image.

    +

    mixer creates a bootable image from your updated content using +the ister.py image builder tool. In this step you can specify which bundles you want +preinstalled in the image. Users can later install other bundles available +in your mix.

    +
  8. +
  9. Make update available.

    +

    Deploy update content and images to your update server.

    +

    View the Example 3: Deploy updates to target for a simple deployment +scenario.

    +
  10. +
+
+
+

Maintain or modify mix

+

Update or modify your content to a new version by following the steps to +create a mix. Increment the mix version number for the next mix.

+
+
+
+

Examples

+

The following examples are designed to work together and in order. The examples +use:

+
    +
  • A stock installation of Clear Linux OS.
  • +
  • A web server that comes with Clear Linux OS to host the content updates.
  • +
  • A simple VM that updates against the locally produced content created in +Example 2.
  • +
+

Complete all Prerequisites before using these examples.

+
+

Example 1: Mix set up

+

This example shows the basic steps for the first-time setup of +mixer for a new mix.

+
    +
  1. Create an empty directory to use as a workspace for mixer:

    +
    mkdir ~/mixer
    +
    +
    +
  2. +
  3. In your mixer workspace, generate an initial mix based on the latest upstream +Clear Linux OS version, with minimum bundles. In the initialization output, be aware +that your initial mix version is set to 10 and that the minimum bundles have +been added.

    +
    cd ~/mixer
    +mixer init
    +
    +
    +
  4. +
  5. Edit builder.conf to set the value of CONTENTURL and VERSIONURL to +the IP address of the nginx* server you set up in the prerequisite +Set up a nginx web server for mixer. For example:

    +
    CONTENTURL="http://192.168.25.52"
    +VERSIONURL="http://192.168.25.52"
    +
    +
    +
  6. +
+
+
+

Example 2: Create a simple mix

+

This example shows how to create a simple custom mix using upstream content. +We’ll create an image for a QEMU virtual machine that we can use later to test +our mix.

+

We can use the default bundles that were added during initialization, but these +include the native-kernel bundle that is intended to be used on a +bare metal system instead of a VM. So we will modify the default bundle +set to get a smaller kernel image, which will also be faster to load.

+
    +
  1. Update bundles in mix:

    +
    mixer bundle remove kernel-native
    +mixer bundle add kernel-kvm
    +
    +
    +
  2. +
  3. In this case, we will add the editors bundle from upstream, but we will +remove the joe editor.

    +
    mixer bundle add editors
    +mixer bundle edit editors
    +
    +
    +
  4. +
  5. Use an editor and manually remove joe from the bundle definition.

    +
    $EDITOR ./local-bundles/editors
    +
    +
    +
  6. +
  7. List the bundles in the mix again to confirm removal.

    +
    mixer bundle list  --tree
    +
    +
    +
  8. +
  9. Build bundles:

    +
    mixer build bundles
    +
    +
    +

    Look in ~/mixer/update/image/<mix version>/full for the full chroot after the +build command completes.

    +
  10. +
  11. Build update content. Browse to your http://localhost site and you’ll see +the web page is now up, but with no update content. Build the update content:

    +
    mixer build update
    +
    +
    +

    Refresh your http://localhost site and now you can see the update +content for mix version 10.

    +

    Look in ~/mixer/update/www/<mix version> to see the update content in your +workspace.

    +
  12. +
  13. Configure image. Edit the ister configuration file for your image to include +all of the bundles you want preinstalled in the image. If this is the first +time creating an image, first get a copy of the +release-image-config.json template file:

    +
    curl -O https://raw.githubusercontent.com/bryteise/ister/master/release-image-config.json
    +
    +
    +

    For this example, edit release-image-config.json so that the root +partition size is “5G” and replace the “kernel-native” bundle with +“kernel-kvm”.

    +
    {
    +  "DestinationType" : "virtual",
    +  "PartitionLayout" : [ { "disk" : "release.img", "partition" : 1, "size" : "32M", "type" : "EFI" },
    +                        { "disk" : "release.img", "partition" : 2, "size" : "16M", "type" : "swap" },
    +                        { "disk" : "release.img", "partition" : 3, "size" : "5G", "type" : "linux" } ],
    +  "FilesystemTypes" : [ { "disk" : "release.img", "partition" : 1, "type" : "vfat" },
    +                        { "disk" : "release.img", "partition" : 2, "type" : "swap" },
    +                        { "disk" : "release.img", "partition" : 3, "type" : "ext4" } ],
    +  "PartitionMountPoints" : [ { "disk" : "release.img", "partition" : 1, "mount" : "/boot" },
    +                             { "disk" : "release.img", "partition" : 3, "mount" : "/" } ],
    +  "Version": "latest",
    +  "Bundles": ["kernel-kvm", "os-core", "os-core-update"]
    +}
    +
    +
    +
  14. +
  15. Build the image.

    +
    sudo mixer build image
    +
    +
    +

    The output from this step will be release.img, which is a live image.

    +
  16. +
  17. Make the next mix. Create a new version of your mix, for the live image to +update to. Increment your mix version by 10:

    +
    mixer versions update
    +
    +
    +

    Repeat steps 1-3 to add the upstream curl bundle to the mix:

    +
    mixer bundle add curl
    +mixer build bundles
    +mixer build update
    +
    +
    +

    Build optional delta-packs, which helps reduce client update time:

    +
    mixer build delta-packs --from 10 --to 20
    +
    +
    +

    Refresh your http://localhost site to see the update content for +mix version 20.

    +

    Look in ~/mixer/update/www/<mix version> to see the update content in your +workspace.

    +
  18. +
+
+
+

Example 3: Deploy updates to target

+

The image created in Example 2 is directly bootable in QEMU. In this example, +we’ll boot the image from Example 2 to verify it, and update the image from +mix version 10 (from which the image was built), to mix version 20.

+
    +
  1. Set up the QEMU environment.

    +

    Install the kvm-host bundle to your Clear Linux OS:

    +
    sudo swupd bundle-add kvm-host
    +
    +
    +

    Get the virtual EFI firmware, download the image launch script, and make it +executable:

    +
    curl -O https://download.clearlinux.org/image/OVMF.fd
    +curl -O https://download.clearlinux.org/image/start_qemu.sh
    +chmod +x start_qemu.sh
    +
    +
    +
  2. +
  3. Start your VM image (created in Example 2):

    +
    sudo ./start_qemu.sh release.img
    +
    +
    +
  4. +
  5. Log in as root and set a password

    +
  6. +
  7. Try out your mix.

    +

    Take a look at the default bundles installed in your mix:

    +
    swupd info
    +swupd bundle-list
    +swupd bundle-list -a
    +
    +
    +
  8. +
  9. Now we will add the editors bundle that we modified.

    +
    swupd bundle add editors
    +
    +
    +
  10. +
  11. Try to start the joe editor. It should not appear because we removed it +from the original editors bundle.

    +
  12. +
  13. Next we will update from version 10 to 20 to capture the newly +available bundles. Use swupd to update your mix:

    +
    swupd check-update
    +swupd update
    +swupd bundle-list -a
    +
    +
    +
  14. +
  15. Now your mix should be at version 20 and curl is now available. Try using +curl. This will fail because curl is not yet installed:

    +
    curl: command not found
    +To install curl use: swupd bundle-add curl
    +
    +
    +

    Add the new bundle from your update server to your VM. Retry curl. It works!

    +
    swupd bundle-add curl
    +curl -O https://download.clearlinux.org/image/start_qemu.sh
    +
    +
    +

    Shutdown your VM:

    +
    poweroff
    +
    +
    +
  16. +
+
+
+
+

References

+

Reference the mixer man page for details regarding mixer commands and options.

+ +
+

builder.conf

+

mixer initialization creates a builder.conf that stores the basic +configuration for the mixer tool. The items of primary interest are CONTENTURL +and VERSIONURL, which will be used by systems updating against your custom +content.

+
#builder.conf
+
+#VERSION 1.0
+
+[Builder]
+  CERT = "/home/clr/mix/Swupd_Root.pem"
+  SERVER_STATE_DIR = "/home/clr/mix/update"
+  VERSIONS_PATH = "/home/clr/mix"
+  YUM_CONF = "/home/clr/mix/.yum-mix.conf"
+
+[Swupd]
+  BUNDLE = "os-core-update"
+  CONTENTURL = "<URL where the content will be hosted>"
+  VERSIONURL = "<URL where the version of the mix will be hosted>"
+
+[Server]
+  DEBUG_INFO_BANNED = "true"
+  DEBUG_INFO_LIB = "/usr/lib/debug"
+  DEBUG_INFO_SRC = "/usr/src/debug"
+
+[Mixer]
+  LOCAL_BUNDLE_DIR = "/home/clr/mix/local-bundles"
+  LOCAL_REPO_DIR = ""
+  LOCAL_RPM_DIR = ""
+  DOCKER_IMAGE_PATH = "clearlinux/mixer"
+
+
+

Additional explanation of variables in builder.conf is provided in Table +1.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableExplanation
CERT

Sets the path where mixer stores the certificate file +used to sign content for verification. mixer +automatically generates the certificate if you do not +provide the path to an existing one, and signs the +Manifest.MoM file to provide security for the +updated content you create.

+

chroot-builder uses the certificate file to sign +the root Manifest.MoM file to provide +security for content verification.

+

swupd uses this certificate to verify the +Manifest.MoM file’s signature.

+

For now, we strongly recommend that you do not modify +this variable, as swupd expects a certificate with a +very specific configuration to sign and verify +properly.

+
CONTENTURL and VERSIONURL

Set these variables to the IP address of the web server +hosting the update content.

+

VERSIONURL is the IP address where the swupd client +looks to determine if a new version is available.

+

CONTENTURL is the location from which swupd pulls +content updates.

+

If the web server is on the same machine as the +SERVER_STATE_DIR directory, you can create a symlink to +the directory in your web server’s document root to +easily host the content.

+

These URLs are embedded in the images created by mixer.

+
DOCKER_IMAGE_PATHSets the base name of the docker image that mixer pulls +down to run builds in the proper container.
LOCAL_BUNDLE_DIRSets the path where mixer stores the local bundle +definition files. The bundle definition files include +any new, original bundles you create, along with any +edited versions of upstream bundles.
SERVER_STATE_DIRSets the path to which mixer outputs content. By +default, mixer automatically sets the path.
VERSIONS_PATHSets the path for the mix version and upstream version’s +two state files: mixversion and +upstreamversion. mixer creates both files for +you when you set up the workspace.
YUM_CONF

Sets the path where mixer automatically generates the +.yum-mix.conf file.

+

The yum configuration file points the chroot-builder to +where the RPMs are stored.

+
Table 1: Variables in builder.conf
+
+

Format version

+

Compatible versions of an OS are tracked with an OS compatibility epoch. +Versions of an OS within an epoch are fully compatible and can update to any +other version within that epoch. The compatibility epoch is set as the +Format variable in the mixer.state file. Variables in the +mixer.state are used by mixer between executions and should not be +manually changed.

+

A format bump is like modifying the foundation of a house to create a new +level. If Format increments to a new epoch (a “format bump”), the OS has +changed in such a way that updating from build A in format X to build B in +format Y will not work.

+

A format bump is required when:

+
    +
  • The software updater, swupd, or the software is no longer +compatible with the previous update scheme
  • +
  • A package is removed from the update stream and the update must ensure the +files associated with that package are removed from the system
  • +
+

Using a format increment, we make sure pre- and co-requisite changes flow out +with proper ordering. The updated client will only update to the latest +release in its respective format version, unless overridden by command line +flags. In this way, we can guarantee that all clients update to the final +version in their given format.

+

The given format must contain all the changes needed to understand the content built in the next format. Only after reaching the final release in the old format can a client continue to update to releases in the new format.

+

The format version is incremented only when a compatibility breakage is +introduced. Normal updates, such as updating a software package, do not require a format increment.

+
+
+
+

Bundles

+

mixer stores information about the bundles included in a mix in a flat file +called mixbundles, which is located in the path set by the VERSIONS_PATH variable in builder.conf. mixbundles is automatically created when the mix is initiated. mixer will refresh the file each time you change the bundles in the mix.

+

Bundles can include other bundles. Nested bundles can themselves include +other bundles. If you see an unexpected bundle in your mix, it is likely a +nested bundle in one of the bundles you explicitly added.

+

A bundle will fill into one of two categories: upstream or local. Upstream +bundles are those provided by Clear Linux OS. Local bundles are either modified upstream bundles or new local bundles.

+
+

Upstream bundles

+

mixer automatically downloads and caches upstream bundle definition files. +These definition files are stored in the upstream-bundles directory in the +workspace. Do not modify the files in this directory. This directory is +simply a mirror for mixer to use. mixer will automatically delete the +contents of this directory before repopulating it on-the-fly if a new +version must be downloaded.

+

The mixer tool automatically caches the bundles for the Clear Linux OS version +configured in the upstreamversion file. mixer also cleans up old +versions once they are no longer needed.

+
+
+

Local bundles

+

Local bundles are bundles that you create, or are edited versions of upstream +bundles. Local bundle definition files are stored in the local-bundles +directory in the workspace. The LOCAL_BUNDLE_DIR variable sets the path of this directory in the builder.conf file.

+

mixer always checks for local bundles first and the upstream bundles +second. So bundles in the local-bundles directory will always take +precedence over any upstream bundles that have the same name. This +precedence enables you to copy upstream bundles locally, and edit into a +local variation.

+
+
+

Bundle configuration

+

mixer provides commands to configure the bundles for a mix, such as to add a +bundle to a mix, to create a new bundle for a mix, or to remove a bundle from a +mix. View the mixer.bundle man page for a full list of commands and more +information on configuring bundles in a mix.

+

Editing an existing local bundle is as simple as opening the bundle definition +file in your favorite editor, making the desired edits, and saving your changes.

+
+

Note

+

Removing bundles from a mix: By default, removing a bundle will only +remove the bundle from the mix. The local bundle definition file will +still remain. To completely remove a bundle, including its local bundle definition file, use the --local flag.

+

If you remove the bundle definition file for a local, edited version of an +upstream bundle in a mix, the mix reverts to reference the original upstream version of the bundle.

+
+
+
+
+

Configure and enable Docker

+

Use these steps to enable Docker for the mixer tool. Make sure to +Configure Docker proxy info first if needed.

+
    +
  1. Start the Docker daemon:

    +
    sudo systemctl start docker
    +sudo chmod 777 /var/run/docker.sock
    +sudo docker info
    +
    +
    +
  2. +
  3. Add user to the docker group

    +
    sudo usermod -G docker -a <username>
    +
    +
    +
  4. +
+
+

Pull Docker container manually (optional)

+

By default, mixer automatically pulls a Docker container for mixing if one +does not already exist. If you need to troubleshoot the mixer container, it +may be useful to manually pull a mixer Docker container.

+

Versions of the mixer Docker container are available under the tags for the +clearlinux/mixer repo +on Docker Hub. Each version of the mixer Docker container is named after the +associated Clear Linux OS upstream format version. Refer to Format version for +additional information on upstream format versions.

+

Use the following steps to manually pull a mixer Docker container:

+
    +
  1. Find the version of the container you need by viewing the tags for the +clearlinux/mixer repo +on Docker Hub.

    +
  2. +
  3. Pull the latest container version:

    +
    docker pull clearlinux/mixer:<upstream-format-version>
    +
    +
    +
  4. +
  5. View local docker images:

    +
    docker images
    +
    +
    +
  6. +
+
+
+
+

Configure Docker proxy info

+

If needed, use these steps to configure the Docker proxy information.

+
    +
  1. Create the Docker daemon proxy config directory:

    +
    sudo mkdir -p /etc/systemd/system/docker.service.d
    +
    +
    +
  2. +
  3. Create /etc/systemd/system/docker.service.d/http-proxy.conf and +add the following using your own proxy values:

    +
    [Service]
    +Environment="HTTP_PROXY=<HTTP proxy URL>:<port number>"
    +Environment="HTTPS_PROXY=<HTTPS proxy URL>:<port number>"
    +
    +
    +
  4. +
  5. Reload the Docker daemon:

    +
    sudo systemctl daemon-reload
    +
    +
    +
  6. +
+

Configure the Docker container proxies, to pass proxy settings to +containers:

+
    +
  1. Create a directory for your container config:

    +
    mkdir ~/.docker
    +
    +
    +
  2. +
  3. Create the config file ~/.docker/config.json and add the following +entries, using your own proxy values:

    +
    {
    +  "proxies":
    +  {
    +    "default":
    +    {
    +      "httpProxy": "<proxy-url>:<port>",
    +      "httpsProxy": "<proxy-url>:<port>"
    +    }
    +  }
    +}
    +
    +
    +
  4. +
  5. Set ownership and permission on the docker config directory:

    +
    sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
    +sudo chmod g+rwx "$HOME/.docker" -R
    +
    +
    +
  6. +
+

Configure proxies to allow mixer to access upstream content from behind +a firewall.

+
    +
  1. Open your $HOME/.bashrc file and add proxy and port values for the +following:

    +
    export http_proxy="<proxy-url>:<port>"
    +export https_proxy="<proxy-url>:<port>"
    +export HTTP_PROXY="<proxy-url>:<port>"
    +export HTTPS_PROXY="<proxy-url>:<port>"
    +export no_proxy="<...>"
    +
    +
    +
  2. +
  3. Log out and log back in for the proxies to take effect.

    +
  4. +
+
+
+

Set up a nginx web server for mixer

+

A web server is needed to host your update content. In this example, we use +the nginx web server, which comes with Clear Linux OS.

+

Set up a nginx web server for mixer with the following steps:

+
    +
  1. Install the nginx bundle:

    +
    sudo swupd bundle-add nginx
    +
    +
    +
  2. +
  3. Make the directory where mixer updates will reside:

    +
    sudo mkdir -p /var/www
    +
    +
    +
  4. +
  5. Create a symbolic link between your workspace updates and the updates on +the local nginx web server. In this example, $HOME/mixer is the +workspace for the mix.

    +
    sudo ln -sf $HOME/mixer/update/www /var/www/mixer
    +
    +
    +
  6. +
  7. Set up nginx configuration:

    +
    sudo mkdir -p  /etc/nginx/conf.d
    +
    +
    +
  8. +
  9. Copy the default example configuration file:

    +
    sudo cp -f /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf
    +
    +
    +
  10. +
  11. Configure the mixer update server. Create and add the following server +configuration content to /etc/nginx/conf.d/mixer.conf (sudo required):

    +
    server {
    +     server_name localhost;
    +     location / {
    +               root /var/www/mixer;
    +               autoindex on;
    +     }
    +}
    +
    +
    +
  12. +
  13. Restart the daemon, enable nginx on boot, and start the service.

    +
    sudo systemctl daemon-reload
    +
    +sudo systemctl enable nginx
    +
    +sudo systemctl start nginx
    +
    +
    +
  14. +
  15. Verify the web server is running at http://localhost. At this point +you should no longer see a “404 Not Found” message.

    +
  16. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/security.html b/guides/clear/security.html new file mode 100644 index 00000000..c4e285e9 --- /dev/null +++ b/guides/clear/security.html @@ -0,0 +1,1114 @@ + + + + + + + + + + + OS Security — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

OS Security

+

Clear Linux* OS aims to make systemic and layered security-conscious decisions +that are both performant and practical. This security philosophy is rooted +within the project’s codebase and operating culture.

+ +
+

Security in updates

+

The Clear Linux OS team believes in the benefits of software security through open +sourcing, incremental updates, and rapidly resolving known security advisories.

+
+

The latest Linux* codebase

+

Clear Linux OS uses the newest version of the Linux kernel which allows the operating +system to leverage the latest features from the upstream Linux kernel, +including security fixes.

+
+
+

Automated effective updating

+

Clear Linux OS is incrementally updated multiple times per day.

+

This rolling release model allows Clear Linux OS to consume the latest security fixes +of software packages as soon as they become available. There is no waiting for +major or minor releases on Clear Linux OS.

+

An update is not effective if it is just simply downloaded onto a system. +It needs to be obtained AND ensured that the new patched copy is being +used; not an older copy loaded into memory. Clear Linux OS will let you know when a +service needs to be rebooted or do it for your automatically after +a software update, if desired.

+

In Clear Linux OS updates are delivered automatically, efficiently, and effectively. For +more information about software updates in Clear Linux OS, refer to the swupd +guide.

+
+
+

Automated CVE scanning and remediation

+

The sheer number of software packages and security vulnerabilities is growing +exponentially. Repositories of Common Vulnerabilities and Exposures (CVEs) +and their fixes, if known, are published by NIST in a +National Vulnerability Database https://nvd.nist.gov/ and at https://cve.mitre.org/ .

+

Clear Linux OS employs a proactive and measured approach to addressing known +and fixable CVEs. +Packages are automatically scanned against CVEs daily, and security +patches are deployed as soon as they are available.

+

These combined practices minimize the amount of time Clear Linux OS systems are exposed to unnecessary security risk.

+
+
+
+

Security in software

+
+

Minimized attack surface

+

Clear Linux OS removes legacy, unneeded, or redundant standards and components as much as +possible to enable the use of best known security standards. Below are some +examples:

+
    +
  • RC4, SSLv3, 3DES, and SHA-1 ciphers which have had known +vulnerabilities, have been explicitly disabled within many Clear Linux OS packages to +avoid their accidental usage.
  • +
  • Services and subsystems which expose sensitive system information +have been removed such as the finger and tcpwrappers.
  • +
  • SFTP has been disabled by default due to security considerations.
  • +
+
+
+

Verified trust

+

Clear Linux OS encourages the use of secure practices such as encryption +and digital signature verification throughout the system and discourages blind +trust. Below are some examples:

+
    +
  • All update operations from swupd are transparently encrypted and checked +against the Clear Linux OS maintainers’ public key for authenticity. +More information about swupd security can be found in the +Security for software update in Clear Linux* OS blog post.
  • +
  • Before being built, packages available from Clear Linux OS verify checksums and +signatures provided by third party project codebases and maintainers.
  • +
  • Clear Linux OS features a unified certificate store, clrtrust which comes +ready to work with well-known Certificate Authorities out of the box. +clrtrust also offers an easy to use command line interface for managing +system-wide chains of trust, instead of ignoring foreign certificates.
  • +
+
+
+

Compiled with secure options

+

While Clear Linux OS packages are optimized for performance on Intel® architecture, +security conscious kernel and compiler options are sensibly taken advantage of. +Below are some examples:

+ +
+
+
+

Security in system design

+

Simple, yet effective, techniques are used throughout the Clear Linux OS system design to +defend against common attack vectors and enable good security hygiene. Below are +some examples:

+
    +
  • Full disk encryption using LUKS is available +during installation. Refer to cryptsetup for additional information about +LUKS.
  • +
  • Clear Linux OS uses the PAM cracklib module to harden user login and password +security resulting in:
      +
    • No default username or root password set out of the box with +Clear Linux OS, you will be asked to set your own password immediately.
    • +
    • Simple password schemes, which are known to be easily compromised, +cannot be set in Clear Linux OS.
    • +
    • A password blacklist, to avoid system passwords being set to +passwords which have been compromised in the past.
    • +
    +
  • +
  • Tallow, a lightweight service which monitors and blocks suspicious SSH +login patterns, is installed with the openssh-server bundle.
  • +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/stateless.html b/guides/clear/stateless.html new file mode 100644 index 00000000..bac0972b --- /dev/null +++ b/guides/clear/stateless.html @@ -0,0 +1,1105 @@ + + + + + + + + + + + Stateless — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Stateless

+

In most operating systems, user data, system data, and configuration files +can become intermingled.

+
+Stateless: User and system files mixed +

Figure 1: Without stateless, user and system files become mixed on the filesystem over time.

+
+

Clear Linux* OS has a stateless design philosophy with the goal to provide an +OS that functions without excessive user +configuration or customization. Stateless in this context does not mean +ephemeral or non-persistent.

+ +
+

File-level separation

+

To accomplish a stateless design the Linux Filesystem Hierarchy is separated +between user-owned areas and Clear Linux OS-owned areas.

+
+Stateless: User and system files separation +

Figure 2: With stateless, user and system files are separated on the filesystem.

+
+
+

System areas

+

File under the /usr directory are managed by Clear Linux OS as system files. +Files written under the /usr directory by users can get removed +through system updates with swupd. This operating +assumption allows Clear Linux OS to verify and maintain integrity of system files.

+
+
+

User areas

+

Files under the /etc/, /home, and /var directories are +owned and managed by the user. A freshly installed Clear Linux OS system will only have +a minimal set of files in the /etc/ directory and software installed +by Clear Linux OS does not write to /etc. This operating assumption allows Clear Linux OS +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, Clear Linux OS provided defaults, and user-provided +configuration.

+
+

Default configurations

+

Software in Clear Linux OS provides default configuration values so that it is +immediately functional, whenever it is appropriate to do so.

+

Clear Linux OS distributed software packages may be directly modified to include default +configuration values or default configuration files may be provided by Clear Linux OS +under /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 /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 /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:

+
    +
  1. Create the destination directory for the configuration:

    +
    sudo mkdir /etc/httpd
    +
    +
    +
  2. +
  3. Copy the default configuration as a reference template:

    +
    sudo cp /usr/share/defaults/httpd/httpd.conf /etc/httpd/
    +
    +
    +
  4. +
  5. Make any desired modifications to the configurations:

    +
    sudoedit /etc/httpd/httpd.conf
    +
    +
    +
  6. +
  7. Reload the service or reboot the system to pickup any changes:

    +
    systemctl daemon-reload httpd && systemctl restart httpd
    +
    +
    +
  8. +
+

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 /etc/ and +/var.

+

Running the commands below effectively performs a system reset as if it was +just installed:

+
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.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/clear/swupd-guide.html b/guides/clear/swupd-guide.html new file mode 100644 index 00000000..a6cce058 --- /dev/null +++ b/guides/clear/swupd-guide.html @@ -0,0 +1,1287 @@ + + + + + + + + + + + swupd — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

swupd

+

swupd links a Clear Linux* OS installation with upstream updates and +software.

+ +
+

Description

+

swupd has two main functions:

+
    +
  1. Manage software and replace APT or YUM, by installing bundles +rather than packages.
  2. +
  3. Check for system updates and install them.
  4. +
+

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.

+

Bundles contain everything needed to deliver a software +capability. They are the smallest granularity component that is +managed by Clear Linux OS. A bundle comes with all of its dependencies rather than +downloading a cascade of package dependencies when installing a piece of +software.

+
+

Versioning

+

Using package managers to monitor software version compatibility or +compare multiple systems on many Linux distributions can be cumbersome.

+

With Clear Linux OS swupd, versioning happens at the individual file level. +This means Clear Linux OS 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 git internal version +tracking, where any of the individual file commits are tracked and move the +pointer forward when changed.

+

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. On a daily basis, +this matters 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 Clear Linux OS.

+
+
+

Updating

+

Clear Linux OS 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, 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 Clear Linux OS are also efficient. Unlike package-based +distributions, 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, Clear Linux OS is able to +apply only what is needed.

+

For details on how to generate update content for Clear Linux OS, see the +mixer tool.

+
+
+
+

How it works

+
+

Prerequisites

+
    +
  • The device is on a well-connected network.
  • +
  • The device is able to connect to an update server. The default server is: +http://update.clearlinux.org
  • +
+
+
+

Updates

+

Clear Linux OS updates are automatic by default, but can be set to occur only on +demand. swupd makes sure that regular updates are simple and +secure. It can also check the validity of currently installed files and +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 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

+

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 is used if the OS verification +needs to replace a single file, for instance.
  • +
  • Packs are available for some releases. They 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). They cannot be used without having the original file content.
  • +
+
+
+ +
+
+

Examples

+
+

Example 1: Disable and enable automatic updates

+

Clear Linux OS updates are automatic by default, but can be set to occur only +on demand.

+
    +
  1. Verify your current auto-update setting.

    +
    sudo swupd autoupdate
    +
    +
    +

    Output:

    +
    Enabled
    +
    +
    +
  2. +
  3. Disable automatic updates.

    +
    sudo swupd autoupdate --disable
    +
    +
    +

    Output:

    +
    Warning: disabling automatic updates may take you out of compliance with your IT policy
    +
    +Running systemctl to disable updates
    +Created symlink /etc/systemd/system/swupd-update.service → /dev/null.
    +Created symlink /etc/systemd/system/swupd-update.timer → /dev/null.
    +
    +
    +
  4. +
  5. Check manually for updates.

    +
    sudo swupd check-update
    +
    +
    +
  6. +
  7. Install an update after identifying one that you need.

    +
    sudo swupd update --version <version number>
    +
    +
    +
  8. +
  9. Re-enable automatic installs.

    +
    sudo swupd autoupdate --enable
    +
    +
    +
  10. +
+
+
+

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 VM for +improved security.

+

Clear Linux OS makes it very easy to install, since you only need to add +one bundle to use Kata Containers: containers-virt, despite a +number of dependencies. Also, check out our tutorial: Install Kata Containers*.

+
    +
  1. Find the correct bundle.

    +

    To return all possible matches for the search string, enter +swupd search, followed by ‘kata’:

    +
    sudo swupd search kata
    +
    +
    +

    The output should be similar to:

    +
    Bundle with the best search result:
    +
    +containers-virt - Run container applications from Dockerhub in
    +lightweight virtual machines
    +
    +This bundle can be installed with:
    +
    +     swupd bundle-add  containers-virt
    +
    +Alternative bundle options are
    +
    +     cloud-native-basic - Contains ClearLinux native software for Cloud
    +
    +
    +
    +

    Note

    +

    If your search does not produce results with a specific term, shorten +the search term. For example, use kube instead of kubernetes.

    +
    +
  2. +
  3. Add the bundle.

    +
    sudo swupd bundle-add containers-virt
    +
    +
    +
    +

    Note

    +

    To add multiple bundles, add a space followed by the bundle name.

    +
    +

    The output of a successful installation should be similar to:

    +
    Downloading packs...
    +
    +Extracting containers-virt pack for version 24430
    +    ...50%
    +Extracting kernel-container pack for version 24430
    +    ...100%
    +Starting download of remaining update content. This may take a while...
    +    ...100%
    +Finishing download of update content...
    +Installing bundle(s) files...
    +    ...100%
    +Calling post-update helper scripts.
    +Successfully installed 1 bundle
    +
    +
    +
  4. +
+
+
+

Example 3: Verify and correct system file mismatch

+

swupd can determine whether system directories and files have +been added to, overwritten, removed, or modified (e.g., permissions).

+
sudo swupd diagnose
+
+
+

All directories that are watched by swupd are verified according +to the manifest data. Hash mismatches are flagged as follows:

+
Verifying version 23300
+Verifying files
+   ...0%
+Hash mismatch for file: /usr/bin/chardetect
+...
+...
+Hash mismatch for file: /usr/lib/python3.6/site-packages/urllib3/util/wait.py
+   ...100%
+Inspected 237180 files
+   423 files did not match
+Verify successful
+
+
+

In this case, Python* packages that were installed on top of the default +install were flagged as mismatched. swupd can be directed to +ignore or fix issues based on command line options.

+

swupd can correct any issues it detects. Additional directives +can be added including a white list of directories to be ignored.

+

The following command repairs issues, removes unknown items, and +ignores files or directories matching /usr/lib/python:

+
sudo swupd repair --picky --picky-whitelist=/usr/lib/python
+
+
+
+
+
+

Quick reference

+
+
swupd info
+
Returns the currently installed version and update servers.
+
swupd update <version number>
+
Updates to a specific version or updates to latest version if no +arguments are used.
+
swupd bundle-list [–all]
+
Lists installed bundles.
+
swupd bundle-add [-b] <search term>
+
Finds a bundle that contains your search term.
+
swupd bundle-add <bundle name>
+
Adds a bundle.
+
swupd bundle-remove <bundle name>
+
Removes a bundle.
+
swupd –help
+
Lists additional swupd commands.
+
man swupd
+
Opens the swupd man page.
+
+

Refer to swupd source documentation on GitHub for more details.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/deploy-at-scale.html b/guides/deploy-at-scale.html new file mode 100644 index 00000000..57c26efa --- /dev/null +++ b/guides/deploy-at-scale.html @@ -0,0 +1,1200 @@ + + + + + + + + + + + Deploy at Scale — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Deploy at Scale

+

This guide describes deployment considerations and strategies when deploying +Clear Linux* OS at scale in your environment.

+ +
+

Overview

+

In this guide the term endpoint refers to a system targeted for Clear Linux OS +installation, whether that is a datacenter system or unit deployed in field.

+
+

Note

+

This guide is not a replacement or blueprint for designing your own IT +operating environment.

+

Implementation details for a scale deployment are beyond the scope of this +guide.

+

Your Clear Linux OS deployment should complement your existing environment and +available tools. It is assumed core IT dependencies of your environment, +such as your network, are healthy and scaled to suit the deployment.

+
+
+
+

Pick a usage and update strategy

+

Different business scenarios call for different deployment methodologies. +Clear Linux OS offers the flexibility to continue consuming the upstream Clear Linux OS +distribution or the option to fork away from the Clear Linux OS distribution and +act as your own OSV.

+

Below is an overview of some considerations.

+
+

Create your own Linux distribution (mix)

+

This approach forks away from the Clear Linux OS upstream and has you act as your own +OSV by leveraging the mixer process to +create customized images based on Clear Linux OS. This is a level of responsibility +that requires having more infrastructure and processes to adopt. In return, +this approach offers you a high degree of control and customization. Consider:

+
    +
  • Development systems that generate bundles and updates should have +sufficient performance for the task and be separate from the swupd update +webservers that serve update content to production machines.

    +
  • +
  • swupd update webservers that serve update content to production machines +should be appropriately scaled. Specific implementation details for a scalable, +resilient web server are beyond the scope of this document.

    +

    (See mixer for more information about update servers.)

    +
  • +
+
+
+

Adopt an agile methodology

+

The cloud, and other scaled deployments, are all about flexibility and speed. +It only makes sense that any Clear Linux OS deployment strategy should follow suit.

+

Manually rebuilding your own bundles or mix for every release is not +sustainable at a large scale. A Clear Linux OS deployment pipeline should be agile +enough to validate and produce new versions with speed. Whether or not those +updates actually make their way to your production can be separate +business decision. However this ability to frequently roll new versions of +software to your endpoints is an important prerequisite.

+

You own the validation and lifecycle of the OS and should treat it like any +other software development lifecycle. Below are some pointers:

+
    +
  • Thoroughly understand the custom software packages that you will need to +integrate with Clear Linux OS and maintain along with their dependencies.
  • +
  • Setup a path to production for building Clear Linux OS based images. At minimum this +should include:
      +
    • A development clr-on-clr environment to test building packages and +bundles for Clear Linux OS systems.
    • +
    • A pre-production environment to deploy Clear Linux OS versions to before +production
    • +
    +
  • +
  • Employ a continuous integration and continuous deployment (CI/CD) +philosophy in order to:
      +
    • Automatically pull custom packages as they are updated from their +upstream projects or vendors.
    • +
    • Generate Clear Linux OS bundles and potentially bootable images with your +customizations, if any.
    • +
    • Measure against metrics and indicators which are relevant to your +business (e.g. performance, power, etc) from release to release.
    • +
    • Integrate with your organization’s governance processes, such as change +control.
    • +
    +
  • +
+
+
+

Versioning infrastructure

+

Clear Linux OS version numbers are very important as they apply to the whole +infrastructure stack from OS components to libraries and applications.

+

Good record keeping is important, so you should keep a detailed registry and +history of previously deployed versions and their contents.

+

With a glance at the Clear Linux OS version numbers deployed, you should be able to +tell if your Clear systems are patched against a particular security +vulnerability or incorporate a critical new feature.

+
+
+
+

Pick an image distribution strategy

+

Once you have decided on a usage and update strategy, you should understand +how Clear Linux OS will be deployed to your endpoints. In a large scale deployment, +interactive installers should be avoided in favor of automated installations +or prebuilt images.

+

There are many well-known ways to install an operating system at scale. Each +have their own benefits, and one may lend itself easier in your environment +depending on the resources available to you.

+

See the available Clear Linux* OS image types.

+

Below are some common ways to install Clear Linux OS to systems at scale:

+
+

Bare metal

+

Preboot Execution Environments (PXE) or other out-of-band booting options are +one way to distribute Clear Linux OS to physical bare metal systems on a LAN.

+

This option works well if your customizations are fairly small in size +and infrastructure can be stateless.

+

The Clear Linux OS Downloads page offers a live image that can be deployed as +a PXE boot server if one doesn’t already exist in your environment. Also see +documentation on how to Install Clear Linux* OS on bare metal with live server.

+
+
+

Cloud instances or virtual machines

+

Image templates in the form of cloneable disks are an effective way to +distribute Clear Linux OS for virtual machine environments, whether on-premises or +hosted by a Cloud Solution Provider (CSP).

+

When used in concert with cloud VM migration features, this can be a good option +for allowing your applications a degree of high availability and workload +mobility; VMs can be restarted on a cluster of hypervisor host or moved between +datacenters transparently.

+

The Clear Linux OS Downloads page offers example prebuilt VM images and is readily +available on popular CSPs. Also see documentation on how to +Install in a virtual machine.

+
+
+

Containers

+

Containerization platforms allow images to be pulled from a repository and +deployed repeatedly as isolated containers.

+

Containers with a Clear Linux OS image can be a good option to blueprint and ship +your application, including all its dependencies, as an artifact while +allowing you or your customers to dynamically orchestrate and scale +applications.

+

Clear Linux OS is capable of running a Docker host, has a container image which can +be pulled from DockerHub, or can be built as a customized container. +For more information visit the Containers page.

+
+
+
+

Considerations with stateless systems

+

An important Clear Linux OS concept is statelessness and partitioning of system data +from user data. This concept can change the way you think about an at scale +deployment.

+
+

Backup strategy

+

A Clear Linux OS system and its infrastructure should be considered a commodity and +be easily reproducible. Avoid focusing on backing up the operating system +itself or default values.

+

Instead, focus on backing up what’s important and unique - the application +and data. In other words, only focus on backing up critical areas like +/home, /etc, and /var.

+
+
+

Meaningful logging & telemetry

+

Offload logging and telemetry from endpoints to external servers, so it is +persistent and can be accessed on another server when an issue occurs.

+
    +
  • Remote syslogging in Clear Linux OS is available through the +systemd-journal-remote.service

    +
  • +
  • Clear Linux OS offers a Telemetrics, which can be a powerful tool +for a large deployment to quickly crowdsource issues of interest. Take +advantage of this feature with careful consideration of the target audience +and the kind of data that would be valuable, and expose events +appropriately.

    +

    Like any web server, the telemetry server should be appropriately scaled and +resilient. Specific implementation details for a scalable, resilient web +server are beyond the scope of this document.

    +
  • +
+
+
+

Orchestration and configuration management

+

In cloud environments, where systems can be ephemeral, being able to +configure and maintain generic instances is valuable.

+

Clear Linux OS offers an efficient cloud-init style solution, micro-config-drive, +through the os-cloudguest bundles which allow you to configure many Day 1 +tasks such as setting hostname, creating users, or placing +SSH keys in an automated way at boot. For more information on +automating configuration during deployment of Clear Linux OS endpoints see the +Bulk provision guide.

+

A configuration management tool is useful for maintaining consistent system +and application-level configuration. Ansible* is offered through the +sysadmin-hostmgmt bundle as a configuration management and automation +tool.

+
+
+

Cloud-native applications

+

An Infrastructure OS can design for good behavior, but it is ultimately up +to applications to make agile design choices. Applications deployed +on Clear Linux OS should aim to be host-aware but not depend on any specific host to +run. References should be relative and dynamic when possible.

+

The application architecture should incorporate an appropriate tolerance for +infrastructure outages. Don’t just keep stateless design as a noted feature. +Continuously test its use; Automate its use by redeploying Clear Linux OS and +application on new hosts. This naturally minimizes configuration drift, +challenges your monitoring systems, and business continuity plans.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/guides.html b/guides/guides.html new file mode 100644 index 00000000..c474c760 --- /dev/null +++ b/guides/guides.html @@ -0,0 +1,1068 @@ + + + + + + + + + + + Guides — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/kernel/kernel-development.html b/guides/kernel/kernel-development.html new file mode 100644 index 00000000..23791fb0 --- /dev/null +++ b/guides/kernel/kernel-development.html @@ -0,0 +1,1413 @@ + + + + + + + + + + + Kernel development — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Kernel development

+

This guide shows how to obtain and compile a Linux* kernel source using +Clear Linux* OS development tooling.

+ +
+

Overview

+

The Kernels available in Clear Linux OS 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 Clear Linux OS kernels, and can be +used for development instead.

+
+
+

Request changes be included with the Clear Linux OS kernel

+

If the kernel modification you need is already open source and likely to be +useful to others, consider submitting a request to include it in the +Clear Linux OS kernels. If your change request is accepted, you do not need to maintain +your own modified kernel.

+

Make enhancement requests to the Clear Linux OS Distribution Project on GitHub*.

+
+
+

Set up kernel development environment

+

In some cases, it may be necessary to modify the kernel to suit your specific +needs or to test new kernel code.

+

You can build and install a custom kernel; however you must:

+
    +
  • Disable Secure Boot
  • +
  • Maintain any updates to the kernel going forward
  • +
+

To create a custom kernel, start with the Clear Linux OS development environment. +Then make changes to the kernel, build it, and install it.

+
+

Install the Clear Linux OS development tooling framework

+

Setup of the workspace and tooling used for building source in Clear Linux OS is mostly +automated for you with a setup script. It uses tools from the +os-clr-on-clr bundle.

+

The setup script creates a workspace in the clearlinux folder, with the +subfolders Makefile, packages, and projects. The +projects folder contains the main tools used for making packages in +Clear Linux OS autospec and common.

+

Follow these steps to setup the workspace and tooling for building source:

+
    +
  1. Install the os-clr-on-clr bundle:

    +
    sudo swupd bundle-add os-clr-on-clr
    +
    +
    +
  2. +
  3. Download the user-setup.sh script:

    +
    curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh
    +
    +
    +
  4. +
  5. Make user-setup.sh executable:

    +
    chmod +x user-setup.sh
    +
    +
    +
  6. +
  7. Run the script as an unprivileged user:

    +
    ./user-setup.sh
    +
    +
    +
  8. +
  9. After the script completes, log out and log in again to complete the setup +process.

    +
  10. +
  11. Set your Git user email and username for the repos on your system:

    +
    git config --global user.email "you@example.com"
    +git config --global user.name "Your Name"
    +
    +
    +

    This global setting is used by Clear Linux OS tools that make use of Git.

    +
  12. +
+
+
+

Clone the kernel package

+

Clone the existing kernel package repository from Clear Linux OS as a starting point.

+
    +
  1. Clone the Linux kernel package from Clear Linux OS. Using the +make clone_<PACKAGENAME> command in the +clearlinux/ directory clones the package from the +clearlinux-pkgs repo on GitHub.

    +
    cd ~/clearlinux
    +make clone_linux
    +
    +
    +
  2. +
  3. Navigate into the cloned package directory.

    +
    cd ~/clearlinux/packages/linux
    +
    +
    +
  4. +
+

The “linux” package is the kernel that comes with Clear Linux OS in the 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.

+
+

Note

+

The latest version of the Clear Linux OS kernel package is pulled as a starting +point. An older version can pulled by switching to different git tag by using +git checkout tag/<TAG_NAME>.

+
+
+
+

Change the kernel version

+

Clear Linux OS tends to use the latest kernel available from kernel.org, the Linux +upstream. The kernel version that will be built can be changed in the +RPM SPEC file. While most packages in Clear Linux are typically packaged +using Autospec, the kernel is not. This means control files +provided by autospec are not available and changes must be made manually.

+
    +
  1. Open the Linux kernel package RPM SPEC file in an editor.

    +
    $EDITOR linux.spec
    +
    +
    +
  2. +
  3. Modify the Version, Release, and Source0 URL entries at the top of the +file to change the version of Linux kernel that will be compiled.

    +

    A list of current and available kernel release can be found on +kernel.org.

    +
    Name:           linux
    +Version:        4.20.8
    +Release:        696
    +License:        GPL-2.0
    +Summary:        The Linux kernel
    +Url:            http://www.kernel.org/
    +Group:          kernel
    +Source0:        https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.8.tar.xz
    +Source1:        config
    +Source2:        cmdline
    +
    +%define ktarget  native
    +
    +
    +
    +

    Note

    +
      +
    • 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.
    • +
    +
    +
  4. +
  5. Commit and save the changes to the file.

    +
  6. +
+
+
+

Pull a copy of the Linux kernel source code

+

Obtain a local copy of the source code to make modifications against.

+
    +
  1. Run make sources to pull the kernel source code specified in the RPM +SPEC file. In the example, it downloads the linux-4.20.8.tar.xz file.

    +
    make sources
    +
    +
    +
  2. +
  3. Extract the kernel source code archive. This will create a working copy +of the Linux source that you can modify.

    +
    tar -xvf linux-4.20.8.tar.xz
    +
    +
    +
  4. +
  5. Navigate to the extracted directory. In this example, it has been +extracted into a linux-4.20.8 directory.

    +
    cd linux-4.20.8/
    +
    +
    +
  6. +
+
+
+
+

Customize the Linux kernel source

+

After the kernel sources have been obtained, customizations to the kernel +configuration or source code can be made for inclusion with the kernel +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.

+

These configuration values must be provided in the .config file at +compile time. You will need to make modifications to the .config +file, and include it in the kernel package.

+
    +
  1. 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.

    +
  2. +
  3. If you have an existing .config file from an old kernel, copy it +into the working directory as .config for comparison. +Otherwise, use the Clear Linux OS kernel configuration file as template

    +
    cp ~/clearlinux/packages/linux/config .config
    +
    +
    +
  4. +
  5. Make any desired changes to the .config using a kernel +configuration tool. Below are some popular options:

    +
      +
    • $EDITOR .config - the .config file can be directly edited +for simple changes with names that are already known.
    • +
    • make config - a text-based tool that asks questions +one-by-one to decide configuration options.
    • +
    • make menuconfig - a terminal user interface that provides +menus to decide configuration options.
    • +
    • make xconfig - a graphical user interface that provides +tree views to decide configuration options.
    • +
    +

    More configuration tools can be found by looking at the make help: +make help | grep config

    +
  6. +
  7. Commit and save the changes to the .config file.

    +
  8. +
  9. Copy the .config file from the kernel source directory into +the kernel package directory as config for inclusion in the build.

    +
    cp .config ../config
    +
    +
    +
  10. +
+
+
+

Modify kernel source code

+

Changes to kernel code are applied with patch files. Patch files are +formatted git commits that can be applied to the main source code.

+

You will need to obtain a copy of the source code, +make modifications, generate patch file(s), and add them to the RPM SPEC +file for inclusion during the kernel build.

+

If you have a large number of patches or a more complex workflow, +consider using a patch management tool in addition to Git such as +Quilt.

+
    +
  1. 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.

    +
  2. +
  3. Initialize the kernel source directory as a new git repo and create a +commit with all the existing source files to begin tracking changes.

    +
    git init
    +git add -A
    +git commit -m "Initial commit of Linux kernel source"
    +
    +
    +
  4. +
  5. Apply patches provided by the Clear Linux OS kernel package to the kernel source +in the working directory.

    +
    git am ../*.patch
    +
    +
    +
  6. +
  7. Make any of your desired code changes to the Linux source code files.

    +
  8. +
  9. Track and commit your changes to the local git repo.

    +
    git add <FILENAME>
    +git commit -m "My patch for driver A" <FILENAME>
    +
    +
    +
  10. +
  11. Generate a patch file based on your git commits. +<n> represents the number of local commits to create patch file. +See the git-format-patch documentation for detailed information +on using git format-patch

    +
    git format-patch -<n>
    +
    +
    +
  12. +
  13. Copy the patch files from the patches directory in the linux +source tree to the RPM build directory.

    +
    cp *.patch ~/clearlinux/packages/linux/
    +
    +
    +
  14. +
  15. Navigate back to the RPM build directory.

    +
    cd ~/clearlinux/packages/linux/
    +
    +
    +
  16. +
  17. Open the Linux kernel package RPM SPEC file in an editor.

    +
    $EDITOR linux.spec
    +
    +
    +
  18. +
  19. Locate the section of the SPEC file that contains existing patch +variable definitions and append your patch file name. Ensure the +patch number does not collide with an existing patch. +In this example, the patch file is called +2001-my-patch-for-driver-A.patch

    +
    #
    +# Small Clear Linux Tweaks
    +#
    +Patch0501: 0501-zero-extra-registers.patch
    +Patch0502: 0502-locking-rwsem-spin-faster.patch
    +
    +#Serie1.name WireGuard
    +#Serie1.git  https://git.zx2c4.com/WireGuard
    +#Serie1.tag  00bf4f8c8c0ec006633a48fd9ee746b30bb9df17
    +Patch1001: 1001-WireGuard-fast-modern-secure-kernel-VPN-tunnel.patch
    +#Serie1.end
    +
    +Patch2001: 2001-my-patch-for-driver-A.patch
    +
    +
    +
  20. +
  21. Locate the section of the SPEC file further down that contains +patch application and append your patch file number used in the step above. +In this example, patch2001 is added.

    +
    #
    +# Small tweaks
    +#
    +%patch0501 -p1
    +%patch0502 -p1
    +
    +#Serie1.patch.start
    +%patch1001 -p1
    +#Serie1.patch.end
    +
    +%patch2001 -p1
    +
    +
    +
  22. +
  23. Commit and save the changes to the RPM SPEC file.

    +
  24. +
+
+
+

Modify kernel boot parameters

+

The kernel boot options are passed from the bootloader to the kernel with +command-line parameters.

+

While temporary changes can be made to kernel parameters on a running +system or on a during boot, you can also modify the default parameters that +are persistent and distributed with a customized kernel.

+
    +
  1. Open the kernel cmdline file in an editor.

    +
    $EDITOR cmdline
    +
    +
    +
  2. +
  3. Make any desired change to the kernel parameters. +For example, you can remove the quiet parameter to see more +verbose output of kernel log messages during the boot process.

    +
  4. +
  5. Commit and save the changes to the cmdline file.

    +
  6. +
+

See the kernel parameters documentation for a list of available +parameters.

+
+
+
+

Build and install the kernel

+

After changes have been made to the kernel source and RPM SPEC file, +the kernel is ready to be compiled and packaged into an RPM.

+

The Clear Linux OS development tooling makes use of mock environments to +isolate building of packages in a sanitized workspace.

+
    +
  1. Start the compilation process by issuing the make build +command. This process is typically resource intensive and will take a while.

    +
    make build
    +
    +
    +
    +

    Note

    +

    The mock plugin ccache can be enabled to help speed up any future +rebuilds of the kernel package by caching compiler outputs and reusing +them.

    +
    +
  2. +
  3. The result will be multiple .rpm files in the rpms +directory as output.

    +
    ls rpms/
    +
    +
    +

    The kernel RPM will be named +linux<NAME>-<VERSION>-<RELEASE>.x86_64.rpm

    +
  4. +
  5. The kernel RPM file can be input to the mixer to create a +custom bundle and mix of Clear Linux OS.

    +
  6. +
+

Alternatively, the kernel RPM bundle can be installed manually on a local +machine for testing. This approach works well for individual development or +testing. For a more scalable and customizable approach, consider using the +mixer to provide a custom kernel with updates.

+
    +
  1. Install the kernel onto the local system by extracting the RPM with the +rpm2cpio command.

    +
    rpm2cpio linux<NAME>-<VERSION>-<RELEASE>.x86_64.rpm | (cd /; sudo cpio -i -d -u -v);
    +
    +
    +
  2. +
  3. Update the Clear Linux OS boot manager using clr-boot-manager and reboot.

    +
    sudo clr-boot-manager list-kernels
    +sudo clr-boot-manager set-kernel org.clearlinux.<TARGET>.<VERSION>-<RELEASE>
    +
    +sudo reboot
    +
    +
    +
  4. +
  5. After a reboot, verify the customized kernel is running.

    +
    uname -a
    +
    +
    +
  6. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/kernel/kernel-modules-dkms.html b/guides/kernel/kernel-modules-dkms.html new file mode 100644 index 00000000..0828a976 --- /dev/null +++ b/guides/kernel/kernel-modules-dkms.html @@ -0,0 +1,1316 @@ + + + + + + + + + + + Add kernel modules with DKMS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Add kernel modules with DKMS

+

This guide describes how to add kernel modules with +DKMS.

+ +
+

Overview

+

Certain kernel modules are enabled by default in Clear Linux* OS. 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 +DKMS or refer to Add kernel modules manually.

+
+
+

Description

+

Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree).

+

DKMS is a framework that facilitates +the building and installation of kernel modules. DKMS allows Clear Linux OS to provide +hooks that automatically rebuild modules against new kernel versions.

+
+
+

Kernel module availability

+

Clear Linux OS comes with many upstream kernel modules available for use. Using an +existing module is significantly easier to maintain and retains signature +verification of the Clear Linux OS kernel. For more information on Clear Linux OS security +practices, see the OS Security page.

+

Before continuing, check if the kernel module you’re looking for is already +available in Clear Linux OS or submit a request to add the module.

+
+

Check if the module is already available

+

You can search for kernel module file names, which end with the .ko +file extension, using the swupd search command, as shown in the +following example. See swupd for more information.

+
sudo swupd search ${module_name}.ko
+
+
+
+
+

Submit a request to add the module

+

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 Clear Linux OS kernel.

+

Make enhancement requests to the Clear Linux OS ‘Distribution Project’_ on GitHub.

+
+
+
+

Install DKMS

+

The kernel-native-dkms bundle provides the dkms program and +Linux kernel headers, which are required for compiling kernel modules.

+

The kernel-native-dkms bundle also:

+
    +
  • Adds a systemd update trigger +(/usr/lib/systemd/system/dkms-new-kernel.service) to automatically +run DKMS to rebuild modules after a kernel upgrade occurs with swupd +update.
  • +
  • Disables kernel module signature verification by appending a kernel +command-line parameter (module.sig_unenforce) from the +/usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf file.
  • +
  • Adds a notification to the Message of the Day (MOTD) indicating kernel +module signature verification is disabled.
  • +
+
+

Warning

+

We recommend that you always review the swupd update output +to make sure kernel modules were successfully rebuilt against the new +kernel. This is especially important for systems where a successful boot +relies on a kernel module.

+
+

Install the kernel-native-dkms or kernel-lts-dkms +bundle:

+
    +
  1. Determine which kernel variant is running on Clear Linux OS. Only the native +and lts kernels are enabled to build and load out-of-tree kernel modules +with DKMS.

    +
    $ uname -r
    +5.XX.YY-ZZZZ.native
    +
    +
    +

    Ensure .native or .lts is in the kernel name.

    +
  2. +
  3. Install the DKMS bundle corresponding to the installed kernel. Use +kernel-native-dkms for the native kernel or +kernel-lts-dkms for the lts kernel.

    +
    sudo swupd bundle-add kernel-native-dkms
    +
    +
    +

    or

    +
    sudo swupd bundle-add kernel-lts-dkms
    +
    +
    +
  4. +
  5. Update the Clear Linux OS bootloader and reboot.

    +
    sudo clr-boot-manager update
    +reboot
    +
    +
    +
  6. +
+
+
+

Build, install, and load an out-of-tree module

+

Follow the steps in this section if you are an individual user or testing, +and you need an out-of-tree kernel module that is not available through +Clear Linux OS. For a more scalable and customizable approach, we recommend using +mixer to provide a custom kernel and updates.

+
+

Prerequisites

+

Before you begin, you must:

+
    +
  • Disable Secure Boot in UEFI/BIOS. The loading of new out-of-tree modules +modifies the signatures that Secure Boot relies on for trust.
  • +
  • Obtain a kernel module package in the form of source code or +pre-compiled binaries.
  • +
+
+
+

Obtain kernel module source

+

A required 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:

+
    +
  • Source code without a dkms.conf file
  • +
  • Source code with a premade dkms.conf file
  • +
  • Source code with a premade dkms.conf file and precompiled module +binaries
  • +
  • Precompiled module binaries only (without source code)
  • +
+

Of the package types listed above, only precompiled kernel module binaries +will not work, because Clear Linux OS 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 dkms.conf file, you must manually create +a dkms.conf file, described later in this document.

+
    +
  1. Download the kernel module’s source code.

    +
      +
    • Review the available download options. Some kernel modules provide +separate archives that are specifically enabled for DKMS support.
    • +
    • Review the README documentation, because it often provides required +information to build the module with DKMS support.
    • +
    +
    curl -O http://<URL-TO-KERNEL-MODULE-SOURCE>.tar.gz
    +tar -xvf <KERNEL-MODULE-SOURCE>.tar.gz
    +cd <KERNEL-MODULE-SOURCE>/
    +cat README
    +
    +
    +
  2. +
+
+
+

Build kernel module with an existing dkms.conf

+

If the kernel module maintainer packaged the source archive with the +dkms mktarball command, the entire archive can be passed to the +dkms ldtarball which completes many steps for you.

+

The archive contains the required dkms.conf file, and may contain +a dkms_source_tree directory and a dkms_binaries_only +directory.

+
    +
  1. Run the dkms ldtarball command against the kernel +module archive.

    +
    dkms ldtarball <KERNEL-MODULE-SOURCE_WITH_DKMS>.tar.gz
    +
    +
    +

    dkms ldtarball places the kernel module source under +/usr/src/<MODULE-NAME>-<MODULE-VERSION>/, builds it if necessary, +and adds the module into the DKMS tree.

    +
  2. +
  3. Verify the kernel module is detected by checking the output of the +dkms status command.

    +
    dkms status
    +
    +
    +
  4. +
  5. Install the kernel module.

    +
    dkms install -m <MODULE-NAME> -v <MODULE-VERSION>
    +
    +
    +
  6. +
+
+
+

Build kernel module without an existing dkms.conf

+

If the kernel module source does not contain a dkms.conf file or the +dkms ldtarball command encounters errors, you must manually +create the file.

+

Review the kernel module README documentation for guidance on what needs to be +in the dkms.conf file, including special variables that may be +required to build successfully.

+

Here are some additional resources that can be used for reference:

+
    +
  • DKMS manual page (man dkms) shows detailed syntax in the +DKMS.CONF section.
  • +
  • Ubuntu community wiki entry for the Kernel DKMS Package shows an example +where a single package contains multiple modules.
  • +
  • Sample dkms.conf file in the GitHub* repository for the DKMS project.
  • +
+
+

Note

+

AUTOINSTALL=yes must be set in the dkms.conf for the module to +be automatically recompiled with Clear Linux OS updates.

+
+

The instructions below show a generic example:

+
    +
  1. Create or modify the dkms.conf file inside of the extracted source +code directory.

    +
    $EDITOR dkms.conf
    +
    +MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
    +CLEAN="make -C src/ clean"
    +BUILT_MODULE_NAME=custom_module
    +BUILT_MODULE_LOCATION=src/
    +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.

    +
  2. +
  3. Copy the kernel module source code into the /usr/src/ directory.

    +
    sudo mkdir /usr/src/<PACKAGE_NAME>-<PACKAGE_VERSION>
    +sudo cp -Rv . /usr/src/<PACKAGE_NAME>-<PACKAGE_VERSION>
    +
    +
    +
    +

    Note

    +

    <PACKAGE_NAME> and <PACKAGE_VERSION> must match the entries in the +dkms.conf file.

    +
    +
  4. +
  5. Add the kernel module to the DKMS tree so that it is tracked by DKMS.

    +
    sudo dkms add -m <MODULE-NAME>
    +
    +
    +
  6. +
  7. Build the kernel module using DKMS. If the build encounters errors, +you may need to edit the dkms.conf file.

    +
    sudo dkms build -m <MODULE-NAME> -v <MODULE-VERSION>
    +
    +
    +
  8. +
  9. Install the kernel module using DKMS.

    +
    sudo dkms install -m <MODULE-NAME> -v <MODULE-VERSION>
    +
    +
    +
  10. +
+
+
+

Load kernel module

+

By default, DKMS installs modules “in-tree” under /lib/modules so the +modprobe command can be used to load them.

+
    +
  1. Load the installed module with the modprobe command.

    +
    +
    sudo modprobe <MODULE-NAME>
    +
    +
    +
    +
  2. +
  3. Validate the kernel module is loaded.

    +
    lsmod | grep <MODULE-NAME>
    +
    +
    +
  4. +
+
+
+
+

Examples

+
+

Optional: Specify module options and aliases

+

Use the modprobe command to load a module and set options.

+

modprobe may add or remove more than one module due to module +interdependencies. You can specify which options to use with individual modules, +by using configuration files under the /etc/modprobe.d directory.

+
sudo mkdir /etc/modprobe.d
+
+
+

All files underneath the /etc/modprobe.d directory that end with the +.conf extension specify module options to use when loading. You can use +.conf files to create convenient aliases for modules or to override the +normal loading behavior altogether for those with special requirements.

+

Learn more about modprobe on the modprobe.d manual page:

+
man modprobe.d
+
+
+
+
+

Optional: Configure kernel modules to load at boot

+

Use the /etc/modules-load.d configuration directory to specify kernel +modules to load automatically at boot.

+
sudo mkdir /etc/modules-load.d
+
+
+

All files underneath the /etc/modules-load.d directory that end with +the .conf extension contain a list of module names of aliases (one per +line) to load at boot.

+

Learn more about module loading in the modules-load.d manual page:

+
man modules-load.d
+
+
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/kernel/kernel-modules.html b/guides/kernel/kernel-modules.html new file mode 100644 index 00000000..050e0a1a --- /dev/null +++ b/guides/kernel/kernel-modules.html @@ -0,0 +1,1176 @@ + + + + + + + + + + + Add kernel modules manually — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Add kernel modules manually

+

This guide describes how to add kernel modules manually.

+ +
+

Overview

+

Certain kernel modules are enabled by default in Clear Linux* OS. 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 Add kernel modules with DKMS.

+
+
+

Description

+

Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree).

+
+
+

Kernel module availability

+

Clear Linux OS comes with many upstream kernel modules available for use. Using an +existing module is significantly easier to maintain and retains signature +verification of the Clear Linux OS kernel. For more information on Clear Linux OS security +practices, see the OS Security page.

+

Before continuing, check if the kernel module you’re looking for is already +available in Clear Linux OS or submit a request to add the module.

+
+

Check if the module is already available

+

You can search for kernel module file names, which end with the .ko +file extension, using the swupd search command, as shown in the +following example. See swupd for more information.

+
sudo swupd search ${module_name}.ko
+
+
+
+
+

Submit a request to add the module

+

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 Clear Linux OS kernel.

+

Make enhancement requests to the Clear Linux OS ‘Distribution Project’_ on GitHub.

+
+
+
+

Build, install, and load an out-of-tree module

+

Follow the steps in this section if you are an individual user or testing, and +you need an out-of-tree kernel module that is not available through Clear Linux OS. For +a more scalable and customizable approach, we recommend using the +mixer to provide a custom kernel and updates.

+
+

Prerequisites

+

Before you begin, you must:

+
    +
  • Disable Secure Boot.
  • +
  • Disable kernel module integrity checking.
  • +
  • Have a kernel module package in the form of source code.
  • +
  • Rebuild the module against new versions of the Linux kernel.
  • +
+
+

Note

+

Any time the kernel is upgraded on your Clear Linux system, you must +rebuild your out-of-tree modules.

+
+
+
+

Build and install kernel module

+
    +
  1. Determine which kernel variant is running on Clear Linux OS. In the example below, +the native kernel is in use.

    +
    $ uname -r
    +5.XX.YY-ZZZZ.native
    +
    +
    +
  2. +
  3. Install the kernel dev bundle corresponding to the installed kernel. The +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.
    • +
    +
    sudo swupd bundle-add linux-dev
    +
    +
    +
  4. +
  5. Follow instructions from the kernel module source code to compile the +kernel module. For example:

    +
    curl -O http://<URL-TO-KERNEL-MODULE-SOURCE>.tar.gz
    +tar -xvf <KERNEL-MODULE-SOURCE>.tar.gz
    +cd <KERNEL-MODULE-SOURCE>/
    +cat README
    +
    +
    +
  6. +
+
+
+

Load kernel module

+
    +
  1. Disable Secure Boot in your system’s UEFI settings, if you have enabled +it. The loading of new out-of-tree modules modifies the signatures that +Secure Boot relies on for trust.

    +
  2. +
  3. Disable signature checking for the kernel by modifying the kernel boot +parameters and reboot the system.

    +

    All kernel modules from Clear Linux OS have been signed to enforce kernel security. +However, out-of-tree modules break this chain of trust so this mechanism +needs to be disabled.

    +
    sudo mkdir -p /etc/kernel/cmdline.d
    +echo "module.sig_unenforce" | sudo tee /etc/kernel/cmdline.d/allow-unsigned-modules.conf
    +
    +
    +
  4. +
  5. Update the boot manager and reboot the system to implement the changed +kernel parameters.

    +
    sudo clr-boot-manager update
    +sudo reboot
    +
    +
    +
    +

    Note

    +

    If successful, the clr-boot-manager update command does not +return any console output.

    +
    +
  6. +
  7. After rebooting, manually load out-of-tree modules using the +insmod command.

    +
    sudo insmod </PATH/TO/MODULE.ko>
    +
    +
    +
  8. +
+
+
+
+

Examples

+
+

Optional: Specify module options and aliases

+

Use the modprobe command to load a module and set options.

+

modprobe may add or remove more than one module due to module +interdependencies. You can specify which options to use with individual modules, +by using configuration files under the /etc/modprobe.d directory.

+
sudo mkdir /etc/modprobe.d
+
+
+

All files underneath the /etc/modprobe.d directory that end with the +.conf extension specify module options to use when loading. You can use +.conf files to create convenient aliases for modules or to override the +normal loading behavior altogether for those with special requirements.

+

Learn more about modprobe on the modprobe.d manual page:

+
man modprobe.d
+
+
+
+
+

Optional: Configure kernel modules to load at boot

+

Use the /etc/modules-load.d configuration directory to specify kernel +modules to load automatically at boot.

+
sudo mkdir /etc/modules-load.d
+
+
+

All files underneath the /etc/modules-load.d directory that end with +the .conf extension contain a list of module names of aliases (one per +line) to load at boot.

+

Learn more about module loading in the modules-load.d manual page:

+
man modules-load.d
+
+
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/architect-lifecycle.html b/guides/maintenance/architect-lifecycle.html new file mode 100644 index 00000000..d09e823c --- /dev/null +++ b/guides/maintenance/architect-lifecycle.html @@ -0,0 +1,1057 @@ + + + + + + + + + + + Architect the life-cycle of Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Architect the life-cycle of Clear Linux* OS

+

This guide describes the basic, recommended infrastructure and workflow for +maintaining a Clear Linux* OS derivative.

+ +
+

Prerequisites

+
    +
  • A repository with software RPM artifacts and a CI/CD system with a Clear Linux OS +machine for building mixes
  • +
  • Experience using mixer to create a Clear Linux OS-based distro
  • +
  • Experience using swupd for maintaining the Clear Linux OS +build environment
  • +
  • Familiarity with Clear Linux OS architecture and reuse of its content in releases
  • +
+
+
+

Description

+

Maintaining a Clear Linux OS derivative requires:

+
    +
  • Monitoring upstream Clear Linux OS 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 Clear Linux OS derivative. We divide deployment of this infrastucture in two +parts: Content Workflow; and Release Workflow, shown in Figure 1.

+
+Architect the life-cycle +

Figure 1: Architect the life-cycle

+
+
+
+

Content Workflow

+

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 +Watcher Pipeline checks Clear Linux OS and a content provider, such as Koji, to +determine if a new release is necessary.

+
+
+

Release Workflow

+

The Release Workflow (Figure 1) gathers the content of the RPMs and +ensures it can be consumed by mixer. A content web server +hosts the Clear Linux OS derivative, to which targets connect for updating their OSes. +As an integral part of this toolchain, the Release Pipeline enables these +derivatives to incorporate Clear Linux OS content into their own custom +content. The Watcher Pipeline triggers the Release Pipeline to create +new releases.

+
+
+

Implementation

+

The Clear Linux OS Distro Factory manages the Release Workflow. For detailed information +about Distro Factory deployment, refer to the clr-distro-factory GitHub* repo.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/assign-static-ip.html b/guides/maintenance/assign-static-ip.html new file mode 100644 index 00000000..1e255f15 --- /dev/null +++ b/guides/maintenance/assign-static-ip.html @@ -0,0 +1,1138 @@ + + + + + + + + + + + Assign a static IP address — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Assign a static IP address

+

This guide explains how to assign a static IP address. This may be helpful in +scenarios such as a network with no DHCP server.

+ +
+

Identify which program is managing the interface

+

New installations of Clear Linux* OS use NetworkManager as the default network interface +manager for all network connections.

+
+

Note

+
    +
  • The cloud Clear Linux OS images continue to use systemd-networkd to manage +network connections.
  • +
  • In earlier Clear Linux OS 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, verify which +program is managing the network interface.

+
    +
  1. Check the output of nmcli device to see if NetworkManager is +managing the device.

    +
    nmcli device status
    +
    +
    +

    If the STATE column for the device shows connected or disconnected, the +network configuration is being managed by NetworkManager, then use the +instructions for using NetworkManager.

    +

    If the STATE column for the device shows unmanaged, then check if the +device is being managed by systemd-networkd.

    +
  2. +
  3. Check the output of networkctl list to see if +systemd-networkd is managing the device.

    +
    networkctl list
    +
    +
    +

    If the SETUP column for the device shows configured, the network +configuration is being managed by systemd-networkd, then use the +instructions for using systemd-networkd.

    +
  4. +
+
+
+

Using NetworkManager

+

Network connections managed by NetworkManager are stored as files with the +.nmconnection file extension in the +/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.

+
    +
  1. Identify the existing connection name:

    +
    nmcli connection show
    +
    +
    +

    Sample output:

    +
    NAME                UUID                                  TYPE            DEVICE
    +Wired connection 1  00000000-0000-0000-0000-000000000000  802-3-etherneten01
    +
    +
    +

    If a connection does not exist, create it with the +nmcli connection add command.

    +
  2. +
  3. Modify the connection to use a static IP address. Replace the variables in +brackets with the appropriate values. Replace [CONNECTION_NAME] with the +NAME from the command above.

    +
    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 +/etc/NetworkManager/system-connections/*.nmconnection. can be edited +directly.

    +
  4. +
  5. Restart the NetworkManager server to reload the DNS servers:

    +
    sudo systemctl restart NetworkManager
    +
    +
    +
  6. +
  7. Verify your static IP address details have been set:

    +
    nmcli
    +
    +
    +
  8. +
+
+
+

Using systemd-networkd

+

Network connections managed by systemd-networkd are stored as files with the +.network file extension the /etc/systemd/network/ directory.

+

Files to manipulate network connections managed by systemd-networkd must be +created manually.

+
    +
  1. Create the /etc/systemd/network directory if it does not already exist:

    +
    sudo mkdir -p /etc/systemd/network
    +
    +
    +
  2. +
  3. Create a .network file and add the following content. Replace the +variables in brackets with the appropriate values. Replace [INTERFACE_NAME] +with LINK from the output of the networkctl list command that was +run previously.

    +
    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.

    +
  4. +
  5. Restart the systemd-networkd service:

    +
    sudo systemctl restart systemd-networkd
    +
    +
    +
  6. +
  7. Verify your static IP address details have been set:

    +
    networkctl status
    +
    +
    +
  8. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/bulk-provision.html b/guides/maintenance/bulk-provision.html new file mode 100644 index 00000000..f79db675 --- /dev/null +++ b/guides/maintenance/bulk-provision.html @@ -0,0 +1,1149 @@ + + + + + + + + + + + Bulk provision — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Bulk provision

+

This guide explains how to perform a bulk provision of Clear Linux* OS using a +combination of the Clear Linux OS installer, Ister, and +ICIS.

+ +
+

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.

+
+Bulk provision information flow +

Figure 1: Bulk provision information flow

+
+
+
+

Prerequisites

+

Before performing a bulk provision, verify you have a PXE server capable +of performing network boots of Clear Linux OS. Please refer to our +guide on how to perform an iPXE boot using +NAT for details.

+

Because a bulk provision relies on a reboot, ensure the following +preparations have been made:

+
    +
  • No existing disks are bootable.
  • +
  • The network boot option must come immediately after the disk boot option +on any computer performing the installation.
  • +
+
+
+

Configuration

+
    +
  1. Install ICIS by following the getting started guide on the +ICIS GitHub* repository.

    +
  2. +
  3. Create an Ister installation file and save it to the +static/ister directory within the web hosting directory for +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 +up. Lastly, the file outlines which bundles to install. See our +Available bundles document for the list of available bundles. The +following example shows the contents of an Ister installation file:

    +
    {
    +    "DestinationType":"physical",
    +    "PartitionLayout":[
    +        {"disk":"sda", "partition":1, "size":"512M", "type":"EFI"},
    +        {"disk":"sda", "partition":2, "size":"512M", "type":"swap"},
    +        {"disk":"sda", "partition":3, "size":"rest", "type":"linux"}
    +    ],
    +    "FilesystemTypes":[
    +        {"disk":"sda", "partition":1, "type":"vfat"},
    +        {"disk":"sda", "partition":2, "type":"swap"},
    +        {"disk":"sda", "partition":3, "type":"ext4"}
    +    ],
    +    "PartitionMountPoints":[
    +        {"disk":"sda", "partition":1, "mount":"/boot"},
    +        {"disk":"sda", "partition":3, "mount":"/"}
    +    ],
    +    "Version":"latest",
    +    "Bundles":[
    +        "kernel-native",
    +        "os-core",
    +        "os-core-update",
    +        "os-cloudguest"
    +    ],
    +    "IsterCloudInitSvc":"http://192.168.1.1:60000/icis/"
    +}
    +
    +
    +
    +

    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 +install.

    +
    +
  4. +
  5. Create an Ister configuration file to define the location of the +Ister installation file. Save it to the static/ister directory +within the web hosting directory of ICIS. The following example shows +an Ister configuration file:

    +
    template=http://192.168.1.1:60000/icis/static/ister/ister.json
    +
    +
    +
  6. +
  7. 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 +kernel parameter value. The following example shows an iPXE boot script +with the isterconf parameter:

    +
    #!ipxe
    +kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug tsc=reliable no_timer_check noreplace-smp rw initrd=initrd isterconf=http://192.168.1.1:60000/icis/static/ister/ister.conf
    +initrd initrd
    +boot
    +
    +
    +
    +

    Note

    +

    After the network image of Clear Linux OS boots, Ister inspects the +parameters used during boot in /proc/cmdline to find the +location of the Ister configuration file.

    +
    +
  8. +
  9. Write a cloud-init document to customize the instance of the installation +according to your requirements. The cloud-init documentation provides a +guide on how to write a cloud-init document. The guide covers the +customization options provided by cloud-init after an installation.

    +
  10. +
  11. Save the cloud-init document to the static/roles directory within +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”.

    +
  12. +
  13. After creating the roles, also known as cloud-init files, assign roles to +MAC addresses of PXE clients. To do so, modify the config.txt file +in the static directory within the web hosting directory of ICIS. +The following example shows an example assignment:

    +
    # MAC address,role
    +00:01:02:03:04:05,ciao
    +
    +
    +

    If MAC addresses of PXE clients are not listed within the +config.txt file, a default role for those MAC address may be +defined as follows:

    +
    # MAC address,role
    +default,ciao
    +
    +
    +
  14. +
  15. 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
    • +
    +
  16. +
  17. Power on the PXE client and watch it boot and install Clear Linux OS.

    +
  18. +
  19. Power-cycle the PXE client and watch it customize the Clear Linux OS installation.

    +
  20. +
+

Congratulations! You have successfully performed a bulk provision of Clear Linux OS.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/cpu-performance.html b/guides/maintenance/cpu-performance.html new file mode 100644 index 00000000..18b51709 --- /dev/null +++ b/guides/maintenance/cpu-performance.html @@ -0,0 +1,1147 @@ + + + + + + + + + + + CPU Power and Performance — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

CPU Power and Performance

+

This guide explains the CPU power and performance mechanisms in Clear Linux* OS.

+ +
+

Overview

+

Modern x86 CPUs employ a number of features +and technologies to balance performance, energy, and thermal efficiencies.

+

By default, Clear Linux OS 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.

+
+
+

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 (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:

+
cat /sys/devices/system/cpu/cpuidle/current_driver
+
+
+

For troubleshooting, C-states can be limited with a kernel command line boot +parameter by adding processor.max_cstate=N intel_idle.max_cstate=N +or completely disabled with idle=poll.

+
+

Note

+
    +
  • processor.max_cstate=0 is changed to processor.max_cstate=1 +by the kernel to be a valid value.
  • +
  • intel_idle.max_cstate=0 disables the Intel Idle driver, not set +it to C-state 0.
  • +
+
+
+
+

P-states (performance states)

+

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.

+

P-states can typically be limited or disabled in a system’s firmware (UEFI/BIOS).

+
+

Turbo boost

+

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.

+

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 Clear Linux OS 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 C-states and 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:

+
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
+
+
+
+
+

Scaling governor

+

Clear Linux OS 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:

+
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
+
+
+

To change the CPU frequency scaling governor:

+
    +
  1. Disable Clear Linux OS enforcement of certain power and performance settings:

    +
    sudo systemctl mask clr-power.timer
    +
    +
    +
  2. +
  3. Change the governor. In the example below, the governor is set to +performance:

    +
    echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    +
    +
    +
  4. +
+

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 Clear Linux OS and starts automatically if battery +power is detected. thermald can be manually enabled using the systemd service +by running the command:

+
sudo systemctl enable thermald
+sudo systemctl start thermald
+
+
+

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:

+
sudo swupd bundle-add desktop-apps-extras
+sudo usermod -a -G power <USER>
+ThermalMonitor
+
+
+
+

Note

+

After adding a new group, you must log out and log back in for the new group +to take effect.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/developer-workstation.html b/guides/maintenance/developer-workstation.html new file mode 100644 index 00000000..4c97130d --- /dev/null +++ b/guides/maintenance/developer-workstation.html @@ -0,0 +1,1104 @@ + + + + + + + + + + + Developer Workstation — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Developer Workstation

+

This guide helps you find the minimum set of bundles needed to start your +Clear Linux* OS development project.

+

Before continuing, review the swupd guide to learn more +about the swupd tool and how Clear Linux OS simplifies software versioning compared to +other Linux* distributions.

+ +
+

Workstation Setup

+

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 Clear Linux OS development, you can add the large bundle +*os-clr-on-clr*. 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 +Table 1 as a starting point.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Developer Profiles
Clear Linux OS BundleInternet of Things (IoT)System AdministratorClient/Cloud/Web Developer
editors
network-basic
openssh-server
webserver-basic 
application-server 
database-basic 
desktop-autostart
dev-utils  
+
+ +
+

Core Concepts

+

We recommend that you understand these core concepts in Clear Linux OS before +developing your project.

+ +
+

Other resources for developers

+ +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/download-verify-decompress.html b/guides/maintenance/download-verify-decompress.html new file mode 100644 index 00000000..fb32e5de --- /dev/null +++ b/guides/maintenance/download-verify-decompress.html @@ -0,0 +1,1229 @@ + + + + + + + + + + + Download, verify, and decompress a Clear Linux* OS image — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Guides »
  • + +
  • Download, verify, and decompress a Clear Linux* OS image
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Download, verify, and decompress a Clear Linux* OS image

+

This guide describes the available types of Clear Linux OS images, where to +download them, how to verify their integrity, and how to decompress them. +Follow the steps for your OS.

+ +

Clear Linux* OS offers many types of images for different platforms and environments.

+

The naming convention of a Clear Linux OS image filename is:

+
clear-[version number]-[image type].[compression type]
+
+
+
    +
  • The [version number] field specifies the version number.
  • +
  • The [image type] field specifies the type of image and its corresponding +file format.
  • +
  • The [compression type] field specifies the compression type. Two types of +compressions are used: GNU* zip (.gz) and XZ (.xz).
  • +
+
+

Linux OS steps

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Open a Terminal.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Verify the integrity of the image and compare it to its original checksum +with the command:

    +
    sha512sum -c ./clear-[version number]-[image type].[compression type]-SHA512SUMS
    +
    +
    +
  8. +
+

If the checksum of the downloaded image is different than the original +checksum, a warning is displayed with a message indicating the computed +checksum does not match. Otherwise, the name of the image is printed on +the screen followed by OK.

+

For a more in-depth discussion of image verification including checking the +certificate see Image content validation.

+
+
+

Decompress the Clear Linux OS image

+

Released Clear Linux OS images are compressed with either GNU zip (.gz) or XZ +(.xz). The compression type depends on the target platform or +environment. To decompress the image, follow these steps:

+
    +
  1. Open a Terminal.

    +
  2. +
  3. Go to the directory with the downloaded image.

    +

    To decompress an XZ image, enter:

    +
    unxz clear-[version number]-[image type].xz
    +
    +
    +

    To decompress a GZ image, enter:

    +
    gunzip clear-[version number]-[image type].gz
    +
    +
    +
  4. +
+
+
+
+

macOS* steps

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Open a Terminal.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Verify the integrity of the image and compare it to its original checksum +with the command:

    +
    shasum -a512 clear-[version number]-[image type].[compression type] | diff clear-[version number]-[image type].[compression type]-SHA512SUMS -
    +
    +
    +
  8. +
+

If the checksum of the downloaded image is different than the original +checksum, the differences will be displayed. Otherwise, an empty output indicates +a match and your downloaded image is good.

+
+
+

Decompress the Clear Linux OS image

+

We compress all released Clear Linux OS images by default with either GNU zip +(.gz) or xz (.xz). The compression type we use depends on the target +platform or environment. To decompress the image, follow these steps:

+
    +
  1. Open a Terminal.

    +
  2. +
  3. Go to the directory with the downloaded image.

    +
  4. +
  5. Use the gunzip command to decompress either compression type. For example:

    +
    gunzip clear-[version number]-[image type].xz
    +gunzip clear-[version number]-[image type].gz
    +
    +
    +
  6. +
+
+
+
+

Windows* OS steps

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Start Command Prompt.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Get the SHA512 checksum of the image with the command:

    +
    CertUtil -hashfile ./clear-[version number]-[image type].[compression type] sha512
    +
    +
    +
  8. +
  9. Manually compare the output with the original checksum value shown in +the downloaded checksum file and make sure they match.

    +
  10. +
+
+
+

Decompress the Clear Linux OS image

+

Released Clear Linux OS images are compressed with either GNU zip (.gz) or XZ +(.xz). The compression type depends on the target platform or +environment. To decompress the image, follow these steps:

+
    +
  1. Download and install 7-Zip.

    +
  2. +
  3. Go to the directory with the downloaded image and right-click it.

    +
  4. +
  5. From the pop-up menu, select 7-Zip and select +Extract Here as shown in Figure 1.

    +
    +7-Zip extract file +

    Figure 1: Windows 7-Zip extract file.

    +
    +
  6. +
+
+
+
+

Image types

+

Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific.

+ + ++++ + + + + + + + + + + + + + +
Table 1: Types of platform-independent Clear Linux OS images
Image TypeDescription
live-desktop.img or live-desktop.isoImage for booting to GNOME* desktop to preview or install the OS.
live-server.img or live-server.isoImage for booting to server command prompt to preview or install the OS.
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2: Types of platform-specific Clear Linux OS images
Image TypeDescription
aws.imgImage suitable for use with Amazon* AWS*.
azure.vhdVirtual Hard Disk for use on Microsoft* Azure* cloud platform.
azure-docker.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with Docker* pre-installed.
azure-machine-learning.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with the machine-learning-basic bundle installed.
cloudguest.imgImage with generic cloud guest virtual machine (VM) requirements installed.
gce.tarImage with the Google Compute Engine (GCE) specific kernel.
hyperv.vhdxVirtual Hard Disk for use with Microsoft Hyper-V* hypervisor. Includes optimized kernel for Hyper-V.
kvm.imgImage for booting in a simple VM with start_qemu.sh. Includes +optimized kernel for KVM.
kvm-legacy.imgImage for booting in a simple VM using legacy BIOS, if using start_qemu.sh make sure to remove -bios parameter.
pxe.tarImage suitable for use with PXE server.
vmware.vmdkVirtual Machine Disk for VMware* platforms inclduing Player, Workstation, and ESXi.
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/enable-user-space.html b/guides/maintenance/enable-user-space.html new file mode 100644 index 00000000..36b53f52 --- /dev/null +++ b/guides/maintenance/enable-user-space.html @@ -0,0 +1,1074 @@ + + + + + + + + + + + Create and enable a new user space — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Create and enable a new user space

+

This guide provides steps to complete the following basic setup tasks for +a newly installed Clear Linux* OS system:

+ +
+

Create a new user

+

To create a new user and set a password for that user, enter the following +commands as a root user:

+
useradd <userid>
+passwd <userid>
+
+
+

Replace the <userid> with the name of the user account you want to create +including the password for that user. The 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

+

Before logging off as root and logging into your new user account, +enable the sudo command for your new <userid>.

+

To be able to execute all applications with root privileges, add the +<userid> to the wheel group.

+
    +
  1. Add <userid> to the wheel group:

    +
    usermod -G wheel -a <userid>
    +
    +
    +
  2. +
  3. Log out of root and into the new <userid>.

    +

    To log off as root, enter exit.

    +
  4. +
  5. Enter the new <userid> and the password created earlier.

    +

    You will now be in the home directory of <userid>.

    +
  6. +
+
+
+

Install and update the OS software to its current version

+

The Clear Linux OS software utility swupd allows you to perform +system updates while reaping the benefits of upstream development.

+

To update your newly installed OS, run:

+
sudo swupd update
+
+
+
+
+

Add a bundle

+

Software applications are installed as bundles using the command +swupd bundle-add. Experienced Linux users might compare swupd +to running apt-get or yum install for package +management. However Clear Linux OS 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:

+
swupd bundle-add sysadmin-basic
+
+
+

View a full list of bundles and packages installed with the sysadmin-basic +bundle. You can also view all bundles for Clear Linux OS, active or deprecated.

+

Expand your knowledge of swupd and check out our developer resources:

+ +
+
+

Next steps

+

Check out our guides and tutorials.

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/fix-broken-install.html b/guides/maintenance/fix-broken-install.html new file mode 100644 index 00000000..f6091966 --- /dev/null +++ b/guides/maintenance/fix-broken-install.html @@ -0,0 +1,1102 @@ + + + + + + + + + + + Fix a broken installation — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Fix a broken installation

+

This guide explains how to fix a broken installation of Clear Linux* OS using a live +desktop image on a USB.

+ +
+

Overview

+

This guide assumes you have installed Clear Linux OS 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 +swupd owns in /usr. Files outside of this path, such +as /home/, /etc, /var, etc., cannot be repaired by this +process.

+
+
+

Prerequisites

+ +
+
+

Boot a live desktop image to fix target system

+
    +
  1. Boot the Clear Linux OS live desktop image.
  2. +
+
+
+

Install from live image

+

After you download and burn the live desktop image on a USB drive, follow +these steps.

+
    +
  1. Insert the USB drive into an available USB slot.

    +
  2. +
  3. Power on the system.

    +
  4. +
  5. Open the system BIOS setup menu by pressing the F2 key. +Your BIOS setup menu entry point may vary.

    +
  6. +
  7. In the setup menu, enable the UEFI boot and set the USB drive as the +first option in the device boot order.

    +
  8. +
  9. Save these settings, e.g. F10, and exit.

    +
  10. +
  11. Reboot the target system.

    +
  12. +
  13. Select Clear Linux OS in the boot menu, shown in Figure 1.

    +
    +Clear Linux OS in boot menu +

    Figure 1: Clear Linux OS in boot menu

    +
    +
  14. +
+
+
+

Mount root partition, verify, and fix

+
    +
  1. Open a Terminal window.

    +
  2. +
  3. Ensure the system is connected to the network.

    +
  4. +
  5. Mount the system’s root partition.

    +
      +
    1. To find the root partition, run:

      +
      lsblk
      +
      +
      +

      We’ll use /dev/sda3/ as the root partition example.

      +
    2. +
    3. Next, mount the partition to the /mnt folder.

      +
      sudo mount /dev/sda3 /mnt
      +
      +
      +
    4. +
    +
  6. +
  7. Verify that you mounted the correct root partition by checking for some +files commonly found on Clear Linux OS systems.

    +
    cat /mnt/usr/lib/os-release
    +ls /mnt/usr/share/clear/bundles
    +
    +
    +
  8. +
  9. Next, run swupd to fix any issues on the target system.

    +
    sudo swupd repair --picky --path=/mnt
    +
    +
    +

    Learn more about how swupd works.

    +
  10. +
  11. After the process is complete, unmount the root partition:

    +
    sudo umount /mnt
    +
    +
    +
  12. +
  13. Reboot the system, remove the live desktop USB drive, +and boot into the repaired system.

    +
    sudo reboot
    +
    +
    +
  14. +
+

Congratulations! You successfully restored Clear Linux OS.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/hostname.html b/guides/maintenance/hostname.html new file mode 100644 index 00000000..1b0bad14 --- /dev/null +++ b/guides/maintenance/hostname.html @@ -0,0 +1,1061 @@ + + + + + + + + + + + Modify hostname — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Modify hostname

+

This guide describes how to modify and view the hostname of your Clear Linux* OS +system.

+ +
+

Overview

+

By default, Clear Linux OS installations have a machine generated name, which is a +long string of letters and numbers. The generated name is fine for computers +but is not human-friendly. Administrators and users will often want to rename +their machines with a name that is easier to remember, type, and search +for. Renaming a machine also makes it easier to identify, by including +meaningful data in the name. The following examples show human-friendly machine +names:

+
    +
  • regression-test
  • +
  • sally-test-box1
  • +
  • az-bldg2-lab
  • +
+
+
+

Set your hostname

+

Clear Linux OS uses the hostnamectl command to display and modify the machine +name. hostnamectl is part of the 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 +Clear Linux OS telemetry test machine on the second floor at grid location H15. +Make sure to reboot after setting a new hostname.

+
sudo hostnamectl set-hostname telemetry-test-2-h15
+sudo reboot
+
+
+
+

Note

+

There are three types of hostname: static, transient, and pretty. +The most common is the static hostname. Static hostnames must be between +two and 63 characters long, must start and end with a letter or number, +and may contain letters (case-insensitive), numbers, dashes, or dots.

+

If the static hostname exists, it is used to generate the transient hostname, +which is maintained by the kernel. The transient hostname can be changed +by DHCP or mDNS at runtime.

+

The pretty hostname is a free-form UTF8 name used for presentation to the user.

+
+
+
+

View your hostname

+

View your current hostname using the following command:

+
hostnamectl
+
+
+

You should see output similar to:

+
Static hostname   : telemetry-test-2-h15
+Pretty hostname   : telemetry-test-2-h15
+Icon name         : computer-desktop
+Chassis           : desktop
+Machine ID        : 4d0d60207a904ebbab96680a51ac1339
+Boot ID           : 98d3514e5a984e8cbbdf46a2f0d6b397
+Operating System  : Clear Linux OS
+Kernel            : Linux 4.18.8-632.native
+Architecture      : x86-64
+
+
+

Congratulations! You successfully modified the hostname of your Clear Linux OS system.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/increase-virtual-disk-size.html b/guides/maintenance/increase-virtual-disk-size.html new file mode 100644 index 00000000..35282061 --- /dev/null +++ b/guides/maintenance/increase-virtual-disk-size.html @@ -0,0 +1,1154 @@ + + + + + + + + + + + Increase virtual disk size of an image — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Increase virtual disk size of an image

+

This guide describes how to increase the disk size of your prebuilt Clear Linux* OS +image if you need more capacity.

+ +
+

Determine the partition order and sizes of the prebuilt image

+

Clear Linux OS 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 Clear Linux OS 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 (/)

+
+

Checking lsblk on the VM

+

The first method is to boot up your VM and +execute the lsblk command as shown below:

+
sudo lsblk
+
+
+

An example output of the lsblk command:

+
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
+sda      8:0   0    8.5G  0 disk
+├─sda1   8:1   0    512M  0 part
+├─sda2   8:2   0     32M  0 part [SWAP]
+└─sda3   8:3   0      8G  0 part /
+
+
+

An example of this can also be seen in Figure 1.

+
+
+

Checking config.json used to build the image

+

The second method to determine partition to check the config.json +file used to create prebuilt image, located in the releases repository. +For example, to find the size of the Hyper-V* image version number 20450, +follow these steps:

+
    +
  1. Go to the releases repository.

    +
  2. +
  3. Drill down into the 20450 > clear > config > image directory.

    +
  4. +
  5. Open the hyperv-config.json file.

    +
  6. +
  7. Locate the PartitionLayout key.

    +

    The example shows 512 MB for the EFI partition, 32 MB for the swap +partition, and 8 GB for the root partition.

    +
    "PartitionLayout" : [ { "disk" : "hyperv.img",
    +                        "partition" : 1,
    +                        "size" : "512M",
    +                        "type" : "EFI" },
    +                        { "disk" : "hyperv.img",
    +                        "partition" : 2,
    +                        "size" : "32M",
    +                        "type" : "swap" },
    +                        { "disk" : "hyperv.img",
    +                        "partition" : 3,
    +                        "size" : "8G",
    +                        "type" : "linux" } ],
    +
    +
    +
  8. +
+
+
+
+

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

+

To increase the virtual disk size for a prebuilt image, perform the steps +below:

+
    +
  1. Shut down your VM if it is running.
  2. +
  3. Use the process defined by your hypervisor or cloud provider to increase +the virtual disk size of your Clear Linux OS VM.
  4. +
  5. Power up the VM.
  6. +
+
+
+

Resize the partition of the virtual disk

+
    +
  1. Log in to an account with root privileges.

    +
  2. +
  3. Open a terminal emulator.

    +
  4. +
  5. Add the storage-utils bundle to install the +parted and resize2fs tools.

    +
    sudo swupd bundle-add storage-utils
    +
    +
    +
  6. +
  7. Launch the parted tool.

    +
    sudo parted
    +
    +
    +
  8. +
  9. In the parted tool, perform these steps:

    +
      +
    1. Press p to print the partitions table.

      +
    2. +
    3. If the warning message below is displayed, enter Fix.

      +
      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?
      +
      +Fix/Ignore?
      +
      +
      +
    4. +
    5. Enter resizepart [partition number] where +[partition number] is the partition number of the partition to modify.

      +
    6. +
    7. Enter yes when prompted.

      +
    8. +
    9. 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 p command, the total disk size is shown +after the Disk label.

      +

      An example of this can be seen in Figure 1.

      +
      +
    10. +
    11. Enter q to exit parted when you are finished resizing the +image.

      +

      Figure 1 depicts the described steps to resize the partition of the virtual disk from 8.5GB to 20GB.

      +
      +Increase root partition size +

      Figure 1: Increase root partition size.

      +
      +
    12. +
    +
  10. +
+
+
+

Resize the filesystem

+
    +
  1. Enter sudo resize2fs -p /dev/[modified partition name] where +[modified partition name] is the partition that was changed in the parted +tool.

    +
  2. +
  3. Run the 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.

    +
    +Increase root filesystem with resize2fs +

    Figure 2: Increase root filesystem size after partition has been expanded.

    +
    +
  4. +
+

Congratulations! You have resized the disk, partition, and filesystem. At +this point, the increase in disk capacity is usable.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/query-upstream.html b/guides/maintenance/query-upstream.html new file mode 100644 index 00000000..576cab0b --- /dev/null +++ b/guides/maintenance/query-upstream.html @@ -0,0 +1,1192 @@ + + + + + + + + + + + Query package info from upstream repository — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Query package info from upstream repository

+

This guide describes how to query package information from the Clear Linux OS upstream +repositories. This guide is intended for developers and advanced users.

+ +
+

Overview

+

In Clear Linux* OS, the swupd tool manages software +dependencies and installs bundles instead of packages. Although a bundle is +a collection of one or more packages, Clear Linux OS does not work with packages on +the client side. However, on the upstream/factory side, Clear Linux OS does work with +packages using a process called mixing.

+

Currently, swupd does not report which packages are installed, +provide package version information, or return other package details. This +guide describes a method for retrieving package information from the Clear Linux OS +upstream repositories using DNF commands.

+
+
+

Prerequisites

+

This guide assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +the bare metal installation guide.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Configure DNF

+
    +
  1. Install the DNF bundle with the command:

    +
    sudo swupd bundle-add dnf
    +
    +
    +
  2. +
  3. Create a dnf.conf file with the commands:

    +
    sudo mkdir -p /etc/dnf
    +sudo curl -L https://github.com/clearlinux/common/raw/master/conf/dnf.conf --output /etc/dnf/dnf.conf
    +
    +
    +
  4. +
  5. Edit the /etc/dnf/dnf.conf file and set the baseurl variable +for binary and source RPMs as shown in lines 3 and 9 in the following +example.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    [clear]
    +name=Clear
    +baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/x86_64/os/
    +enabled=1
    +gpgcheck=0
    +[clear-source]
    +name=Clear sources
    +failovermethod=priority
    +baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/source/SRPMS/
    +enabled=1
    +gpgcheck=0
    +
    +
    +
  6. +
  7. Initialize the RPM database with the command:

    +
    sudo rpm --initdb
    +
    +
    +
  8. +
+
+
+

DNF command usage examples

+ +
+

List all binary and source RPMs in the current release

+

Command:

+
dnf repoquery --releasever=current
+
+
+

Sample output:

+
Clear                                    5.1 MB/s |  13 MB     00:02
+Clear sources                            1.8 MB/s | 1.7 MB     00:00
+AVB-AudioModules-0:4.1.0-1.src
+AVB-AudioModules-0:4.1.0-1.x86_64
+AVB-AudioModules-data-0:4.1.0-1.x86_64
+AVB-AudioModules-dev-0:4.1.0-1.x86_64
+AVB-AudioModules-lib-0:4.1.0-1.x86_64
+AVB-AudioModules-license-0:4.1.0-1.x86_64
+AVBStreamHandler-0:1.1.0-21.src
+AVBStreamHandler-0:1.1.0-21.x86_64
+AVBStreamHandler-abi-0:1.1.0-21.x86_64
+AVBStreamHandler-bin-0:1.1.0-21.x86_64
+AVBStreamHandler-data-0:1.1.0-21.x86_64
+AVBStreamHandler-dev-0:1.1.0-21.x86_64
+AVBStreamHandler-lib-0:1.1.0-21.x86_64
+AVBStreamHandler-license-0:1.1.0-21.x86_64
+...
+<trimmed>
+
+
+
+
+

Show version information for a package in current release

+

This example queries version information for the zstd package.

+

Command:

+
dnf repoquery --releasever=current zstd
+
+
+

Sample output:

+
Last metadata expiration check: 0:02:30 ago on Tue 16 Jul 2019 03:03:34 PM PDT.
+zstd-0:1.4.0-46.src
+zstd-0:1.4.0-46.x86_64
+
+
+
+
+

Show version information for a package in a specific release

+

This example queries version information for the zstd package in release +21000.

+

Command:

+
dnf repoquery --releasever=21000 zstd
+
+
+

Sample output:

+
Clear
+2.7 MB/s | 3.9 MB     00:01
+Clear sources
+628 kB/s | 559 kB     00:00
+zstd-0:1.3.3-20.src
+zstd-0:1.3.3-20.x86_64
+
+
+
+
+

Show only version and release information for a package in a specific release

+

This example queries version and release information for the zstd package in +release 15000.

+

Command:

+
dnf repoquery --releasever=15000 --qf="%{VERSION}\n%{RELEASE}" zstd
+
+
+

Sample output:

+
Clear
+3.4 MB/s | 3.9 MB     00:01
+Clear sources
+345 kB/s | 528 kB     00:01
+1.1.4
+5
+
+
+
+
+

Show the binary package for a specified binary file

+

This example returns the binary package that contains the +/usr/bin/zip binary file.

+

Command:

+
dnf repoquery --releasever=current --whatprovides /usr/bin/zip
+
+
+

Sample output:

+
Last metadata expiration check: 0:04:47 ago on Tue 16 Jul 2019 03:03:34 PM PDT.
+zip-bin-0:3.0-23.x86_64
+
+
+
+
+

Show the source package for a specified binary file

+

This example returns the source package that contains the +/usr/bin/zip binary file.

+

Command:

+
dnf repoquery --releasever=current --whatprovides /usr/bin/zip --srpm
+
+
+

Sample output:

+
Last metadata expiration check: 0:05:50 ago on Tue 16 Jul 2019 03:03:34 PM PDT.
+zip-0:3.0-23.src
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/resource-limits.html b/guides/maintenance/resource-limits.html new file mode 100644 index 00000000..dbd19c79 --- /dev/null +++ b/guides/maintenance/resource-limits.html @@ -0,0 +1,1082 @@ + + + + + + + + + + + Resource limits — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Resource limits

+

Linux systems employ limiting or quota mechanisms to provide quality of +service for system resources and contain rogue processes.

+

These limits are layered at the system-level and user-level. If these limits +need to be modified, it is useful to understand the different limit +configurations.

+ +
+

System-wide limits

+

Some global resource limits are implemented in the Linux kernel and are +controllable with kernel parameters.

+

For example, a global limit for the maximum number of open files is set with +the fs.file-max parameter. This limit applies to all processes and users an +cannot be exceeded other limit values.

+
+

Checking limit

+

You can check a current value with sysctl -n <PARAMETER>. For +example:

+
sysctl -n fs.file-max
+
+
+

This fs.file-max value is set intentionally high on Clear Linux OS systems by +default. You can check the maximum value supported by the system with:

+
cat /proc/sys/fs/file-max
+
+
+
+
+

Overriding limit

+

You can override a value with sysctl -w <PARAMETER>. For +example:

+
sudo sysctl -w fs.file-max=<NUMBER>
+
+
+

If needed permanently, the value can be set by creating a +/etc/sysctl.d/*.conf file (see man sysctl.d for details). +For example:

+
sudo mkdir -p /etc/sysctl.d/
+
+sudo tee /etc/sysctl.d/fs-file-max.conf  > /dev/null <<'EOF'
+fs.file-max=<NUMBER>
+EOF
+
+
+
+
+
+

Per-user limits

+

For processes not managed by systemd, resource limits can be set for PAM +logins on a per-user basis with upper and lower limits in the +/etc/security/limits.conf file.

+

You can set temporary values and check the current values with the +ulimit command. For example, to change the soft limit of maximum +number of open file descriptors for the current user:

+
ulimit -S -n <NUMBER>
+
+
+

See man limits.conf for details.

+
+
+

Service limits

+

Resource limits for services started with systemd units do not follow normal +user limits because the process is started in a seperate Linux control group +(cgroup) Linux +cgroups associate related process groups and provide resource accounting.

+

Resource limits for individual systemd services can be controlled inside their +unit files or its configuration drop-in directory with the resource Limit +directives. See process properties section of the systemd.exec man page.

+

Resource limits for all systemd services can be controlled with a file in the +/etc/systemd/system.conf.d/ directory. For example, to have no +restriction on the number of open files:

+
sudo mkdir -p /etc/systemd/system.conf.d/
+
+sudo tee /etc/systemd/system.conf.d/50-nfiles.conf  > /dev/null <<'EOF'
+[Manager]
+DefaultLimitNOFILE=infinity
+EOF
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/restart.html b/guides/maintenance/restart.html new file mode 100644 index 00000000..47c0220a --- /dev/null +++ b/guides/maintenance/restart.html @@ -0,0 +1,1134 @@ + + + + + + + + + + + Restart system services after an OS update — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Restart system services after an OS update

+

This guide describes how to use the clr-service-restart tool.

+ +
+

Overview

+

Clear Linux* OS includes a clr-service-restart tool that shows which +system daemons require a restart.

+

clr-service-restart reads various files in the procfs +filesystem provided by the kernel and relies on systemd to +determine which services to restart.

+
+
+

How it works

+

clr-service-restart implements a whitelist to identify which +daemons can be restarted. As a system administrator, you can customize the +default Clear Linux OS OS whitelist using allow or disallow options +for restarting system services. When a software update occurs, +clr-service-restart consults the whitelist to see if a service daemon +is allowed to be restarted or not.

+
+
+

Basic options

+

clr-service-restart has three basic options: allow, +disallow, and default.

+
+

allow

+

The allow option identifies a daemon to restart after an OS software +update. The clr-service-restart daemon creates a symlink in +/etc/clr-service-restart as a record. The example below tells +clr-service-restart to restart the tallow daemon after an +OS software update.

+
sudo clr-service-restart allow tallow.service
+
+
+
+
+

disallow

+

The disallow option tells clr-service-restart not to +restart the specified daemon even if the OS defaults permit the daemon to be +restarted. The clr-service-restart daemon creates a symlink in +/etc/clr-service-restart that points to /dev/null as a +record. The example below tells clr-service-restart not to +restart the rngd daemon after an OS software update.

+
sudo clr-service-restart disallow rngd
+
+
+
+
+

default

+

The default option makes clr-service-restart revert back +to the OS defaults and delete any symlink in /etc/clr-service-restart. +The example below tells clr-service-restart to restart rngd +automatically again, because rngd is whitelisted for automatic service +restarts by default in Clear Linux OS.

+
sudo clr-service-restart default rngd
+
+
+
+
+
+

Monitor options

+

clr-service-restart works in the background and is invoked with +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, +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.

+
+

-n option

+

The -n option makes clr-service-restart perform no restarts. +Instead it displays the services that could potentially be restarted. When used, +clr-service-restart outputs a list of messages showing:

+
    +
  • Which service needs a restart.
  • +
  • What unit it is.
  • +
  • Why it needs a restart.
  • +
  • Which command is required to restart the unit.
  • +
+
+
+

-a option

+

The -a option makes clr-service-restart consider all system +services, not only the ones that are whitelisted. Because the default whitelist +in Clear Linux OS 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, 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:

+
sudo clr-service-restart -a -n
+
+
+

Sample output:

+
upower.service: needs a restart (a library dependency was updated)
+/usr/bin/systemctl --no-ask-password try-restart upower.service
+NetworkManager.service: needs a restart (a library dependency was
+updated)
+/usr/bin/systemctl --no-ask-password try-restart NetworkManager.service
+....
+
+
+
+
+

Telemetry

+

clr-service-restart may cause problems such as a short service +outage when a daemon is being restarted, or if a daemon fails to properly +restart. To minimize issues, clr-service-restart creates a +telemetry record and sends it to the optional Clear Linux OS telemetry service if both +conditions below are met:

+
    +
  • If a unit fails to automatically restart after an OS update.
  • +
  • If that unit resides in the system location /usr/lib/systemd/system.
  • +
+

If you do not install the Clear Linux OS telemetrics bundle, the data is discarded. If +you install the telemetrics bundle and you opt to send telemetry, then the +system unit name is sent to the Clear Linux OS telemetry service. We evaluate the +report and update the whitelist to remove services that are not safe to +restart.

+
+
+

Conclusion

+

The Clear Linux OS team enjoys coming up with simple and efficient solutions to make +your work easier. We made a GitHub* project of clr-service-restart +and we invite you to look at the code, share your thoughts, and work with us +on improving the project. You can find the project at:

+

https://github.com/clearlinux/clr-service-restart

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/time.html b/guides/maintenance/time.html new file mode 100644 index 00000000..8094d225 --- /dev/null +++ b/guides/maintenance/time.html @@ -0,0 +1,1038 @@ + + + + + + + + + + + Set the time — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set the time

+

This guide describes how to reset the time in your Clear Linux* OS system when +the default NTP servers cannot be reached.

+

Clear Linux OS uses the systemd-timesyncd.service daemon to synchronize time.

+
    +
  1. Install the sysadmin-basic bundle.

    +
    sudo swupd bundle-add sysadmin-basic
    +
    +
    +
  2. +
  3. Set your time zone. This example uses Los Angeles.

    +
    timedatectl set-timezone America/Los_Angeles
    +
    +
    +
    +

    Note

    +

    To see a list of time zones, use the command: +timedatectl list-timezones | grep <locale>

    +
    +
  4. +
  5. Create a /etc/systemd/ directory.

    +
    sudo mkdir -p /etc/systemd/
    +
    +
    +
  6. +
  7. Create a new file named /etc/systemd/timesyncd.conf and enter the +following text.

    +
    [Time]
    +NTP=<Preferred Server>
    +FallbackNTP=<backup server 1> <backup server 2>
    +
    +
    +
  8. +
  9. Enable the systemd-timesyncd service.

    +
    timedatectl set-ntp true
    +
    +
    +
  10. +
+
+

Note

+

To check the service status, use the timedatectl status command.

+

To restart the timesyncd daemon, enter systemctl restart +systemd-timesyncd into your terminal emulator.

+
+

Congratulations! You successfully set up the time in your Clear Linux OS system.

+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/maintenance/validate-signatures.html b/guides/maintenance/validate-signatures.html new file mode 100644 index 00000000..6286f082 --- /dev/null +++ b/guides/maintenance/validate-signatures.html @@ -0,0 +1,1117 @@ + + + + + + + + + + + Validate signatures — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Validate signatures

+

This guide describes how to validate the contents of a Clear Linux* OS image.

+ +
+

Overview

+

Validating the contents of an image is a manual process and is the same process +that swupd performs internally.

+

Clear Linux OS 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.

+
+
+

Image content validation

+

In the steps below, we used the installer image of the latest release +of Clear Linux OS. You may use any image of Clear Linux OS you choose.

+
    +
  1. Download the image, the signature of the SHA512 sum of the image, and the +Clear Linux OS certificate used for signing the SHA512 sum.

    +
    # Image
    +curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz
    +# Signature of SHA512 sum of image
    +curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig
    +# Certificate
    +curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/ClearLinuxRoot.pem
    +
    +
    +
  2. +
  3. Generate the SHA256 sum of the Clear Linux OS certificate.

    +
    sha256sum ClearLinuxRoot.pem
    +
    +
    +
  4. +
  5. Ensure the generated SHA256 sum of the Clear Linux OS certificate matches the +following SHA256 sum to verify the integrity of the certificate.

    +
    4b0ca67300727477913c331ff124928a98bcf2fb12c011a855f17cd73137a890  ClearLinuxRoot.pem
    +
    +
    +
  6. +
  7. Generate the SHA512 sum of the image and save it to a file.

    +
    sha512sum clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz > sha512sum.out
    +
    +
    +
  8. +
  9. Ensure the signature of the SHA512 sum of the image was created using the +Clear Linux OS certificate. This confirms that the image is trusted and has not +been modified.

    +
    openssl smime -verify -purpose any -in clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig -inform der -content sha512sum.out -CAfile ClearLinuxRoot.pem
    +
    +
    +
    +

    Note

    +

    The -purpose any option is required when using OpenSSL 1.1. +If you use 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.

    +
    +
  10. +
  11. The output should contain “Verification successful”. If the output +contains “bad_signature” anywhere, then the image is not trustworthy.

    +
  12. +
+
+
+

Update content validation

+

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 Clear Linux OS release. There is no need to perform +these steps manually when performing a swupd update.

+
    +
  1. Download the MoM, the signature of the MoM, +and the Swupd certificate used for signing the signature of the MoM.

    +
    # MoM
    +curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM
    +# Signature of MoM
    +curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM.sig
    +# Swupd certificate
    +curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/Swupd_Root.pem
    +
    +
    +
  2. +
  3. Generate the SHA256 sum of the swupd certificate.

    +
    sha256sum Swupd_Root.pem
    +
    +
    +
  4. +
  5. Confirm that the generated SHA256 sum of the swupd certificate matches the +SHA256 sum shown below to verify the integrity of the certificate.

    +
    ff06fc76ec5148040acb4fcb2bc8105cc72f1963b55de0daf3a4ed664c6fe72c  Swupd_Root.pem
    +
    +
    +
  6. +
  7. Confirm that the signature of the MoM was created using the Swupd +certificate. This signature validates the update content is trustworthy and +has not been modified.

    +
    openssl smime -verify -purpose any -in Manifest.MoM.sig -inform der -content Manifest.MoM -CAfile Swupd_Root.pem
    +
    +
    +
    +

    Note

    +

    The -purpose any option is required when using OpenSSL 1.1. +If you use 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.

    +
    +
    +

    Note

    +

    The SHA512 sum of the MoM is not generated and then signed. Instead, the +MoM is signed directly because it is small in size compared to an image of +Clear Linux OS.

    +
    +
  8. +
  9. 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.

    +
  10. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/network/custom-clear-container.html b/guides/network/custom-clear-container.html new file mode 100644 index 00000000..1e32a474 --- /dev/null +++ b/guides/network/custom-clear-container.html @@ -0,0 +1,1291 @@ + + + + + + + + + + + Build a custom Clear Linux* OS based Docker container image — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Guides »
  • + +
  • Build a custom Clear Linux* OS based Docker container image
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Build a custom Clear Linux* OS based Docker container image

+

This guide contains the steps to build a custom container image. The official +base Clear Linux* OS container image is published on Docker* Hub and is updated on a +regular basis.

+ +
+

Prerequisites

+
    +
  • You must perform these steps on a Clear Linux OS system because the +swupd is used to manage bundles in the +container.
  • +
  • You must install the containers-basic bundle on the Clear Linux OS system +or Docker will not work.
  • +
  • You have a basic understanding of Docker.
  • +
+
+
+

Build the base container image

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Verify Docker is installed and running.

    +
    docker info
    +
    +
    +

    If Docker is installed and running, the output is similar to +this example:

    +
    Containers: 0
    + Running: 0
    + Paused: 0
    + Stopped: 0
    +Images: 4
    +Server Version: 17.05.0-ce
    +Storage Driver: overlay
    + Backing Filesystem: extfs
    + Supports d_type: true
    +Logging Driver: json-file
    +Cgroup Driver: cgroupfs
    +Plugins:
    + Volume: local
    + Network: bridge host macvlan null overlay
    +Swarm: inactive
    +Runtimes: runc
    +Default Runtime: runc
    +Init Binary: docker-init
    +containerd version:  (expected: 9048e5e50717ea4497b757314bad98ea3763c145)
    +runc version: N/A (expected: 9c2d8d184e5da67c95d601382adf14862e4f2228)
    +init version: N/A (expected: )
    +Kernel Version: 4.12.7-377.native
    +Operating System: Clear Linux OS for Intel Architecture
    +OSType: linux
    +Architecture: x86_64
    +CPUs: 4
    +Total Memory: 15.62GiB
    +Name: clr-os
    +ID: XQHJ:DYEM:3Q4D:DKLM:JOA4:RUSF:GAFR:DLPA:HOJP:W5FF:ULEE:7HZ3
    +Docker Root Dir: /var/lib/docker
    +Debug Mode (client): false
    +Debug Mode (server): false
    +Registry: https://index.docker.io/v1/
    +Experimental: false
    +Insecure Registries:
    + 127.0.0.0/8
    +Live Restore Enabled: false
    +
    +
    +

    If Docker is not installed, enter the commands:

    +
    swupd bundle-add containers-basic
    +systemctl start docker
    +
    +
    +
  4. +
  5. Use os-install to download and install the bundles.

    +
    swupd os-install --url https://cdn.download.clearlinux.org/update --statedir "$PWD"/swupd-state --no-boot-update --version 29790 -B os-core-update,editors,network-basic base
    +
    +
    +

    The swupd example uses the following flags:

    +
      +
    • os-install tells swupd to download and install.
    • +
    • -V / --version specifies the version of the Clear Linux OS bundles.
    • +
    • --url specifies the URL of the bundles repository.
    • +
    • --statedir specifies the state directory where downloaded bundles +and any state information are stored.
    • +
    • --no-boot-update tells swupd to skip updating boot files because +boot files are not required for a container.
    • +
    +

    For more information on swupd flags, enter the swupd os-install -h +command.

    +

    Example output:

    +
    swupd-client software verify 3.12.2
    +Copyright (C) 2012-2017 Intel Corporation
    +
    +Verifying version 17870
    +Attempting to download version string to memory
    +Downloading packs...
    +
    +Extracting python-basic pack for version 17820
    +  ...14%
    +Extracting perl-basic pack for version 17790
    +  ...28%
    +Extracting openssh-server pack for version 17660
    +  ...42%
    +Extracting editors pack for version 17850
    +  ...57%
    +Extracting network-basic pack for version 17650
    +  ...71%
    +Extracting os-core pack for version 17870
    +  ...85%
    +Extracting os-core-update pack for version 17870
    +  ...100%
    +Adding any missing files
    +  ...88%
    +Inspected 33982 files
    +  33974 files were missing
    +    33974 of 33974 missing files were replaced
    +    0 of 33974 missing files were not replaced
    +Calling post-update helper scripts.
    +WARNING: boot files update skipped due to --no-boot-update argument
    +Fix successful
    +
    +
    +
    +

    Note

    +

    The WARNING message is expected and can be ignored.

    +
    +
  6. +
  7. Create a tarball and compress it.

    +
    tar -C base -cf base.tar .
    +xz -v -T0 base.tar
    +
    +
    +
  8. +
  9. Create the Dockerfile to build the image.

    +
    cat > Dockerfile << EOF
    +FROM scratch
    +MAINTAINER First Last <first.last@example.com>
    +ADD base.tar.xz /
    +CMD ["/bin/bash"]
    +EOF
    +
    +
    +
  10. +
  11. Build the Clear Linux OS container image.

    +
    docker build -t my-custom-clear-linux-container .
    +
    +
    +

    Example output:

    +
    Sending build context to Docker daemon  806.5MB
    +Step 1/4 : FROM scratch
    +  --->
    +Step 2/4 : MAINTAINER First Last <first.last@example.com>
    +  ---> Running in 7238f35abcd0
    +  ---> ec5064287c60
    +Removing intermediate container 7238f35abcd0
    +Step 3/4 : ADD base.tar.xz /
    +  ---> 2723b7d20716
    +Removing intermediate container 16e3ed0df8da
    +Step 4/4 : CMD /bin/bash
    +  ---> Running in efa893350647
    +  ---> 5414c3a12993
    +Removing intermediate container efa893350647
    +Successfully built 5414c3a12993
    +Successfully tagged my-custom-clear-linux-container:latest
    +
    +
    +
  12. +
  13. List the newly created Clear Linux OS container image.

    +
    docker images
    +
    +
    +

    Example output:

    +
    REPOSITORY                        TAG                 IMAGE ID            CREATED              SIZE
    +my-custom-clear-linux-container   latest              5414c3a12993        About a minute ago   616MB
    +
    +
    +
  14. +
  15. Launch the built Clear Linux OS container.

    +
    docker run -it my-custom-clear-linux-container
    +
    +
    +
  16. +
+
+
+

Manage bundles in a container

+

You can add and remove bundles from a Clear Linux OS container using the +RUN swupd command in the Dockerfile.

+
+

Add a bundle

+

This example Dockerfile adds the pxe-server bundle to an existing Clear Linux OS +Docker image:

+
cat > Dockerfile << EOF
+FROM my-customer-clear-linux-container
+MAINTAINER First Last <first.last@example.com>
+RUN swupd bundle-add pxe-server
+CMD ["/bin/bash/bash"]
+EOF
+
+
+

Example output:

+
docker build -t my-clearlinux-with-pxe-server-bundle .
+
+Sending build context to Docker daemon  806.5MB
+Step 1/4 : FROM my-custom-clear-linux-container
+ ---> 5414c3a12993
+Step 2/4 : MAINTAINER First Last <first.last@example.com>
+ ---> Running in 19b4411cf4bd
+ ---> 08d400baffde
+Removing intermediate container 19b4411cf4bd
+Step 3/4 : RUN swupd bundle-add pxe-server
+ ---> Running in 3e634d6e0792
+swupd-client bundle adder 3.12.2
+   Copyright (C) 2012-2017 Intel Corporation
+
+Attempting to download version string to memory
+Downloading packs...
+
+Extracting pxe-server pack for version 17820
+.
+Installing bundle(s) files...
+..............................................................................
+..............................................................................
+..............................................................................
+..............................................................................
+..............................................................................
+..............................................................................
+Calling post-update helper scripts.
+WARNING: systemctl not operable, unable to run systemd update triggers
+Bundle(s) installation done.
+ ---> 8ead5f2c0c33
+Removing intermediate container 3e634d6e0792
+Step 4/4 : CMD /bin/bash
+ ---> Running in 0ceae320279b
+ ---> dcd9adb40611
+Removing intermediate container 0ceae320279b
+Successfully built dcd9adb40611
+Successfully tagged my-clearlinux-with-pxe-server-bundle:latest
+
+
+
+

Note

+

The WARNING message can be ignored because systemd does not run inside +a container.

+
+
+
+

Remove a bundle

+

This example Dockerfile removes the pxe-server bundle from an existing +Clear Linux OS Docker image:

+
cat > Dockerfile << EOF
+FROM my-clearlinux-with-pxe-server-bundle
+MAINTAINER First Last <first.last@example.com>
+RUN swupd bundle-remove pxe-server
+CMD ["/bin/bash/bash"]
+EOF
+
+
+

Example output:

+
docker build -t my-clearlinux-remove-pxe-server-bundle .
+
+Sending build context to Docker daemon  806.5MB
+Step 1/4 : FROM my-clearlinux-with-pxe-server-bundle
+ ---> dcd9adb40611
+Step 2/4 : MAINTAINER First Last <first.last@example.com>
+ ---> Running in 71b60f15003e
+ ---> 742192751c1a
+Removing intermediate container 71b60f15003e
+Step 3/4 : RUN swupd bundle-remove pxe-server
+ ---> Running in ad28a3390ecc
+swupd-client bundle remover 3.12.2
+   Copyright (C) 2012-2017 Intel Corporation
+
+Removing bundle: pxe-server
+Deleting bundle files...
+Total deleted files: 92
+Untracking bundle from system...
+Success: Bundle removed
+1 bundle(s) were removed successfully
+ ---> d6ee7903e14d
+Removing intermediate container ad28a3390ecc
+Step 4/4 : CMD /bin/bash
+ ---> Running in 7694989e97de
+ ---> ec23189ef954
+Removing intermediate container 7694989e97de
+Successfully built ec23189ef954
+Successfully tagged my-clearlinux-remove-pxe-server-bundle:latest
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/network/dpdk.html b/guides/network/dpdk.html new file mode 100644 index 00000000..808713cd --- /dev/null +++ b/guides/network/dpdk.html @@ -0,0 +1,1308 @@ + + + + + + + + + + + Use DPDK to send packets between platforms — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use DPDK to send packets between platforms

+

This guide describes how to send packets between two platforms.

+ +
+

Overview

+

Figure 1 shows how to send packets between two platforms in a simple +configuration. The example uses the Data Plane Development Kit, +which is a set of libraries, drivers, sample applications, and tools for fast +packet processing.

+
+Platform A and B +

Figure 1: Environment for l3fwd DPDK application

+
+

This example uses the following DPDK components:

+
    +
  • pktgen: Traffic generator. See pktgen documentation for details.
  • +
  • l3fwd: Layer 3 forwarding example application. See +l3fwd documentation for details.
  • +
+
+
+

Prerequisites

+
    +
  • Two platforms using Clear Linux* OS release 13330 or higher.

    +
  • +
  • Both images must include the kernel-native bundle.

    +
  • +
  • Install the network-basic-dev bundle with the command:

    +
    sudo swupd bundle-add network-basic-dev
    +
    +
    +
  • +
  • Each platform must have at least one NIC. +Check the DPDK project for the list of supported dpdk.org NICs.

    +
  • +
  • Two network cables.

    +
  • +
+
+
+

Install dpdk and build l3fwd example (Platform B)

+
    +
  1. Change to the l3fwd example directory.

    +
    sudo cd /usr/share/dpdk/examples/l3fwd
    +
    +
    +
  2. +
  3. Assign RTE_SDK variable to the makefiles path.

    +
    sudo export RTE_SDK=/usr/share/dpdk/
    +
    +
    +
  4. +
  5. Assign RTE_TARGET variable to the location of the gcc* config +file.

    +
    sudo export RTE_TARGET=x86_64-native-linuxapp-gcc
    +
    +
    +
  6. +
  7. Build the l3fwd application and add the configuration header to +the CFLAGS variable.

    +
    sudo make CFLAGS+="-include /usr/include/rte_config.h"
    +
    +
    +
  8. +
+
+
+

Build pktgen (Platform A)

+
    +
  1. Download the pktgen tar package v3.1.2 or newer.

    +
  2. +
  3. Decompress packages and move to uncompressed source directory.

    +
  4. +
  5. Assign RTE_SDK variable to the path where makefiles are located.

    +
    sudo export RTE_SDK=/usr/share/dpdk/
    +
    +
    +
  6. +
  7. Assign RTE_TARGET to the location of the gcc config file.

    +
    sudo export RTE_TARGET=x86_64-native-linuxapp-gcc
    +
    +
    +
  8. +
  9. Build the pktgen project and set the CONFIG_RTE_BUILD_SHARED_LIB variable +to “n”.

    +
    sudo make CONFIG_RTE_BUILD_SHARED_LIB=n
    +
    +
    +
  10. +
+
+
+

Bind NICs to DPDK kernel drivers (Platforms A and B)

+

The l3fwd application uses two NICs. The DPDK includes tools for binding +NICs to DPDK modules to run DPDK applications.

+
    +
  1. Load the DPDK I/O kernel module.

    +
    sudo modprobe vfio-pci
    +
    +
    +
  2. +
  3. Check the NIC status to determine which network cards are not +busy. When another application is using them, the status shows “Active”, +and those NICs cannot be bound.

    +
    sudo dpdk-devbind --status
    +
    +
    +
  4. +
  5. Bind two available NICs. The general syntax for binding is: +dpdk-devbind --bind=vfio-pci <device-entry>. +A working example is shown below:

    +
    sudo dpdk-devbind --bind=vfio-pci 01:00.0
    +
    +
    +
  6. +
  7. Check the NIC status to verify that the NICs are bound correctly. If +successful, drv displays the value igb_uio, which confirms +that the NICs are using the DPDK modules.

    +
  8. +
+
+
+

Set hugepages (Platforms A and B)

+

Clear Linux OS supports hugepages for the large memory pool allocation used for +packet buffers.

+
    +
  1. Set the number of hugepages.

    +
    sudo echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
    +
    +
    +
  2. +
  3. Allocate pages on NUMA machines.

    +
    sudo echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
    +sudo echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
    +
    +
    +
  4. +
  5. Make memory available for DPDK.

    +
    sudo mkdir -p /mnt/huge $ mount -t hugetlbfs nodev /mnt/huge
    +
    +
    +

    For more information, refer to the DPDK guide System Requirements +section.

    +
  6. +
+
+
+

Set up the physical environment (Platforms A and B)

+

Connect the NICs on Platform A to the NICs on Platform B using the network +cables as shown in figure 2.

+
+../../_images/pyshical_net.png +

Figure 2: Physical network environment

+
+
+
+

Run l3fwd application (Platform B)

+

The l3fwd application is one of the DPDK examples available when you +install the dpdk-dev bundle. l3fwd forwards packets from one +NIC to another. For details, refer to the l3fwd documentation.

+
    +
  1. Open the l3fwd example directory.

    +
    sudo cd  /usr/share/dpdk/examples/l3fwd
    +
    +
    +
  2. +
  3. This step is very important.

    +
      +
    1. DPDK needs poll mode drivers to operate.
    2. +
    3. Poll mode drivers are shared objects in /usr/lib64.
    4. +
    5. See the full list of supported NICs at dpdk.org NICs.
    6. +
    7. You must know which kernel module each NIC is using and choose a poll +mode driver that corresponds to your NICs.
    8. +
    +
  4. +
  5. NIC binding and pktgen configuration depends upon network use cases and +available system resources. Use the -d flag to set the poll mode +driver.

    +

    The following example assumes that the NICs use the e1000 network driver +and the e1000 poll mode driver. The librte_pmd_e1000.so is +located in /usr/lib64 in Clear Linux OS.

    +
    sudo ./build/l3fwd -c 0x3 -n 2 -d librte_pmd_e1000.so -- -p 0x3 --config="(0,0,0),(1,0,1)"
    +
    +
    +
  6. +
  7. The l3fwd application shows port initialization details at startup. +After port 0 initialization completes, l3fwd shows a MAC address and +information for port 1.

    +

    Save the MAC address for configuring the pktgen project.

    +
  8. +
+
+
+

Run pktgen application (Platform A)

+

pktgen is a network traffic generator included in the DPDK.

+
    +
  1. pktgen configuration depends upon the network setup and the +available system resources. The following example shows a basic +configuration.

    +
    sudo ./app/app/x86_64-native-linuxapp-gcc/pktgen -c 0xf -n 4 -- -p 0xf -P -m "1.0, 2.1"
    +
    +
    +
  2. +
  3. Enable active colorful output (optional).

    +
    Pktgen> theme enable
    +
    +
    +
  4. +
  5. Use the MAC addresses shown by the l3fwd application during initialization. +The command to set the MAC addresses in pktgen has the format:

    +
    set mac <port number> <mac address>
    +
    +
    +

    Here is a working example:

    +
    Pktgen> set mac 0 00:1E:67:CB:E8:C9
    +Pktgen> set mac 1 00:1E:67:CB:E8:C9
    +
    +
    +
  6. +
  7. Send packets.

    +
    Pktgen> start 0-1
    +
    +
    +
  8. +
+

For more details, see the pktgen documentation.

+
+
+

Appendix A: Use pass-through for virtual machines

+

This section explains how to set up a virtual environment where virtual +machines control the NICs on the host.

+
    +
  1. Create a new directory and move to it.

    +
  2. +
  3. Download or create a start_qemu.sh script for running a kvm virtual +machine:

    +
    sudo curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh
    +
    +
    +
  4. +
  5. Download a bare-metal image of Clear Linux OS and rename it as clear.img.

    +
  6. +
  7. Look for an Ethernet* device entry that contains vendor and device ID:

    +
    sudo lspci -nn | grep Ethernet
    +
    +
    +

    An example output:

    +
    03:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521]
    +
    +
    +

    where 03:00.0 is the device entry and 8086:1521 is the vendor:device +ID. Record this information, because you need it to unbind the NICs from a +host.

    +
  8. +
  9. Unbind the NICs from the host to do pass-through with virtual machines. Clear Linux OS +supports this action. The commands take the format:

    +
    echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/new_id
    +echo "entry for device" > /sys/bus/pci/drivers/igb/unbind
    +echo "entry for device" > /sys/bus/pci/drivers/pci-stub/bind
    +echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/remove_id
    +
    +
    +

    Here is a working example:

    +
    sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/new_id
    +sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/igb/unbind
    +sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/pci-stub/bind
    +sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/remove_id
    +
    +
    +
  10. +
  11. Assign the unbound NICs to the KVM virtual machine (guest). +Modify the start_qemu.sh script in qemu-system-x86_64 arguments, and +add the lines with the host’s NICs information in the format:

    +
    -device pci-assign,host="<entry for device>",id=passnic0,addr=03.0
    +-device pci-assign,host="<entry for device>",id=passnic1,addr=04.0
    +
    +
    +

    Here is a working example:

    +
    -device pci-assign,host=03:00.0,id=passnic0,addr=03.0 \
    +-device pci-assign,host=03:00.3,id=passnic1,addr=04.0 \
    +
    +
    +
  12. +
  13. Add more NUMA machines to the virtual machine by adding lines to the +Makefile boot target in the format:

    +
    -numa node,mem=<memory>,cpus=<number of cpus>
    +
    +
    +

    Here is a working example for a virtual machine with 4096 memory and four +CPUs:

    +
    -numa node,mem=2048,cpus=0-1 \
    +-numa node,mem=2048,cpus=2-3 \
    +
    +
    +
    +

    Note

    +

    Each NUMA machine must use the same quantity of memory.

    +
    +
  14. +
  15. Run the start_qemu.sh script.

    +
  16. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/network/ipxe-install.html b/guides/network/ipxe-install.html new file mode 100644 index 00000000..cbd7a8c4 --- /dev/null +++ b/guides/network/ipxe-install.html @@ -0,0 +1,1291 @@ + + + + + + + + + + + Install over the network with iPXE — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install over the network with iPXE

+

This guide describes how to install Clear Linux* OS using PXE over the network.

+ +
+

Overview

+

PXE is an industry standard that describes client-server interaction with +network-boot software and uses the DHCP and TFTP protocols. This guide shows one +method of using the PXE environment to install Clear Linux OS.

+

The PXE extension called iPXE adds support for additional protocols such as +HTTP, iSCSI, AoE, and FCoE. iPXE +enables network booting on computers with no built-in PXE support.

+

To install Clear Linux OS through iPXE, you must create a PXE client. Figure 1 depicts +the flow of information between a PXE server and a PXE client.

+
+PXE information flow +

Figure 1: PXE information flow.

+
+
+

Caution

+

The Clear Linux OS image that boots through the PXE process automatically erases all +data and partitions on the PXE client system and creates 3 new partitions +to install onto.

+
+
+
+

Prerequisites

+

Before booting with iPXE, make the following preparations.

+

Connect the PXE server and PXE clients to a switch on a private network, as +shown in figure 2.

+
+Network topology +

Figure 2: Network topology.

+
+

Your PXE client must have a boot order where the network boot option is +prioritized before the disk boot option.

+

Your PXE server must have:

+
    +
  • Ethernet/LAN boot option.
  • +
  • At least two network adapters.
  • +
  • Connection to a public network.
  • +
  • Secure boot option disabled.
  • +
+
+

Note

+

You must disable the secure boot option in the BIOS because the UEFI +binaries used to boot Clear Linux OS are not signed.

+
+
+
+

Configuration

+

To set up Clear Linux OS using iPXE automatically, use the configure-ipxe.sh +script included with ICIS. For additional +instructions on the script, refer to the guide on the ister-cloud-init-svc +GitHub* repository.

+

To set up Clear Linux OS manually, perform the steps below.

+
    +
  1. Define the variables used for iPXE boot configuration.

    +
    ipxe_app_name=ipxe
    +ipxe_port=50000
    +web_root=/var/www
    +ipxe_root=$web_root/$ipxe_app_name
    +tftp_root=/srv/tftp
    +external_iface=eno1
    +internal_iface=eno2
    +pxe_subnet=192.168.1
    +pxe_internal_ip=$pxe_subnet.1
    +pxe_subnet_mask_ip=255.255.255.0
    +pxe_subnet_bitmask=16
    +
    +
    +
  2. +
  3. Log in and get root privilege.

    +
    sudo -s
    +
    +
    +
  4. +
  5. Add the pxe-server bundle to your Clear Linux OS system. The bundle contains all +files needed to run a PXE server.

    +
    sudo swupd bundle-add pxe-server
    +
    +
    +
  6. +
  7. Download the latest network-bootable release of Clear Linux OS and extract the +files.

    +
    sudo mkdir -p $ipxe_root
    +sudo curl -o /tmp/clear-pxe.tar.xz \
    +  https://cdn.download.clearlinux.org/current/clear-$(curl \
    +  https://cdn.download.clearlinux.org/latest)-pxe.tar.xz
    +sudo tar -xJf /tmp/clear-pxe.tar.xz -C $ipxe_root
    +sudo ln -sf $(ls $ipxe_root | grep 'org.clearlinux.*') $ipxe_root/linux
    +
    +
    +
    +

    Note

    +

    Ensure that the initial ramdisk file is named initrd and +the kernel file is named linux, which is a symbolic link to the +actual kernel file.

    +
    +
  8. +
  9. Create an iPXE boot script with the following contents. During an iPXE +boot, the iPXE boot script directs the PXE client to download the files to +boot and install Clear Linux OS. Use the names previously given to the initial +ramdisk and kernel files.

    +
    sudo cat > $ipxe_root/ipxe_boot_script.ipxe << EOF
    +#!ipxe
    +kernel linux quiet init=/usr/lib/systemd/systemd-bootchart \
    +initcall_debug tsc=reliable no_timer_check noreplace-smp rw \
    +initrd=initrd
    +initrd initrd
    +boot
    +EOF
    +
    +
    +
  10. +
  11. The pxe-server bundle contains a lightweight web-server known as +nginx. Create a configuration file for nginx to serve Clear Linux OS to PXE +clients with the following contents:

    +
    sudo mkdir -p /etc/nginx/conf.d
    +sudo cat > /etc/nginx/conf.d/$ipxe_app_name.conf << EOF
    +server {
    +  listen $ipxe_port;
    +  server_name localhost;
    +  location /$ipxe_app_name/ {
    +    root $web_root;
    +    autoindex on;
    +  }
    +}
    +EOF
    +
    +sudo cp /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf
    +
    +
    +
    +

    Note

    +

    Create a separate nginx configuration file to serve network-bootable +images on a non-standard port number. This action saves existing nginx +configurations.

    +
    +
  12. +
  13. Start nginx and enable the startup on boot option.

    +
    sudo systemctl start nginx
    +sudo systemctl enable nginx
    +
    +
    +
  14. +
  15. The pxe-server bundle contains a lightweight DNS server which +conflicts with the DNS stub listener provided in systemd-resolved. +Disable the DNS stub listener and temporarily stop systemd-resolved.

    +
    sudo mkdir -p /etc/systemd
    +sudo cat > /etc/systemd/resolved.conf << EOF
    +[Resolve]
    +DNSStubListener=no
    +EOF
    +
    +sudo systemctl stop systemd-resolved
    +
    +
    +
  16. +
  17. Assign a static IP address to the network adapter for the private network +and restart systemd-networkd with the following commands:

    +
    sudo mkdir -p /etc/systemd/network
    +sudo cat > /etc/systemd/network/70-internal-static.network << EOF
    +[Match]
    +Name=$internal_iface
    +[Network]
    +DHCP=no
    +Address=$pxe_internal_ip/$pxe_subnet_bitmask
    +EOF
    +
    +sudo systemctl restart systemd-networkd
    +
    +
    +
  18. +
  19. Configure NAT to route traffic from +the private network to the public network. This action makes the PXE +server act as a router. To make these changes persistent during reboots, save the +changes to the firewall with the following commands:

    +
    sudo iptables -t nat -F POSTROUTING
    +sudo iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE
    +sudo systemctl enable iptables-save.service
    +sudo systemctl restart iptables-save.service
    +sudo systemctl enable iptables-restore.service
    +sudo systemctl restart iptables-restore.service
    +
    +
    +
    +

    Note

    +

    The firewall masks packets to make them appear as coming from the PXE +server and hides PXE clients from the public network.

    +
    +
  20. +
  21. Configure the kernel to forward network packets to different +interfaces. Otherwise, NAT will not work.

    +
    sudo mkdir -p /etc/sysctl.d
    +sudo echo net.ipv4.ip_forward=1 > /etc/sysctl.d/80-nat-forwarding.conf
    +sudo echo 1 > /proc/sys/net/ipv4/ip_forward
    +
    +
    +
  22. +
  23. The pxe-server bundle contains iPXE firmware images that allow computers +without an iPXE implementation to perform an iPXE boot. Create a TFTP +hosting directory and populate the directory with the iPXE firmware images +with the following commands:

    +
    sudo mkdir -p $tftp_root
    +sudo ln -sf /usr/share/ipxe/undionly.kpxe $tftp_root/undionly.kpxe
    +
    +
    +
  24. +
  25. The pxe-server bundle contains a lightweight TFTP, DNS, and DHCP +server known as dnsmasq. Create a configuration file for dnsmasq +to listen on a dedicated IP address for those functions. PXE clients on +the private network will use this IP address.

    +
    sudo cat > /etc/dnsmasq.conf << EOF
    +listen-address=$pxe_internal_ip
    +EOF
    +
    +
    +
  26. +
  27. Add the options to serve iPXE firmware images to PXE clients over TFTP to +the dnsmasq configuration file.

    +
    sudo cat >> /etc/dnsmasq.conf << EOF
    +enable-tftp
    +tftp-root=$tftp_root
    +EOF
    +
    +
    +
  28. +
  29. Add the options to host a DHCP server for PXE clients to the dnsmasq +configuration file.

    +
    sudo cat >> /etc/dnsmasq.conf << EOF
    +dhcp-leasefile=/var/db/dnsmasq.leases
    +
    +dhcp-authoritative
    +dhcp-option=option:router,$pxe_internal_ip
    +dhcp-option=option:dns-server,$pxe_internal_ip
    +
    +dhcp-match=set:pxeclient,60,PXEClient*
    +dhcp-range=tag:pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,15m
    +dhcp-range=tag:!pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,6h
    +
    +dhcp-match=set:ipxeboot,175
    +dhcp-boot=tag:ipxeboot,http://$pxe_internal_ip:$ipxe_port/$ipxe_app_name/ipxe_boot_script.ipxe
    +dhcp-boot=tag:!ipxeboot,undionly.kpxe,$pxe_internal_ip
    +EOF
    +
    +
    +

    The configuration provides the following important functions:

    +
      +
    • Directs PXE clients without an iPXE implementation to the TFTP server +to acquire architecture-specific iPXE firmware images that allow them +to perform an iPXE boot.
    • +
    • Activates only on the network adapter that has an IP address on the +defined subnet.
    • +
    • Directs PXE clients to the DNS server.
    • +
    • Directs PXE clients to the PXE server for routing via NAT.
    • +
    • Divides the private network into two pools of IP addresses. One pool +is for network boot and one pool is used after boot. Each pool has +their own lease times.
    • +
    +
  30. +
  31. Create a file for dnsmasq to record the IP addresses it provides +to PXE clients.

    +
    sudo mkdir -p /var/db
    +sudo touch /var/db/dnsmasq.leases
    +
    +
    +
  32. +
  33. Start dnsmasq and enable startup on boot.

    +
    sudo systemctl enable dnsmasq
    +sudo systemctl restart dnsmasq
    +
    +
    +
  34. +
  35. Start systemd-resolved.

    +
    sudo systemctl start systemd-resolved
    +
    +
    +
    +

    Note

    +

    systemd-resolved dynamically updates the list of DNS servers for the +private network if you use the dnsmasq DNS server. The setup creates a +pass-through DNS server that relies on the DNS servers listed in +/etc/resolv.conf.

    +
    +
  36. +
  37. Power on the PXE client and watch the client boot and install Clear Linux OS.

    +

    After booting, Clear Linux OS automatically partitions the hard drive, +installs itself, updates to the latest version, and reboots.

    +
  38. +
+

Congratulations! You have successfully installed and configured a PXE +server that enables PXE clients to boot and install Clear Linux OS over the network.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/network/network-bonding.html b/guides/network/network-bonding.html new file mode 100644 index 00000000..e95bbf98 --- /dev/null +++ b/guides/network/network-bonding.html @@ -0,0 +1,1092 @@ + + + + + + + + + + + Combine multiple interfaces with network bonding — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Combine multiple interfaces with network bonding

+

This guide describes how to configure systemd to use the bonding +driver.

+

Network bonding combines multiple network interfaces into a single logical +interface to provide redundancy and bandwidth aggregation.

+

Clear Linux* OS includes the Linux Bonding driver and Team driver .

+

The example demonstrates how to:

+
    +
  • Bond all four ports of a quad-port NIC in 802.3ad mode.
  • +
  • Enable jumbo frames to optimize large data transfers on the local network.
  • +
+

Your NICs and network switch must support 802.3ad mode and jumbo frames. The +example explains how to configure your NICs for both features. Your switch may +require additional configuration. See your switch documentation for details.

+
+

Note

+

You must run all commands in this guide as root.

+
+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Create the /etc/systemd/network directory.

    +
    mkdir -p /etc/systemd/network
    +
    +
    +

    The /etc/systemd/network directory contains configuration files and +network settings for the virtual device and its underlying physical +interfaces.

    +
  4. +
  5. Configure systemd to create a virtual network device called bond1. Use a +text editor to create a file named 30-bond1.netdev.

    +
    [NetDev]
    +Name=bond1
    +Kind=bond
    +
    +[Bond]
    +Mode=802.3ad
    +TransmitHashPolicy=layer3+4
    +MIIMonitorSec=1s
    +LACPTransmitRate=fast
    +
    +
    +

    Refer to the systemd.netdev manpage for 30-bond1.netdev file +syntax. This example is based on Example 9 on the manpage. Modify the +example for your configuration.

    +
  6. +
  7. Configure the slave interfaces. Create a text file named +30-bond1-enp1s0.network. Assign the slave interfaces to the virtual +bond1 device and use the syntax shown in systemd.network.

    +
    [Match]
    +Name=enp1s0f*
    +
    +[Network]
    +Bond=bond1
    +
    +[Link]
    +MTUBytes=9000
    +
    +
    +

    The example bonds all four ports of a quad-port NIC as a slave of bond1. +The example uses a wildcard match because the NIC names are in the range +enp1s0f0-enp1s0f3. If your NIC names are not wildcard-compatible, create +a separate .network file for each NIC.

    +

    For best results, do not assign addresses or DHCP support to the individual +NICs.

    +

    The MTUBytes setting enables jumbo frames of up to 9000 bytes. Your +switch may require additional configuration to support this setting.

    +
  8. +
  9. Configure the bonded interface in a file named 30-bond1.network.

    +
    [Match]
    +Name=bond1
    +
    +[Network]
    +BindCarrier=enp1s0f0 enp1s0f1 enp1s0f2 enp1s0f3
    +Address=192.168.1.201/24
    +
    +[Link]
    +MTUBytes=9000
    +
    +
    +

    bond1 is a virtual interface with no physical link status.

    +

    BindCarrier indicates that the bond1 link status is determined by the +status of the listed slave devices.

    +

    Address contains an IP address that you assign to the logical interface. +DHCP bonded interfaces are complex and outside the scope of this example.

    +

    MTUBytes must be set to 9000 on all slave interfaces and on the bonded +interface for successful jumbo frames operation. If MTUBytes is not the +same on all interfaces, then the lowest value is used.

    +
  10. +
  11. Apply the new network configuration with the command:

    +
    systemctl restart systemd-networkd
    +
    +
    +

    The MTUBytes settings do not take effect until you reboot or manually +apply the settings with a utility such as ifconfig.

    +
  12. +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/network/vnc.html b/guides/network/vnc.html new file mode 100644 index 00000000..5420ca31 --- /dev/null +++ b/guides/network/vnc.html @@ -0,0 +1,1756 @@ + + + + + + + + + + + Remote-desktop to a host using VNC — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Remote-desktop to a host using VNC

+

This guide describes how to use VNC to +connect to a remote Clear Linux* OS host.

+

VNC is a client-server GUI-based tool that allows you to connect via +remote-desktop to your Clear Linux OS host.

+ +
+

Install the VNC server and misc. components on your host

+

To configure VNC to work on your Clear Linux OS host, install these bundles:

+
    +
  • desktop-autostart: Installs GDM, sets +it to start automatically on boot, and installs TigerVNC Viewer.
  • +
  • vnc-server: Installs the TigerVNC server.
  • +
+

Follow these steps:

+
    +
  1. Log into your Clear Linux OS host and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Install the Clear Linux OS bundles.

    +
    swupd bundle-add desktop-autostart vnc-server
    +
    +
    +
  4. +
  5. Reboot your Clear Linux OS host.

    +
  6. +
+
+
+

Configure a VNC-server-start method on your host

+

There are three methods you can use to configure and start the VNC server on +your Clear Linux OS host:

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1: VNC-server-start Configuration Methods
AttributeMethod 1: Manually start a VNC sessionMethod 2: Automatically start a VNC session via a systemd service scriptMethod 3: Create multi-user logins with authentication through GDM
DescriptionThis is the traditional method where you SSH into the Clear Linux OS host, manually +start a VNC session to get a display ID, and connect to it by +supplying the display ID.The system administrator sets up a systemd service script for you with +a pre-assigned display ID. You make a VNC connection and supply +your pre-assigned display ID.The system adminstrator configures GDM to accept connection requests. +When you make a VNC connection to the Clear Linux OS host, you see +the GDM login screen and authenticate as if you are local.
Who configures VNC settings?YouSystem adminstratorSystem adminstrator
Who starts VNC session?YouSet to start automatically on boot by system administratorSet to start automatically on boot by system administrator
Who ends VNC sesssion?YouYouSystem administrator can disable VNC service altogether
Requires VNC password to authenticate?YesYesNo. Use Clear Linux OS account username and password through GDM
+

Although all three methods can coexist on the same Clear Linux OS host, we recommend +you pick a method that suits your needs.

+

For simplicity, the rest of this guide refers to these methods as +Method 1, Method 2, and Method 3.

+
+

Method 1: Manually start a VNC session

+

You (and each user) must perform these steps to initialize your VNC settings.

+
    +
  1. Log in.

    +
  2. +
  3. Open a terminal emulator.

    +
  4. +
  5. Start VNC with the vncserver command. Since this is your +first time starting VNC, it adds default configuration files and asks you +to set a VNC password.

    +
    vncserver
    +
    +
    +

    Example output:

    +
    You will require a password to access your desktops.
    +
    +Password:
    +Verify:
    +Would you like to enter a view-only password (y/n)? n
    +xauth:  file /home/vnc-user-a/.Xauthority does not exist
    +
    +New 'clr-linux:2 (vnc-user-a)' desktop is clr-linux:2
    +
    +Creating default startup script /home/vnc-user-a/.vnc/xstartup
    +Creating default config /home/vnc-user-a/.vnc/config
    +Starting applications specified in /home/vnc-user-a/.vnc/xstartup
    +Log file is /home/vnc-user-a/.vnc/clr-linux:2.log
    +
    +
    +

    Upon completion, you can find the default configuration files and the +password file hidden in the .vnc directory in your home directory.

    +

    A VNC session starts and shows a unique display ID, which is the +number following the hostname and the colon “:”. In the above example, the +display ID is 2. In a later step, you will supply the display ID to +your VNC viewer app for connection.

    +
  6. +
  7. Kill the active VNC session for the time being with the +vncserver -kill :[display ID] command. Substitute [display ID] +with your active VNC session display ID. For example:

    +
    vncserver -kill :2
    +
    +
    +
    +

    Note

    +

    If you do not recall the active session display ID, use the +vncserver -list command to find it.

    +
    +
  8. +
  9. Optional configurations:

    +
      +
    • To customize settings such as screen size, security type, etc., +modify the $HOME/.vnc/config file.
    • +
    • To customize the applications to run at startup, modify the +$HOME/.vnc/xstartup file.
    • +
    +
  10. +
+
+
+

Method 2: Automatically start a VNC session via a systemd service script

+

To configure VNC for this method, you must have root privileges. You will +set up a systemd service file for all intended VNC users with their own +preassigned unique display ID.

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Make sure the user accounts already exist. Use the following command to +list all users.

    +
    cut -d: -f1 /etc/passwd
    +
    +
    +
  4. +
  5. Create the path /etc/systemd/system.

    +
    mkdir -p /etc/systemd/system
    +
    +
    +
  6. +
  7. Create a systemd service script file vncserver@:[X].service, +where [X] is the display ID, for each user in /etc/systemd/system +Each user must be assigned a unique display ID. Be sure the correct +username is entered in the User field. The example below shows user +vnc-user-b who is assigned the display ID 5.

    +
    # cat > /etc/systemd/system/vncserver@:5.service << EOF
    +
    +[Unit]
    +Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5"
    +After=syslog.target network.target
    +
    +[Service]
    +Type=simple
    +User=vnc-user-b
    +PAMName=login
    +PIDFile=/home/%u/.vnc/%H%i.pid
    +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    +ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -alwaysshared -fg
    +ExecStop=/usr/bin/vncserver -kill %i
    +
    +[Install]
    +WantedBy=multi-user.target
    +
    +EOF
    +
    +
    +
  8. +
  9. Have each user log into their account and set a VNC password with +the vncpasswd command before proceeding to the next step.

    +
  10. +
  11. Start the VNC service script and set it to start automatically on +boot for each user. Replace the [X] with the display ID.

    +
    systemctl daemon-reload
    +systemctl start vncserver@:[X].service
    +systemctl enable vncserver@:[X].service
    +
    +
    +
  12. +
  13. After starting the services, verify they are running.

    +
    systemctl | grep vnc
    +
    +
    +

    The example below shows 2 VNC sessions that were successfully started for +users vnc-user-b with display ID 5 and vnc-user-c with display ID 6.

    +
    # systemctl | grep vnc
    +
    +vncserver@:5.services   loaded active running  VNC Remote Desktop Service for "vnc-user-b" with display ID "5"
    +vncserver@:6.services   loaded active running  VNC Remote Desktop Service for "vnc-user-c" with display ID "6"
    +system-vncserver.slice  loaded active active system-vncserver.slice
    +
    +
    +
  14. +
+
+
+

Method 3: Multi-user logins with authentication through GDM

+

For this method, VNC is configured as a systemd service that listens on port +5900 and GDM is configured to accept access requests from VNC. When you +make a VNC connection to your Clear Linux OS host, you are presented with the GDM login +screen and you authenticate as if you are local. You must have root privileges +to perform this configuration.

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Create the path /etc/systemd/system.

    +
    mkdir -p /etc/systemd/system
    +
    +
    +
  4. +
  5. Create a systemd socket file xvnc.socket and add the following:

    +
    # cat > /etc/systemd/system/xvnc.socket << EOF
    +
    +[Unit]
    +Description=XVNC Server on port 5900
    +
    +[Socket]
    +ListenStream=5900
    +Accept=yes
    +
    +[Install]
    +WantedBy=sockets.target
    +
    +EOF
    +
    +
    +
  6. +
  7. Create a systemd service file xvnc@.service and add the following:

    +
    # cat > /etc/systemd/system/xvnc@.service << EOF
    +
    +[Unit]
    +Description=Daemon for each XVNC connection
    +
    +[Service]
    +ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 2000x1200 -once -SecurityTypes=None
    +User=nobody
    +StandardInput=socket
    +StandardError=syslog
    +
    +EOF
    +
    +
    +
  8. +
  9. Create the path /etc/gdm.

    +
    mkdir -p /etc/gdm
    +
    +
    +
  10. +
  11. Create a GDM custom.conf file and add the following:

    +
    # cat > /etc/gdm/custom.conf << EOF
    +
    +[xdmcp]
    +Enable=true
    +Port=177
    +
    +EOF
    +
    +
    +
  12. +
  13. Start the VNC socket script and set it to start automatically on boot.

    +
    systemctl daemon-reload
    +systemctl start xvnc.socket
    +systemctl enable xvnc.socket
    +
    +
    +
  14. +
  15. After starting the socket, verify it is running.

    +
    systemctl | grep vnc
    +
    +
    +

    The example below shows the xvnc.socket is running.

    +
    # systemctl | grep vnc
    +
    +xvnc.socket               loaded active listening XVNC Server on port 5900
    +system-xvnc.slice         loaded active active    system-xvnc.slice
    +
    +
    +
  16. +
+

See the vncserver Man page for additional information.

+
+
+
+

Install a VNC viewer app and an SSH client on your client system

+

You need a VNC viewer app on your client system to connect to your Clear Linux OS host. +An SSH client is only needed if you chose to use Method 1 or you plan to +encrypt your VNC traffic, which is discussed later in this guide.

+

Perform the steps below to add these apps to your client system.

+
+

Install a VNC viewer app

+

On Clear Linux OS:

+
swupd bundle-add desktop-autostart
+
+
+

On Ubuntu*, Mint*:

+
apt-get install xtightvncviewer
+
+
+

On Fedora*:

+
dnf install tigervnc
+
+
+

On Windows*:

+ +

On macOS*:

+ +
+
+

Install an SSH client

+
    +
  • On most Linux distros (Clear Linux OS, Ubuntu, Mint, Fedora, etc.) and macOS, +SSH is built-in so you don’t need to install it.
  • +
  • On Windows, you can install Putty.
  • +
+
+
+
+

Establish a VNC connection to your host

+

Depending on the VNC-server-configuration method chosen, use the appropriate VNC +connection:

+
    +
  • If you chose Method 1, you must take a few extra steps by using SSH to connect +to your Clear Linux OS host and then manually launching VNC.
  • +
  • If you chose Method 2, get your preassigned VNC display ID from your system +administrator first and then proceed to the Connect to your VNC session +section below.
  • +
  • If you chose Method 3, proceed to the Connect to your VNC session below.
  • +
+
+

SSH into your host and launch VNC

+
    +
  1. SSH into your Clear Linux OS host

    +
      +
    1. On Linux distros and macOS:

      +
      ssh [username]@[clear-linux-host-ip-address]
      +
      +
      +
    2. +
    3. On Windows:

      +
        +
      1. Launch Putty.

        +
      2. +
      3. Under the Category section, select Session. +See Figure 1.

        +
      4. +
      5. Enter the IP address of your Clear Linux OS host in the +Host Name (or IP address) field.

        +
      6. +
      7. Set the Connection type option to SSH.

        +
      8. +
      9. Click the Open button.

        +
        +Putty - configure SSH session settings +

        Figure 1: Putty - configure SSH session settings

        +
        +
      10. +
      +
    4. +
    +
  2. +
  3. Log in with your Clear Linux OS username and password. Do not use your VNC password.

    +
  4. +
  5. Start a VNC session.

    +
    vncserver
    +
    +
    +

    Example output:

    +
    New 'clr-linux:3 (vnc-user-c)' desktop is clr-linux:3
    +
    +Starting applications specified in /home/vnc-user-c/.vnc/xstartup
    +Log file is /home/vnc-user-c/.vnc/clr-linux:3.log
    +
    +
    +
  6. +
  7. Take note of the generated display ID because you will input it into +the VNC viewer app to establish the connection. The above example shows +the display ID is 3.

    +
    +

    Note

    +

    VNC automatically picks a unique display ID unless you specify one. +To specify a display ID, enter a unique number that is not already +in use after the colon. For example:

    +
    vncserver :8
    +
    +
    +
    +
  8. +
  9. You can now end the SSH connection by logging out. This does +not terminate your active VNC session.

    +
  10. +
+
+
+

Connect to your VNC session

+

For Method 1 and Method 2, you must connect to a specific active session +or display ID using one of two options:

+
    +
  • Use a fully-qualified VNC port number, which consists of the default VNC +server port (5900) plus the display ID
  • +
  • Use the display ID
  • +
+

For example, if the display ID is 3, it can be specified as 5903 or just +as 3. For Method 3, VNC does not expect a display ID. Use 5900. For simplicity, +the instructions below use the fully-qualified VNC port number.

+

On Linux distros:

+
    +
  1. Open a terminal emulator and enter:

    +
    vncviewer [clear-linux-host-ip-address]:[fully-qualified VNC port  number]
    +
    +
    +
  2. +
  3. Enter your credentials.

    +
      +
    • For Method 1 and Method 2, enter your VNC password. No username is +required.

      +
    • +
    • For Method 3, enter your Clear Linux OS account username and password through +GDM.

      +
      +

      Note

      +

      With Method 3, you cannot remotely log into your Clear Linux OS host through +VNC if you are logged in locally and vice versa.

      +
      +
    • +
    +
  4. +
+

On Windows and macOS using RealVNC app:

+
    +
  1. Start the RealVNC viewer app. See Figure 2.

    +
  2. +
  3. Enter the IP address of the Clear Linux OS host and the fully-qualified +VNC port number.

    +

    The following screenshot shows connecting to Clear Linux OS host +192.168.25.54 with a fully-qualified VNC port number 5902.

    +
    +RealVNC Viewer +

    Figure 2: RealVNC Viewer

    +
    +
  4. +
  5. Press the Enter key.

    +
  6. +
  7. Enter your credentials.

    +
      +
    • For Method 1 and Method 2, enter your VNC password. No username is +required.

      +
    • +
    • For Method 3, enter your Clear Linux OS account username and password through +GDM.

      +
      +

      Note

      +

      With Method 3, you cannot remotely log into your Clear Linux OS host through +VNC if you are logged in locally and vice versa.

      +
      +
    • +
    +
  8. +
+
+

Optional: Configure RealVNC Image Quality

+

To increase the RealVNC viewer image quality, manually change the ColorLevel +value. Follow these steps:

+
    +
  1. Right-click a connection node and select Properties…. +See Figure 3.

    +
    +RealVNC Viewer - change connection node properties +

    Figure 3: RealVNC Viewer - change connection node properties

    +
    +
  2. +
  3. Select the Expert tab. See Figure 4.

    +
  4. +
  5. Select the ColorLevel setting and change it to your +preferred setting.

    +
    +RealVNC Viewer - change ColorLevel +

    Figure 4: RealVNC Viewer - change ColorLevel

    +
    +
  6. +
+
+
+
+
+

Terminate a VNC connection to your host

+

For Method 1 and Method 2, once started, a VNC session remains active +on your Clear Linux OS host even if you close your VNC viewer app. If you want to +truly terminate an active VNC session, follow these steps:

+
    +
  1. SSH into your Clear Linux OS host.

    +
  2. +
  3. Open a terminal emulator.

    +
  4. +
  5. Find the active VNC session display ID with the command +vncserver -list.

    +
    vncserver -list
    +
    +
    +
  6. +
  7. Terminate it with the vncserver -kill command followed by a +colon and the display ID.

    +
    vncserver -kill :[display ID]
    +
    +
    +
  8. +
  9. For Method 3, only the system administrator can stop and disable the +VNC service by using these commands:

    +
    systemctl stop xvnc.socket
    +systemctl disable xnvc.socket
    +
    +
    +
  10. +
+
+
+

Encrypt VNC traffic through an SSH tunnel

+

By default, VNC traffic is not encrypted. Figure 6 shows an example warning +from RealVNC Viewer.

+
+RealVNC Viewer - Connection not encrypted warning +

Figure 6: RealVNC Viewer - Connection not encrypted warning

+
+

To add security, VNC traffic can be routed through an SSH tunnel. This is +accomplished by following these steps:

+
    +
  1. Configure the VNC server to only accept connection from localhost by +adding the -localhost option.
  2. +
  3. Set up an SSH tunnel between your client system and your Clear Linux OS host. +Your client system will forward traffic from the localhost (the client) +destined for a specified fully-qualified VNC port number (on the client) +to your Clear Linux OS host with the same port number.
  4. +
  5. The VNC viewer app on your client system will now connect to localhost, +instead of the IP address of your Clear Linux OS host.
  6. +
+
+

Configure VNC to only accept connection from localhost

+

For Method 1:

+
    +
  1. Edit the config file located in $HOME/.vnc and uncomment +the # localhost line. It should look like this:

    +
    ## Supported server options to pass to vncserver upon invocation can be listed
    +## in this file. See the following manpages for more: vncserver(1)
    +Xvnc(1).
    +## Several common ones are shown below. Uncomment and modify to your liking.
    +##
    +# securitytypes=vncauth,tlsvnc
    +# desktop=sandbox
    +# geometry=2000x1200
    +localhost
    +# alwaysshared
    +
    +
    +
  2. +
  3. If an active session exists, kill it, and then restart it.

    +
  4. +
+

For Method 2:

+
    +
  1. Edit the systemd service script vncserver@:[X].service located in +/etc/systemd/system and add -localhost to the ExecStart +line. The example below uses vncserver@:5.service:

    +
    [Unit]
    +Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5"
    +After=syslog.target network.target
    +
    +[Service]
    +Type=simple
    +User=vnc-user-b
    +PAMName=login
    +PIDFile=/home/%u/.vnc/%H%i.pid
    +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    +ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -localhost -alwaysshared -fg
    +ExecStop=/usr/bin/vncserver -kill %i
    +
    +[Install]
    +WantedBy=multi-user.target
    +
    +
    +
  2. +
  3. Restart the service script:

    +
    systemctl daemon-load
    +systemctl restart vncserver@:5.service
    +
    +
    +
  4. +
+

For Method 3:

+
    +
  1. No change is needed to the xvnc@service script.

    +

    After you have restarted your VNC session, you can verify that it only +accepts connections from localhost by using the netstat +command like this:

    +
    netstat -plant
    +
    +
    +
    +

    Note

    +

    Add the Clear Linux OS network-basic bundle to get the netstat +command.

    +
    +
  2. +
+

Figure 7 shows two VNC sessions (5901 and 5905) accepting connections from +any host as specified by the 0.0.0.0’s. This is before the +-localhost option was used.

+
+VNC session accepting connection from any host +

Figure 7: VNC sessions (5901 and 5905) accepting connections from any host

+
+

Figure 8 shows two VNC sessions (5901 and 5905) only accepting connections from +localhost as specified by 127.0.0.1’s. This is after the +-localhost option was used.

+
+VNC session only accepting connection from localhost +

Figure 8: VNC sessions (5901 and 5905) only accepting connections from localhost

+
+
+
+

Set up an SSH tunnel from your client system to your Clear Linux OS host

+

On Linux distros and macOS:

+
    +
  1. Open terminal emulator and enter:

    +
    ssh -L [client port number]:localhost:[fully-qualified VNC port number] \
    +-N -f -l [username] [clear-linux-host-ip-address]
    +
    +
    +
  2. +
  3. Enter your Clear Linux OS account password (not your VNC password).

    +
    +

    Note

    +
      +
    • -L specifies that [client port number] on the localhost (on the +client side) is forwarded to [fully-qualified VNC port number] +(on the server side).
    • +
    • Replace [client port number] with an available client port number +(for example: 1234). For simplicity, you can make the +[client port number] the same as the [fully-qualified VNC port number].
    • +
    • Replace [fully-qualified VNC port number] with 5900 (default VNC +port) plus the display ID. For example, if the display ID is 2, +the fully-qualified VNC port number is is 5902.
    • +
    • -N tells SSH to only forward ports and not execute a remote +command.
    • +
    • -f tells SSH to go into the background before command execution.
    • +
    • -l specifies the username to log in as.
    • +
    +
    +
  4. +
+

On Windows:

+
    +
  1. Launch Putty.

    +
  2. +
  3. Specify the Clear Linux OS VNC host to connect to.

    +
      +
    1. Under the Category section, select Session. +See Figure 1.
    2. +
    3. Enter the IP address of your Clear Linux OS host in the +Host Name (or IP address) field.
    4. +
    5. Set the Connection type option to SSH.
    6. +
    +
  4. +
  5. Configure the SSH tunnel. See Figure 9 for an example.

    +
      +
    1. Under the Category section, go to +Connection > SSH > Tunnels.

      +
    2. +
    3. In the Source port field, enter an available client +port number (for example: 1234). For simplicity, you can make the +Source port the same as the fully-qualified VNC port number.

      +
    4. +
    5. In the Destination field, enter +localhost: plus the fully-qualified VNC port number.

      +
    6. +
    7. Click the Add button.

      +
      +Putty - configure SSH tunnel +

      Figure 9: Putty - configure SSH tunnel

      +
      +
    8. +
    +
  6. +
  7. Click the Open button.

    +
  8. +
  9. Enter your Clear Linux OS account password (not your VNC password).

    +
  10. +
+
+
+

Connect to a VNC session through an SSH tunnel

+

After you have set up an SSH tunnel, follow these instructions to connect to +your VNC session.

+

On Linux distros:

+
    +
  1. Open terminal emulator and enter:

    +
    vncviewer localhost:[client port number]
    +
    +
    +
  2. +
+

On Windows and macOS using `RealVNC`:

+
    +
  1. Start the RealVNC viewer app.

    +
  2. +
  3. Enter localhost and the fully-qualified VNC port number. See Figure 10 +for an example.

    +
    +RealVNC viewer app connecting to localhost:1234 +

    Figure 10: RealVNC viewer app connecting to localhost:1234

    +
    +
    +

    Note

    +

    RealVNC will still warn that the connection is not encrypted even +though its traffic is going through the SSH tunnel. You can ignore +this warning.

    +
    +
    +
    +
  4. +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/stacks/dars.html b/guides/stacks/dars.html new file mode 100644 index 00000000..72a10f94 --- /dev/null +++ b/guides/stacks/dars.html @@ -0,0 +1,1096 @@ + + + + + + + + + + + Data Analytics Reference Stack — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Data Analytics Reference Stack

+

This guide explains how to use the DARS, +and to optionally build your own DARS container image.

+

Any system that supports Docker* containers can be used with DARS. This steps +in this guide use Clear Linux* OS as the host system.

+ +
+

The Data Analytics Reference Stack release

+

The Data Analytics Reference Stack (DARS) provides developers and enterprises a straightforward, highly optimized software stack for storing and processing large +amounts of data. More detail is available on the +DARS architecture and performance benchmarks.

+

The Data Analytics Reference Stack provides two pre-built Docker images, +available on Docker Hub:

+ +

We recommend you view the latest component versions for each image in the +README found in the Data Analytics Reference Stack GitHub* +repository. Because Clear Linux OS is a rolling distribution, the package version numbers +in the Clear Linux OS-based containers may not be the latest released by Clear Linux OS.

+
+

Note

+

The Data Analytics Reference Stack is a collective work, and each piece +of software within the work has its own license. Please see the +DARS Terms of Use for more details about licensing and usage of the Data +Analytics Reference Stack.

+
+
+
+

Using the Docker images

+
    +
  1. To immediately start using the latest stable DARS images, pull an image +directly from Docker Hub. This example uses the +DARS with Intel® MKL Docker image.

    +
  2. +
  3. Once you have downloaded the image, you can run it with

    +
    docker run -it --ulimit nofile=1000000:1000000 --name mkl <name of image>
    +
    +
    +

    This will launch the image and drop you into a bash shell inside the +container. You will see output similar to the following:

    +
    root@fd5155b89857 /root # spark-shell
    +spark-shell
    +Config directory: /usr/share/defaults/spark/
    +Welcome to
    +  ____              __
    + / __/__  ___ _____/ /__
    + _\ \/ _ \/ _ `/ __/  '_/
    +/___/ .__/\_,_/_/ /_/\_\   version 2.4.0
    +   /_/
    +
    +Using Scala version 2.12.7 (OpenJDK 64-Bit Server VM, Java 1.8.0-internal)
    +Type in expressions to have them evaluated.
    +Type :help for more information.
    +
    +scala>
    +
    +
    +

    The --ulimit nofile parameter is currently required in order to +increase the number of open files opened at certain point by the spark +engine.

    +
  4. +
+
+
+

Building DARS images

+

If you choose to build your own DARS container images, you can customize +them as needed. Use the provided Dockerfile as a baseline.

+

To construct images with Clear Linux OS, start with a Clear Linux OS development platform that +has the containers-basic-dev bundle installed. Learn more about +bundles and installing them by using swupd.

+
    +
  1. Clone the Data Analytics Reference Stack GitHub* repository.

    +
    git clone https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars -b master
    +
    +
    +
  2. +
  3. Inside the DARS directory, run make to build OpenBLAS and MKL images.

    +
    make
    +
    +
    +

    Run make baseline to build the baseline CentOS image. Depending on +the system, it may take a while to finish building.

    +
    make baseline
    +
    +
    +
  4. +
  5. Once completed, check the resulting images with Docker

    +
    docker images | grep dars
    +
    +
    +
  6. +
  7. You can use any of the resulting images to launch fully functional containers. +If you need to customize the containers, you can edit the provided Dockerfile.

    +
  8. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/stacks/dlrs/dlrs.html b/guides/stacks/dlrs/dlrs.html new file mode 100644 index 00000000..5190e166 --- /dev/null +++ b/guides/stacks/dlrs/dlrs.html @@ -0,0 +1,1465 @@ + + + + + + + + + + + Deep Learning Reference Stack — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Deep Learning Reference Stack

+

This guide describes how to run benchmarking workloads for TensorFlow*, +PyTorch*, and Kubeflow in Clear Linux* OS using the Deep Learning Reference Stack.

+ +
+

Overview

+

We created the Deep Learning Reference Stack to help AI developers deliver +the best experience on Intel® Architecture. This stack reduces complexity +common with deep learning software components, provides flexibility for +customized solutions, and enables you to quickly prototype and deploy Deep +Learning workloads. Use this guide to run benchmarking workloads on your +solution.

+

The Deep Learning Reference Stack is available in the following versions:

+
    +
  • Intel MKL-DNN-VNNI, which is optimized using Intel® Math Kernel Library +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.
  • +
  • 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.
  • +
+
+

Important

+

To take advantage of the Intel® AVX-512 and VNNI functionality with the Deep +Learning Reference Stack, you must use the following hardware:

+
    +
  • Intel® AVX-512 images require an Intel® Xeon® Scalable Platform
  • +
  • VNNI requires a 2nd generation Intel® Xeon® Scalable Platform
  • +
+
+
+

Stack features

+ +
+

Note

+

The Deep Learning Reference Stack is a collective work, and each piece of +software within the work has its own license. Please see the DLRS Terms of Use +for more details about licensing and usage of the Deep Learning Reference Stack.

+
+
+
+

Prerequisites

+
    +
  • Install Clear Linux OS on your host system
  • +
  • containers-basic bundle
  • +
  • cloud-native-basic bundle
  • +
+

In Clear Linux OS, containers-basic includes Docker*, which is required for +TensorFlow and PyTorch benchmarking. Use the swupd utility to +check if containers-basic and cloud-native-basic are +present:

+
sudo swupd bundle-list
+
+
+

To install the containers-basic or cloud-native-basic +bundles, enter:

+
sudo swupd bundle-add containers-basic cloud-native-basic
+
+
+

Docker is not started upon installation of the containers-basic +bundle. To start Docker, enter:

+
sudo systemctl start docker
+
+
+

To ensure that Kubernetes is correctly installed and configured, follow the +instructions in Run Kubernetes*.

+
+
+

Version compatibility

+

We validated these steps against the following software package versions:

+
    +
  • Clear Linux OS 26240 (Minimum supported version)
  • +
  • Docker 18.06.1
  • +
  • Kubernetes 1.11.3
  • +
  • Go 1.11.12
  • +
+
+

Note

+

The Deep Learning Reference Stack was developed to provide the best user +experience when executed on a Clear Linux OS host. However, as the stack runs in a +container environment, you should be able to complete the following sections of this guide on other Linux* distributions, provided they comply with the Docker*, Kubernetes* and Go* package versions listed above. Look for your distribution documentation on how to update packages and manage Docker services.

+
+
+
+
+

TensorFlow single and multi-node benchmarks

+

This section describes running the TensorFlow Benchmarks in single node. +For multi-node testing, replicate these steps for each node. These steps +provide a template to run other benchmarks, provided that they can invoke +TensorFlow.

+
+

Note

+

Performance test results for the Deep Learning Reference Stack and for this +guide were obtained using runc as the runtime.

+
+
    +
  1. Download either the Eigen or the Intel MKL-DNN Docker image +from Docker Hub.

    +
  2. +
  3. Run the image with Docker:

    +
    docker run --name <image name>  --rm -i -t <clearlinux/
    +stacks-dlrs-TYPE> bash
    +
    +
    +
    +

    Note

    +

    Launching the Docker image with the -i argument starts +interactive mode within the container. Enter the following commands in +the running container.

    +
    +
  4. +
  5. Clone the benchmark repository in the container:

    +
    git clone http://github.com/tensorflow/benchmarks -b cnn_tf_v1.12_compatible
    +
    +
    +
  6. +
  7. Execute the benchmark script:

    +
    python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --device=cpu --model=resnet50 --data_format=NHWC
    +
    +
    +
  8. +
+
+

Note

+

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.

+
+
+
+

PyTorch single and multi-node benchmarks

+

This section describes running the PyTorch benchmarks for Caffe2 in +single node.

+
    +
  1. Download either the PyTorch with OpenBLAS or the PyTorch with Intel +MKL-DNN Docker image from Docker Hub.

    +
  2. +
  3. Run the image with Docker:

    +
    docker run --name <image name>  --rm -i -t <clearlinux/stacks-dlrs-TYPE> bash
    +
    +
    +
    +

    Note

    +

    Launching the Docker image with the -i argument starts +interactive mode within the container. Enter the following commands in +the running container.

    +
    +
  4. +
  5. Clone the benchmark repository:

    +
    git clone https://github.com/pytorch/pytorch.git
    +
    +
    +
  6. +
  7. Execute the benchmark script:

    +
    cd pytorch/caffe2/python
    +python convnet_benchmarks.py --batch_size 32 \
    +                      --cpu \
    +                      --model AlexNet
    +
    +
    +
  8. +
+
+
+

Kubeflow multi-node benchmarks

+

The benchmark workload runs in a Kubernetes cluster. The guide 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 guide.

+
+
+

Kubernetes setup

+

Follow the instructions in the Run Kubernetes* tutorial to get set up on +Clear Linux OS. The Kubernetes community also has instructions for creating a cluster, +described in Creating a single control-plane cluster with kubeadm.

+
+
+

Kubernetes networking

+

We used flannel as the network provider for these tests. If you +prefer a different network layer, refer to the Kubernetes network documentation +described in Creating a single control-plane cluster with kubeadm for setup.

+
+
+

Kubectl

+

You can use kubectl to run commands against your Kubernetes cluster. Refer to +the Overview of kubectl 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.

+
    +
  1. Copy this example.yaml script to your system:

    +
    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" ]
    +
    +
    +
  2. +
  3. Execute the script with kubectl:

    +
    kubectl apply –f <path-to-yaml-file>/example.yaml
    +
    +
    +
  4. +
+

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

+

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. Note that this guide uses Kubeflow v0.4.0, and cannot guarantee results if you use a different version.

+

From the Docker image, run the following:

+
mkdir -p /opt
+git clone https://github.com/tensorflow/benchmarks.git /opt/tf-benchmarks
+cp launcher.py /opt
+chmod u+x /opt/*
+
+
+

Your entry point becomes: /opt/launcher.py.

+

This builds an image that can be consumed directly by TFJob from Kubeflow.

+
+
+

ksonnet*

+

Kubeflow uses ksonnet* to manage deployments, so you must install it +before setting up Kubeflow.

+

ksonnet was added to the cloud-native-basic bundle in Clear Linux OS version +27550. If you are using an older Clear Linux OS version (not recommended), you must +manually install ksonnet as described below.

+

On Clear Linux OS, follow these steps:

+
swupd bundle-add go-basic-dev
+export GOPATH=$HOME/go
+export PATH=$PATH:$GOPATH/bin
+go get github.com/ksonnet/ksonnet
+cd $GOPATH/src/github.com/ksonnet/ksonnet
+make install
+
+
+

After the ksonnet installation is complete, ensure that binary ks is +accessible across the environment.

+
+
+

Kubeflow

+

Once you have Kubernetes running on your nodes, set up Kubeflow by +following these instructions from the Getting Started with Kubeflow guide.

+
export KUBEFLOW_SRC=$HOME/kflow
+export KUBEFLOW_TAG="v0.4.1"
+export KFAPP="kflow_app"
+export K8S_NAMESPACE="kubeflow"
+
+mkdir ${KUBEFLOW_SRC}
+cd ${KUBEFLOW_SRC}
+ks init ${KFAPP}
+cd ${KFAPP}
+ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${KUBEFLOW_TAG}/kubeflow
+ks pkg install kubeflow/common
+ks pkg install kubeflow/tf-training
+
+
+

Next, deploy the primary package for our purposes: tf-job-operator.

+
ks env rm default
+kubectl create namespace ${K8S_NAMESPACE}
+ks env add default --namespace "${K8S_NAMESPACE}"
+ks generate tf-job-operator tf-job-operator
+ks apply default -c tf-job-operator
+
+
+

This creates the CustomResourceDefinition (CRD) endpoint to launch a TFJob.

+
+
+

Run a TFJob

+
    +
  1. Get the ksonnet registries for deploying TFJobs from dlrs-tfjob.

    +
  2. +
  3. Install the TFJob components as follows:

    +
    ks registry add dlrs-tfjob github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob
    +
    +ks pkg install dlrs-tfjob/dlrs-bench
    +
    +
    +
  4. +
  5. Export the image name to use for the deployment:

    +
    export DLRS_IMAGE=<docker_name>
    +
    +
    +
    +

    Note

    +

    Replace <docker_name> with the image name you specified in previous steps.

    +
    +
  6. +
  7. Generate Kubernetes manifests for the workloads and apply them using these +commands:

    +
    ks generate dlrs-resnet50 dlrsresnet50 --name=dlrsresnet50 --image=${DLRS_IMAGE}
    +ks generate dlrs-alexnet dlrsalexnet --name=dlrsalexnet --image=${DLRS_IMAGE}
    +ks apply default -c dlrsresnet50
    +ks apply default -c dlrsalexnet
    +
    +
    +
  8. +
+

This replicates and deploys three test setups in your Kubernetes cluster.

+
+
+

Results of running this guide

+

You must parse the logs of the Kubernetes pod to retrieve performance +data. The pods will still exist post-completion and will be in +‘Completed’ state. You can get the logs from any of the pods to inspect the +benchmark results. More information about Kubernetes logging is available +in the Kubernetes Logging Architecture documentation.

+
+
+
+

Use Jupyter Notebook

+

This example uses the PyTorch with OpenBLAS container image. After it is +downloaded, run the Docker image with -p to specify the shared port +between the container and the host. This example uses port 8888.

+
docker run --name pytorchtest --rm -i -t -p 8888:8888 clearlinux/stacks-pytorch-oss bash
+
+
+

After you start the container, launch the Jupyter Notebook. This +command is executed inside the container image.

+
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
+
+
+

After the notebook has loaded, you will see output similar to the following:

+
To access the notebook, open this file in a browser: file:///.local/share/jupyter/runtime/nbserver-16-open.html
+Or copy and paste one of these URLs:
+http://(846e526765e3 or 127.0.0.1):8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09
+
+
+

From your host system, or any system that can access the host’s IP address, +start a web browser with the following. If you are not running the browser on +the host system, replace 127.0.0.1 with the IP address of the host.

+
http://127.0.0.1:8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09
+
+
+

Your browser displays the following:

+
+Jupyter Notebook +
+

Figure 1: Jupyter Notebook

+

To create a new notebook, click New and select Python 3.

+
+Create a new notebook +
+

Figure 2: Create a new notebook

+

A new, blank notebook is displayed, with a cell ready for input.

+
+New blank notebook +
+

To verify that PyTorch is working, copy the following snippet into the blank +cell, and run the cell.

+
from __future__ import print_function
+import torch
+x = torch.rand(5, 3)
+print(x)
+
+
+
+Sample code snippet +
+

When you run the cell, your output will look something like this:

+
+code output +
+

You can continue working in this notebook, or you can download existing +notebooks to take advantage of the Deep Learning Reference Stack’s optimized +deep learning frameworks. Refer to Jupyter Notebook for details.

+
+
+

Uninstallation

+

To uninstall the Deep Learning Reference Stack, you can choose to stop the +container so that it is not using system resources, or you can stop the +container and delete it to free storage space.

+

To stop the container, execute the following from your host system:

+
    +
  1. Find the container’s ID

    +
    docker container ls
    +
    +
    +

    This will result in output similar to the following:

    +
    CONTAINER ID        IMAGE                        COMMAND               CREATED             STATUS              PORTS               NAMES
    +e131dc71d339        clearlinux/stacks-dlrs-oss   "/bin/sh -c 'bash'"   23 seconds ago      Up 21 seconds                           oss
    +
    +
    +
  2. +
  3. You can then use the ID or container name to stop the container. This example +uses the name “oss”:

    +
    docker container stop oss
    +
    +
    +
  4. +
  5. Verify that the container is not running

    +
    docker container ls
    +
    +
    +
  6. +
  7. To delete the container from your system you need to know the Image ID:

    +
    docker images
    +
    +
    +

    This command results in output similar to the following:

    +
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    +clearlinux/stacks-dlrs-oss   latest              82757ec1648a        4 weeks ago         3.43GB
    +clearlinux/stacks-dlrs-mkl   latest              61c178102228        4 weeks ago         2.76GB
    +
    +
    +
  8. +
  9. To remove an image use the image ID:

    +
    docker rmi 82757ec1648a
    +
    +
    +
    # docker rmi 827
    +Untagged: clearlinux/stacks-dlrs-oss:latest
    +Untagged: clearlinux/stacks-dlrs-oss@sha256:381f4b604537b2cb7fb5b583a8a847a50c4ed776f8e677e2354932eb82f18898
    +Deleted: sha256:82757ec1648a906c504e50e43df74ad5fc333deee043dbfe6559c86908fac15e
    +Deleted: sha256:e47ecc039d48409b1c62e5ba874921d7f640243a4c3115bb41b3e1009ecb48e4
    +Deleted: sha256:50c212235d3c33a3c035e586ff14359d03895c7bc701bb5dfd62dbe0e91fb486
    +
    +
    +

    Note that you can execute the docker rmi command using only the first few characters of the image ID, provided they are unique on the system.

    +
  10. +
  11. Once you have removed the image, you can verify it has been deleted with:

    +
    docker images
    +
    +
    +
  12. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/stacks/greengrass.html b/guides/stacks/greengrass.html new file mode 100644 index 00000000..02002b6d --- /dev/null +++ b/guides/stacks/greengrass.html @@ -0,0 +1,1389 @@ + + + + + + + + + + + Enable AWS Greengrass* and OpenVINO™ toolkit — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Enable AWS Greengrass* and OpenVINO™ toolkit

+

This guide explains how to enable AWS Greengrass* and OpenVINO™ toolkit. +Specifically, the guide demonstrates how to:

+
    +
  • Set up the Intel® edge device with Clear Linux* OS
  • +
  • Install the OpenVINO™ toolkit and Amazon Web Services* (AWS*) +Greengrass* software stacks
  • +
  • Use AWS Greengrass* and AWS Lambda* to deploy the FaaS samples from +the cloud
  • +
+ +
+

Overview

+

Hardware accelerated Function-as-a-Service (FaaS) enables cloud developers to +deploy inference functionalities [1] on Intel® IoT edge devices with +accelerators (CPU, Integrated GPU, Intel® FPGA, and Intel® Movidius™ +technology). These functions provide a great developer experience and +seamless migration of visual analytics from cloud to edge in a secure manner +using a containerized environment. Hardware-accelerated FaaS provides the +best-in-class performance by accessing optimized deep learning libraries on +Intel® IoT edge devices with accelerators.

+
+
+

Supported platforms

+
    +
  • Operating System: Clear Linux OS latest release
  • +
  • Hardware: Intel® core platforms (that support inference on CPU only)
  • +
+
+

Sample description

+

The AWS Greengrass samples are located at Edge-Analytics-FaaS. This +guide uses the 1.0 version of the source code.

+

Clear Linux OS provides the following AWS Greengrass samples:

+
    +
  • greengrass_classification_sample.py

    +

    This AWS Greengrass sample classifies a video stream using classification +networks such as AlexNet and GoogLeNet and publishes top-10 results on AWS* +IoT Cloud every second.

    +
  • +
  • greengrass_object_detection_sample_ssd.py

    +

    This AWS Greengrass sample detects objects in a video stream and +classifies them using single-shot multi-box detection (SSD) networks such +as SSD Squeezenet, SSD Mobilenet, and SSD300. This sample publishes +detection outputs such as class label, class confidence, and bounding box +coordinates on AWS IoT Cloud every second.

    +
  • +
+
+
+
+

Install the OS on the edge device

+

Start with a clean installation of Clear Linux OS on a new system, using the +Install Clear Linux* OS from the live desktop, found in Get started.

+
+

Create user accounts

+

After Clear Linux OS is installed, create two user accounts. Create an administrative +user in Clear Linux OS and create a user account for the Greengrass services to use ( +see Greengrass user below).

+
    +
  1. Create a new user and set a password for that user. Enter the following +commands as root:

    +
    useradd <userid>
    +passwd <userid>
    +
    +
    +
  2. +
  3. Next, enable the sudo command for your new <userid>. Add +<userid> to the wheel group:

    +
    usermod -G wheel -a <userid>
    +
    +
    +
  4. +
  5. Create a /etc/fstab file.

    +
    touch /etc/fstab
    +
    +
    +
    +

    Note

    +

    By default, Clear Linux OS does not create an /etc/fstab file. +You must create this file before the Greengrass service runs.

    +
    +
  6. +
+
+
+

Add required bundles

+

Use the swupd software updater utility to add the prerequisite bundles +for the OpenVINO software stack:

+
swupd bundle-add os-clr-on-clr desktop-autostart computer-vision-basic
+
+
+
+

Note

+

Learn more about how to swupd.

+
+

The computer-vision-basic bundle installs the OpenVINO™ toolkit, +and the sample models optimized for Intel® edge platforms.

+
+
+

Convert deep learning models

+
+

Locate sample models

+

There are two types of provided models that can be used in conjunction with +AWS Greengrass for this guide: classification or object detection.

+

To complete this guide using an image classification model, +download the BVLC AlexNet model files bvlc_alexnet.caffemodel and +deploy.prototxt to the default model_location at +/usr/share/openvino/models. Any custom pre-trained classification models +can be used with the classification sample.

+

For object detection, the sample models optimized for Intel® edge platforms +are included with the computer-vision-basic bundle installation at +/usr/share/openvino/models. These models are provided as an example; +you may also use a custom SSD model with the Greengrass object detection sample.

+
+
+

Run model optimizer

+

Follow the instructions in the Model Optimizer Developer Guide for converting +deep learning models to Intermediate Representation using Model Optimizer. To +optimize either of the sample models described above, run one of the following commands.

+

For classification using BVLC AlexNet model:

+
python3 mo.py --framework caffe --input_model
+<model_location>/bvlc_alexnet.caffemodel --input_proto
+<model_location>/deploy.prototxt --data_type <data_type> --output_dir
+<output_dir> --input_shape [1,3,227,227]
+
+
+

For object detection using SqueezeNetSSD-5Class model:

+
python3 mo.py --framework caffe --input_model
+<model_location>/'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.caffemodel
+--input_proto <model_location>/'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.prototxt
+--data_type <data_type> --output_dir <output_dir>
+
+
+

In these examples:

+
    +
  • <model_location> is /usr/share/openvino/models.
  • +
  • <data_type> is FP32 or FP16, depending on target device.
  • +
  • <output_dir> is the directory where the Intermediate Representation +(IR) is stored. IR contains .xml format corresponding to the network +structure and .bin format corresponding to weights. This .xml file should be +passed to <PARAM_MODEL_XML>.
  • +
  • In the BVLC AlexNet model, the prototxt defines the input shape with +batch size 10 by default. In order to use any other batch size, the +entire input shape must be provided as an argument to the model +optimizer. For example, to use batch size 1, you must provide: +–input_shape [1,3,227,227]
  • +
+
+
+
+
+

Configure AWS Greengrass group

+

For each Intel® edge platform, you must create a new AWS Greengrass group +and install AWS Greengrass core software to establish the connection between +cloud and edge.

+
    +
  1. To create an AWS Greengrass group, follow the instructions in +Configure AWS IoT Greengrass on AWS IoT.

    +
  2. +
  3. To install and configure AWS Greengrass core on edge platform, follow +the instructions in Start AWS Greengrass on the Core Device. In +step 8(b), download the x86_64 Ubuntu* configuration of the AWS Greengrass +core software.

    +
    +

    Note

    +

    You do not need to run the cgroupfs-mount.sh script in step #6 +of Module 1 of the AWS Greengrass Developer Guide because this is +enabled already in Clear Linux OS.

    +
    +
  4. +
  5. Be sure to download both the security resources and the AWS Greengrass +core software.

    +
    +

    Note

    +

    Security certificates are linked to your AWS account.

    +
    +
  6. +
+
+
+

Create and package Lambda function

+
    +
  1. Complete steps 1-4 of the AWS Greengrass guide at +Create and Package a Lambda Function.

    +
    +

    Note

    +

    This creates the tarball needed to create the AWS Greengrass +environment on the edge device.

    +
    +
  2. +
  3. In step 5, replace greengrassHelloWorld.py with the classification or +object detection Greengrass sample from Edge-Analytics-Faas:

    + +
  4. +
  5. Zip the selected Greengrass sample with the extracted Greengrass SDK folders +from the previous step into greengrass_sample_python_lambda.zip.

    +

    The zip should contain:

    +
      +
    • greengrasssdk
    • +
    • greengrass classification or object detection sample
    • +
    +

    For example:

    +
    zip -r greengrass_lambda.zip greengrasssdk
    +greengrass_object_detection_sample_ssd.py
    +
    +
    +
  6. +
  7. Return to the AWS documentation section called +Create and Package a Lambda Function and complete the procedure.

    +
    +

    Note

    +

    In step 9(a) of the AWS documentation, while uploading the zip file, +make sure to name the handler to one of the following, depending on the +AWS Greengrass sample you are using:

    +
      +
    • greengrass_object_detection_sample_ssd.function_handler
    • +
    • greengrass_classification_sample.function_handler
    • +
    +
    +
  8. +
+
+
+

Configure Lambda function

+

After creating the Greengrass group and the Lambda function, start +configuring the Lambda function for AWS Greengrass.

+
    +
  1. Follow steps 1-8 in Configure the Lambda Function for AWS IoT Greengrass +in the AWS documentation.

    +
  2. +
  3. In addition to the details mentioned in step 8, change the Memory limit +to 2048 MB to accommodate large input video streams.

    +
  4. +
  5. Add the following environment variables as key-value pairs when editing +the Lambda configuration and click on update:

    + + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 1. Environment variables: Lambda configuration
    KeyValue
    PARAM_MODEL_XML<MODEL_DIR>/<IR.xml>, where <MODEL_DIR> is user specified and +contains IR.xml, the Intermediate Representation file from Intel® Model Optimizer. +For this guide, <MODEL_DIR> should be set to ‘/usr/share/openvino/models’ +or one of its subdirectories.
    PARAM_INPUT_SOURCE
    +
    <DATA_DIR>/input.webm to be specified by user. Holds both input and
    +
    output data. For webcam, set PARAM_INPUT_SOURCE to ‘/dev/video0’
    +
    +
    PARAM_DEVICE“CPU”
    PARAM_CPU_EXTENSION_PATH/usr/lib64/libcpu_extension.so
    PARAM_OUTPUT_DIRECTORY<DATA_DIR> to be specified by user. Holds both input and output +data
    PARAM_NUM_TOP_RESULTSUser specified for classification sample. +(e.g. 1 for top-1 result, 5 for top-5 results)
    +
  6. +
  7. Add subscription to subscribe, or publish messages from AWS Greengrass +Lambda function by completing the procedure in Configure the Lambda Function for AWS IoT Greengrass.

    +
    +

    Note

    +

    The optional topic filter field is the topic mentioned inside the Lambda function. In this guide, sample topics include the following: +openvino/ssd or openvino/classification

    +
    +
  8. +
+
+

Add local resources

+

Refer to the AWS documentation Access Local Resources with Lambda Functions and Connectors +for details about local resources and access privileges.

+

The following table describes the local resources needed for the CPU:

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Local resources
NameResource typeLocal pathAccess
ModelDirVolume<MODEL_DIR> to be specified by userRead-Only
WebcamDevice/dev/video0Read-Only
DataDirVolume<DATA_DIR> to be specified by user. Holds both input and output +data.Read and Write
+
+
+
+

Deploy Lambda function

+

Refer to the AWS documentation Deploy Cloud Configurations to an AWS IoT Greengrass Core Device for instructions on how to deploy the lambda function to AWS +Greengrass core device. Select Deployments on the group page and follow the instructions.

+
+

Output consumption

+

There are four options available for output consumption. These options are +used to report, stream, upload, or store inference output at an interval +defined by the variable reporting_interval in the AWS Greengrass samples.

+
    +
  1. IoT cloud output:

    +

    This option is enabled by default in the AWS Greengrass samples using the +enable_iot_cloud_output variable. You can use it to verify the lambda +running on the edge device. It enables publishing messages to IoT cloud +using the subscription topic specified in the lambda. (For example, topics +may include openvino/classification for classification and openvino/ssd +for object detection samples.) For classification, top-1 result with class +label are published to IoT cloud. For SSD object detection, detection +results such as bounding box coordinates of objects, class label, and +class confidence are published.

    +

    Refer to the AWS documentation +Verify the Lambda Function Is Running on the Device for instructions on +how to view the output on IoT cloud.

    +
  2. +
  3. Kinesis streaming:

    +

    This option enables inference output to be streamed from the edge device +to cloud using Kinesis [3] streams when enable_kinesis_output is set +to True. The edge devices act as data producers and continually push +processed data to the cloud. You must set up and specify +Kinesis stream name, Kinesis shard, and AWS region in the AWS Greengrass +samples.

    +
  4. +
  5. Cloud storage using AWS S3 bucket:

    +

    When the enable_s3_jpeg_output variable is set to True, it enables +uploading and storing processed frames (in jpeg format) in an AWS S3 +bucket. You must set up and specify the S3 bucket name in the AWS +Greengrass samples to store the JPEG images. The images are named using the +timestamp and uploaded to S3.

    +
  6. +
  7. Local storage:

    +

    When the enable_s3_jpeg_output variable is set to True, it enables +storing processed frames (in jpeg format) on the edge device. The images +are named using the timestamp and stored in a directory specified by +PARAM_OUTPUT_DIRECTORY.

    +
  8. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/guides/telemetrics/telem-guide.html b/guides/telemetrics/telem-guide.html new file mode 100644 index 00000000..a6aef27f --- /dev/null +++ b/guides/telemetrics/telem-guide.html @@ -0,0 +1,1780 @@ + + + + + + + + + + + Telemetrics — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Telemetrics

+

This guide describes the Clear Linux* OS telemetry solution.

+
+

Important

+

Telemetry in Clear Linux OS is opt-in. The telemetry client is not active +and sends no data until you explicitly enable it.

+
+
+

Note

+

The telemetry functionality adheres to Intel privacy policies regarding +the collection and use of PII +and is open source.

+

No intentionally identifiable information about the user or system owner is +collected.

+
+ +
+

Overview

+

Telemetrics in Clear Linux OS is a client and server solution used to collect +data from running Clear Linux OS systems to help quickly identify and fix bugs in the +OS. Both client and server are customizable, and an API is available on the +client side for instrumenting your code for debug and analysis.

+

Telemetry, one of the key features of Clear Linux OS, enables developers to observe and +proactively address issues in the OS before end users are impacted.

+

Telemetrics is a combination word made from:

+
    +
  • Telemetry, which is sensing and reporting data.
  • +
  • Analytics, which is using visualization and statistical inferencing to make +sense of the reported data.
  • +
+

Clear Linux OS telemetry reports system-level debug/crash information using specialized +probes. The probes monitor system tasks such as swupd, kernel oops, machine +error checks, and the BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to focus quickly on an issue and monitor corrective actions.

+

Clear Linux OS telemetry is fully customizable and can be used during software +development for debugging purposes. You can use the libtelemetry library in +your code to create custom telemetry records. You can also use the +telem-record-gen utility in script files for light-touch record creation +where instrumenting code files doesn’t make sense.

+

The Clear Linux OS telemetrics solution is an opt-in choice on the client side. +By default, the telemetry client is disabled until you choose to enable it. +Enabling the client is covered in this guide.

+
+

Architecture

+

Clear Linux OS telemetry has two fundamental components, which are shown in Figure 1:

+
    +
  • Client: generates and delivers records to the backend server via the network.
  • +
  • Backend: receives records sent from the client and displays the cumulative +content through a specialized web interface.
  • +
+
+Figure 1, Telemetry Architecture +

Figure 1: |CL| Telemetry Architecture

+
+

The telemetry client provides the front end of the telemetrics solution and +includes the following components:

+
    +
  • telemprobd, which is a daemon that receives and prepares telemetry records +from probes and spools them to disk.
  • +
  • telempostd, which is a daemon that manages spooled telemetry records and +delivers these records according to configurable settings.
  • +
  • probes, which collect specific types of data from the operating system.
  • +
  • libtelemetry, which is the API that telemetrics probes use to create records.
  • +
+

The telemetry backend provides the server-side component of the telemetrics +solution and consists of:

+
    +
  • Nginx web server.
  • +
  • Two Flask apps:
      +
    • Collector, which is an ingestion web app for records received from client +probes.
    • +
    • TelemetryUI, which is a web app that exposes different views to visualize +the telemetry data.
    • +
    +
  • +
  • PostgreSQL as the underlying database server.
  • +
+
+

Note

+

The default telemetry backend server is hosted by the Intel Clear Linux OS development +team and is not viewable outside the Intel firewall. To collect your own +records, you must set up your own telemetry backend server.

+
+
+
+
+

How to use

+

From a workflow perspective, the Clear Linux OS telemetrics system is straightforward. +On the client side, the main decisions after installation and enabling +telemetry involve what to do with the record data generated by the probes. +You can send the data to the default or a custom backend server, keep the data +local to the system, or both. The backend server has a more complex setup, but +once it’s running, it is simple to use and configure.

+

This section describes some of the possible scenarios for configuring +the Clear Linux OS telemetrics system, and suggests which ones make sense according to +your needs.

+
+

Scenarios

+
    +
  1. Enable telemetry:

    +

    Before probes can generate records, the telemetry client daemons must be +enabled. You can configure the client before enabling by creating a custom +telemetrics.conf file that you place in the /etc/telemetrics +directory. If you choose to use the default settings, records will be sent +to the telemetrics backend server managed by the Clear Linux OS development team at +Intel.

    +
  2. +
  3. Save record data locally:

    +

    You can configure the telemetry client to save records locally. This is +convenient when you want instant feedback during a development cycle, or to +track system issues if you believe there is a machine specific problem. The +client can be set not to send records at all, or to both keep the records +locally and send to the backend server.

    +
  4. +
  5. Set up a server to collect data:

    +

    Whether you are managing a network of Clear Linux OS systems or you don’t want to +send records to the default telemetry server, you can set up a backend +server to collect your records. The backend server can be installed on any +Linux system and provides the same dashboard as the default server.

    +
  6. +
  7. Instrument your code with the libtelemetry API:

    +

    The telemetrics bundle includes the libtelemetry C library, which +exposes an API used by the telemprobd and telempostd daemons. You can use +these in your applications as well. The API documentation is found in the +telemetry.h file in Telemetrics client repository.

    +
  8. +
+
+
+
+

Examples

+ +
+

Enable or disable telemetry

+
    +
  1. Enabling during installation:

    +

    During the initial installation of Clear Linux OS, you are requested to join the +stability enhancement program and allow Clear Linux OS to collect anonymous reports to +improve system stability. If you choose not to join this program, then the +telemetry software bundle is not added to your system. Choosing to join will +automatically enable telemetry on your system after installation is +complete.

    +
  2. +
  3. Enabling after install:

    +

    To start telemetry on your system, run the following command:

    +
    sudo telemctl start
    +
    +
    +

    This enables and starts the telemprobd and telempostd +daemons. Your system will begin to send telemetry data to the server defined +in the file /etc/telemetrics/telemetrics.conf. If this file does not +exist, the telemprobd and telempostd daemons will use +the file /usr/share/defaults/telemetrics/telemetrics.conf.

    +
  4. +
  5. Disabling after install:

    +

    To disable both of the telemetry daemons, run the following command:

    +
    sudo telemctl stop
    +
    +
    +
  6. +
  7. Opt in to telemetry:

    +

    To opt-in to the telemetry services, simply enter the opt-in command, which +also starts the service:

    +
    sudo telemctl opt-in
    +
    +
    +

    This removes the /etc/telemetrics/opt-out file, if it exists, and +starts the telemetry services.

    +
    +

    Note

    +

    To opt-in but not immediately start telemetry services, you must +run the command sudo telemctl stop after the opt-in +command is entered. Once you are ready to start the service, enter the +command sudo telemctl start.

    +
    +
  8. +
  9. Opt out of telemetry:

    +

    To stop sending telemetrics data from your system, opt out of the telemetry +service:

    +
    sudo telemctl opt-out
    +
    +
    +

    This creates the file /etc/telemetrics/opt-out and stops the +telemetry services.

    +
  10. +
+
+
+

Saving data locally

+

This example requires Clear Linux OS to be installed and telemetry to be enabled on the +system.

+

To change how records are managed, copy the default +/usr/share/defaults/telemetrics/telemetrics.conf file to +/etc/telemetrics/telemetrics.conf and edit it. The changes in the +/etc/telemetrics/telemetrics.conf file will override the defaults in +the /usr/share/defaults/telemetrics/telemetrics.conf file. You may need +root permissions to create and edit files in /etc. For each +example, and for any time you make changes to the configuration file, you must +restart the client daemons to pick up the changes:

+
sudo telemctl restart
+
+
+

The telemctl journal command gives you access to features and +options of the telemetry journal to assist with system analytics and debug. +telemctl journal has a number of options to help filter records. +Use -h or --help to view usage options.

+
    +
  1. Keep a local copy and send records to backend server:

    +

    To keep a local copy of the telemetry record and also send it on to the +backend server, we will need to change the +record_retention_enabled configuration key value to +true.

    +
  2. +
  3. Keep all records – don’t send to backend server:

    +

    To keep records on the system without sending them to a backend server, set +the record_server_delivery_enabled key value to +false. Note that you will also need to ensure the +record_retention_enabled configuration key value is set to +true or the system will not keep local copies.

    +
  4. +
  5. Keep and send records to custom server:

    +

    This assumes you have set up a custom server according to the next example.

    +

    The server is identified by the server setting, and by default +records are sent to the Clear Linux OS server +server=https://clr.telemetry.intel.com/v2/collector. To change +this, you can use an IP address or fully qualified domain name.

    +
  6. +
+
+
+

Set up a back-end server to collect telemetry records

+

For this example, start with a clean installation of Clear Linux OS on a new system +using the Install Clear Linux* OS on bare metal with live server getting started guide and:

+
    +
  1. Join the Stability Enhancement Program to install and +enable the telemetrics components.

    +
  2. +
  3. Select the manual installation method with the following settings:

    +
      +
    • Set the hostname to clr-telem-server,
    • +
    • Create an administrative user named clear and add this user +to sudoers
    • +
    +
  4. +
  5. Log in with your administrative user, from your $HOME directory, +run git to clone the telemetrics-backend repository +into the $HOME/telemetrics-backend directory:

    +
    git clone https://github.com/clearlinux/telemetrics-backend
    +
    +
    +
    +

    Note

    +

    You may need to set up the https_proxy environment variable if +you have issues reaching github.com.

    +
    +
  6. +
  7. Change your current working directory to telemetrics-backend/scripts.

    +
  8. +
  9. Before you install the telemetrics backend with the deploy.sh script +file in the next step, here is an explanation of the options to be specified:

    +
      +
    • -a install to perform an install
    • +
    • -d clr to install to a Clear Linux OS distro
    • +
    • -H localhost to set the domain to localhost
    • +
    +
    +

    Caution

    +

    The deploy.sh shell script has minimal error checking and makes +several changes to your system. Be sure that the options you define on +the cmdline are correct before proceeding.

    +
    +
  10. +
  11. Run the shell script from the $HOME/telemetrics-backend/scripts +directory:

    +
    ./deploy.sh -H localhost -a install -d clr
    +
    +
    +

    The script starts and lists all the defined options and prompts you for +the PostgreSQL database password.

    +
    Options:
    + host: localhost
    + distro: clr
    + action: install
    + repo: https://github.com/clearlinux/telemetrics-backend
    + source: master
    + type: git
    + DB password: (default: postgres):
    +
    +
    +
  12. +
  13. For the DB password:, press the Enter key to accept the +default password postgres.

    +
    +

    Note

    +

    The deploy.sh script uses sudo to run commands and you +may be prompted to enter your user password at any time while the script +is executing. If this occurs, enter your user password to execute the +sudo command.

    +
    +
  14. +
  15. After all the server components have been installed, you are prompted to +enter the PostgreSQL database password to change it as +illustrated below:

    +
    Enter password for 'postgres' user:
    +New password:
    +Retype new password:
    +passwd: password updated successfully
    +
    +
    +

    Enter postgres for the current value of the password and then enter a new +password, retype it to verify the new password and the PostgreSQL +database password will be updated.

    +
  16. +
  17. After the installation is complete, you can use your web browser to view the +new server by opening the browser on the system and typing in localhost +in the address bar. You should see a web page similar to the one shown in +Figure 2 below.

    +
    +Telemetry UI +

    Figure 2: Telemetry UI

    +
    +
  18. +
+
+
+

Create records with telem-record-gen

+

The telemetrics bundle provides a record generator tool called +telem-record-gen. This tool can be used to create records from shell +scripts or the command line when writing a probe in C is not desirable. +Records are sent to the backend server, and can also be echoed to stdout.

+

There are three ways to supply the payload to the record.

+
    +
  1. On the command line, use the -p <string> option:

    +
    telem-record-gen -c a/b/c -n -o -p 'payload goes here'
    +
    +
    +
    record_format_version: 4
    +classification: a/b/c
    +severity: 1
    +machine_id: FFFFFFFF
    +creation_timestamp: 1539023189
    +arch: x86_64
    +host_type: innotek GmbH|VirtualBox|1.2
    +build: 25180
    +kernel_version: 4.14.71-404.lts
    +payload_format_version: 1
    +system_name: clear-linux-os
    +board_name: VirtualBox|Oracle Corporation
    +cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz
    +bios_version: VirtualBox
    +event_id: 2236710e4fc11e4a646ce956c7802788
    +
    +payload goes here
    +
    +
    +
  2. +
  3. Specify a file that contains the payload with the option +-P path/to/file.

    +
    telem-record-gen -c a/b/c -n -o -P ./payload_file.txt
    +
    +
    +
    record_format_version: 4
    +classification: a/b/c
    +severity: 1
    +machine_id: FFFFFFFF
    +creation_timestamp: 1539023621
    +arch: x86_64
    +host_type: innotek GmbH|VirtualBox|1.2
    +build: 25180
    +kernel_version: 4.14.71-404.lts
    +payload_format_version: 1
    +system_name: clear-linux-os
    +board_name: VirtualBox|Oracle Corporation
    +cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz
    +bios_version: VirtualBox
    +event_id: d73d6040afd7693cccdfece479df9795
    +
    +payload read from file
    +
    +
    +
  4. +
  5. If the -p or -P options are absent, the tool reads +from stdin so you can use it in a heredoc in scripts.

    +
    #telem-record-gen -c a/b/c -n -o << HEOF
    +payload read from stdin
    +HEOF
    +
    +
    +
    record_format_version: 4
    +classification: a/b/c
    +severity: 1
    +machine_id: FFFFFFFF
    +creation_timestamp: 1539023621
    +arch: x86_64
    +host_type: innotek GmbH|VirtualBox|1.2
    +build: 25180
    +kernel_version: 4.14.71-404.lts
    +payload_format_version: 1
    +system_name: clear-linux-os
    +board_name: VirtualBox|Oracle Corporation
    +cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz
    +bios_version: VirtualBox
    +event_id: 2f070e8e71679f2b1f28794e3a6c42ee
    +
    +payload read from stdin
    +
    +
    +
  6. +
+
+
+

Set a static machine id

+

The machine id reported by the telemetry client is rotated every three days +for privacy reasons. If you wish to have a static machine id for testing +purposes, you can opt in by creating a file named opt-in-static-machine-id +in the directory /etc/telemetrics/.

+
    +
  1. Create a directory telemetrics.

    +
    sudo mkdir -p /etc/telemetrics
    +
    +
    +
  2. +
  3. Create the file and replace the “unique machine ID” with your desired +static machine ID.

    +
    echo "unique machine ID" | sudo tee /etc/telemetrics/opt-in-static-machine-id
    +
    +
    +
  4. +
+
+

Note

+

The machine ID is different than the system hostname.

+
+
+
+

Instrument your code with the libtelemetry API

+
+

Prerequisites

+

Confirm that the telemetrics header file is located on the system at +usr/include/telemetry.h The latest version of the file can also be +found on github for reference, but installing the telemetry bundle +will install the header file that matches your Clear Linux OS version.

+
    +
  1. Includes and variables:

    +

    You must include the following headers in your code to use the API:

    +
    #define _GNU_SOURCE
    +#include <stdlib.h>
    +#include <stdio.h>
    +#include <string.h>
    +#include <telemetry.h>
    +
    +
    +

    Use the following code to create the variables needed to hold the data for +the record to be created:

    +
    uint32_t severity = 1;
    +uint32_t payload_version = 1;
    +char classification[30] = "org.clearlinux/hello/world";
    +struct telem_ref *tm_handle = NULL;
    +char *payload;
    +int ret = 0;
    +
    +
    +
    +
    Severity:
    +

    Type: uint32_t +Value: Severity field value. Accepted values are in the range 1-4, with +1 being the lowest severity, and 4 being the highest severity. Values +provided outside of this range are clamped to 1 or 4. [low, med, high, +crit]

    +
    +
    Payload_version:
    +

    Type: uint32_t +Value: Payload format version. The only supported value right now is 1, +which indicates that the payload is a freely-formatted (unstructured) +string. Values greater than 1 are reserved for future use.

    +
    +
    Classification:
    +

    Type: char array +Value: It should have the form, DOMAIN/PROBENAME/REST: DOMAIN is the +reverse domain to use as a namespace for the probe (e.g. org.clearlinux); +PROBENAME is the name of the probe; and REST is an arbitrary value that +the probe should use to classify the record. The maximum length for the +classification string is 122 bytes. Each sub-category may be no longer +than 40 bytes long. Two / delimiters are required.

    +
    +
    Tm_handle:
    +

    Type: Telem_ref struct pointer +Value: Struct pointer declared by the caller, The struct is initialized +if the function returns success.

    +
    +
    Payload:
    +

    Type: char pointer +Value: The payload to set

    +
    +
    +
  2. +
  3. For this example, we’ll set the payload to “hello” by using +asprintf():

    +
    if (asprintf(&payload, "hello\n") < 0) {
    +  exit(EXIT_FAILURE);
    +   }
    +
    +
    +

    The functions asprintf() and vasprintf() are analogs of +sprintf(3) and vsprintf(3), except that they allocate a +string large enough to hold the output including the terminating null byte +(‘0’), and return a pointer to it via the first argument. This pointer +should be passed to free(3) to release the allocated storage when +it is no longer needed.

    +
  4. +
  5. Create the new telemetry record:

    +

    The function tm_create_record() initializes a telemetry record and +sets the severity and classification of that record, as well as the payload +version number. The memory needed to store the telemetry record is allocated +and should be freed with tm_free_record() when no longer needed.

    +
    if ((ret = tm_create_record(&tm_handle, severity,    classification, payload_version)) < 0) {
    +printf("Failed to create record: %s\n", strerror(-ret));
    +ret = 1;
    +goto fail;
    +}
    +
    +
    +
  6. +
  7. Set the payload field of a telemetrics record:

    +

    The function tm_set_payload() attaches the provided telemetry record +data to the telemetry record. The current maximum payload size is 8192b.

    +
    if ((ret = tm_set_payload(tm_handle, payload)) < 0) {
    +   printf("Failed to set record payload: %s\n", strerror(-ret));
    +   ret = 1;
    +   goto fail;
    +}
    +free(payload);
    +
    +
    +

    The free() function frees the memory space pointed to by ptr, which +must have been returned by a previous call to malloc(), +calloc(), or realloc(). Otherwise, or if +free(ptr) has already been called before, undefined behavior +occurs. If ptr is NULL, no operation is performed.

    +
  8. +
  9. Send a record to the telemetrics daemon:

    +

    The function tm_send_record() delivers the record to the local +telemprobd(1) service. Since the telemetry record was allocated by +the program it should be freed with tm_free_record() when it is no +longer needed.

    +
    if ((ret = tm_send_record(tm_handle)) < 0) {
    +   printf("Failed to send record to daemon: %s\n", strerror(-ret));
    +   ret = 1;
    +   goto fail;
    +} else {
    +   printf("Successfully sent record to daemon.\n");
    +   ret = 0;
    +}
    +fail:
    +tm_free_record(tm_handle);
    +tm_handle = NULL;
    +
    +return ret;
    +
    +
    +
  10. +
  11. A full sample application with compiling flags:

    +

    Create a new file test.c and add the following code:

    +
    #define _GNU_SOURCE
    +#include <stdlib.h>
    +#include <stdio.h>
    +#include <string.h>
    +#include <telemetry.h>
    +
    +int main(int argc, char **argv)
    +{
    +      uint32_t severity = 1;
    +      uint32_t payload_version = 1;
    +      char classification[30] = "org.clearlinux/hello/world";
    +      struct telem_ref *tm_handle = NULL;
    +      char *payload;
    +
    +      int ret = 0;
    +
    +      if (asprintf(&payload, "hello\n") < 0) {
    +              exit(EXIT_FAILURE);
    +      }
    +
    +      if ((ret = tm_create_record(&tm_handle, severity, classification, payload_version)) < 0) {
    +              printf("Failed to create record: %s\n", strerror(-ret));
    +              ret = 1;
    +              goto fail;
    +      }
    +
    +      if ((ret = tm_set_payload(tm_handle, payload)) < 0) {
    +              printf("Failed to set record payload: %s\n", strerror(-ret));
    +              ret = 1;
    +              goto fail;
    +      }
    +
    +      free(payload);
    +
    +      if ((ret = tm_send_record(tm_handle)) < 0) {
    +              printf("Failed to send record to daemon: %s\n", strerror(-ret));
    +              ret = 1;
    +              goto fail;
    +      } else {
    +              printf("Successfully sent record to daemon.\n");
    +              ret = 0;
    +      }
    +fail:
    +      tm_free_record(tm_handle);
    +      tm_handle = NULL;
    +
    +      return ret;
    + }
    +
    +
    +

    Compile with the gcc compiler, using this command:

    +
    gcc test.c -ltelemetry -o test_telem
    +
    +
    +

    Test to ensure the program is working:

    +
    ./test_telem
    +Successfully sent record to daemon.
    +
    +
    +
    +

    Note

    +

    A full example of the heartbeat probe in C is documented in the +source code.

    +
    +
  12. +
+
+
+
+
+

Reference

+ +
+

The telemetry API

+

Installing the telemetrics bundle includes the libtelemetry C library, +which exposes an API used by the telemprobd and telempostd daemons. You can +use these in your applications as well. The API documentation is found in the +telemetry.h file in Telemetrics client repository.

+
+
+

Client configuration

+

The telemetry client will look for the configuration file located at +/etc/telemetrics/telemetrics.conf and use it if it exists. If the +file does not exist, the client will use the default configuration located +at /usr/share/defaults telemetrics/telemetrics.conf. To modify or +customize the configuration, copy the file from +/usr/share/defaults/telemetrics to /etc/telemetrics and edit it.

+
+

Configuration options

+

The client uses the following configuration options from the config file:

+
+
server
+
This specifies the web server to which telempostd sends the telemetry records.
+
socket_path
+
This specifies the path of the unix domain socket on which the telemprobd +listens for connections from the probes.
+
spool_dir
+
This configuration option is related to spooling. If the daemon is not able +to send the telemetry records to the backend server due to reasons such as +the network availability, then it stores the records in a spool directory. +This option specifies the path of the spool directory. This directory should +be owned by the same user as the daemon.
+
record_expiry
+
This is the time, in minutes, after which the records in the spool directory +are deleted by the daemon.
+
spool_process_time
+
This specifies the time interval, in seconds, that the daemon waits for +before checking the spool directory for records. The daemon picks up the +records in the order of modification date and tries to send the record to the +server. It sends a maximum of 10 records at a time. If it was able to send a +record successfully, it deletes the record from the spool. If the daemon +finds a record older than the “record_expiry” time, then it deletes that +record. The daemon looks at a maximum of 20 records in a single spool run loop.
+
rate_limit_enabled
+
This determines whether rate-limiting is enabled or disabled. When enabled, +there is a threshold on both records sent within a window of time, and record +bytes sent within a window a time.
+
record_burst_limit
+
This is the maximum amount of records allowed to be passed by the daemon +within the record_window_length of time. If set to -1, the rate-limiting for +record bursts is disabled.
+
record_window_length
+
The time, in minutes (0-59), that establishes the window length for the +record_burst_limit. For example, if record_burst_window=1000 and +record_window_length=15, then no more than 1000 records can be passed within +any given fifteen-minute window.
+
byte_burst_limit
+
This is the maximum amount of bytes that can be passed by the daemon within +the byte_window_length of time. If set to -1, the rate-limiting for byte +bursts is disabled.
+
byte_window_length
+
This is the time, in minutes (0-59), that establishes the window length for +the byte_burst_limit.
+
rate_limit_strategy
+
This is the strategy chosen once the rate-limiting threshold has been +reached. Currently the options are ‘drop’ or ‘spool’, with spool being the +default. If spool is chosen, records will be spooled and sent at a later time.
+
record_retention_enabled
+
When this key is enabled (true) the daemon saves a copy of the payload on +disk from all valid records. To avoid the excessive use of disk space only +the latest 100 records are kept. The default value for this configuration key +is false.
+
record_server_delivery_enabled
+
+
This key controls the delivery of records to server; when enabled (default +value), the record will be posted to the address in the configuration file. +If this configuration key is disabled (false), records will not be spooled or +posted to backend. This configuration key can be used in combination with +record_retention_enabled to keep copies of telemetry records locally only.
+
+

Note

+

Configuration options may change as the telemetry client evolves. +Please use the comments in the file itself as the most accurate +reference for configuration.

+
+
+
+
+
+
+

Client run-time options

+

The Clear Linux OS telemetry client provides an admin tool called telemctl +for managing the telemetry services and probes. The tool is located in +/usr/bin. Running it with no argument results in the following:

+
sudo telemctl
+
+
+
/usr/bin/telemctl - Control actions for telemetry services
+  stop       Stops all running telemetry services
+  start      Starts all telemetry services
+  restart    Restarts all telemetry services
+  is-active  Checks if telemprobd and telempostd are active
+  opt-in     Opts in to telemetry, and starts telemetry services
+  opt-out    Opts out of telemetry, and stops telemetry services
+  journal    Prints telemetry journal contents. Use -h argument for more
+             options
+
+
+
+

start/stop/restart

+

The commands to start, stop and restart the telemetry services manage all +required services and probes on the system. There is no need to separately +start/stop/restart the two client daemons telemprobd and telempostd. +The restart command option will call telemctl stop +followed by telemctl start .

+
+
+

is-active

+

The is-active option reports whether the two client daemons are +active. This is useful to verify that the opt-in and +opt-out options have taken effect, or to ensure that telemetry is +functioning on the system. Note that both daemons are verified.

+
sudo telemctl is-active
+
+
+
telemprobd : active
+telempostd : active
+
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..46a8ff31 --- /dev/null +++ b/index.html @@ -0,0 +1,1012 @@ + + + + + + + + + + + Clear Linux* project — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Clear Linux* project

+

Welcome to the Clear Linux* OS documentation pages, the source for Clear Linux OS documentation.

+

Our documentation is divided into the following sections:

+
+
Get started
+
If you are new to Clear Linux OS, get started fast with tutorials for installing Clear Linux OS +on bare metal, in a virtual environment, or as a live image on a USB stick.
+
About
+
Clear Linux is a little different from other distros. Here are some +important tools and concepts for managing your install.
+
Guides
+
Guides show how to complete common tasks that help you leverage Clear Linux OS native +features effectively. From basic system configuration to advanced +management of a cloud installation, there is a guide for you.
+
Tutorials
+
Clear Linux OS tutorials provide step-by-step instructions on how Clear Linux OS features can +be used and extended, frequently with third-party tools.
+
Reference
+
Find the detailed information you need to enable your configuration or task +in our Clear Linux OS reference section.
+
FAQ
+
Refer to our FAQ section to read commonly asked questions and answers.
+
+
+
+
+ + +
+ +
+
+ + + + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..f4a080a7 Binary files /dev/null and b/objects.inv differ diff --git a/reference/bundle-commands.html b/reference/bundle-commands.html new file mode 100644 index 00000000..4e382592 --- /dev/null +++ b/reference/bundle-commands.html @@ -0,0 +1,1022 @@ + + + + + + + + + + + Useful bundle commands — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Useful bundle commands

+

To see a list of currently installed bundles, enter:

+
sudo swupd bundle-list
+
+
+

To see the list of all available bundles, enter:

+
sudo swupd bundle-list --all
+
+
+

Alternatively, you can view our available bundles +webpage.

+

To search for bundles and their contents, enter:

+
sudo swupd search [bundle name]
+
+
+

To add a bundle, enter:

+
sudo swupd bundle-add [bundle name]
+
+
+
+

Additional information

+

For additional swupd commands, enter:

+
swupd --help
+
+
+

To reference the swupd man page, enter:

+
man swupd
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/bundles/bundles.html b/reference/bundles/bundles.html new file mode 100644 index 00000000..046373ad --- /dev/null +++ b/reference/bundles/bundles.html @@ -0,0 +1,27218 @@ + + + + + + + + + + + Available bundles — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Available bundles

+

This document provides a current list of available bundles. View the clr-bundles repo on GitHub*, or select the bundle +Name for more details.

+

To learn more about how Clear Linux* OS uses bundles for software deployment, visit +Bundles.

+
+

Bundle list

+ + + + + + + Bundles in Clear Linux* OS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Updated: 05/14/19 18:42 UTC +
Name Description
aclTools to manipulate filesystem access control list.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
acpica-unix2Intel Advanced Configuration and Power Interface (ACPI) utilities.
+ +

Includes bundle(s): +

    + +
  • ACPI
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
akonadiAsynchronous API to access PIM data.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
alsa-utilsUseful utilities for controlling a sound card.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
amateur-radioApplications to support ham or amateur radio operations.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • file
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
+

+ +
ansibleIT automation tool with software provisioning, configuration management, and application deployment.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ipmitool
  • + +
+

+ +
application-serverRun an application server via HTTP.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • web-server-basic
  • + +
  • c-basic
  • + +
+

+ +
arkGraphical file compression/decompression utility.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
atomText and source code editor with plug-in support for Node.js and Git.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • python3-basic
  • + +
+

+ +
audaciousMusic player for Gtk/GNOME
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
auditSystem audit tools.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • openldap
  • + +
+

+ +
automotive-toolsVarious tools for automotive use cases
+ +
aws-greengrass-iotLibraries to support building IoT applications on AWS Greengrass.
+ +

Includes bundle(s): +

    + +
  • cloud-api
  • + +
  • python2-basic
  • + +
  • python-extras
  • + +
+

+ +
axelLight command line download accelerator.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
azure-iot-sdkLibraries to support building IoT applications on Azure.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • p11-kit
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
BabelInternationalization and localization utilities for Python, emphasizing web applications.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
baobabScan folders or volumes to provide graphical representation of the contents.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
bcBasic calculator, an arbitrary-precision calculator language.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bcache-toolsbcache is a way to pair a fast SSD with a slow HDD to create a hybrid disk.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bccBPF Compiler Collection (BCC) for performance analysis, troubleshooting.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • llvm
  • + +
  • BCC
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
big-data-basicTools and frameworks for big data management.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • java11-basic
  • + +
  • R-basic
  • + +
  • elasticsearch
  • + +
  • openblas
  • + +
+

+ +
bijibenWrite out notes--every detail matters.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • webkitgtk
  • + +
  • perl-basic
  • + +
  • NetworkManager-extras
  • + +
+

+ +
binutilsVarious development tools to manage binary executable code.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bisonGeneral-purpose parser generator that converts annotated context-free grammar into a deterministic LR.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
blenderA 3D creation suite supporting modelling, rendering, video editing, game development.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bmap-toolsTools for creating block map (bmap) for a file and copying files; alternative to "dd" or "cp".
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • bmap
  • + +
+

+ +
boinc-clientVolunteer computing and grid computing for science projects.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-openssl
  • + +
  • webkitgtk
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
boot-encryptedEnable booting with encrypted root, swap, or other partitions.
+ +

Includes bundle(s): +

    + +
  • bootloader-extras
  • + +
+

+ +
bootloaderLoads kernel from disk and boots the system.
+ +

Includes bundle(s): +

    + +
  • syslinux
  • + +
+

+ +
bootloader-extrasExtra packages to decrypt root partition.
+ +
borgbackupDeduplicating archiver with compression and authenticated encryption.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
c-basicBuild and run C/C++ language programs.
+ +

Includes bundle(s): +

    + +
  • bison
  • + +
  • nasm
  • + +
  • binutils
  • + +
  • make
  • + +
  • glibc-locale
  • + +
  • llvm
  • + +
  • flex
  • + +
  • perl-basic
  • + +
+

+ +
c-basic-legacyBuild and run 32bit C/C++ language programs.
+ +

Includes bundle(s): +

    + +
  • bison
  • + +
  • devpkg-zlib
  • + +
  • binutils
  • + +
  • make
  • + +
  • glibc-locale
  • + +
  • flex
  • + +
+

+ +
cabextractManipulate or unpack CAB archives.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
calcArbitrary precision console calculator.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
casyncContent Addressable Data Synchronizer to distribute frequently-updated file system images over the Internet.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
ccacheCache compilations to avoid repeating same computation and speed project build times.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cephDistributed object store and file system.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • libxslt
  • + +
  • openldap
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cheeseWebcam photo booth software for GNOME.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
clamavClam AntiVirus is toolkit to detect malware and viruses, originally for Unix, with third-pary support.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
clocCount lines of code for many programming languages.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cloud-apiAPI helpers for cloud access.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
+

+ +
cloud-controlRun a cloud orchestration server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • sqlite
  • + +
  • cloud-api
  • + +
  • storage-cluster
  • + +
  • sudo
  • + +
  • openssl
  • + +
  • network-basic
  • + +
  • kvm-host
  • + +
  • git
  • + +
+

+ +
cloud-native-basicContains Clear Linux OS native software for cloud.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • iproute2
  • + +
  • ethtool
  • + +
  • libstdcpp
  • + +
+

+ +
clr-devopsRun all Clear Linux OS devops workloads.
+ +

Includes bundle(s): +

    + +
  • web-server-basic
  • + +
  • rust-basic
  • + +
  • mixer
  • + +
  • koji
  • + +
  • java-basic
  • + +
  • os-installer
  • + +
  • os-core-update
  • + +
  • scm-server
  • + +
+

+ +
clr-installerImage creation and installation for Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • tzdata
  • + +
  • libstdcpp
  • + +
  • linux-firmware-extras
  • + +
  • openssh-server
  • + +
  • curl
  • + +
  • wpa_supplicant
  • + +
  • linux-firmware-wifi
  • + +
  • jq
  • + +
  • kbd
  • + +
  • less
  • + +
  • telemetrics
  • + +
  • locales
  • + +
  • iproute2
  • + +
+

+ +
clr-installer-guiGraphical installation for Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • NetworkManager
  • + +
  • gparted
  • + +
  • clr-installer
  • + +
+

+ +
clr-network-troubleshooterTool to test network availability and suggest actions to fix issues.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • perl-basic
  • + +
+

+ +
clr-user-bundlesManage third-party bundles.
+ +
cockpitWeb-based administration for GNU/Linux servers.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-openssl
  • + +
+

+ +
columbiadA full screen app chooser for HTPCs
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
compat-commonCommon legacy compatibility libraries
+ +
computer-vision-basicBuild computer vision applications.
+ +

Includes bundle(s): +

    + +
  • machine-learning-tensorflow
  • + +
  • cloud-api
  • + +
  • python2-basic
  • + +
  • python-data-science
  • + +
  • computer-vision-models
  • + +
  • devpkg-opencv
  • + +
  • python-extras
  • + +
  • openblas
  • + +
+

+ +
computer-vision-modelsDeep learning models for computer vision.
+ +

Includes bundle(s): +

    + +
  • machine-learning-tensorflow
  • + +
+

+ +
conkyA light-weight system monitor.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
containers-basicRun container applications from Dockerhub.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • p11-kit
  • + +
  • iproute2
  • + +
  • git
  • + +
+

+ +
containers-basic-devAll packages required to build the containers-basic bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-vala
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • gjs
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • containers-basic
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-gcr
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-gobject-introspection
  • + +
  • diffutils
  • + +
+

+ +
containers-virtRun container applications from Dockerhub in lightweight virtual machines.
+ +

Includes bundle(s): +

    + +
  • containers-basic
  • + +
+

+ +
containers-virt-devAll packages required to build the containers-virt bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • containers-basic-dev
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-vala
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • musl
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • containers-virt
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • gjs
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-gcr
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-gobject-introspection
  • + +
  • diffutils
  • + +
+

+ +
cpioCopies files into or out of a cpio or tar archive.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cronieRun specified programs at scheduled times.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cryptographyEncrypt, decrypt, sign and verify objects.
+ +

Includes bundle(s): +

    + +
  • openssl
  • + +
  • libglib
  • + +
+

+ +
cryptoprocessor-managementManage the Trusted Platform Module (TPM).
+ +

Includes bundle(s): +

    + +
  • lib-openssl
  • + +
  • TPM
  • + +
  • libglib
  • + +
+

+ +
cryptoprocessor-management-devAll packages required to build the cryptoprocessor-management bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • devpkg-xz
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • cryptoprocessor-management
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • tzdata
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
curlCommand line tool to transfer data to/from a URL.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
cve-bin-toolCommon Vulnerabilities and Exposures (CVE) scanning tool.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • CVE
  • + +
+

+ +
d-basicBuild and run D language programs.
+ +

Includes bundle(s): +

    + +
  • llvm
  • + +
+

+ +
darktablePhotography workflow application with raw image development.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
database-basicRun an SQL database.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • sqlite
  • + +
  • mariadb
  • + +
  • postgresql
  • + +
+

+ +
database-basic-devAll packages required to build the database-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libgpg-error
  • + +
  • nasm
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • gdb
  • + +
  • database-basic
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
dddGraphical debugger front-end; GDB, DBX, Ladebug, JDB, Perl, Python.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
desktopRun the GNOME GUI desktop environment.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • linux-firmware-extras
  • + +
  • wpa_supplicant
  • + +
  • sysadmin-basic
  • + +
  • libX11client
  • + +
  • nautilus
  • + +
  • lib-imageformat
  • + +
  • desktop-apps
  • + +
  • desktop-locales
  • + +
  • which
  • + +
  • thermal_daemon
  • + +
  • flatpak
  • + +
  • pulseaudio
  • + +
  • polkit
  • + +
  • linux-firmware-wifi
  • + +
  • gimp
  • + +
  • fuse
  • + +
  • gstreamer
  • + +
  • alsa-utils
  • + +
  • x11-server
  • + +
  • tzdata
  • + +
  • gnome-characters
  • + +
  • pygobject
  • + +
  • hardware-printing
  • + +
  • gjs
  • + +
  • desktop-assets
  • + +
  • openssl
  • + +
  • NetworkManager-extras
  • + +
+

+ +
desktop-appsApplications for the desktop.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • libX11client
  • + +
  • xemacs
  • + +
  • gnome-disk-utility
  • + +
  • gnome-calculator
  • + +
  • evolution
  • + +
  • gedit
  • + +
  • graphviz
  • + +
  • gnome-screenshot
  • + +
  • eog
  • + +
  • gnome-weather
  • + +
  • file-roller
  • + +
  • flatpak
  • + +
  • gnome-system-monitor
  • + +
  • gvim
  • + +
  • gnome-font-viewer
  • + +
  • gnome-photos
  • + +
  • libva-utils
  • + +
  • seahorse
  • + +
  • baobab
  • + +
  • gnome-color-manager
  • + +
  • python3-basic
  • + +
  • gnome-todo
  • + +
  • evince
  • + +
  • gnome-characters
  • + +
  • gnome-logs
  • + +
  • totem
  • + +
  • gnome-music
  • + +
  • firefox
  • + +
  • cheese
  • + +
+

+ +
desktop-apps-extrasLarger set of applications for the desktop.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • atom
  • + +
  • python3-basic
  • + +
  • spice-gtk
  • + +
  • gphoto2
  • + +
  • pidgin
  • + +
  • quassel
  • + +
  • gimp
  • + +
  • thunderbird
  • + +
  • vlc
  • + +
  • Remmina
  • + +
  • virt-manager
  • + +
  • geany
  • + +
  • virt-viewer
  • + +
  • vinagre
  • + +
  • tigervnc
  • + +
  • darktable
  • + +
  • hexchat
  • + +
+

+ +
desktop-assetsImages and Icons for the desktop
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • fonts-basic
  • + +
  • common
  • + +
  • current default
  • + +
  • intended for all supported styles
  • + +
+

+ +
desktop-autostartBundle to automatically launch the GUI upon boot.
+ +

Includes bundle(s): +

    + +
  • desktop
  • + +
+

+ +
desktop-awesomeRun a minimal desktop environment with awesome WM.
+ +

Includes bundle(s): +

    + +
  • x11-server
  • + +
+

+ +
desktop-devAll packages required to build the desktop bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-babl
  • + +
  • devpkg-libXfont2
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-gimp
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-mesa
  • + +
  • devpkg-openssl
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-pangomm
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libmspack
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libdazzle
  • + +
  • devpkg-gnome-video-effects
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • devpkg-uhttpmock
  • + +
  • fontforge
  • + +
  • devpkg-cups-filters
  • + +
  • devpkg-krb5
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-popt
  • + +
  • devpkg-v4l-utils
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • devpkg-libgdata
  • + +
  • devpkg-xkbcomp
  • + +
  • devpkg-gdm
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libxkbfile
  • + +
  • devpkg-libXfont
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • desktop
  • + +
  • devpkg-gtkspell3
  • + +
  • devpkg-libpeas
  • + +
  • devpkg-libstoragemgmt
  • + +
  • devpkg-flatpak
  • + +
  • devpkg-newt
  • + +
  • devpkg-orc
  • + +
  • jq
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-cheese
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-libgsystem
  • + +
  • devpkg-libgtop
  • + +
  • devpkg-cmrt
  • + +
  • devpkg-compat-gtksourceview-soname3
  • + +
  • devpkg-libXv
  • + +
  • devpkg-libgee
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-systemd
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • xemacs
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-geocode-glib
  • + +
  • devpkg-gmime
  • + +
  • devpkg-gtkmm3
  • + +
  • devpkg-libXft
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libgweather
  • + +
  • devpkg-glib
  • + +
  • devpkg-GConf
  • + +
  • devpkg-network-manager-applet
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libsass
  • + +
  • devpkg-libidn
  • + +
  • devpkg-gsound
  • + +
  • devpkg-qpdf
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-gexiv2
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-evolution-data-server
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • git
  • + +
  • devpkg-mpg123
  • + +
  • procps-ng
  • + +
  • devpkg-libXres
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-mutter
  • + +
  • devpkg-libxkbcommon
  • + +
  • inkscape
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-gnome-menus
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gnome-desktop
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-nss
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-xf86-input-wacom
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-geoclue
  • + +
  • devpkg-gutenprint
  • + +
  • devpkg-gnome-online-accounts
  • + +
  • devpkg-libffi
  • + +
  • devpkg-libyami
  • + +
  • devpkg-libspectre
  • + +
  • gdb
  • + +
  • devpkg-libwnck3
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-grilo-plugins
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-nspr
  • + +
  • devpkg-xdg-desktop-portal
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • devpkg-gnome-settings-daemon
  • + +
  • devpkg-liboauth
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-brotli
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-libunwind
  • + +
  • devpkg-clutter-gst
  • + +
  • strace
  • + +
  • devpkg-libiscsi
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-grilo
  • + +
  • devpkg-libgphoto2
  • + +
  • devpkg-cairo
  • + +
  • devpkg-libndp
  • + +
  • devpkg-libxklavier
  • + +
  • devpkg-xorg-server
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-R
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-gegl
  • + +
  • devpkg-libexif
  • + +
  • devpkg-apr
  • + +
  • devpkg-libmypaint
  • + +
  • devpkg-gspell
  • + +
  • devpkg-ostree
  • + +
  • devpkg-opencv
  • + +
  • devpkg-gjs
  • + +
  • devpkg-acl
  • + +
  • devpkg-gnome-autoar
  • + +
  • devpkg-libgusb
  • + +
  • parallel
  • + +
  • devpkg-parted
  • + +
  • devpkg-pygobject
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-mozjs60
  • + +
  • devpkg-atkmm
  • + +
  • cryptography
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • flatpak
  • + +
  • devpkg-gnome-software
  • + +
  • net-tools
  • + +
  • devpkg-startup-notification
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-ntfs-3g
  • + +
  • devpkg-woff2
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-gnome-bluetooth
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • devpkg-libgnomekbd
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-pipewire
  • + +
  • devpkg-libmtp
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-libgd
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libical
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • gjs
  • + +
  • devpkg-compat-gegl
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-libatasmart
  • + +
  • devpkg-libmediaart
  • + +
  • patch
  • + +
  • devpkg-LibRaw
  • + +
  • devpkg-gcab
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-appstream-glib
  • + +
  • devpkg-pciutils
  • + +
  • devpkg-zstd
  • + +
  • devpkg-libnotify
  • + +
  • devpkg-freetype
  • + +
  • devpkg-libconfig
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-metacity
  • + +
  • devpkg-cogl
  • + +
  • devpkg-pixman
  • + +
  • devpkg-nautilus
  • + +
  • devpkg-libsamplerate
  • + +
  • devpkg-cairomm
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • xz
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-gst-plugins-bad
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-gcr
  • + +
  • devpkg-gnome-panel
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-libpinyin
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-fwupd
  • + +
  • devpkg-evolution
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-gfbgraph
  • + +
  • devpkg-NetworkManager
  • + +
  • sysadmin-basic-dev
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libsmbios
  • + +
  • tzdata
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • devpkg-ndctl
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-libwacom
  • + +
  • docutils
  • + +
  • diffutils
  • + +
  • scons
  • + +
+

+ +
desktop-enlightenmentRun the enlightenment desktop environment.
+ +

Includes bundle(s): +

    + +
  • x11-server
  • + +
+

+ +
desktop-gnomelibsHelper bundle with common libraries and desktop utilities.
+ +

Includes bundle(s): +

    + +
  • lib-opengl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • lib-samba
  • + +
  • perl-basic
  • + +
+

+ +
desktop-i3Run the i3 desktop environment.
+ +

Includes bundle(s): +

    + +
  • x11-server
  • + +
+

+ +
desktop-kdeApplications for the desktop from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • gpgme
  • + +
  • tzdata
  • + +
  • hardware-bluetooth
  • + +
  • ksysguard
  • + +
  • qt-basic
  • + +
  • dolphin
  • + +
  • kdiff3
  • + +
  • polkit
  • + +
  • pulseaudio
  • + +
  • konsole
  • + +
  • fuse
  • + +
  • lib-samba
  • + +
  • desktop-kde-libs
  • + +
  • libxslt
  • + +
  • alsa-utils
  • + +
  • x11-tools
  • + +
  • NetworkManager-extras
  • + +
  • x11-server
  • + +
+

+ +
desktop-kde-appsApplications for the desktop from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • kate
  • + +
  • akonadi
  • + +
  • kamera
  • + +
  • qt-basic
  • + +
  • dolphin
  • + +
  • spectacle
  • + +
  • konsole
  • + +
  • okular
  • + +
  • konqueror
  • + +
  • digikam
  • + +
  • krita
  • + +
  • syndication
  • + +
  • desktop-kde-libs
  • + +
  • yakuake
  • + +
  • konversation
  • + +
  • perl-basic
  • + +
  • kcalc
  • + +
  • gwenview
  • + +
  • ark
  • + +
  • kleopatra
  • + +
+

+ +
desktop-kde-gamesGames for the desktop from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • desktop-kde-libs
  • + +
  • qt-basic
  • + +
  • perl-basic
  • + +
+

+ +
desktop-kde-libsHelper libraries from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • lib-imageformat
  • + +
+

+ +
desktop-localesTranslations and documentation for desktop components.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • perl-basic
  • + +
  • glibc-locale
  • + +
+

+ +
desktop-lxqtRun the LXQt desktop environment.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • fonts-basic
  • + +
  • x11-server
  • + +
+

+ +
dev-utilsAssist application development.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloc
  • + +
  • gdb
  • + +
  • inotify-tools
  • + +
  • strace
  • + +
  • valgrind
  • + +
  • linux-tools
  • + +
  • cpio
  • + +
  • bc
  • + +
  • man-pages
  • + +
  • docutils
  • + +
  • icdiff
  • + +
  • llvm
  • + +
  • devpkg-llvm
  • + +
  • openssl
  • + +
  • perl-basic
  • + +
  • git
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
dev-utils-devAll packages required to build the dev-utils bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-openmpi
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-guile
  • + +
  • tzdata
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • perl-basic-dev
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-qttools
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-metrics-discovery
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • Sphinx
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-libmicrohttpd
  • + +
  • wget
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-subunit
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • cpio
  • + +
  • devpkg-libXxf86misc
  • + +
  • texlive
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • bc
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
dev-utils-guiAssist application development (gui components).
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • ddd
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • tcl-basic
  • + +
  • gui components
  • + +
+

+ +
developer-gpuTools and libraries for GPU application development.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • devpkg-mesa
  • + +
  • libX11client
  • + +
  • hardware-gpu
  • + +
+

+ +
devpkg-aclAll content for pkgconfig file acl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-alsa-libAll content for pkgconfig file alsa-lib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-appstream-glibAll content for pkgconfig file appstream-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-util-linux
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • libX11client
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-aprAll content for pkgconfig file apr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-apr-utilAll content for pkgconfig file apr-util.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-apr
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-at-spi2-atkAll content for pkgconfig file at-spi2-atk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-at-spi2-core
  • + +
+

+ +
devpkg-at-spi2-coreAll content for pkgconfig file at-spi2-core.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-atkAll content for pkgconfig file atk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-atkmmAll content for pkgconfig file atkmm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glibmm
  • + +
  • devpkg-atk
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-atticaAll content for pkgconfig file attica.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-attrAll content for pkgconfig file attr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-auditAll content for pkgconfig file audit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-bablAll content for pkgconfig file babl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-baseBasic pkgconfig infrastructure.
+ +

Includes bundle(s): +

    + +
  • c-basic
  • + +
+

+ +
devpkg-bluezAll content for pkgconfig file bluez.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-boostAll content for boost.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-brotliAll content for pkgconfig file brotli.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-cairoAll content for pkgconfig file cairo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pixman
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-libX11
  • + +
  • devpkg-freetype
  • + +
  • devpkg-mesa
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-cairommAll content for pkgconfig file cairomm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libsigcplusplus
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-cheeseAll content for pkgconfig file cheese.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-clutter
  • + +
  • devpkg-base
  • + +
  • devpkg-glib
  • + +
  • devpkg-gstreamer
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-clutter-gst
  • + +
+

+ +
devpkg-clutterAll content for pkgconfig file clutter.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cogl
  • + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-libxkbcommon
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libinput
  • + +
  • devpkg-systemd
  • + +
  • devpkg-wayland
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-clutter-gstAll content for pkgconfig file clutter-gst.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cogl
  • + +
  • devpkg-clutter
  • + +
  • devpkg-base
  • + +
  • devpkg-gstreamer
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-cmrtAll content for pkgconfig file cmrt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-coglAll content for pkgconfig file cogl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • devpkg-wayland
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-mesa
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-colordAll content for pkgconfig file colord.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-enchant-soname1All content for pkgconfig file compat-enchant-soname1.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-fuse-soname2All content for pkgconfig file compat-fuse-soname2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-geglAll content for pkgconfig file compat-gegl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-babl
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-gtksourceview-soname3All content for pkgconfig file compat-gtksourceview-soname3.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-cryptsetupAll content for pkgconfig file cryptsetup.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-cups-filtersAll content for pkgconfig file cups-filters.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-curlAll content for pkgconfig file curl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-cyrus-saslAll content for pkgconfig file cyrus-sasl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-dbusAll content for pkgconfig file dbus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-dbus-glibAll content for pkgconfig file dbus-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
+

+ +
devpkg-e2fsprogsAll content for pkgconfig file e2fsprogs.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-elfutilsAll content for pkgconfig file elfutils.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xz
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-enchantAll content for pkgconfig file enchant.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-evolutionAll content for pkgconfig file evolution.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-gnome-desktop
  • + +
  • devpkg-evolution-data-server
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-evolution-data-serverAll content for pkgconfig file evolution-data-server.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-sqlite-autoconf
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libical
  • + +
  • devpkg-nspr
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-nss
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-exiv2All content for pkgconfig file exiv2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-expatAll content for pkgconfig file expat.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fannAll content for pkgconfig file fann.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fftwAll content for pkgconfig file fftw.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-flacAll content for pkgconfig file flac.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libogg
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-flatpakAll content for pkgconfig file flatpak.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-ostree
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-font-utilAll content for pkgconfig file font-util.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fontconfigAll content for pkgconfig file fontconfig.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-freetype
  • + +
  • devpkg-expat
  • + +
  • devpkg-base
  • + +
  • devpkg-util-linux
  • + +
+

+ +
devpkg-freeglutAll content for pkgconfig file freeglut.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-freetypeAll content for pkgconfig file freetype.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-harfbuzz
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-fribidiAll content for pkgconfig file fribidi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fuseAll content for pkgconfig file fuse.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fwupdAll content for pkgconfig file fwupd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gcabAll content for pkgconfig file gcab.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-GConfAll content for pkgconfig file GConf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
+

+ +
devpkg-gcrAll content for pkgconfig file gcr.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-p11-kit
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gdk-pixbufAll content for pkgconfig file gdk-pixbuf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpng
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gdmAll content for pkgconfig file gdm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-geglAll content for pkgconfig file gegl.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-babl
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-geoclueAll content for pkgconfig file geoclue.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-geocode-glibAll content for pkgconfig file geocode-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gexiv2All content for pkgconfig file gexiv2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-exiv2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gfbgraphAll content for pkgconfig file gfbgraph.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-rest
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
  • devpkg-gnome-online-accounts
  • + +
+

+ +
devpkg-gflagsAll content for pkgconfig file gflags.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gimpAll content for pkgconfig file gimp.pc.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • devpkg-gtkplus
  • + +
  • devpkg-base
  • + +
  • devpkg-gdk-pixbuf
  • + +
+

+ +
devpkg-gjsAll content for pkgconfig file gjs.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-mozjs60
  • + +
  • devpkg-libffi
  • + +
  • devpkg-glib
  • + +
  • devpkg-gobject-introspection
  • + +
+

+ +
devpkg-glewAll content for pkgconfig file glew.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glu
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-glibAll content for pkgconfig file glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
  • devpkg-pcre
  • + +
  • devpkg-libffi
  • + +
+

+ +
devpkg-glibmmAll content for pkgconfig file glibmm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libsigcplusplus
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-glmAll content for pkgconfig file glm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-glogAll content for pkgconfig file glog.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gluAll content for pkgconfig file glu.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-mesa
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gmimeAll content for pkgconfig file gmime.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-autoarAll content for pkgconfig file gnome-autoar.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gnome-bluetoothAll content for pkgconfig file gnome-bluetooth.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-desktopAll content for pkgconfig file gnome-desktop.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libseccomp
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-glib
  • + +
  • devpkg-iso-codes
  • + +
+

+ +
devpkg-gnome-menusAll content for pkgconfig file gnome-menus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-online-accountsAll content for pkgconfig file gnome-online-accounts.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-panelAll content for pkgconfig file gnome-panel.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-settings-daemonAll content for pkgconfig file gnome-settings-daemon.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-softwareAll content for pkgconfig file gnome-software.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-appstream-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-atk
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gnome-video-effectsAll content for pkgconfig file gnome-video-effects.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnutlsAll content for pkgconfig file gnutls.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-nettle
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-p11-kit
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gobject-introspectionAll content for pkgconfig file gobject-introspection.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libffi
  • + +
+

+ +
devpkg-googletestAll content for pkgconfig file googletest.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gperftoolsAll content for pkgconfig file gperftools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-graphiteAll content for pkgconfig file graphite.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-graphvizAll content for pkgconfig file graphviz.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-griloAll content for pkgconfig file grilo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-libxml2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-grilo-pluginsAll content for pkgconfig file grilo-plugins.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gsettings-desktop-schemasAll content for pkgconfig file gsettings-desktop-schemas.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gslAll content for pkgconfig file gsl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gsoundAll content for pkgconfig file gsound.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gspellAll content for pkgconfig file gspell.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-enchant
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gst-plugins-badAll content for pkgconfig file gst-plugins-bad.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gstreamer
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gst-plugins-baseAll content for pkgconfig file gst-plugins-base.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-orc
  • + +
  • devpkg-gstreamer
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gstreamerAll content for pkgconfig file gstreamer.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-elfutils
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gtkAll content for pkgconfig file gtk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gtk-docAll content for pkgconfig file gtk-doc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gtk3All content for pkgconfig file gtk3.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-fontconfig
  • + +
  • libX11client
  • + +
  • devpkg-atk
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-wayland
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gtkmm3All content for pkgconfig file gtkmm3.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-cairomm
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-atkmm
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-pangomm
  • + +
+

+ +
devpkg-gtkplusAll content for pkgconfig file gtkplus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gtkspell3All content for pkgconfig file gtkspell3.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-enchant
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-guileAll content for pkgconfig file guile.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gutenprintAll content for pkgconfig file gutenprint.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-gtkplus
  • + +
+

+ +
devpkg-harfbuzzAll content for pkgconfig file harfbuzz.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-graphite
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-hwlocAll content for pkgconfig file hwloc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxml2
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-icu4cAll content for pkgconfig file icu4c.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ipmctlAll content for pkgconfig file ipmctl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ipsetAll content for pkgconfig file ipset.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libmnl
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-iptablesAll content for pkgconfig file iptables.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-iso-codesAll content for pkgconfig file iso-codes.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-json-cAll content for pkgconfig file json-c.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-json-glibAll content for pkgconfig file json-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-kmodAll content for pkgconfig file kmod.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-krb5All content for pkgconfig file krb5.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-lcms2All content for pkgconfig file lcms2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libabigailAll content for pkgconfig file libabigail.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxml2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libarchiveAll content for pkgconfig file libarchive.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libassuanAll content for pkgconfig file libassuan.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libgpg-error
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libatasmartAll content for pkgconfig file libatasmart.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcanberraAll content for pkgconfig file libcanberra.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gtk3
  • + +
  • devpkg-base
  • + +
  • devpkg-gtkplus
  • + +
+

+ +
devpkg-libcapAll content for pkgconfig file libcap.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcap-ngAll content for pkgconfig file libcap-ng.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcgroupAll content for pkgconfig file libcgroup.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libconfigAll content for pkgconfig file libconfig.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcrocoAll content for pkgconfig file libcroco.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-libxml2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libdatrieAll content for pkgconfig file libdatrie.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libdazzleAll content for pkgconfig file libdazzle.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gtk3
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libdrmAll content for pkgconfig file libdrm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libepoxyAll content for pkgconfig file libepoxy.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-mesa
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libevdevAll content for pkgconfig file libevdev.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libeventAll content for pkgconfig file libevent.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libexifAll content for pkgconfig file libexif.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libffiAll content for pkgconfig file libffi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libfontencAll content for pkgconfig file libfontenc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgcryptAll content for libgcrypt
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgdAll content for pkgconfig file libgd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgdataAll content for pkgconfig file libgdata.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-liboauth
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
  • devpkg-gcr
  • + +
  • devpkg-gnome-online-accounts
  • + +
+

+ +
devpkg-libgeeAll content for pkgconfig file libgee.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgnomekbdAll content for pkgconfig file libgnomekbd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxklavier
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libgpg-errorAll content for pkgconfig file libgpg-error.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgphoto2All content for pkgconfig file libgphoto2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libexif
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgsystemAll content for pkgconfig file libgsystem.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgtopAll content for pkgconfig file libgtop.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgudevAll content for pkgconfig file libgudev.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgusbAll content for pkgconfig file libgusb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libusb
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgweatherAll content for pkgconfig file libgweather.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-geocode-glib
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libicalAll content for pkgconfig file libical.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-icu4c
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libidnAll content for pkgconfig file libidn.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libidn2All content for pkgconfig file libidn2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libinputAll content for pkgconfig file libinput.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libiscsiAll content for pkgconfig file libiscsi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libjpeg-turboAll content for pkgconfig file libjpeg-turbo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmediaartAll content for pkgconfig file libmediaart.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmicrohttpdAll content for pkgconfig file libmicrohttpd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gnutls
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmnlAll content for pkgconfig file libmnl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmspackAll content for pkgconfig file libmspack.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmtpAll content for pkgconfig file libmtp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libusb
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmypaintAll content for pkgconfig file libmypaint.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-json-c
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libndpAll content for pkgconfig file libndp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_conntrackAll content for pkgconfig file libnetfilter_conntrack.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_cthelperAll content for pkgconfig file libnetfilter_cthelper.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_cttimeoutAll content for pkgconfig file libnetfilter_cttimeout.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_queueAll content for pkgconfig file libnetfilter_queue.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnfnetlinkAll content for pkgconfig file libnfnetlink.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnftnlAll content for pkgconfig file libnftnl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnlAll content for pkgconfig file libnl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnotifyAll content for pkgconfig file libnotify.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • libX11client
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-liboauthAll content for pkgconfig file liboauth.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-curl
  • + +
  • devpkg-base
  • + +
  • devpkg-openssl
  • + +
+

+ +
devpkg-liboggAll content for pkgconfig file libogg.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libosinfoAll content for pkgconfig file libosinfo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpcapAll content for pkgconfig file libpcap.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpciaccessAll content for pkgconfig file libpciaccess.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpeasAll content for pkgconfig file libpeas.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
  • devpkg-gobject-introspection
  • + +
+

+ +
devpkg-libpinyinAll content for pkgconfig file libpinyin.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpipelineAll content for pkgconfig file libpipeline.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpngAll content for pkgconfig file libpng.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpslAll content for pkgconfig file libpsl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpthread-stubsAll content for pkgconfig file libpthread-stubs.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-LibRawAll content for pkgconfig file LibRaw.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-lcms2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-librepoAll content for pkgconfig file librepo.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-openssl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-curl
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-librsvgAll content for pkgconfig file librsvg.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libsamplerateAll content for pkgconfig file libsamplerate.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsassAll content for pkgconfig file libsass.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsctpAll content for pkgconfig file libsctp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libseccompAll content for pkgconfig file libseccomp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsecretAll content for pkgconfig file libsecret.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsigcplusplusAll content for pkgconfig file libsigcplusplus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsmbiosAll content for pkgconfig file libsmbios.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsolvAll content for pkgconfig file libsolv.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsoupAll content for pkgconfig file libsoup.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-sqlite-autoconf
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libpsl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libspectreAll content for pkgconfig file libspectre.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsrtpAll content for pkgconfig file libsrtp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libssh2All content for pkgconfig file libssh2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
  • devpkg-openssl
  • + +
+

+ +
devpkg-libstoragemgmtAll content for pkgconfig file libstoragemgmt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libtasn1All content for pkgconfig file libtasn1.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libthaiAll content for pkgconfig file libthai.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libdatrie
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libtirpcAll content for pkgconfig file libtirpc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libunwindAll content for pkgconfig file libunwind.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libusbAll content for pkgconfig file libusb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libuserAll content for pkgconfig file libuser.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libvaAll content for pkgconfig file libva.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-wayland
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libvirtAll content for pkgconfig file libvirt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libwacomAll content for pkgconfig file libwacom.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libwebpAll content for pkgconfig file libwebp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libwnck3All content for pkgconfig file libwnck3.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXres
  • + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libX11
  • + +
  • devpkg-startup-notification
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libX11All content for pkgconfig file libX11.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXauAll content for pkgconfig file libXau.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxcbAll content for pkgconfig file libxcb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXau
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-base
  • + +
  • devpkg-libXdmcp
  • + +
+

+ +
devpkg-libXcompositeAll content for pkgconfig file libXcomposite.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXfixes
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXcursorAll content for pkgconfig file libXcursor.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXdamageAll content for pkgconfig file libXdamage.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXfixes
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXdmcpAll content for pkgconfig file libXdmcp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXextAll content for pkgconfig file libXext.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXfixesAll content for pkgconfig file libXfixes.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXfontAll content for pkgconfig file libXfont.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-freetype
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXfont2All content for pkgconfig file libXfont2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-freetype
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXftAll content for pkgconfig file libXft.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-freetype
  • + +
+

+ +
devpkg-libXiAll content for pkgconfig file libXi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-libXfixes
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXext
  • + +
+

+ +
devpkg-libXineramaAll content for pkgconfig file libXinerama.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXext
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxkbcommonAll content for pkgconfig file libxkbcommon.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxkbfileAll content for pkgconfig file libxkbfile.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxklavierAll content for pkgconfig file libxklavier.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-libxml2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxml2All content for pkgconfig file libxml2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXmuAll content for pkgconfig file libXmu.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXt
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXpmAll content for pkgconfig file libXpm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXrandrAll content for pkgconfig file libXrandr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXext
  • + +
  • devpkg-libXrender
  • + +
+

+ +
devpkg-libXrenderAll content for pkgconfig file libXrender.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXresAll content for pkgconfig file libXres.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXScrnSaverAll content for pkgconfig file libXScrnSaver.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxsltAll content for pkgconfig file libxslt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libgpg-error
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXtAll content for pkgconfig file libXt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXtstAll content for pkgconfig file libXtst.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXvAll content for pkgconfig file libXv.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXvMCAll content for pkgconfig file libXvMC.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXv
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXxf86miscAll content for pkgconfig file libXxf86misc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXxf86vmAll content for pkgconfig file libXxf86vm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXext
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libyamiAll content for pkgconfig file libyami.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libva
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libzipAll content for pkgconfig file libzip.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-lksctp-toolsAll content for pkgconfig file lksctp-tools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-llvmAll content for pkgconfig file llvm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-luaAll content for pkgconfig file lua.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-LVM2All content for pkgconfig file LVM2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-systemd
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-lz4All content for pkgconfig file lz4.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mariadbAll content for pkgconfig file mariadb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mediasdkAll content for pkgconfig file mediasdk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mesaAll content for pkgconfig file mesa.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libdrm
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-metacityAll content for pkgconfig file metacity.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-metrics-discoveryAll content for pkgconfig file metrics-discovery.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mozjs52All content for pkgconfig file mozjs52.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mozjs60All content for pkgconfig file mozjs60.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mpg123All content for pkgconfig file mpg123.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-multipath-toolsAll content for pkgconfig file multipath-tools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mutterAll content for pkgconfig file mutter.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-libxkbcommon
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libinput
  • + +
  • devpkg-systemd
  • + +
  • devpkg-mesa
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libdrm
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-nautilusAll content for pkgconfig file nautilus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-ncursesAll content for pkgconfig file ncurses.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ndctlAll content for pkgconfig file ndctl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nettleAll content for pkgconfig file nettle.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-network-manager-appletAll content for pkgconfig file network-manager-applet.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gtk3
  • + +
  • devpkg-NetworkManager
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-NetworkManagerAll content for pkgconfig file NetworkManager.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-dbus-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-newtAll content for pkgconfig file newt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nftablesAll content for pkgconfig file nftables.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nghttp2All content for pkgconfig file nghttp2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nsprAll content for pkgconfig file nspr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nssAll content for pkgconfig file nss.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-nspr
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-ntfs-3gAll content for pkgconfig file ntfs-3g.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-oath-toolkitAll content for pkgconfig file oath-toolkit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-open-iscsiAll content for pkgconfig file open-iscsi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-openblasAll content for pkgconfig file openblas.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • openblas
  • + +
+

+ +
devpkg-opencvAll content for pkgconfig file opencv.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-openmpiAll content for pkgconfig file openmpi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-opensslAll content for pkgconfig file openssl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-openvswitchAll content for pkgconfig file openvswitch.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-opusAll content for pkgconfig file opus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-orcAll content for pkgconfig file orc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ostreeAll content for pkgconfig file ostree.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-p11-kitAll content for pkgconfig file p11-kit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pacrunnerAll content for pkgconfig file pacrunner.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
+

+ +
devpkg-pangoAll content for pkgconfig file pango.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-freetype
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-pangommAll content for pkgconfig file pangomm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-cairomm
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-partedAll content for pkgconfig file parted.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pciutilsAll content for pkgconfig file pciutils.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pcreAll content for pkgconfig file pcre.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pcre2All content for pkgconfig file pcre2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pipewireAll content for pkgconfig file pipewire.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pixmanAll content for pkgconfig file pixman.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pkcs11-helperAll content for pkgconfig file pkcs11-helper.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pmdkAll content for pkgconfig file pmdk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-poptAll content for pkgconfig file popt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-postgresqlAll content for pkgconfig file postgresql.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-procps-ngAll content for pkgconfig file procps-ng.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-protobuf-cAll content for pkgconfig file protobuf-c.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pulseaudioAll content for pkgconfig file pulseaudio.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-pygobjectAll content for pkgconfig file pygobject.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libffi
  • + +
+

+ +
devpkg-qpdfAll content for pkgconfig file qpdf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qt3dAll content for pkgconfig file qt3d.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtbaseAll content for pkgconfig file qtbase.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtdeclarativeAll content for pkgconfig file qtdeclarative.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtlocationAll content for pkgconfig file qtlocation.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtsvgAll content for pkgconfig file qtsvg.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qttoolsAll content for pkgconfig file qttools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtwebchannelAll content for pkgconfig file qtwebchannel.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtwebengineAll content for pkgconfig file qtwebengine.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-qtwebchannel
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-qtlocation
  • + +
  • devpkg-qtbase
  • + +
+

+ +
devpkg-RAll content for pkgconfig file R.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-rdma-coreAll content for pkgconfig file rdma-core.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-readlineAll content for pkgconfig file readline.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-restAll content for pkgconfig file rest.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-SDLAll content for pkgconfig file SDL.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2All content for pkgconfig file SDL2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_gfxAll content for pkgconfig file SDL2_gfx.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_imageAll content for pkgconfig file SDL2_image.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_mixerAll content for pkgconfig file SDL2_mixer.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_netAll content for pkgconfig file SDL2_net.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_ttfAll content for pkgconfig file SDL2_ttf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_gfxAll content for pkgconfig file SDL_gfx.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_imageAll content for pkgconfig file SDL_image.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_mixerAll content for pkgconfig file SDL_mixer.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_netAll content for pkgconfig file SDL_net.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_ttfAll content for pkgconfig file SDL_ttf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-shared-mime-infoAll content for pkgconfig file shared-mime-info.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-sqlite-autoconfAll content for pkgconfig file sqlite-autoconf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-startup-notificationAll content for pkgconfig file startup-notification.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-subunitAll content for pkgconfig file subunit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-systemdAll content for pkgconfig file systemd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-tallocAll content for pkgconfig file talloc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-tbbAll content for tbb.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-telemetrics-clientAll content for pkgconfig file telemetrics-client.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-tiffAll content for pkgconfig file tiff.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-uhttpmockAll content for pkgconfig file uhttpmock.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libsoup
  • + +
+

+ +
devpkg-usbredirAll content for pkgconfig file usbredir.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libusb
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-userspace-rcuAll content for pkgconfig file userspace-rcu.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-util-linuxAll content for pkgconfig file util-linux.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-util-macrosAll content for pkgconfig file util-macros.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-v4l-utilsAll content for pkgconfig file v4l-utils.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-systemd
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-valaAll content for pkgconfig file vala.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-waylandAll content for pkgconfig file wayland.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-wayland-protocolsAll content for pkgconfig file wayland-protocols.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-webkitgtkAll content for pkgconfig file webkitgtk.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-woff2All content for pkgconfig file woff2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-brotli
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-xapian-coreAll content for pkgconfig file xapian-core.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xcb-protoAll content for pkgconfig file xcb-proto.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xcb-util-cursorAll content for pkgconfig file xcb-util-cursor.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-xdg-desktop-portalAll content for pkgconfig file xdg-desktop-portal.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xf86-input-wacomAll content for pkgconfig file xf86-input-wacom.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xkbcompAll content for pkgconfig file xkbcomp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libxkbfile
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-xkeyboard-configAll content for pkgconfig file xkeyboard-config.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xmlsec1All content for pkgconfig file xmlsec1.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-nspr
  • + +
  • devpkg-nss
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-libxml2
  • + +
+

+ +
devpkg-xorg-serverAll content for pkgconfig file xorg-server.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pixman
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-base
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-mesa
  • + +
+

+ +
devpkg-xorgprotoAll content for pkgconfig file xorgproto.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xtransAll content for pkgconfig file xtrans.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xzAll content for pkgconfig file xz.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-zlibAll content for pkgconfig file zlib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-zstdAll content for pkgconfig file zstd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
dfu-utilDevice firmware upgrade utilities.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dhcp-serverRun a dhcp server.
+ +
diffoscopeTool for in-depth comparison of files, archives, and directories.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
diffutilsTools for file comparisons and differences, creating patch files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
digikamAn advanced digital photo management application.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
djangoPython model-view-template web framework.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Sphinx
  • + +
+

+ +
dnfThe dnf tool for use with mixer on Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • file
  • + +
  • pygobject
  • + +
+

+ +
docbook-utilsShell scripts to manage DocBook documents.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
docker-composeTool for defining and running multi-container Docker applications.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • containers-basic
  • + +
+

+ +
docutilsTools for converting plaintext into other formats (e.g. HTML, XML, LaTeX).
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • e.g. HTML, XML, LaTeX
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dolphinFile manager focusing on usability.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
domoticaHome Automation software collection.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • qt-basic
  • + +
  • cloud-api
  • + +
  • libglib
  • + +
+

+ +
dosfstoolsDOS filesystem, or (V)FAT, tools.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • V
  • + +
+

+ +
dovecotSecurity-focused IMAP and POP3 email server.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
doxygenDocumentation system for C++, Java, IDL, Python, and PHP.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dpdkData Plane Development Kit core.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dtcDevice Tree Compiler used to describe non-discoverable hardware.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
duperemoveTool for finding duplicated extents and submitting them for deduplication.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
editorsRun popular terminal text editors.
+ +

Includes bundle(s): +

    + +
  • joe
  • + +
  • vim
  • + +
  • emacs
  • + +
+

+ +
editors-devAll packages required to build the editors bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • openssl
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libcap
  • + +
  • net-tools
  • + +
  • procps-ng
  • + +
  • devpkg-nettle
  • + +
  • devpkg-popt
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-audit
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-lua
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • editors
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
educationEducational applications.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • gimp
  • + +
  • libX11client
  • + +
  • education-primary
  • + +
  • education-tertiary
  • + +
  • education-secondary
  • + +
  • education-preschool
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-preschoolEducational applications for the preschool level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-primaryEducational applications for the primary school level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-secondaryEducational applications for the secondary school level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-tertiaryEducational applications for the tertiary school/university level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
elasticsearchA powerful open source search and analytics engine based on the Lucene library.
+ +

Includes bundle(s): +

    + +
  • java-runtime
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
emacsExtensible, customizable terminal text editor.
+ +
enterprise-loginEnable enterprise login systems like Active Directory.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • samba
  • + +
+

+ +
eogEye of GNOME for image viewing and cataloging.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ethtoolUtility for displaying and modifying some parameters of network interface controller.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
evinceGNOME document viewer for multiple formats (PDF, Postscript, djvu, tiff, dvi, XPS, etc).
+ +

Includes bundle(s): +

    + +
  • PDF, Postscript, djvu, tiff, dvi, XPS, etc
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
evolutionApplication for integrated email, calendar, and address book functionality.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • gnome-base-libs
  • + +
  • webkitgtk
  • + +
  • openldap
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
extremetuxracerDownhill penguin racing game featuring Tux
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
faas-cliCLI for use with OpenFaaS - a serverless functions framework for Docker & Kubernetes.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fileFile type identification utility.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
file-rollerGNOME archive manager utility.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
findutilsGNU utilities to locate files (e.g., find, xargs, and locate).
+ +

Includes bundle(s): +

    + +
  • e.g., find, xargs, and locate
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fioFlexible I/O tester, often used for load simulation.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
firefoxWeb browser with support for modern web applications from mozilla.org.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • libX11client
  • + +
  • python3-basic
  • + +
+

+ +
firmware-updateUpdate the system's firmware.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • fwupdate
  • + +
  • polkit
  • + +
  • libX11client
  • + +
  • cryptography
  • + +
+

+ +
flacFree Lossless Audio Codec (FLAC) audio format tools.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • FLAC
  • + +
+

+ +
flatpakRun sandboxed desktop application bundles, or build flatpak packages.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • git
  • + +
+

+ +
flexTool for generating programs that recognize lexical patterns in text.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fluidsynthA real-time software synthesizer based on the SoundFont 2 specifications
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
fontforgeOutline and bitmap font editor.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fonts-basicFonts and fonts tooling.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • lib-opengl
  • + +
+

+ +
fonttoolsTools to manipulate system and user fonts.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • openblas
  • + +
+

+ +
fossilA simple, high-reliability, distributed software configuration management system.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
fuseFilesystem in Userspace (FUSE) to export a virtual filesystem to Linux kernel, or mount filesystem implementation for non-privileged users.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • FUSE
  • + +
+

+ +
fwupdateFirmware update tool for UEFI and other standards.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gamesPlay games in Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • theme, data, etc
  • + +
  • supertuxkart
  • + +
  • lib-opengl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • 32-bit
  • + +
  • p11-kit
  • + +
  • native
  • + +
  • os-core-legacy
  • + +
  • minetest
  • + +
  • extremetuxracer
  • + +
  • perl-basic
  • + +
  • NetworkManager-extras
  • + +
  • diffutils
  • + +
+

+ +
games-devAll packages required to build the games bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-SDL_ttf
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-SDL2_net
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-SDL2
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-newt
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-SDL2_gfx
  • + +
  • perl-basic-dev
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • devpkg-GConf
  • + +
  • devpkg-network-manager-applet
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-SDL_net
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-geoclue
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • gdb
  • + +
  • devpkg-SDL_gfx
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-brotli
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-libndp
  • + +
  • devpkg-cairo
  • + +
  • devpkg-SDL_image
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-gjs
  • + +
  • devpkg-acl
  • + +
  • devpkg-SDL2_ttf
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-glew
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-woff2
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libical
  • + +
  • devpkg-wayland
  • + +
  • gjs
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-libnotify
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • games
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-gcr
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-NetworkManager
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • texlive
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libgudev
  • + +
  • diffutils
  • + +
+

+ +
gdbGNU debugger with support for Ada, Assembly, C, C++, D, Fortran, Go, and more.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
geanyA fast and lightweight IDE using GTK+.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
geditGNOME text editor with full support for UTF-8 and syntax highlighting.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gftpMultithreaded FTP client for *NIX based systems.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gimpGNU Image Manipulation Program.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
gitDistributed version-control system for tracking changes.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • p11-kit
  • + +
  • less
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gjsJavaScript bindings for GObjects, GNOME.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
glibc-localeGNU/Linux locale files to support cultural conventions of a language and region.
+ +
glmark2OpenGL 2.0 and ES 2.0 benchmark.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
globalGNU GLOBAL source code tagging system.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-base-libsCommon libraries used by GNOME and related applications.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • libX11client
  • + +
  • libglib
  • + +
+

+ +
gnome-calculatorSoftware calculator integrated with the GNOME desktop environment.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-charactersUtility application to find and insert unusual characters.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • gjs
  • + +
+

+ +
gnome-color-managerFramework for GNOME to manage, install, and generate color profiles.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-disk-utilityApplications for managing and configuring disk drives and media.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-font-viewerFont viewer utility for GNOME.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-logsLog viewer for the systemd journal.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-musicGNOME music player application with management features.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-photosApplication for browsing, editing, and organizing photos.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gstreamer
  • + +
  • NetworkManager-extras
  • + +
+

+ +
gnome-screenshotTake screenshots of the desktop or a window and save it to a file.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-system-monitorProcess viewer and system resource monitor.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-todoMinimalist personal task manager.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • desktop-gnomelibs
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • gjs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-weatherView current weather conditions and forecasts.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • libX11client
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnuplotGraphing utility that outputs to X11, PostScript, PNG, GIF, and others.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
go-basicBuild and run Go language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • git
  • + +
+

+ +
go-basic-devAll packages required to build the go-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • devpkg-xz
  • + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • go-basic
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • less
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • libxslt
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • devpkg-pcre2
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
goaccessReal-time web log analyzer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
gpartedA Partition Magic clone, frontend to GNU Parted.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gpgmeGPG encryption tools.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gphoto2Command line interface to libgphoto2.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
graphvizLibrary for parsing graphs in xdot format.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
gstreamerStreaming media framework with graph-based structure.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
gtk-vncA GTK2 widget for VNC clients.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • pulseaudio
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gtkwaveA wave viewer which reads LXT, LXT2, VZT, GHW and VCD/EVCD files.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gvimA highly configurable version of the vi text editor with advanced features, such as a GUI.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gwenviewAn image viewer with simple adjustments--ideal for browsing collections.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gzipA GNU lossless data compression/decompression utility.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
haproxyThe Reliable, High Performance TCP/HTTP Load Balancer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
hardware-bluetoothSoftware to enable use of Bluetooth hardware.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
hardware-gpuFirmware and tools for GPU support.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • lib-opengl
  • + +
  • linux-firmware-extras
  • + +
+

+ +
hardware-printingFirmware and tools for printer support.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libX11client
  • + +
+

+ +
hardware-uefiProvides bootloader tools for booting on a UEFI based system.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • os-core
  • + +
  • linux-firmware
  • + +
+

+ +
hardware-wifiFirmware and tools for basic WiFi support.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • wpa_supplicant
  • + +
  • linux-firmware-wifi
  • + +
  • NetworkManager-extras
  • + +
+

+ +
haskell-basicBuild and run Haskell language programs.
+ +

Includes bundle(s): +

    + +
  • devpkg-zlib
  • + +
  • xz
  • + +
  • p11-kit
  • + +
  • make
  • + +
  • perl-basic
  • + +
  • c-basic
  • + +
  • git
  • + +
+

+ +
hexchatA graphical IRC chat client; header and path for HexChat plugins.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • os-core-webproxy
  • + +
  • lib-openssl
  • + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
hpc-utilsProvide userspace management programs for various HPC-related programs.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
htopInteractive text-mode process viewer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
httpdApache HyperText Transfer Protocol (HTTP) Server daemon.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • HTTP
  • + +
  • lib-openssl
  • + +
+

+ +
hugoStatic Web site generator written in Go.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
hwlocHardware locality provides a portable abstraction of the topology of modern architectures.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iasimageTool for creating Intel Automotive Service (IAS) images, a binary file format understood by Intel© Slim Bootloader.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • IAS
  • + +
+

+ +
icdiffHiglights with color, beyond diff, to show changes between similar files.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
icecreamDistributed network compilation and stream download utility.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iftopDisplay bandwidth usage on an interface.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
igt-gpu-toolsIntel graphics performance diagnostics.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
ImageMagickCreate, edit, or compose bitmap images.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
+

+ +
inkscapeProfessional vector graphics editor.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
inotify-toolsCommand line programs, with interface to inotify, to monitor filesystem events.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
intltoolUtility scripts for internationalizing XML.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iotopPer process I/O bandwidth monitor.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iperfInternet protocol tool for measuring network performance.
+ +
ipmitoolCommand-line interface to manage IPMI-enabled devices.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
iproute2Utilities for controlling TCP/IP networking and traffic control.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iptablesShared Xtables code for extensions and iproute2.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ipvsadmIP virtual server tool to implement transport-layer load balancing inside Linux kernel.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
irssiInternet Relay Chat (IRC) text-mode client program.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • lib-openssl
  • + +
  • IRC
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
java-basicBuild and run Java language programs.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • p11-kit
  • + +
  • perl-basic
  • + +
  • which
  • + +
+

+ +
java-runtimeRuntime environment for Java language programs.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
+

+ +
java11-basicBuild and run Java 11 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • which
  • + +
  • libX11client
  • + +
  • python3-basic
  • + +
+

+ +
java9-basicBuild and run Java 9 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • which
  • + +
  • libX11client
  • + +
  • python3-basic
  • + +
+

+ +
joeGNU terminal-based text editor.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
jqLightweight and flexible command-line JSON processor.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
jupyterJupyter metapackage to install all Jupyter components at one time.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Sphinx
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
kameraAccess and manipulate pictures on a digital camera.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kateText editor that can open multiple files simultaneously.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kbdLibrary to manage the Linux keymaps.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kcachegrindFrontend visualization tool for Valgrind's cachegrind & callggrind.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
+

+ +
kcalcScientific calculator.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kde-frameworks5Common KDE Frameworks 5 libraries.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • lib-qt5webengine
  • + +
+

+ +
kde-frameworks5-devAll packages required to build the kde-frameworks5 bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-qtlocation
  • + +
  • devpkg-libXt
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-qtdeclarative
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • qt-basic-dev
  • + +
  • devpkg-libffi
  • + +
  • kde-frameworks5
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-xorg-server
  • + +
  • devpkg-cairo
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-qtwebchannel
  • + +
  • scons
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • xz
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-attica
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • gpgme
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-qtsvg
  • + +
  • devpkg-libgudev
  • + +
  • diffutils
  • + +
+

+ +
kdeconnect-kdeNo detailed summary available
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • qt-core
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kdenliveA non-linear video editor for Linux using the MLT video framework.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kdiff3Feature-rich code comparison utility.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
+

+ +
keepalivedFailover and monitoring daemon for Linux Virtual Server (LVS) clusters.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • LVS
  • + +
  • lib-openssl
  • + +
+

+ +
keepassxcCross-platform port of KeePass password manager with industry-standard AES.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kernel-awsRun the Amazon Web Services (AWS) specific kernel.
+ +

Includes bundle(s): +

    + +
  • AWS
  • + +
  • bootloader
  • + +
+

+ +
kernel-containerRun the Clear Linux OS container specific kernel.
+ +
kernel-gceRun the Google Compute Engine (GCE) specific kernel.
+ +

Includes bundle(s): +

    + +
  • GCE
  • + +
  • bootloader
  • + +
+

+ +
kernel-hypervRun the Microsoft Hyper-V specific kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
+

+ +
kernel-hyperv-ltsRun the Microsoft Hyper-V specific LTS kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
+

+ +
kernel-hyperv-miniRun the Microsoft Hyper-V mini-os specific kernel.
+ +

Includes bundle(s): +

    + +
  • kernel-hyperv
  • + +
+

+ +
kernel-installInstalls kernel, initrd, kernel config, system map, and creates a bootloader entry for the new kernel.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kernel-iot-lts2017-preempt-rtRun the Intel "PK" kernel, an enterprise-style kernel with backports, plus PREEMPT_RT support.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
+

+ +
kernel-iot-lts2018Run the Intel "PK" kernel, an enterprise-style kernel with backports.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
+

+ +
kernel-iot-lts2019Run the Intel "PK" kernel, an enterprise-style kernel with backports.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
+

+ +
kernel-kvmRun the Kernel-based Virtual Machine (KVM) specific kernel.
+ +

Includes bundle(s): +

    + +
  • qemu-guest-additions
  • + +
  • KVM
  • + +
  • bootloader
  • + +
+

+ +
kernel-ltsRun the latest long-term support native kernel.
+ +

Includes bundle(s): +

    + +
  • kernel-lts2018
  • + +
+

+ +
kernel-lts-dkmsSupport module for building/loading via Dynamic Kernel Module System (DKMS) in LTS kernel.
+ +

Includes bundle(s): +

    + +
  • DKMS
  • + +
  • kernel-lts2018-dkms
  • + +
+

+ +
kernel-lts2017Run the long-term support 4.14 native kernel.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
+

+ +
kernel-lts2018Run the long-term support 4.19 native kernel.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
+

+ +
kernel-lts2018-dkmsSupport for module building/loading via Dynamic Kernel Module System (DKMS) in LTS2018 kernel.
+ +

Includes bundle(s): +

    + +
  • c-basic
  • + +
  • DKMS
  • + +
  • linux-lts2018-dev
  • + +
+

+ +
kernel-lts2018-preempt-rtRun the Intel "PK" kernel 2018, an enterprise-style kernel with backports, plus PREEMPT_RT support.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
+

+ +
kernel-mainline-vanillaRun the mainline current vanilla kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • linux-firmware
  • + +
  • qemu-guest-additions
  • + +
  • hardware-uefi
  • + +
+

+ +
kernel-nativeRun the native kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • linux-firmware
  • + +
  • qemu-guest-additions
  • + +
  • hardware-uefi
  • + +
+

+ +
kernel-native-currentRun the mainline current native kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • linux-firmware
  • + +
  • qemu-guest-additions
  • + +
  • hardware-uefi
  • + +
+

+ +
kernel-native-dkmsSupport module for building/loading via Dyamic Kernel Module System (DKMS) in native kernel.
+ +

Includes bundle(s): +

    + +
  • linux-dev
  • + +
  • c-basic
  • + +
  • DKMS
  • + +
+

+ +
kernel-networktestKernel with NFS root FS support and modular network drivers.
+ +
kernel-oracleRun the Oracle Cloud specific kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
+

+ +
kernel-pkRun the Intel "PK" kernel and enterprise-style kernel with backports.
+ +

Includes bundle(s): +

    + +
  • kernel-iot-lts2018
  • + +
+

+ +
kernel-rtRun the native kernel with preempt_rt patchset.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • linux-firmware-extras
  • + +
+

+ +
keychainManage SSH and GPG keys; allows one long-running ssh-agent process per system.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kleopatraCertificate Manager and Unified Crypto GUI.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kojiSet up a koji build service based on NFS mounts.
+ +

Includes bundle(s): +

    + +
  • package-utils
  • + +
  • python2-basic
  • + +
  • postgresql
  • + +
  • Sphinx
  • + +
  • web-server-basic
  • + +
  • nfs-utils
  • + +
  • git
  • + +
+

+ +
konquerorKDE file manager and Web browser.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
konsoleTerminal emulator for KDE.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
konversationInternet Relay Chat (IRC) client built on KDE platform.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • IRC
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kritaEdit and paint bitmap images.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ksysguardTrack and control the processes running in your system.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kvm-hostRun Kernel-based Virtual Machines (KVM).
+ +

Includes bundle(s): +

    + +
  • ceph
  • + +
  • iptables
  • + +
  • polkit
  • + +
  • libX11client
  • + +
  • KVM
  • + +
+

+ +
kvm-host-devAll packages required to build the kvm-host bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-oath-toolkit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • joe
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • glibc-locale
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • devpkg-usbredir
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-libvirt
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-cairo
  • + +
  • dosfstools
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • acpica-unix2
  • + +
  • devpkg-parted
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-nettle
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-xmlsec1
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • gzip
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • devpkg-nftables
  • + +
  • devpkg-libgudev
  • + +
  • kvm-host
  • + +
  • diffutils
  • + +
+

+ +
kvm-host-extrasRun virtual machines as deployed infrastructure.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • kvm-host
  • + +
+

+ +
latte-dockA dock based on Plasma Frameworks.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lessTerminal-based file-pager for viewing text files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
letsencrypt-clientObtain and renew valid SSL certificates through Let's Encrypt's ACME service.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloud-api
  • + +
+

+ +
lftpFile transfer client for http, ftp, sftp and more.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
lib-imageformatHelpers for reading images.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-opengl
  • + +
  • libglib
  • + +
+

+ +
lib-openglHelpers for 3D graphics.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
lib-opensslToolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • TLS
  • + +
+

+ +
lib-qt5webengineRun programs that use the Qt Web Engine module.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
+

+ +
lib-sambaHelper libraries for accessing samba shares.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
libarchiveMulti-format archive and compression library.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
libglibCommon C routines used by Gtk+ and other libs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
libnlLibrary for applications that deal with netlink sockets.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libreofficeFree office productivity suite.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • openldap
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libstdcppC++ runtime support.
+ +
libva-utilsCollection of utilities and examples to exercise VA-API (Video Acceleration API)
+ +

Includes bundle(s): +

    + +
  • Video Acceleration API
  • + +
  • libX11client
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libX11clientGrouping only bundle for use in X using bundles.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • lib-opengl
  • + +
  • lib-openssl
  • + +
+

+ +
libxml2XML parsing library, version 2.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libxsltXML stylesheet transformation library for converting XML into HTML.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libzmqZMQ tools and libraries.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lightdmLightDM login manager with GTK greeter.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
linux-devFiles for building modules against the native kernel.
+ +
linux-firmwareFirmware for kernel drivers.
+ +
linux-firmware-extrasExtra firmware for the kernel.
+ +
linux-firmware-wifiWifi adapter firmware.
+ +
linux-iot programs for developing Linux iot LTS 2018 version
linux-iot programs for developing Linux iot SOS LTS 2018 version
linux-lts-devFiles for building modules against LTS kernel.
+ +

Includes bundle(s): +

    + +
  • linux-lts2018-dev
  • + +
+

+ +
linux-lts2017-devFiles for building modules against LTS2017 kernel.
+ +
linux-lts2018-devFiles for building modules against LTS2018 kernel.
+ +
linux-toolsTools for use in Linux.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libglib
  • + +
  • binutils
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
llvmLLVM/Clang modular and reusable compiler toolchain.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lm-sensorsHardware health monitoring with access to temperature, voltage, and fan speed sensors, and their setup.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
localesMachine-readable data files, shared objects, and programs for localization and internationalization.
+ +

Includes bundle(s): +

    + +
  • glibc-locale
  • + +
+

+ +
logrotateAutomatic rotation compression and removal and mailing of log files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ltpLinux Test Project.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lua-basicProgramming language designed for extending applications.
+ +
LyXDocument processor and WYSIWYM LaTeX editor.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • texlive
  • + +
+

+ +
lz4Fast compression algorithm to compress and decompress lz4 files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
machine-learning-basicBuild machine learning applications with a full suite of libraries.
+ +

Includes bundle(s): +

    + +
  • machine-learning-tensorflow
  • + +
  • graphviz
  • + +
  • cloud-api
  • + +
  • python-data-science
  • + +
  • devpkg-boost
  • + +
  • machine-learning-pytorch
  • + +
  • devpkg-fann
  • + +
  • machine-learning-mycroft
  • + +
  • Sphinx
  • + +
  • devpkg-glog
  • + +
  • devpkg-tbb
  • + +
  • devpkg-protobuf-c
  • + +
  • devpkg-gflags
  • + +
  • devpkg-googletest
  • + +
  • devpkg-opencv
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • computer-vision-basic
  • + +
  • c-basic
  • + +
  • python-extras
  • + +
  • openblas
  • + +
+

+ +
machine-learning-mycroftBuild machine learning applications with Mycroft, an open-source voice assistant, and more.
+ +

Includes bundle(s): +

    + +
  • python-data-science
  • + +
+

+ +
machine-learning-pytorchBuild machine learning applications with PyTorch, an optimized tensor library for deep learning.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • Sphinx
  • + +
+

+ +
machine-learning-tensorflowBuild machine learning applications using Tensorflow, a library for numerical computation using deep neural networks.
+ +

Includes bundle(s): +

    + +
  • cloud-api
  • + +
  • python-data-science
  • + +
+

+ +
machine-learning-web-uiWeb-based, interactive tools for machine learning.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloud-api
  • + +
  • python-data-science
  • + +
  • Sphinx
  • + +
  • R-extras
  • + +
  • jupyter
  • + +
+

+ +
mail-utilsProcess, read, and send email.
+ +

Includes bundle(s): +

    + +
  • notmuch
  • + +
  • mutt
  • + +
+

+ +
mail-utils-devAll packages required to build the mail-utils bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • mail-utils
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gmime
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-cyrus-sasl
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • Sphinx
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • gzip
  • + +
  • devpkg-xapian-core
  • + +
  • kbd
  • + +
  • gpgme
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-lua
  • + +
  • diffutils
  • + +
+

+ +
makeBuild automation tool that controls generation of executables and other target files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
maker-3dprinting3D printing tools for makers.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Sphinx
  • + +
  • qt-basic
  • + +
  • maker-basic
  • + +
  • openscad
  • + +
+

+ +
maker-basicBasic tools for makers and experimenters.
+ +

Includes bundle(s): +

    + +
  • inkscape
  • + +
  • libX11client
  • + +
  • python-extras
  • + +
  • minicom
  • + +
+

+ +
maker-cncCNC carving tools for makers.
+ +

Includes bundle(s): +

    + +
  • python2-basic
  • + +
  • inkscape
  • + +
  • pygobject
  • + +
  • maker-basic
  • + +
  • openscad
  • + +
  • python-extras
  • + +
+

+ +
maker-gisGIS/Mapping tools for makers.
+ +

Includes bundle(s): +

    + +
  • Babel
  • + +
  • desktop-kde-libs
  • + +
  • maker-basic
  • + +
+

+ +
man-pagesLinux man-pages to document kernel and C library interfaces for user-space programs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mariadbMariaDB Connector/C dynamic library/Database daemon.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
meldvisual file difference and merging tool, targeted at developers.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • desktop-gnomelibs
  • + +
+

+ +
memcachedhigh performance multithreaded event-based key/value cache store.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mercurialA scalable distributed software configuration management (SCM) tool.
+ +

Includes bundle(s): +

    + +
  • SCM
  • + +
  • python3-basic
  • + +
+

+ +
minetestA Voxel multi-player game inspired by minecraft.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • minetestserver
  • + +
  • libX11client
  • + +
+

+ +
minetestserverA headless game server for minetest.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
minicomA text-based serial port communications program.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mixerTool to create custom Clear Linux OS releases.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • sysadmin-basic
  • + +
  • containers-basic
  • + +
  • dnf
  • + +
  • os-installer
  • + +
  • zstd
  • + +
  • openssl
  • + +
  • git
  • + +
+

+ +
mkosiGenerate disk images.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
monoOpen source implementation of .NET platform, including runtime and compiler.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mpg123MPEG layer 1/2/3 audio player and decoder. MPEG 1.0 layer 3 known as MP3.
+ +

Includes bundle(s): +

    + +
  • pulseaudio
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
mpvMultimedia player and streamer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mtd-utilsMemory technology device utilities (usually flash) exposing interface between hardware drivers and upper system layers.
+ +

Includes bundle(s): +

    + +
  • usually flash
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
mtrNetwork diagnostic tool for analyzing latency, combining the functionality of the 'traceroute' and 'ping' programs.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
MuseScoreFree music composition and notation software
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
muslC standard library compiler toolchain.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
muttSmall but powerful mail client.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
nasmGeneral purpose x86 assembler.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nautilusDefault file manager for GNOME.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ncduDisk usage analyzer with ncurses interface.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
neomuttMutt mail client fork with additional features.
+ +

Includes bundle(s): +

    + +
  • gpgme
  • + +
  • notmuch
  • + +
  • libglib
  • + +
  • openldap
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
net-toolsBasic Networking Tools
+ +
netkit-telnetBasic telnet client.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
network-basicRun network utilities and modify network settings.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • iptables
  • + +
  • openvswitch
  • + +
  • ethtool
  • + +
  • wpa_supplicant
  • + +
  • curl
  • + +
  • net-tools
  • + +
  • wget
  • + +
  • znc
  • + +
  • iproute2
  • + +
  • clr-network-troubleshooter
  • + +
  • dpdk
  • + +
  • openssl
  • + +
  • perl-basic
  • + +
+

+ +
network-basic-devAll packages required to build the network-basic bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • devpkg-libnetfilter_queue
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-libnetfilter_cthelper
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • perl-basic-dev
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-pkcs11-helper
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • devpkg-libnetfilter_cttimeout
  • + +
  • dev-utils
  • + +
  • devpkg-cairo
  • + +
  • devpkg-ipset
  • + +
  • binutils
  • + +
  • devpkg-apr
  • + +
  • devpkg-acl
  • + +
  • network-basic
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • Sphinx
  • + +
  • devpkg-libnl
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-freetype
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libpcap
  • + +
  • devpkg-nftables
  • + +
  • diffutils
  • + +
+

+ +
network-monitor-nodeRun network security monitoring node.
+ +

Includes bundle(s): +

    + +
  • suricata
  • + +
+

+ +
network-security-monitoringVarious tools to test and improve network security.
+ +

Includes bundle(s): +

    + +
  • network-monitor-node
  • + +
  • nmap
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • wireshark
  • + +
  • network-basic
  • + +
+

+ +
network-time-sensitiveVarious tools and plugins to set up TSN/TCC.
+ +

Includes bundle(s): +

    + +
  • alsa-utils
  • + +
  • network-basic
  • + +
+

+ +
NetworkManagerConfigure network interfaces and maintain active network connection.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • wpa_supplicant
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
NetworkManager-basicNetworkManager plugins and desktop integration
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • NetworkManager
  • + +
  • libX11client
  • + +
+

+ +
NetworkManager-extrasNetworkManager plugins and desktop integration
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • NetworkManager
  • + +
  • wpa_supplicant
  • + +
  • libX11client
  • + +
+

+ +
nfs-utilsServer and client tooling for network file systems (NFS).
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • NFS
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nginxHTTP server, reverse proxy, IMAP/POP3 proxy server.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
nginx-mainlineLightweight HTTP server and IMAP/POP3 proxy server, mainline release.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
nloadMonitor network traffic and bandwidth usage.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nmapUtility for network device discovery and security auditing.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nodejs-basicRun JavaScript server side for fast, scalable network applications.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
notmuchSystem for indexing, searching, reading, and tagging large collections of email messages in maildir or mh format.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
ocaml-basicBuild and run ocaml language programs.
+ +
octaveHigh-level programming language, primarily intended for numerical computations.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • openblas
  • + +
+

+ +
offlineimapSynchronize emails between two repositories via IMAP.
+ +

Includes bundle(s): +

    + +
  • python2-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
okularUniversal document viewer.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
openblasOptimized BLAS (linear algebra) library based on GotoBLAS2 1.13 BSD version.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • linear algebra
  • + +
+

+ +
openldapLightweight Directory Access Protocol (LDAP) client and server tools.
+ +

Includes bundle(s): +

    + +
  • LDAP
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
openmpiHPC tools for running on jobs on clusters.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
openqaOpenQA infrastructure, providing a significant part of release validation testing.
+ +

Includes bundle(s): +

    + +
  • web-server-basic
  • + +
  • kvm-host
  • + +
  • postgresql
  • + +
  • perl-extras
  • + +
+

+ +
openscadThe programmers solid 3D CAD modeller.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
openssh-serverRun a secure shell (SSH) server for access from remote machines.
+ +

Includes bundle(s): +

    + +
  • SSH
  • + +
  • lib-openssl
  • + +
+

+ +
opensslToolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.
+ +

Includes bundle(s): +

    + +
  • TLS
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
openstack-commonA full suite of various open-stack components.
+ +

Includes bundle(s): +

    + +
  • Babel
  • + +
  • libstdcpp
  • + +
  • cloud-api
  • + +
  • keepalived
  • + +
  • libX11client
  • + +
  • memcached
  • + +
  • haproxy
  • + +
  • devpkg-apr-util
  • + +
  • perl-basic
  • + +
  • python-extras
  • + +
  • openblas
  • + +
+

+ +
openvswitchA production quality, multilayer virtual switch--open vswitch kernel modules.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
os-clear-containersControl Clear Containers guest setup and workloads.
+ +
os-cloudguestRun any initialization processes required of a generic cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • ethtool
  • + +
  • libglib
  • + +
  • VM
  • + +
  • sudo
  • + +
  • openssh-server
  • + +
+

+ +
os-cloudguest-awsRun any initialization processes required of an AWS cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • sudo
  • + +
  • libglib
  • + +
  • VM
  • + +
+

+ +
os-cloudguest-azureRun any initialization process requried of an Azure cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ethtool
  • + +
  • VM
  • + +
  • net-tools
  • + +
  • parted
  • + +
  • sudo
  • + +
  • openssl
  • + +
  • openssh-server
  • + +
+

+ +
os-cloudguest-gceRun any initialization processes required of an Google Compute Engine (GCE) cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • lib-openssl
  • + +
  • GCE
  • + +
  • sudo
  • + +
  • which
  • + +
+

+ +
os-cloudguest-kvmRun any initialization processes required for qemu-kvm.
+ +

Includes bundle(s): +

    + +
  • qemu-guest-additions
  • + +
+

+ +
os-cloudguest-oracleRun any initialization processes required of an Oracle Cloud guest.
+ +

Includes bundle(s): +

    + +
  • sudo
  • + +
  • openssh-server
  • + +
  • libglib
  • + +
+

+ +
os-cloudguest-vmwareRun any initialization processes required for VMWare virtual machines (VM).
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • VM
  • + +
  • lib-openssl
  • + +
+

+ +
os-cloudguest-vmware-guiRun any initialization processes required for VMWare VMs.
+ +

Includes bundle(s): +

    + +
  • os-cloudguest-vmware
  • + +
  • libstdcpp
  • + +
  • libX11client
  • + +
+

+ +
os-clr-on-clrRun any process required for Clear Linux OS development.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxcb
  • + +
  • dev-utils
  • + +
  • storage-utils
  • + +
  • global
  • + +
  • devpkg-libXfixes
  • + +
  • sysadmin-basic
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • scons
  • + +
  • go-basic
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-mesa
  • + +
  • devpkg-libzip
  • + +
  • package-builder
  • + +
  • storage-utils-dev
  • + +
  • network-basic
  • + +
  • devpkg-gtk
  • + +
  • mkosi
  • + +
  • os-core
  • + +
  • libarchive
  • + +
  • os-core-update-dev
  • + +
  • diffoscope
  • + +
  • nodejs-basic
  • + +
  • mail-utils-dev
  • + +
  • devpkg-libdrm
  • + +
  • cabextract
  • + +
  • devpkg-pmdk
  • + +
  • perl-basic
  • + +
  • devpkg-libXvMC
  • + +
  • network-basic-dev
  • + +
  • devpkg-libva
  • + +
  • mail-utils
  • + +
  • sysadmin-basic-dev
  • + +
  • mixer
  • + +
  • dnf
  • + +
  • koji
  • + +
  • devpkg-xcb-proto
  • + +
  • os-core-dev
  • + +
  • c-basic
  • + +
  • python3-basic
  • + +
  • devpkg-libXxf86vm
  • + +
  • devpkg-libXdamage
  • + +
  • devpkg-telemetrics-client
  • + +
  • devpkg-libarchive
  • + +
  • dev-utils-dev
  • + +
  • unbundle
  • + +
  • editors
  • + +
  • openssh-server
  • + +
  • kvm-host
  • + +
+

+ +
os-clr-on-clr-devAll packages required to build the os-clr-on-clr bundle.
+ +

Includes bundle(s): +

    + +
  • zip
  • + +
  • devpkg-libpipeline
  • + +
  • file
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • devpkg-libnetfilter_queue
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-libnetfilter_cthelper
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libmspack
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-openmpi
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • fontforge
  • + +
  • kvm-host-dev
  • + +
  • devpkg-krb5
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • network-basic-dev
  • + +
  • devpkg-libva
  • + +
  • devpkg-oath-toolkit
  • + +
  • devpkg-popt
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • os-clr-on-clr
  • + +
  • devpkg-font-util
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • devpkg-p11-kit
  • + +
  • unzip
  • + +
  • devpkg-guile
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libuser
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-newt
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • plzip
  • + +
  • devpkg-cmrt
  • + +
  • perl-basic-dev
  • + +
  • ccache
  • + +
  • devpkg-libXv
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-systemd
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • xemacs
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-gmime
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-libzip
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • joe
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-pkcs11-helper
  • + +
  • devpkg-libxkbcommon
  • + +
  • curl
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-qtdeclarative
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-usbredir
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • devpkg-libnetfilter_cttimeout
  • + +
  • Babel
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-libndp
  • + +
  • devpkg-cairo
  • + +
  • dosfstools
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-R
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-apr
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • acpica-unix2
  • + +
  • devpkg-parted
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-librepo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • cryptography
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-apr-util
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-libgd
  • + +
  • editors-dev
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-userspace-rcu
  • + +
  • devpkg-libical
  • + +
  • devpkg-libsolv
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • gjs
  • + +
  • devpkg-fuse
  • + +
  • devpkg-graphviz
  • + +
  • dev-utils-dev
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • devpkg-libmicrohttpd
  • + +
  • wget
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • which
  • + +
  • devpkg-xmlsec1
  • + +
  • devpkg-zstd
  • + +
  • devpkg-pciutils
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-hwloc
  • + +
  • go-basic-dev
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • storage-utils-dev
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • devpkg-libabigail
  • + +
  • gzip
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-subunit
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • mail-utils-dev
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-xapian-core
  • + +
  • xz
  • + +
  • devpkg-attica
  • + +
  • devpkg-expat
  • + +
  • devpkg-gcr
  • + +
  • iproute2
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • cpio
  • + +
  • devpkg-NetworkManager
  • + +
  • sysadmin-basic-dev
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • texlive
  • + +
  • devpkg-ndctl
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • bc
  • + +
  • devpkg-qtsvg
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
os-coreRun a minimal Linux userspace.
+ +
os-core-devAll packages required to build the os-core bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • net-tools
  • + +
  • procps-ng
  • + +
  • devpkg-nettle
  • + +
  • devpkg-popt
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • devpkg-procps-ng
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • gdb
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
os-core-legacyProvides basic 32 bit libs
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
+

+ +
os-core-searchProvides swupd search capability.
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
  • python3-basic
  • + +
+

+ +
os-core-updateProvides basic suite for running Clear Linux OS for IA Updater.
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
  • os-core-webproxy
  • + +
+

+ +
os-core-update-devAll packages required to build the os-core-update bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • os-core-update
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-libidn2
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
os-core-webproxyProvides basic suite for using http proxies.
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
  • libglib
  • + +
  • p11-kit
  • + +
+

+ +
os-installerRun image creation and installation for Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • linux-firmware-extras
  • + +
  • wpa_supplicant
  • + +
  • curl
  • + +
  • linux-firmware-wifi
  • + +
  • kbd
  • + +
  • less
  • + +
  • iproute2
  • + +
+

+ +
os-testsuiteProvides minimal functionality for core testing functions.
+ +

Includes bundle(s): +

    + +
  • file
  • + +
  • acl
  • + +
  • curl
  • + +
  • cpio
  • + +
  • binutils
  • + +
  • make
  • + +
  • sudo
  • + +
  • perl-basic
  • + +
  • git
  • + +
  • diffutils
  • + +
+

+ +
os-testsuite-0dayHelpers for the 0day kernel testing framework.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • dev-utils
  • + +
  • intltool
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-mariadb
  • + +
  • memcached
  • + +
  • llvm
  • + +
  • acpica-unix2
  • + +
  • perl-basic
  • + +
  • c-basic
  • + +
+

+ +
os-testsuite-automotiveProvides minimal functionality for automotive testing functions.
+ +

Includes bundle(s): +

    + +
  • os-testsuite-graphics
  • + +
  • os-testsuite
  • + +
  • net-tools
  • + +
+

+ +
os-testsuite-graphicsProvides minimal functionality for graphics testing functions.
+ +

Includes bundle(s): +

    + +
  • glmark2
  • + +
+

+ +
os-testsuite-phoronixRun the Phoronix test suite.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2_gfx
  • + +
  • devpkg-cairo
  • + +
  • devpkg-SDL_image
  • + +
  • devpkg-fftw
  • + +
  • devpkg-pcre
  • + +
  • devpkg-libXv
  • + +
  • redis-native
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-glog
  • + +
  • devpkg-hwloc
  • + +
  • go-basic
  • + +
  • devpkg-openssl
  • + +
  • scons
  • + +
  • devpkg-gflags
  • + +
  • java-basic
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-SDL_mixer
  • + +
  • devpkg-SDL2_ttf
  • + +
  • devpkg-acl
  • + +
  • gnuplot
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-gtk
  • + +
  • bison
  • + +
  • devpkg-SDL_ttf
  • + +
  • devpkg-SDL2_mixer
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • fio
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-SDL2_net
  • + +
  • nasm
  • + +
  • devpkg-openmpi
  • + +
  • devpkg-SDL
  • + +
  • games
  • + +
  • devpkg-curl
  • + +
  • R-basic
  • + +
  • os-testsuite-phoronix-desktop
  • + +
  • flex
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-opus
  • + +
  • devpkg-popt
  • + +
  • desktop-apps-extras
  • + +
  • devpkg-libXvMC
  • + +
  • devpkg-libogg
  • + +
  • gimp
  • + +
  • devpkg-glu
  • + +
  • yasm
  • + +
  • devpkg-SDL_net
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libnl
  • + +
  • hwloc
  • + +
  • devpkg-flac
  • + +
  • unzip
  • + +
  • c-basic
  • + +
  • devpkg-lua
  • + +
  • python3-basic
  • + +
  • openblas
  • + +
  • devpkg-SDL_gfx
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • os-testsuite-phoronix-server
  • + +
  • octave
  • + +
  • devpkg-attr
  • + +
  • bc
  • + +
  • php-basic
  • + +
  • openmpi
  • + +
  • database-basic
  • + +
  • machine-learning-basic
  • + +
  • desktop-autostart
  • + +
  • patch
  • + +
+

+ +
os-testsuite-phoronix-desktopRun the Phoronix test suite (desktop version).
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2_gfx
  • + +
  • libstdcpp
  • + +
  • desktop version
  • + +
  • devpkg-SDL_image
  • + +
  • devpkg-cairo
  • + +
  • devpkg-fftw
  • + +
  • devpkg-pcre
  • + +
  • devpkg-libXv
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-glog
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-openssl
  • + +
  • scons
  • + +
  • devpkg-gflags
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-SDL_mixer
  • + +
  • devpkg-SDL2_ttf
  • + +
  • devpkg-acl
  • + +
  • gnuplot
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-gtk
  • + +
  • bison
  • + +
  • devpkg-SDL_ttf
  • + +
  • python2-basic
  • + +
  • nasm
  • + +
  • devpkg-SDL2_mixer
  • + +
  • devpkg-boost
  • + +
  • fio
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-SDL2_net
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-SDL
  • + +
  • games
  • + +
  • devpkg-curl
  • + +
  • flex
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • python-extras
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-opus
  • + +
  • devpkg-popt
  • + +
  • desktop-apps-extras
  • + +
  • devpkg-libXvMC
  • + +
  • devpkg-libogg
  • + +
  • gimp
  • + +
  • devpkg-glu
  • + +
  • yasm
  • + +
  • devpkg-SDL_net
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libnl
  • + +
  • unzip
  • + +
  • c-basic
  • + +
  • devpkg-lua
  • + +
  • python3-basic
  • + +
  • openblas
  • + +
  • devpkg-SDL_gfx
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • bc
  • + +
  • php-basic
  • + +
  • hardware-gpu
  • + +
  • devpkg-flac
  • + +
  • desktop-autostart
  • + +
  • patch
  • + +
+

+ +
os-testsuite-phoronix-serverRun the Phoronix test suite (server version).
+ +

Includes bundle(s): +

    + +
  • redis-native
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-glog
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-openssl
  • + +
  • go-basic
  • + +
  • scons
  • + +
  • devpkg-gflags
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • bison
  • + +
  • python2-basic
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • fio
  • + +
  • nasm
  • + +
  • devpkg-libassuan
  • + +
  • rust-basic
  • + +
  • devpkg-openmpi
  • + +
  • nodejs-basic
  • + +
  • devpkg-curl
  • + +
  • flex
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • git
  • + +
  • devpkg-opus
  • + +
  • devpkg-popt
  • + +
  • devpkg-libogg
  • + +
  • yasm
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libnl
  • + +
  • unzip
  • + +
  • c-basic
  • + +
  • devpkg-lua
  • + +
  • python3-basic
  • + +
  • database-basic
  • + +
  • openblas
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • server version
  • + +
  • octave
  • + +
  • devpkg-attr
  • + +
  • bc
  • + +
  • php-basic
  • + +
  • openmpi
  • + +
  • devpkg-flac
  • + +
  • devpkg-fftw
  • + +
  • patch
  • + +
+

+ +
os-utils-guiProvides a graphical desktop environment.
+ +

Includes bundle(s): +

    + +
  • linux-firmware-extras
  • + +
  • wpa_supplicant
  • + +
  • lib-imageformat
  • + +
  • virt-viewer
  • + +
  • xemacs
  • + +
  • darktable
  • + +
  • firefox
  • + +
  • graphviz
  • + +
  • cryptography
  • + +
  • eog
  • + +
  • flatpak
  • + +
  • tigervnc
  • + +
  • perl-basic
  • + +
  • xfce4-desktop
  • + +
  • hexchat
  • + +
  • gvim
  • + +
  • thunderbird
  • + +
  • pulseaudio
  • + +
  • linux-firmware-wifi
  • + +
  • alsa-utils
  • + +
  • x11-server
  • + +
  • python3-basic
  • + +
  • fonts-basic
  • + +
  • geany
  • + +
  • x11vnc
  • + +
  • openssl
  • + +
+

+ +
os-utils-gui-devAll packages required to build the os-utils-gui bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-libXfont2
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-pangomm
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • xz
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • devpkg-uhttpmock
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-v4l-utils
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • devpkg-libgdata
  • + +
  • devpkg-xkbcomp
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libxkbfile
  • + +
  • devpkg-libXfont
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-libpeas
  • + +
  • devpkg-gtkspell3
  • + +
  • tzdata
  • + +
  • devpkg-newt
  • + +
  • devpkg-flatpak
  • + +
  • devpkg-orc
  • + +
  • jq
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-libgsystem
  • + +
  • devpkg-cmrt
  • + +
  • perl-basic-dev
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • devpkg-xorgproto
  • + +
  • xemacs
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-geocode-glib
  • + +
  • devpkg-gtkmm3
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-libgweather
  • + +
  • devpkg-glib
  • + +
  • devpkg-GConf
  • + +
  • devpkg-network-manager-applet
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libsass
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • lightdm
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-llvm
  • + +
  • devpkg-evolution-data-server
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-mpg123
  • + +
  • git
  • + +
  • procps-ng
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-mutter
  • + +
  • devpkg-libxkbcommon
  • + +
  • inkscape
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gnome-desktop
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-qtdeclarative
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-geoclue
  • + +
  • devpkg-gnome-online-accounts
  • + +
  • devpkg-libffi
  • + +
  • devpkg-usbredir
  • + +
  • devpkg-libwnck3
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-xdg-desktop-portal
  • + +
  • devpkg-libvirt
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • devpkg-gnome-settings-daemon
  • + +
  • devpkg-liboauth
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-brotli
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-libgphoto2
  • + +
  • devpkg-libndp
  • + +
  • devpkg-cairo
  • + +
  • devpkg-libxklavier
  • + +
  • devpkg-xorg-server
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-R
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-libexif
  • + +
  • scons
  • + +
  • devpkg-ostree
  • + +
  • devpkg-opencv
  • + +
  • devpkg-gjs
  • + +
  • devpkg-acl
  • + +
  • devpkg-libgusb
  • + +
  • parallel
  • + +
  • devpkg-parted
  • + +
  • devpkg-pygobject
  • + +
  • devpkg-glew
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-mozjs60
  • + +
  • devpkg-atkmm
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • flatpak
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-woff2
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-gnome-bluetooth
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-pipewire
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-libgd
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libical
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • gjs
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • spice-gtk
  • + +
  • devpkg-gcab
  • + +
  • devpkg-appstream-glib
  • + +
  • devpkg-libnotify
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-cogl
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • devpkg-cairomm
  • + +
  • gzip
  • + +
  • os-utils-gui
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-gst-plugins-bad
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-gcr
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-NetworkManager
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • bc
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-libwacom
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
p11-kitLoad and enumerate PKCS#11 modules.
+ +

Includes bundle(s): +

    + +
  • findutils
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
package-builderMinimal bundle for building packages via Clear Linux OS common tooling.
+ +

Includes bundle(s): +

    + +
  • plzip
  • + +
  • package-utils
  • + +
  • Sphinx
  • + +
  • curl
  • + +
  • binutils
  • + +
  • make
  • + +
  • zstd
  • + +
  • sudo
  • + +
  • git
  • + +
  • diffutils
  • + +
+

+ +
package-utilsUtilities for creating, building, and managing packages.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • perl-basic
  • + +
  • python2-basic
  • + +
  • dnf
  • + +
+

+ +
parallelShell tool for executing jobs in parallel using one or more computers.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
partedThe GNU disk partition manipulation program.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
passStore, retrieve, generate, and synchronize passwords securely.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
patchUpdates text files according to instructions contained in a separate file.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pdnsPowerDNS authoritative name server (DNSSEC enabled).
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • DNSSEC enabled
  • + +
  • lib-openssl
  • + +
+

+ +
pdns-recursorPowerDNS recursive caching name server.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
performance-toolsRun performance and power measurements.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ethtool
  • + +
  • iotop
  • + +
  • htop
  • + +
  • linux-tools
  • + +
  • bcc
  • + +
  • procps-ng
  • + +
  • powertop
  • + +
  • sysstat
  • + +
  • iproute2
  • + +
  • net-tools
  • + +
  • perl-basic
  • + +
  • strace
  • + +
+

+ +
perl-basicRun Perl language programs.
+ +

Includes bundle(s): +

    + +
  • lib-openssl
  • + +
+

+ +
perl-basic-devAll packages required to build the perl-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • perl-basic
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
perl-extrasImprove user experience with a common set of prebuilt Perl libraries.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
+

+ +
php-basicRun PHP language programs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
php-basic-devAll packages required to build the php-basic bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-mariadb
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-libzip
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libxslt
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libgd
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • php-basic
  • + +
  • diffutils
  • + +
+

+ +
php-extrasVarious nonstandard PHP extensions
+ +

Includes bundle(s): +

    + +
  • php-basic
  • + +
+

+ +
pidginMulti-protocol instant messagging (IM) client.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • Remmina
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • IM
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
plzipParallel losless data compressor based on the LZMA algorithm.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pmdkPersistent Memory Development Kit tools and libraries for working with non-volatile memory.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pnp-tools-basicRun performance and power measurements.
+ +
polkitApplication development toolkit for controlling system-wide privileges.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
popplerPDF rendering library based on xpdf-3.0 code base.
+ +
postgresqlObject-relational SQL database.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
powertopDiagnose issues with power consumption and power management.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
procps-ngLibrary to control and query process state
+ +
productivityA set of console utilities for task management and communication.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • irssi
  • + +
  • mail-utils
  • + +
  • weechat
  • + +
  • perl-basic
  • + +
+

+ +
pulseaudioPulseAudio Simplified Synchronous Client Interface.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-openssl
  • + +
+

+ +
pwgenPassword generator creating easily memorable passwords, while being as secure as possible.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pxe-serverRun a PXE server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • iptables
  • + +
  • nginx
  • + +
+

+ +
pygobjectCommon development files in the pygobject ecosystem.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
python-basicRun Python language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • python3-basic
  • + +
  • python2-basic
  • + +
+

+ +
python-basic-devAll packages required to build the python-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • Sphinx
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • python-basic
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • tzdata
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
python-data-scienceThe Python data-science stack; the best of http://pydata.org.
+ +

Includes bundle(s): +

    + +
  • cloud-api
  • + +
  • c-basic
  • + +
  • python-extras
  • + +
+

+ +
python-extrasImprove user experience with a common set of prebuilt Python libraries.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • graphviz
  • + +
  • cloud-api
  • + +
  • Sphinx
  • + +
  • python3-tcl
  • + +
  • openblas
  • + +
+

+ +
python-qtRun python programs that use the Qt runtime.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
+

+ +
python-testingImprove user experience with a common set of prebuilt Python libraries for testing.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloud-api
  • + +
  • Sphinx
  • + +
+

+ +
python2-basicRun legacy Python 2 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • openblas
  • + +
+

+ +
python3-basicRun Python 3 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
+

+ +
python3-tclPython 3 TCL/TK support.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • tcl-basic
  • + +
+

+ +
qemu-guest-additionsA lightweight multi-platform, multi-architecture disassembly framework.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
qt-basicRun programs that use the Qt runtime.
+ +

Includes bundle(s): +

    + +
  • qt-core
  • + +
  • fonts-basic
  • + +
  • libX11client
  • + +
+

+ +
qt-basic-devAll packages required to build the qt-basic bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • qt-basic
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-qt3d
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-qtlocation
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-qtwebchannel
  • + +
  • scons
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-qtsvg
  • + +
  • devpkg-libgudev
  • + +
  • diffutils
  • + +
+

+ +
qt-coreRun programs that use the core Qt runtime components only.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
quaggaBGP/OSPF/ISIS/RIP/RIPNG routing daemon suite.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
quasselNext-generation distributed IRC client.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
quasselcoreQuassel IRC server.
+ +

Includes bundle(s): +

    + +
  • qt-core
  • + +
  • libstdcpp
  • + +
+

+ +
R-basicRun R language programs for statistical computing and data analysis.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • less
  • + +
  • plotting, help navigation, etc
  • + +
  • devpkg-R
  • + +
+

+ +
R-datasetsLarge datasets for R programming.
+ +

Includes bundle(s): +

    + +
  • R-basic
  • + +
+

+ +
R-extrasImprove the user experience with a common set of prebuilt R libraries.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • R-stan
  • + +
  • R-datasets
  • + +
  • R-basic
  • + +
+

+ +
R-rstudioRStudio is an integrated development environment (IDE) for the R programming language
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-qt5webengine
  • + +
  • IDE
  • + +
  • qt-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
R-stanImprove the user experience with a common set of prebuilt R libraries (stan components).
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • stan
  • + +
  • R-datasets
  • + +
  • stan components
  • + +
  • R-basic
  • + +
+

+ +
rcloneCommand-line program to synchronize files and directories to and from various network and cloud providers.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
rebootmgrPerforms scheduled or immediate system reboots after the kernel or critical OS components change.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
redis-nativeAdvanced key-value database.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
redshiftAdjust the color temperature of your monitor in the evenings to reduce eye strain
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
RemminaRemote desktop that supports VNC, NX, XDMCP, SPICE, and SSH protocols.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
resticBackup program that supports multiple cloud storage providers.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
rhythmboxMusic playback and management application.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
rrdtoolRound Robin Database and graphing tool for time-series data.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • findutils
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
rsyslogReliable system and kernel logging daemon.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
ruby-basicRun Ruby language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
runtime-libs-boostBasic C++ / Boost runtime libraries.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
rust-basicBuild and run Rust language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
  • git
  • + +
  • binutils
  • + +
+

+ +
s3fs-fuseMount Amazon S3 buckets using FUSE.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
sambaSMB Fileserver and Active Directory (AD) Domain server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • lib-samba
  • + +
  • openldap
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • AD
  • + +
+

+ +
scm-serverRun a source code management server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • openssh-server
  • + +
  • nginx
  • + +
  • perl-basic
  • + +
  • git
  • + +
+

+ +
sconsPython build system and replacement for make.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
seahorseGraphical interface for managing and using encryption keys.
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
service-osProvides the needed software for Service OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • bootloader
  • + +
  • iasimage
  • + +
  • thermal_daemon
  • + +
  • linux-firmware
  • + +
+

+ +
service-os-devAll packages required to build the service-os bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • devpkg-xz
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • linux-iot-lts2018-dev
  • + +
  • service-os
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-openvswitch
  • + +
  • xz
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libcap
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • Sphinx
  • + +
  • devpkg-audit
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-libxkbcommon
  • + +
  • libxslt
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-libusb
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • tzdata
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-telemetrics-client
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
shellsRun various shells.
+ +

Includes bundle(s): +

    + +
  • zsh
  • + +
  • libstdcpp
  • + +
+

+ +
smartmontoolsHard disk diagnostic utilities, containing smarctl and smartd, for monitoring storage.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
software-defined-cockpitRun the automotive software defined cockpit which has graphic, media, sound and connectivity.
+ +

Includes bundle(s): +

    + +
  • wpa_supplicant
  • + +
  • pulseaudio
  • + +
  • libX11client
  • + +
  • v4l-utils
  • + +
  • gstreamer
  • + +
  • alsa-utils
  • + +
+

+ +
software-defined-cockpit-devAll packages required to build the software-defined-cockpit bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-libXmu
  • + +
  • software-defined-cockpit
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-v4l-utils
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-tbb
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-mpg123
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-libexif
  • + +
  • scons
  • + +
  • devpkg-opencv
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-gst-plugins-bad
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-qtsvg
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
software-testingSoftware to run or create test suites.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • python-testing
  • + +
  • perl-basic
  • + +
  • Sphinx
  • + +
+

+ +
spectacleKDE screenshot capture utility.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
SphinxPython-based documentation tool supporting multiple outputs and programming languages.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Babel
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
spice-gtkSPICE Client GLib 2.0 library.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • lib-openssl
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sqliteSQL database engine with file format that is stable, cross-platform, and backwards compatible.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
squidFull-featured Web proxy cache server.
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • perl-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ssocrOptical character recognition (OCR) for 7-segment displays.
+ +

Includes bundle(s): +

    + +
  • OCR
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
stellariumReal-time photo-realistic sky generator.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
storage-clusterRun a storage server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ceph
  • + +
  • parted
  • + +
  • xfsprogs
  • + +
+

+ +
storage-utilsRun disk and filesystem management functions.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • dosfstools
  • + +
  • smartmontools
  • + +
  • nfs-utils
  • + +
  • pmdk
  • + +
  • parted
  • + +
  • xfsprogs
  • + +
  • samba
  • + +
+

+ +
storage-utils-devAll packages required to build the storage-utils bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • xz
  • + +
  • devpkg-open-iscsi
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libuser
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-ipmctl
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-ntfs-3g
  • + +
  • devpkg-nettle
  • + +
  • Sphinx
  • + +
  • devpkg-libnl
  • + +
  • llvm
  • + +
  • devpkg-readline
  • + +
  • devpkg-multipath-tools
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-userspace-rcu
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • storage-utils
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-ndctl
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
straceSystem call diagnostic, instructional, and debugging tool.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
stream-serverRun an audio or visual streaming server.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libstdcpp
  • + +
+

+ +
subversionVersion Control System.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sudoProvide limited super user privileges to specific users.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
supertuxkartKart racing game featuring Tux and his friends.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
suricataNetwork threat detection engine.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • Sphinx
  • + +
+

+ +
syndicationRSS/Atom parser library.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
synergyKeyboard and mouse sharing across networks.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • postgresql
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-openssl
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sysadmin-basicRun common utilities, useful for managing a system.
+ +

Includes bundle(s): +

    + +
  • file
  • + +
  • parallel
  • + +
  • acpica-unix2
  • + +
  • kernel-install
  • + +
  • libglib
  • + +
  • xz
  • + +
  • iperf
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • less
  • + +
  • sudo
  • + +
  • iproute2
  • + +
  • perl-basic
  • + +
  • procps-ng
  • + +
  • tmux
  • + +
  • man-pages
  • + +
  • zstd
  • + +
  • strace
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • findutils
  • + +
  • htop
  • + +
  • p11-kit
  • + +
  • minicom
  • + +
  • powertop
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
sysadmin-basic-devAll packages required to build the sysadmin-basic bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • perl-basic-dev
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-apr
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-libnl
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-pciutils
  • + +
  • sysadmin-basic
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libpcap
  • + +
  • diffutils
  • + +
+

+ +
sysadmin-hostmgmtUtilities and Services for managing large-scale clusters of networked hosts.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • pxe-server
  • + +
  • ansible
  • + +
  • git
  • + +
  • ipmitool
  • + +
+

+ +
sysadmin-remoteEnable the host to be managed remotely by configuration management tools.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cockpit
  • + +
  • openssh-server
  • + +
  • sudo
  • + +
+

+ +
syslinuxKernel loader which uses a FAT, ext2/3 or iso9660 filesystem or a PXE network
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sysstatUtilities for monitoring system performance and usage activity.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
systemd-cryptsetupDummy bundle to avoid rolling back systemd, will be removed at next format bump.
+ +
systemd-networkd-autostartEnables systemd-networkd as the default network manager
+ +
tcl-basicRun Tk/Tcl language programs.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
+

+ +
telemetricsclient and server solution used to collect data from running Clear Linux OS systems.
+ +

Includes bundle(s): +

    + +
  • findutils
  • + +
  • lib-openssl
  • + +
+

+ +
texinfoUnix-style documentation system for on-line information and printed output.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
texliveMajor TeX-related typesetting programs, macro packages, and fonts.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
texmakerCross-platfrom LaTeX editor.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
thermal_daemonThermal management.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
thunderbirdEmail and news client with RSS, chat, and integrated SPM filter support.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
tigervncA TigerVNC remote display system.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
time-server-basicRun an network time protocol (NTP) server.
+ +

Includes bundle(s): +

    + +
  • NTP
  • + +
+

+ +
tmuxTerminal multiplexer (similar to screen).
+ +

Includes bundle(s): +

    + +
  • similar to screen
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
totemMovie player for the GNOME desktop based on GStreamer.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
tzdataTimezone database.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ugetGTK+ download manager featuring download classification and HTML import.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-openssl
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
unbundleRecursively resolves a package list from a bundle definition.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
unisonBi-directional file synchronization tool.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
unzipList, test, or extract files from a ZIP archive.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
user-basicMeta bundle capturing most console user work flows.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • storage-utils
  • + +
  • openssh-server
  • + +
  • sysadmin-basic
  • + +
  • mail-utils
  • + +
  • shells
  • + +
  • os-core-update
  • + +
  • editors
  • + +
  • network-basic
  • + +
  • kvm-host
  • + +
+

+ +
user-basic-devAll packages required to build the user-basic bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • devpkg-libnetfilter_queue
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-libnetfilter_cthelper
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • xz
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-openmpi
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • kvm-host-dev
  • + +
  • devpkg-krb5
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • network-basic-dev
  • + +
  • devpkg-libva
  • + +
  • devpkg-oath-toolkit
  • + +
  • devpkg-popt
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-guile
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libuser
  • + +
  • devpkg-libusb
  • + +
  • user-basic
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-gmime
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • joe
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-pkcs11-helper
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-usbredir
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • devpkg-libnetfilter_cttimeout
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • dosfstools
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-apr
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • acpica-unix2
  • + +
  • devpkg-parted
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • editors-dev
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-userspace-rcu
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • dev-utils-dev
  • + +
  • flex
  • + +
  • wget
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-xmlsec1
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-pciutils
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • storage-utils-dev
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • gzip
  • + +
  • os-core-update-dev
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • mail-utils-dev
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-subunit
  • + +
  • devpkg-xapian-core
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • cpio
  • + +
  • devpkg-libXxf86misc
  • + +
  • sysadmin-basic-dev
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • texlive
  • + +
  • devpkg-ndctl
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • bc
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
v4l-utilsUserspace tools and conversion library for Video 4 Linux.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
valgrindSuite of tools for debugging and finding memory-management problems in programs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
vimVi Improved, a configurable, improved version of the vi text editor.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • perl-basic
  • + +
+

+ +
vinagreA VNC client for GNOME desktop.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
virt-managerVirtualization Management tool.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • desktop-gnomelibs
  • + +
+

+ +
virt-manager-guiEnable controlling virt-manager through a GUI.
+ +

Includes bundle(s): +

    + +
  • spice-gtk
  • + +
  • libX11client
  • + +
  • gtk-vnc
  • + +
  • virt-manager
  • + +
  • virt-viewer
  • + +
+

+ +
virt-viewerVirtual Machine Viewer.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
vlcMultimedia player and streamer.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • lib-samba
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
vnc-serverEnable the host to be a VNC desktop server.
+ +

Includes bundle(s): +

    + +
  • tigervnc
  • + +
  • openssh-server
  • + +
  • desktop
  • + +
+

+ +
web-server-basicRun a HTTP web server.
+ +

Includes bundle(s): +

    + +
  • nginx
  • + +
  • httpd
  • + +
+

+ +
webkitgtkLegacy Web content engine for GTK+ 3.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
weechatInternet Relay Chat (IRC) client, extensible with plugins and scripts.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • IRC
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
weston-extrasHeader files for Weston plugin development.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
wgetNetwork utility to retrieve content from web servers.
+ +

Includes bundle(s): +

    + +
  • openssl
  • + +
  • findutils
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
whichUtility to show full path of commands and locate executables.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
wineRun PE32 executables with Linux.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
wiresharkNetwork packet capture and traffic analysis tool.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • postgresql
  • + +
+

+ +
wpa_supplicantUtility providing key negotiation for WPA wireless networks.
+ +

Includes bundle(s): +

    + +
  • linux-firmware-wifi
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
x11-serverProvide a functional X11 Server (Xorg or wayland-based).
+ +

Includes bundle(s): +

    + +
  • Xorg or wayland-based
  • + +
  • libX11client
  • + +
+

+ +
x11-toolsTools useful when running under X11.
+ +

Includes bundle(s): +

    + +
  • xterm
  • + +
  • perl-basic
  • + +
  • libX11client
  • + +
  • x11vnc
  • + +
+

+ +
x11vncA virtual network computing (VNC) server for real X displays.
+ +

Includes bundle(s): +

    + +
  • VNC
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
xemacsHighly customizable text editor, gui build.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
xfce4-desktopRun the Xfce GUI desktop environment.
+ +

Includes bundle(s): +

    + +
  • fonts-basic
  • + +
  • libX11client
  • + +
  • which
  • + +
+

+ +
xfsprogsUtilities to manage the XFS filesystem.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
xtermThe basic X.Org terminal program desktop launcher.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
xzCommand-line tools for XZ and LZMA compressed files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
yakuakeQuake-style terminal emulator based on KDE Konsole technology.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
yarnFast, reliable, and secure dependency management.
+ +

Includes bundle(s): +

    + +
  • nodejs-basic
  • + +
+

+ +
yasmModular assembler with multiple syntaxes support.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
zipCompressor/archiver for .zip files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
zncAdvanced, modular IRC network bouncer.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
zshZ Shell, an interactive shell and powerful shell script command processor.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
zstdRealtime losless data compression/decompression tool.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
+ + +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/bundles/openssh-server.html b/reference/bundles/openssh-server.html new file mode 100644 index 00000000..f449cd5f --- /dev/null +++ b/reference/bundles/openssh-server.html @@ -0,0 +1,1137 @@ + + + + + + + + + + + openssh-server — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

openssh-server

+

The openssh-server bundle provides the OpenSSH* package needed to enable +an SSH service in Clear Linux* OS. Remote users require an SSH service to be able +to use an encrypted login shell.

+

Clear Linux OS enables the sshd.socket unit, which will listen on port 22 by default +and start the OpenSSH service as required. The first time OpenSSH starts, it +generates the server SSH keys needed for the service.

+
+

Prerequisites

+

Assure the bundle openssh-server is installed.

+

To check it it’s on your host, enter:

+
sudo swupd bundle-list
+
+
+

To add it, enter:

+
sudo swupd bundle-add openssh-server
+
+
+
+
+

Change default port

+

Perform the following steps to change the default listening port for the +OpenSSH service:

+
    +
  1. Open the sshd.socket file:

    +
    sudo systemctl edit sshd.socket
    +
    +
    +
  2. +
  3. Add the [Socket] section and ListenStream option to the sshd.socket +file as shown below. The first ListenStream entry removes the Clear Linux OS +default listen port value. The second ListenStream entry sets the new +default listen port value. In this example, we set the new default port +to 4200:

    +
    [Socket]
    +ListenStream=
    +ListenStream=4200
    +
    +
    +

    Make sure to include a new line after the last line of text in the sshd.socket file.

    +
  4. +
  5. Verify your changes:

    +
    cat /etc/systemd/system/sshd.socket.d/override.conf
    +
    +
    +

    You should see the following output:

    +
    [Socket]
    +ListenStream=
    +ListenStream=4200
    +
    +
    +
  6. +
  7. Reload the systemd daemon configurations:

    +
    sudo systemctl daemon-reload
    +
    +
    +
  8. +
  9. Restart the sshd.socket unit:

    +
    sudo systemctl restart sshd.socket
    +
    +
    +
  10. +
  11. Confirm the the sshd.socket unit is listening on your new port:

    +
    sudo systemctl status sshd.socket
    +
    +
    +
    +

    Note

    +

    Output should show Active: as active(listening).

    +
    +
  12. +
+
+
+

Enable SFTP

+

Clear Linux OS disables the SFTP subsystem by +default due to security considerations. To enable the SFTP subsystem, perform +the following configuration of the SSHD service file:

+
    +
  1. Create a systemd drop-in directory for the SSHD service:

    +
    sudo mkdir -p /etc/systemd/system/sshd@.service.d
    +
    +
    +
  2. +
  3. Create the following file: +/etc/systemd/system/sshd@.service.d/sftp.conf

    +
  4. +
  5. Add the OPTIONS environment variable to the sftp.conf file.

    +
    [Service]
    +Environment="OPTIONS=-o Subsystem=\"sftp /usr/libexec/sftp-server\""
    +
    +
    +
  6. +
  7. Reload systemd configuration:

    +
    sudo systemctl daemon-reload
    +
    +
    +
  8. +
+

Congratulations! The SFTP subsystem is enabled.

+
+
+

Enable root login

+

To enable root login via SSH, perform the following steps:

+
    +
  1. Create a ssh directory in /etc, if it does not already exist.

    +
    mkdir /etc/ssh
    +
    +
    +
  2. +
  3. Create the following file, if it does not already exist: +/etc/ssh/sshd_config

    +
  4. +
  5. Set the configuration variable in /etc/ssh/sshd_config

    +
    PermitRootLogin yes
    +
    +
    +
  6. +
+
+
+

Enable X11-forwarding

+

X11 forwarding allows you to securely run graphical applications +(i.e., X clients) over the ssh conection. This will alow for remote gui apps +without the need for full VNC/remotedesktop. To enable X11-forwarding via +SSH, perform the following steps:

+
    +
  1. Create a ssh directory in /etc, if it does not already exist.

    +
    mkdir /etc/ssh
    +
    +
    +
  2. +
  3. Create the following file, if it does not already exist: +/etc/ssh/sshd_config

    +
  4. +
  5. Set the configuration variables.

    +
    AllowTcpForwarding yes
    +X11UseLocalhost yes
    +X11DisplayOffset 10
    +X11Forwarding yes
    +
    +
    +
  6. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/collaboration/collaboration.html b/reference/collaboration/collaboration.html new file mode 100644 index 00000000..b9c7fe0d --- /dev/null +++ b/reference/collaboration/collaboration.html @@ -0,0 +1,1052 @@ + + + + + + + + + + + Documentation guidelines — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Documentation guidelines

+

See a missing topic in the documentation? Find an existing document that could +be improved? Help us out by contributing! If you haven’t contributed before, +take a moment to review our Contribution guidelines.

+

Do you have questions about the documentation that were not answered by these +guidelines? Send your question to the mailing list.

+
+

Contribution guidelines

+

The Clear Linux OS documentation is hosted in GitHub and is written using +reStructuredText. Use our guidelines and best practices to write consistent, +readable documentation.

+ +
+
+

How to contribute

+

There are multiple ways to contribute and help improve our documentation:

+
    +
  • Make a suggestion: Have a documentation suggestion but no time to write it +yourself? Send your suggestion to the mailing list.
  • +
  • Log an issue: If you find a problem in our documentation (such as typos or +out-of-date information), log an issue in the documentation repository.
  • +
  • Contribute directly via GitHub: Whether you’ve found a typo, have better +instructions or examples, or have a new page to add, submit your improvement +or addition as a pull request on the documentation repository.
  • +
  • Test documentation: Step through our instructional guides and tutorials to +verify the instructions. Log or correct any out-of-date information.
  • +
+

All contributions must follow our code of conduct.

+
+
+

Contribute via GitHub

+

Our documentation is hosted in GitHub and we follow the standard GitHub flow:

+
    +
  1. Clone the documentation repository.
  2. +
  3. Create your own fork of the repository.
  4. +
  5. Create a branch for your contribution.
  6. +
  7. Add your commits.
  8. +
  9. Open a pull request.
  10. +
  11. Discuss, review, and update your contributions.
  12. +
  13. Once the maintainer approves, your contribution is merged and published as +part of the documentation.
  14. +
+
+
+

References

+

We use the following references to guide the grammar, style, and formatting of +our documentation:

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/collaboration/structure-formatting.html b/reference/collaboration/structure-formatting.html new file mode 100644 index 00000000..4de4fba6 --- /dev/null +++ b/reference/collaboration/structure-formatting.html @@ -0,0 +1,1480 @@ + + + + + + + + + + + Structure and formatting — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Structure and formatting

+

Content should be organized to support scanning. Consistent organization, +formatting, and writing style helps readers quickly find what they need and to +understand the content more effectively. This document describes our +organization and formatting guidelines.

+

Refer to Writing guide to learn how we keep our documents clear and +concise.

+ +
+

Markup

+

Our documentation is written in the reStructuredText markup language, using +Sphinx roles and directives. We use Sphinx to generate the final documentation. +You can read more about reStructuredText and Sphinx on their respective +websites:

+ +

You can view the content directly in the .rst markup files, or generate the HTML +content by installing and building the documentation locally. To run the +documentation locally, follow the instructions found in the +documentation repository README.

+
+

New pages

+

There are a few additional steps to consider when adding a new page to the +documentation. First, identify where your new page should be located within the +existing Documentation organization. Second, make sure the new page is picked +up in the Sphinx build and easily linkable from other content.

+

Each page must be included in a Sphinx toctree in order to be included in the +documentation content tree. Typically, pages are added to the section landing +page toctree.

+

For example, the Documentation guidelines page toctree looks like:

+
.. toctree::
+   :maxdepth: 1
+
+   writing-guide
+   structure-formatting
+
+
+

Additionally, each page must include a uniquely named reST label directly before +the page title, to enable the Sphinx ref role for linking to a page.

+

For example, this page “Structure and formating” has the label +.. _structure-formatting:

+
.. _structure-formatting:
+
+Structure and formatting
+########################
+
+
+

This page can then be referenced from other pages in the documentation using the +:ref: role:

+
:ref:`structure-formatting`
+
+
+
+
+
+

Documentation organization

+

The documentation is organized into five general sections:

+
    +
  1. Concepts: Introduction and overview of Clear Linux OS specific concepts or +features.
  2. +
  3. Get started: Information about getting started with Clear Linux OS.
  4. +
  5. Guides: Detailed information and instruction on using Clear Linux OS features.
  6. +
  7. Tutorials: Step-by-step instruction for using Clear Linux OS in specific use cases.
  8. +
  9. Reference: Supplementary and reference information for Clear Linux OS.
  10. +
+
+

Page structure

+

Each page in the documentation should follow the basic format of:

+
    +
  • Overview: 1-2 sentences describing what this page shows and why it matters
  • +
  • Prerequisites: Describe any pre-work necessary to the content (if appropriate)
  • +
  • Content
  • +
  • Next steps: List links to next steps (if appropriate)
  • +
  • Related topics: List links to related content (if appropriate)
  • +
+
+
+

Headings

+

Use headings to section and organize your content for better readability and +clarity.

+
    +
  • All files must have a top level heading, which is the title for the page.
  • +
  • Up to three additional levels of headings are allowed under the title heading.
  • +
  • Each heading should be followed by at least one paragraph of content. Avoid +two or more consecutive headings.
  • +
+

Refer to the Writing guide for tips on using headings to create +scannable content.

+

To mark up headings in the .rst file:

+
    +
  • Use hash-tags to underline the file’s main title:

    +
    Main title
    +##########
    +
    +
    +
  • +
  • Use asterisks to underline the file’s first level headings:

    +
    First level heading
    +*******************
    +
    +
    +
  • +
  • Use equal signs to underline the file’s second level of headings:

    +
    Second level heading
    +====================
    +
    +
    +
  • +
  • Use dashes to underline the file’s third level of headings:

    +
    Third level heading
    +-------------------
    +
    +
    +
  • +
+
+
+

In-page navigation

+

If a page has three or more sections, provide quick links to each section. Place +the quick links after the overview section.

+

Use the standard reST contents directive with depth: 1 for quick links.

+
+
+
+

Inline text formatting

+

We use the Microsoft Writing Style Guide as our starting point for text +formatting. We apply the formatting using reST and Sphinx markup.

+

Use our quick reference for the most commonly used inline text elements:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ElementConventionreST/Sphinx
AcronymsDefine acronym when first used. After +first use and definition, use the +acronym only.

Use the :abbr: role, in +the following format:

+

:abbr:`Acronym (Def)`

+
Bundle namesBoldUse the :command: role.
Callouts Use .. note::
Code/command examplesMonospace, visually distinct +from rest of text. Use an +indented call-out box.Use .. code-block:: +with the correct language +setting.
CommandsBoldUse the :command: role.
Command flagsBoldUse the :command: role.
Console outputMonospace, visual distinction +from rest of text. Use an +indented call-out box.Use .. code-block:: +with console as the +language setting.
EmphasisItalic*strong*
Environment variablesUse the case format of the +environment variable.Use :envvar:
Example commands with +optional or replaceable +parts

Use angle brackets for swapping +in the specific name, +e.g. <package-name>.

+

Use square brackets for optional +parts, +e.g. [–build].

+
 
Example URLs (not linked)Plain text 
File extensionsLowercase 
File names, directories, pathsTitle style capitalizationUse the :file: role.
GUI labels Use :guilabel:
Inline comments Use ..
Keystrokes Use :kbd:
Local navigation .. contents:: :local: +with a depth of 1
Menu selection Use :menuselection:
New terms

Italic for first use, normal for all +subsequent uses.

+

If it is used outside of the source +of definition, link the term.

+
*term*
Product nameFollow correct trademark and +attribution guidelines. 
Tool names

Correctly capitalized, no quotes, +bold, or italics as the basic rule.

+

If the tool name is the command, like +most Linux tools, treat it like a +command.

+

If the tool name is lowercase and +used at the start of a sentence, use +bold.

+
 
+
+

White space and line length

+

Limit line length to 78 characters. The GitHub web interface forces this +limitation for readability.

+

Remove trailing whitespace from your documents.

+
+
+
+

Code blocks and examples

+

When providing example code or commands use the Sphinx code-block directive. +Select the appropriate syntax highlighting for the example command or code.

+

For example, if showing console output, use console highlighting:

+
.. code-block:: console
+
+
+

Sphinx provides other ways of marking up example code if needed.

+
+
+

Lists and instructions

+

Use a numbered list when the order or priority of the items is important, such +as step-by-step instructions.

+

Use a bulleted list when the order of the items is not important.

+

For both list types, keep all items in the list parallel. See +Parallelism.

+

Use standard reST list markup.

+
+

Numbered lists

+

Numbered lists are most frequently used for procedures. Use numbered lists to +show sequence for the items. Follow our guidelines for numbered lists:

+
    +
  • Make sure the list is sequential and not just a collection of items.
  • +
  • Introduce a numbered list with a sentence. End the setup text with a +colon. Example: “To configure the unit, perform the following steps:”
  • +
  • Each item in the list should be parallel.
  • +
  • Treat numbered list items as full sentences with correct ending +punctuation.
  • +
  • You may interrupt numbered lists with other content, if relevant, +e.g. explanatory text, commands, or code.
  • +
  • Second-level steps are acceptable; avoid third-level steps.
  • +
  • Avoid single-step procedures; the minimum number of steps in a procedure +is two.
  • +
  • Do not create numbered lists that emulate flowcharts. The reader should be +able to execute the list of steps from first to last without branching or +looping.
  • +
  • Avoid over-using numbered lists, except in procedural documents such as +tutorials and step-by-step guides.
  • +
+
+
+

Bulleted lists

+

Use bulleted lists to reduce wordiness and paragraph density, especially when +a sequence is not required. Here are some guidelines for bulleted lists:

+
    +
  • Introduce a bulleted list with a sentence. End the setup text with a +colon. Example: “To repair the unit, you will need the following items:”
  • +
  • Each item in the list should be parallel.
  • +
  • Avoid interrupting bulleted lists with other paragraph styles.
  • +
  • Second-level bullets are acceptable; avoid third-level bullets.
  • +
+

Use the correct ending punctuation for sentence style bullet lists. For example:

+

Use this:

+
When setting the user code, remember:
+
+* Use a number that has a meaning for you.
+* Change the code once a month.
+* Do not disclose the user code to anyone, including the security company.
+
+
+

Not this:

+
When setting the user code remember:
+
+* make the user code easy to remember. Use a number that has a meaning for you
+* change the code once a month
+* do not disclose the user code to anyone else. This includes the security
+  company
+
+
+
+
+

Instructions

+

When presenting instructions, such as in a tutorial, present them in a numbered +list according to these guidelines:

+
    +
  • Each step (list item) should describe one action.

    +
  • +
  • If the same steps are repeated, refer to the earlier steps rather than +repeating them.

    +
  • +
  • When a step includes a command or code block as an example, put the command +or code block after the step that includes them.

    +
  • +
  • Use supporting images where appropriate. If the series of steps is supported +by one figure, refer to the figure in the introductory text.

    +

    For example: “See Figure 15 and do the following:”

    +

    When a series of steps is supported by two or more figures, refer to the +specific figure in the relevant step and show the figure immediately after +the reference. Do not write: “See figures 15 through 22 and do the +following:”

    +
  • +
+
+
+
+

Notices

+

We use four special types of notices: notes, cautions, warnings, and dangers. +Here are some specific rules and tips regarding use of these notices:

+
    +
  • Do not use a notice directly after a heading. Notices must follow a variant of +body text.
  • +
  • Do not include more than one notice in a single notice block.
  • +
  • Avoid back-to-back notices.
  • +
  • If back-to-back notices are not avoidable, make sure each distinct notice in +the notice block is clearly defined.
  • +
+

Use the standard reST admonition directive.

+
+

Notes, cautions, and warnings

+

Use notes sparingly. Avoid having more than one note per section. If you exceed +this number consistently, consider rewriting the notes as main body text.

+

Use cautions and warnings to alert readers of potential problems or pitfalls. +Use conditional phrases in cautions and warnings, such as “If you do X, then Y +will occur.”

+

These are examples of typical notices and the conditions for their usage:

+
+

Note

+

Notes are extra bits of information that supplement the main content. Notes +should be relatively short.

+
+
+

Caution

+

Cautions are low-level hazard messages that alert the user of possible +equipment, product, and software damage, including loss of data.

+
+
+

Warning

+

Warnings are mid-level hazards that are likely to cause product damage.

+
+
+
+ +
+

Images

+

Use images or figures to convey information that may be difficult to explain +using words alone. Well-planned graphics reduce the amount of text required to +explain a topic or example.

+

Follow these guidelines when using graphics in support of your documentation:

+
    +
  • Keep it simple. Use images that serve a specific purpose in your document, +and contain only the information the reader needs.

    +
  • +
  • Avoid graphics that will need frequent updating. Don’t include information in +a graphic that might change with each release, such as product versions.

    +
  • +
  • Use either PNG or JPEG bitmap files for screenshots and SVG files for vector +graphics.

    +
  • +
  • Place the image immediately after the text it helps clarify, or as close as +possible.

    +
  • +
  • Use the Sphinx figure directive to insert images and figures into the +document. Include both alt text, a figure name, and caption.

    +

    For example:

    +
    .. figure:: figures/topic-1.png
    +   :alt: An image supporting the topic.
    +
    +   Figure 1: This is the figure 1 caption.
    +
    +
    +
  • +
  • Include at least one direct reference to an image from the main text, using +the figure number. For example:

    +

    Use this:

    +
    Figure 1
    +
    +
    +

    Not this:

    +
    The figure above or below
    +
    +
    +
  • +
+

Images should follow these naming and location conventions:

+
    +
  • Save the image files in a figures folder at the same level as the file +that will reference the image.
  • +
  • Name image files according to the following rules:
      +
    • Use only lower case letters.
    • +
    • Separate multiple words in filenames using dashes.
    • +
    • Name images using the filename of the file they appear on and add a number +to indicate their place in the file. For example, the third figure added to +the welcome.rst file must be named welcome-3.png.
    • +
    +
  • +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/collaboration/writing-guide.html b/reference/collaboration/writing-guide.html new file mode 100644 index 00000000..df17ebd0 --- /dev/null +++ b/reference/collaboration/writing-guide.html @@ -0,0 +1,1440 @@ + + + + + + + + + + + Writing guide — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Writing guide

+

We want our documentation to be easy to read and understand. This document +describes guidelines for writing documentation that is clear, concise, +confident, and courteous.

+

Refer to Structure and formatting for details on organizing content and how +we use reStructuredText and Sphinx.

+ +
+

Use simple English

+

Write using simple English: Be brief and communicate only the information that +is needed. Be friendly and informative. Emphasize clarity and avoid +unecessary complicated or technical terms. Make the content accessible to +non-native speakers.

+
+

Be brief

+

Use short sentences and paragraphs. Stick to the principle of one main +idea per sentence, plus one additional point if needed. Each paragraph +should address one main idea. Remember the basic structure of a paragraph: +Introduction, body, and conclusion.

+
+
+

Be friendly

+

We write for our peers and want to be familiar. Take a personal tone as if you +were speaking directly to the reader. Use “you” to address the reader and “we” +to refer to our view. Be professional, respectful, and cooperative.

+

Assume your audience has the same level of technical understanding and expertise +as you did when you first started collaborating. Do not talk down to our +readers, but also do not assume they know everything about the subject. Offer +brief explanations or summaries of common knowledge if a significant portion of +readers might benefit.

+
+
+

Use simple words

+

Use simple words to increase reader comprehension and reduce ambiguity. Follow +our tips for making good word choices:

+
    +
  • Avoid jargon: Write for your audience, using everyday language where +possible, and technical terms where appropriate. Avoid clichés, idioms, and +metaphors.

    +
  • +
  • Be consistent: Use one term for each concept or action and use it +consistently.

    +
  • +
  • Avoid “fancy” words and phrases: If there is a simpler word or phrase, +use it.

    +

    For example:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Use thisNot this
    start, begincommence
    soconsequently
    more thanin excess of
    ifin the event of
    beforeprior to
    if you wantshould one wish
    useutilize
    exampleinstance
    +
  • +
+
+
+

Avoid overuse of product name

+

Use product names only when necessary. Typically, you can rewrite sentences to +remove the product name with no change in meaning, which keeps the content +concise and scannable.

+

Avoid using the product name in page titles and headings.

+
+
+
+

Make content scannable

+

Organize your content to make it scannable for the reader, which helps them find +what they need quickly, and to understand the information more efficiently.

+
    +
  • Put the most important content first. Make sure your introduction clearly +communicates what the reader can find on the page. Present the point of the +document first, and organize supporting information towards the end of the +page.
  • +
  • Write scannable headings. Expect readers of documentation to skim and scan +the content, and to leave if they dont find what they need quickly. Good +headings add organization to your content and help the reader to find and +understand content more effectively. Follow our guidelines for writing +effective Headings.
  • +
  • Write great link text. Great link text tells the reader what they can +expect when they click on a link. It also helps make the page more scannable. +Follow our guidelines for writing Link text.
  • +
+
+

Headings

+

Use these guidelines to write effective headings:

+
    +
  • Be concise and descriptive. Use only the words necessary to describe the +section.
  • +
  • Use sentence case. Capitalize only the first word and proper nouns in a +heading.
  • +
  • Avoid punctuation. Unless your heading is a question, don’t use sentence +punctuation in headings.
  • +
  • Use parallel structure. Headings at the same level should use the same +grammatical pattern. This provides structure to the document and helps users +find information more easily. See Parallelism.
  • +
  • Use strong verbs. Strong, active verbs get to the point. Avoid -ing verbs, +such as Running, Testing, etc.
  • +
+

For example, two headings at the same level:

+

Use this:

+
Install software
+
+Configure software
+
+
+

Not this:

+
Installing the Software on the Platform
+
+Software Configuration.
+
+
+
+ +
+
+

Use strong verbs

+

Passive verbs make writing stuffy and formal. Use strong verbs to get to the +point and avoid unnecessary words and phrases.

+
+

Use imperatives

+

Commands, also called imperatives, are the fastest and most direct way of giving +someone instructions. For example:

+

Use this:

+
Send it to me.
+
+
+

Not this:

+
I would appreciate it if you would send it to me.
+
+
+
+
+

Use present tense

+

Use simple present tense instead of future tense for most text. Search for the +words “will” or “shall” to find future tense instances. Future tense is +acceptable for conditional statements, such as in a caution or a warning. For +example:

+

Use this:

+
The system operates at a nominal temperature of 180 degrees Fahrenheit.
+
+
+

Not this:

+
The system will operate at a nominal temperature of 180 degrees Fahrenheit.
+
+
+
+
+

Avoid nominalizations

+

Avoid nominalizations, which are nouns formed from verbs.

+

For example:

+ ++++ + + + + + + + + + + + + + + + + + + + +
VerbNominalization
completecompletion
provideprovision
failfailure
installinstallation
+

For example:

+

Use this:

+
We discussed the matter.
+
+
+

Not this:

+
We had a discussion about the matter.
+
+
+

Or:

+

Use this:

+
IT has installed the software.
+
+
+

Not this:

+
IT has completed the installation of the software.
+
+
+
+
+

Avoid words ending in -ing

+

Avoid using words ending in -ing unless they are part of a technical name. For +example:

+

Use this:

+
There is no way to verify this.
+
+
+

Not this:

+
There is no way of verifying this.
+
+
+
+
+

Use the active voice

+

Use active voice whenever possible to show who or what is performing an +action.

+
    +
  • Active voice follows standard English word order: SUBJECT–VERB–OBJECT +(where the OBJECT is optional).
  • +
  • Passive voice reverses the order and weakens the verb: OBJECT–be VERB–by +SUBJECT (where the OBJECT is optional).
  • +
+

For example:

+

Use this:

+
I made a mistake.
+
+
+

Not this:

+
A mistake was made. *(By whom?)*
+
+
+

Or:

+

Use this:

+
We released version 2.0 in June.
+
+
+

Not this:

+
Version 2.0 was released in June.
+
+
+
+
+
+

Avoid long noun phrases

+

Noun phrases (a noun and other words that describe or modify it) can be +difficult to understand. Try to limit the number of modifiers in a noun phrase +to two. For example:

+

Use this:

+
Integration policies for power management mechanisms.
+
+
+

Not this:

+
Power management mechanism integration policies.
+
+
+
+
+

Parallelism

+

Parallelism refers to the practice of using similar patterns of grammar, and +sometimes length, to coordinate words, phrases, and clauses.

+

Use parallel construction in lists. The table below shows some unparallel +structures and how they can be made parallel with a little rewording.

+ ++++ + + + + + + + + + + + + + + + + + + + +
Parallel (do)Unparallel (don’t)
    +
  1. Mount the panel.
  2. +
  3. Install the battery.
  4. +
  5. Wire the keypad.
  6. +
+
    +
  1. Mount the panel.
  2. +
  3. Battery installation.
  4. +
  5. Wiring the keypad.
  6. +
+
I like practicing my accordion, +reading sci-fi, and eating +peanut butter and pickle +sandwiches.I like practicing my accordion, +reading sci-fi, and to eat +peanut butter and pickle +sandwiches.
For breakfast he likes coffee +and bacon.For breakfast he likes coffee +and to fry bacon.
Apples or bananas are a good +snack.Apples or a banana are a good +snack.
+
+
+

Grammar and punctuation

+

This section covers common grammatical topics relevant to our +documentation. For detailed explanations of correct grammar and punctuation, +use one of our preferred references.

+
+

Capitalization

+

The capitalization style for all documentation is sentence case. Words should +only be capitalized when they are proper nouns or refer to trademarked product +names.

+
+

Note

+

Do not capitalize a word to indicate it is more important than other +words. Never change the case of variable, function or file names - always +keep the original case.

+
+ +
+

Software version capitalization

+

When listing software or hardware version numbers, the word “version” or letter +“v” are lowercase. The v is closed with the number (no period).

+

For example:

+
    +
  • Widget Pro version 5.0
  • +
  • Widget Master v2.1.12
  • +
+
+
+
+

Contractions

+

Avoid using contractions, such as it’s, they’re, and you’re, because they may be +unclear to non-native English-speaking audiences.

+
+
+

Quotation marks

+

Follow these guidelines for quotation marks:

+
    +
  • Restrict use of quotation marks to terms as terms.
  • +
  • Do not use quotation marks for emphasis; use italics for emphasis.
  • +
  • Avoid using single-quote marks.
  • +
+
+
+

Commas and colons

+

This section addresses common use of commas, semicolons, and colons in our +documentation. Refer to one of our preferred references +for further details.

+
+

Use the serial comma

+

When writing a series of items, use the serial comma before the final and and +or to avoid confusion and ambiguity. For example:

+

Use this:

+
Mom, Dad, and I are going to the game.
+
+
+

Not this:

+
Mom, Dad and I are going to the game.
+
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/compatible-hardware.html b/reference/compatible-hardware.html new file mode 100644 index 00000000..1770a216 --- /dev/null +++ b/reference/compatible-hardware.html @@ -0,0 +1,1107 @@ + + + + + + + + + + + Compatible Hardware — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Compatible Hardware

+

This document describes hardware that has been tested and confirmed as +compatible with Clear Linux* OS. This list is not comprehensive and will continue to +grow.

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Compatible Hardware
Processor SKUPlatform
Intel® Core™ i5-6260U 
Intel® Core™ i5-6560UDell XPS* 13 9350
Intel® Celeron® J3455NUC6CAYS
Intel® Core™ i5-4250U 
Intel® Core™ i7-5557U 
Intel® Core™ i9-7900XGigabyte* X299
Intel® Core™ i3-4130Lenovo Thinkserver* TS140
Intel® Core™ i7-7567UNUC7i7BNH
Intel® Core™ i7-8809GNUC8i7HVK
Intel® Core™ i5-7260UNUC7i5BNH
Intel® Core™ i7-8650UNUC7i7DNKE
Intel® Core™ i5-7300UNUC7i5DNHE
Intel® Xeon® Gold 6138 
Intel® Xeon® E5-2699A v4Dell PowerEdge* R630
Intel® Xeon® E5-2620 v3 
Intel® Core™ i5-6600Gigabyte* Z170X-UD5
Intel® Core™ i5-4250UD54250WYK
Intel® Xeon® E5-2699 v3S2600WT2
Intel® Atom™ J3455NUC6CAYB
Intel® Xeon® Bronze 31040W23H8
Intel® Atom™ C2750SuperMicro* A1SAi
Intel® Atom™ E3825CircuitCo MinnowBoard MAX*
Intel® Core™ i7-8700Gigabyte* H370 WIFI
Intel® Core™ i7-3667ULenovo ThinkPad* X1 Carbon laptop
Intel® Core™ i5-4210UDell XPS* 13 laptop
Intel® Celeron® J3455NUC6CAYB
Intel® Core™ i7-4790Gigabyte* desktop
Intel® Core™ i5-6260UNUC6I6SYH
Intel® Core™ i7-5557UNUC5I7RYH
Intel® Core™ i7-4700MQLenovo ThinkPad* T540p
Intel® Core™ i7-5557UNUC5I7RYB
Intel® Core™ i5-6260UNUC6I5SYH
+

* Other names and brands may be claimed as the property of others.

+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/image-types.html b/reference/image-types.html new file mode 100644 index 00000000..da2c7548 --- /dev/null +++ b/reference/image-types.html @@ -0,0 +1,1075 @@ + + + + + + + + + + + Clear Linux* OS image types — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Clear Linux* OS image types

+

Clear Linux* OS offers many types of images for different platforms and environments.

+

The naming convention of a Clear Linux OS image filename is:

+
clear-[version number]-[image type].[compression type]
+
+
+
    +
  • The [version number] field specifies the version number.
  • +
  • The [image type] field specifies the type of image and its corresponding +file format.
  • +
  • The [compression type] field specifies the compression type. Two types of +compressions are used: GNU* zip (.gz) and XZ (.xz).
  • +
+

Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific.

+ + ++++ + + + + + + + + + + + + + +
Table 1: Types of platform-independent Clear Linux OS images
Image TypeDescription
live-desktop.img or live-desktop.isoImage for booting to GNOME* desktop to preview or install the OS.
live-server.img or live-server.isoImage for booting to server command prompt to preview or install the OS.
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2: Types of platform-specific Clear Linux OS images
Image TypeDescription
aws.imgImage suitable for use with Amazon* AWS*.
azure.vhdVirtual Hard Disk for use on Microsoft* Azure* cloud platform.
azure-docker.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with Docker* pre-installed.
azure-machine-learning.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with the machine-learning-basic bundle installed.
cloudguest.imgImage with generic cloud guest virtual machine (VM) requirements installed.
gce.tarImage with the Google Compute Engine (GCE) specific kernel.
hyperv.vhdxVirtual Hard Disk for use with Microsoft Hyper-V* hypervisor. Includes optimized kernel for Hyper-V.
kvm.imgImage for booting in a simple VM with start_qemu.sh. Includes +optimized kernel for KVM.
kvm-legacy.imgImage for booting in a simple VM using legacy BIOS, if using start_qemu.sh make sure to remove -bios parameter.
pxe.tarImage suitable for use with PXE server.
vmware.vmdkVirtual Machine Disk for VMware* platforms inclduing Player, Workstation, and ESXi.
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/reference.html b/reference/reference.html new file mode 100644 index 00000000..0d2d2614 --- /dev/null +++ b/reference/reference.html @@ -0,0 +1,1018 @@ + + + + + + + + + + + Reference — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Reference

+

This section provides additional information on the Clear Linux OS project and +features.

+ + +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reference/system-requirements.html b/reference/system-requirements.html new file mode 100644 index 00000000..d5cd4125 --- /dev/null +++ b/reference/system-requirements.html @@ -0,0 +1,1070 @@ + + + + + + + + + + + Recommended minimum system requirements — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..8137ba48 --- /dev/null +++ b/search.html @@ -0,0 +1,997 @@ + + + + + + + + + + + Search — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + +
+ +
+ +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + Last updated on Jul 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..3c2df180 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["FAQ/faq","about","concepts/autospec-about","concepts/bundles-about","concepts/mixer-about","concepts/swupd-about","concepts/telemetry-about","disclaimers","documentation_license","get-started/bare-metal-install-desktop/bare-metal-install-desktop","get-started/bare-metal-install-server/bare-metal-install-server","get-started/bootable-usb/bootable-usb","get-started/compatibility-check","get-started/get-started","get-started/install-configfile","get-started/virtual-machine-install/gce","get-started/virtual-machine-install/hyper-v","get-started/virtual-machine-install/kvm","get-started/virtual-machine-install/virtualbox-cl-installer","get-started/virtual-machine-install/vmw-player","get-started/virtual-machine-install/vmw-player-preconf","get-started/virtual-machine-install/vmware-esxi-install-cl","get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image","guides/clear/autoproxy","guides/clear/autospec","guides/clear/compatible-kernels","guides/clear/debug","guides/clear/ister","guides/clear/mixer","guides/clear/security","guides/clear/stateless","guides/clear/swupd-guide","guides/deploy-at-scale","guides/guides","guides/kernel/kernel-development","guides/kernel/kernel-modules","guides/kernel/kernel-modules-dkms","guides/maintenance/architect-lifecycle","guides/maintenance/assign-static-ip","guides/maintenance/bulk-provision","guides/maintenance/cpu-performance","guides/maintenance/developer-workstation","guides/maintenance/download-verify-decompress","guides/maintenance/enable-user-space","guides/maintenance/fix-broken-install","guides/maintenance/hostname","guides/maintenance/increase-virtual-disk-size","guides/maintenance/query-upstream","guides/maintenance/resource-limits","guides/maintenance/restart","guides/maintenance/time","guides/maintenance/validate-signatures","guides/network/custom-clear-container","guides/network/dpdk","guides/network/ipxe-install","guides/network/network-bonding","guides/network/vnc","guides/stacks/dars","guides/stacks/dlrs/dlrs","guides/stacks/greengrass","guides/telemetrics/telem-guide","index","reference/bundle-commands","reference/bundles/bundles","reference/bundles/openssh-server","reference/collaboration/collaboration","reference/collaboration/structure-formatting","reference/collaboration/writing-guide","reference/compatible-hardware","reference/image-types","reference/reference","reference/system-requirements","tutorials/aws-web/aws-web","tutorials/azure","tutorials/docker/docker","tutorials/flatpak/flatpak","tutorials/fmv","tutorials/hadoop","tutorials/kata","tutorials/kata_migration","tutorials/kubernetes/kubernetes","tutorials/kubernetes/kubernetes-bp","tutorials/machine-learning/machine-learning","tutorials/nvidia","tutorials/redis","tutorials/smb/smb","tutorials/smb/smb-desktop","tutorials/spark","tutorials/tutorial-proxy","tutorials/tutorials","tutorials/wordpress/web-server-install","tutorials/wordpress/wordpress","tutorials/wordpress/wp-install","tutorials/yubikey-u2f"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":1,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,sphinx:55},filenames:["FAQ/faq.rst","about.rst","concepts/autospec-about.rst","concepts/bundles-about.rst","concepts/mixer-about.rst","concepts/swupd-about.rst","concepts/telemetry-about.rst","disclaimers.rst","documentation_license.rst","get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst","get-started/bare-metal-install-server/bare-metal-install-server.rst","get-started/bootable-usb/bootable-usb.rst","get-started/compatibility-check.rst","get-started/get-started.rst","get-started/install-configfile.rst","get-started/virtual-machine-install/gce.rst","get-started/virtual-machine-install/hyper-v.rst","get-started/virtual-machine-install/kvm.rst","get-started/virtual-machine-install/virtualbox-cl-installer.rst","get-started/virtual-machine-install/vmw-player.rst","get-started/virtual-machine-install/vmw-player-preconf.rst","get-started/virtual-machine-install/vmware-esxi-install-cl.rst","get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst","guides/clear/autoproxy.rst","guides/clear/autospec.rst","guides/clear/compatible-kernels.rst","guides/clear/debug.rst","guides/clear/ister.rst","guides/clear/mixer.rst","guides/clear/security.rst","guides/clear/stateless.rst","guides/clear/swupd-guide.rst","guides/deploy-at-scale.rst","guides/guides.rst","guides/kernel/kernel-development.rst","guides/kernel/kernel-modules.rst","guides/kernel/kernel-modules-dkms.rst","guides/maintenance/architect-lifecycle.rst","guides/maintenance/assign-static-ip.rst","guides/maintenance/bulk-provision.rst","guides/maintenance/cpu-performance.rst","guides/maintenance/developer-workstation.rst","guides/maintenance/download-verify-decompress.rst","guides/maintenance/enable-user-space.rst","guides/maintenance/fix-broken-install.rst","guides/maintenance/hostname.rst","guides/maintenance/increase-virtual-disk-size.rst","guides/maintenance/query-upstream.rst","guides/maintenance/resource-limits.rst","guides/maintenance/restart.rst","guides/maintenance/time.rst","guides/maintenance/validate-signatures.rst","guides/network/custom-clear-container.rst","guides/network/dpdk.rst","guides/network/ipxe-install.rst","guides/network/network-bonding.rst","guides/network/vnc.rst","guides/stacks/dars.rst","guides/stacks/dlrs/dlrs.rst","guides/stacks/greengrass.rst","guides/telemetrics/telem-guide.rst","index.rst","reference/bundle-commands.rst","reference/bundles/bundles.rst","reference/bundles/openssh-server.rst","reference/collaboration/collaboration.rst","reference/collaboration/structure-formatting.rst","reference/collaboration/writing-guide.rst","reference/compatible-hardware.rst","reference/image-types.rst","reference/reference.rst","reference/system-requirements.rst","tutorials/aws-web/aws-web.rst","tutorials/azure.rst","tutorials/docker/docker.rst","tutorials/flatpak/flatpak.rst","tutorials/fmv.rst","tutorials/hadoop.rst","tutorials/kata.rst","tutorials/kata_migration.rst","tutorials/kubernetes/kubernetes.rst","tutorials/kubernetes/kubernetes-bp.rst","tutorials/machine-learning/machine-learning.rst","tutorials/nvidia.rst","tutorials/redis.rst","tutorials/smb/smb.rst","tutorials/smb/smb-desktop.rst","tutorials/spark.rst","tutorials/tutorial-proxy.rst","tutorials/tutorials.rst","tutorials/wordpress/web-server-install.rst","tutorials/wordpress/wordpress.rst","tutorials/wordpress/wp-install.rst","tutorials/yubikey-u2f.rst"],objects:{},objnames:{},objtypes:{},terms:{"00bf4f8c8c0ec006633a48fd9ee746b30bb9df17":34,"08d400baffd":52,"0c1282":11,"0ceae320279b":52,"0dai":63,"0w23h8":68,"0x3":53,"0x402":17,"0xf":53,"10g":17,"10gb":17,"128mb":[19,21,71],"12_compat":58,"13t23":73,"150m":14,"150mb":[9,10],"15g":11,"15m":54,"15th":65,"16e3ed0df8da":52,"16m":28,"19b4411cf4bd":52,"2000x1200":56,"2048kb":53,"2048mb":21,"20gb":46,"2236710e4fc11e4a646ce956c7802788":60,"256m":10,"256mb":[9,10],"2699a":68,"2723b7d20716":52,"28g":11,"2aff77bd5cf1":75,"2f070e8e71679f2b1f28794e3a6c42e":60,"2gb":[19,21],"2nd":[58,71,93],"30g":11,"32bit":63,"32gb":19,"32m":[14,28,46],"3667u":68,"381f4b604537b2cb7fb5b583a8a847a50c4ed776f8e677e2354932eb82f18898":58,"3ad":55,"3bb7":11,"3de":29,"3dprint":63,"3e634d6e0792":52,"3q4d":52,"4210u":68,"4250u":68,"42b7":11,"43gb":58,"4650u":60,"4700mq":68,"4b0ca67300727477913c331ff124928a98bcf2fb12c011a855f17cd73137a890":51,"4d0d60207a904ebbab96680a51ac1339":45,"4f34":11,"4gb":71,"50c212235d3c33a3c035e586ff14359d03895c7bc701bb5dfd62dbe0e91fb486":58,"512m":[39,46],"5414c3a12993":52,"5557u":68,"5class":59,"5gb":46,"5mb":52,"600mb":[21,71],"616mb":52,"61c178102228":58,"6260u":68,"62gib":52,"6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09":58,"6560u":68,"704f3382":11,"70ghz":60,"71b60f15003e":52,"7238f35abcd0":52,"7260u":68,"7300u":68,"742192751c1a":52,"7567u":68,"7694989e97d":52,"76gb":58,"7900x":68,"7hz3":52,"7tnomss9w7gjfpjzy75hgbp":77,"7zip":18,"8192b":60,"82757ec1648a":58,"82757ec1648a906c504e50e43df74ad5fc333deee043dbfe6559c86908fac15":58,"846e526765e3":58,"8650u":68,"8809g":68,"8ead5f2c0c33":52,"8gb":11,"9048e5e50717ea4497b757314bad98ea3763c145":52,"924157b3b009":75,"954m":11,"960c184f":11,"96a8565d0ca54b0c80364a1e5e7b0f88":72,"97e":77,"98d3514e5a984e8cbbdf46a2f0d6b397":45,"9c2d8d184e5da67c95d601382adf14862e4f2228":52,"abstract":63,"break":35,"byte":[55,60,82],"case":[0,4,5,9,10,14,17,24,25,27,28,31,34,41,45,53,63,66,67,71,73,81],"char":60,"class":[59,77],"clich\u00e9":67,"const":76,"default":[2,6,15,17,18,19,20,21,22,27,28,29,31,32,34,35,36,38,39,40,42,45,48,50,52,56,57,58,59,60,63,73,74,75,76,77,78,80,83,84,87,93],"export":[28,53,58,63,80,88],"final":[10,28,66,67,73,74],"function":[2,3,5,21,23,24,28,30,31,35,36,44,54,57,58,60,63,67,73,74,82,89,90],"goto":60,"import":[1,5,15,24,32,36,40,53,54,58,61,63,66,67,80,82,83],"int":[60,76],"long":[18,31,45,60,63,83],"new":[0,2,4,5,14,15,16,17,27,28,29,31,32,33,34,35,36,37,38,40,45,46,47,50,53,54,55,56,58,59,60,61,63,64,65,67,71,72,73,74,75,76,77,78,80,82,83,84,85,87,90,92],"null":[31,48,49,52,56,60,73,80,83],"public":[15,29,54,65,72,73,74],"return":[5,9,10,12,18,23,24,31,32,35,40,47,59,60,72,76,83,84],"short":[23,49,66,67],"static":[10,33,39,45,54,63,76,90],"super":63,"switch":[14,34,54,55,63,74,80,83],"transient":45,"true":[14,28,50,52,56,58,59,60,72,80,93],"try":[2,18,23,24,28,49,67,80],"var":[28,30,32,44,52,54,83,90,92],"void":76,"while":[0,3,5,9,10,15,29,31,32,34,40,41,43,57,58,59,60,63,80,81,84],AES:[63,71],AND:29,AWS:[20,33,42,63,69,72],Adding:52,Are:[72,73,77],DFS:77,DNS:[38,54,80,85,86],DOS:63,Doing:9,Eye:63,For:[2,5,9,11,14,17,19,20,21,22,24,26,27,28,29,30,31,32,34,35,36,37,38,39,40,42,43,46,47,48,52,53,54,55,56,58,59,60,62,66,67,71,72,73,74,75,76,77,78,80,82,83,84,85,87,88,90,92],GIS:63,IAS:63,IDE:[18,19,20,63],Jps:77,LTS:[17,18,25,35,63,83],LVS:63,Los:50,NFS:63,NOT:74,Not:[11,28,46,66,67],OSes:[18,37],One:[6,54,84,93],PCs:15,SOS:63,TLS:63,The:[0,1,2,3,5,6,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,49,51,52,53,54,55,56,58,59,63,64,65,66,67,69,71,72,73,74,76,77,78,80,82,83,84,85,86,87,90,91,92,93],Then:[21,34,84],There:[4,13,29,31,32,45,46,51,56,59,60,65,66,67],These:[2,10,18,24,27,28,29,30,34,39,48,58,59,66,73,83,84,92,93],Use:[4,9,10,11,13,14,15,20,22,25,27,28,31,33,35,36,41,42,46,49,52,54,55,56,57,59,60,65,66,73,79,83,85,89],Useful:[3,5,63,70],Using:[5,15,22,24,28,31,34,35,36,93],VMs:[15,19,20,21,22,32,63,78],With:[3,4,5,10,19,20,21,22,23,27,30,31,32,56,73,76,77,80,82,90],XFS:[9,10,63],XPS:[63,68],Yes:[0,9,56,72],___:[57,73],____:[57,73],_____:[57,73],__attribute__:76,__future__:58,_gnu_sourc:60,_structur:66,_wiki:66,a1sai:68,a512:42,aadd:76,abbr:66,abi:47,abil:[10,32,40,73,88],abl:[5,9,15,23,24,31,32,36,43,58,60,64,66,76,85],abort:24,about:[4,15,18,19,20,21,22,23,28,29,32,35,36,37,41,44,52,57,58,59,60,61,63,65,66,67,71,72,73,75,80,93],abov:[10,19,20,21,22,34,36,38,56,58,59,66,74,80,83,86,90],absent:60,absolut:0,acceler:[18,59,63,83],accept:[9,10,15,21,22,34,60,66,67,73,93],access:[15,19,22,28,32,39,56,58,59,60,63,67,72,73,74,75,77,80,84,85,86,88,90,92,93],accident:29,accommod:[17,40,59],accompani:27,accomplish:[0,30,56,92],accord:[31,39,60,63,66,80],accordion:67,account:[15,21,22,40,43,46,48,56,63,72,75,85,90],accru:72,accur:[60,67],accuraci:82,achiev:[2,14],acl:63,acm:63,acpi:[18,40,63],acpica:63,acquir:[54,92],acr:73,acronym:66,across:[0,23,31,58,63,77],acs:73,act:[4,32,54,59],action:[6,10,20,21,30,42,53,54,60,63,66,67,72,84,92],activ:[9,17,26,40,43,53,54,56,63,64,71,73,78,85],actual:[14,26,31,32,46,54,67,80],ad28a3390ecc:52,ada:63,adapt:[54,63],add:[2,4,9,11,14,18,19,20,22,24,26,28,31,33,34,38,39,40,41,46,47,50,53,54,56,58,60,62,64,65,66,67,72,73,74,75,76,77,78,82,83,84,85,87,88,90,92],added:[2,28,31,34,58,60,66,72,73,90,93],adder:52,adding:[2,10,28,39,40,53,56,66,76,80],addit:[1,4,10,14,19,20,21,22,23,24,28,29,31,34,35,36,54,55,56,59,63,65,66,67,70,72,73,78,82,90,91],addition:[5,25,31,66,74,77,87],addr:[17,53],address:[6,10,15,17,23,28,29,33,39,53,54,55,56,58,60,63,67,73,85,86,87,92],adher:[60,80],adjust:[18,40,63],admin:[60,92],administ:73,administr:[3,5,9,10,18,31,41,43,45,49,56,59,60,63,84],adminstr:56,admonit:66,adopt:4,advanc:[12,18,38,47,61,63,71,76,83,84,85,93],advantag:[5,29,30,32,58,76,84],advisor:73,advisori:29,aerror:76,aes:12,af1b:11,after:[2,5,6,9,10,15,19,20,21,22,24,27,28,29,31,33,34,35,36,39,40,41,44,45,46,53,54,56,58,59,60,63,64,66,71,82,83,84,90,92],again:[11,18,19,21,24,28,34,40,49,73,76,82,90],against:[26,28,29,31,32,34,35,36,58,63,83],agent:63,aggreg:55,agil:0,ago:[47,52,58],ahead:91,aid:38,aim:[29,32,34,40,74],aio:17,aka:73,akonadi:63,aks:73,alert:66,alexnet:[58,59],algebra:63,algorithm:[40,63],alias:14,all:[0,1,4,5,9,10,11,12,15,19,20,21,22,23,24,28,29,31,32,34,35,36,38,40,42,43,46,48,49,51,54,55,56,60,62,63,65,66,67,73,74,75,77,79,80,81,82,90,92],alloc:[18,53,60,73,80],allow:[0,4,5,6,9,10,14,15,17,18,23,24,28,29,30,31,32,35,36,39,40,43,54,56,58,60,63,64,66,72,73,74,75,80,83,85,90],allowoverrid:90,allowtcpforward:64,alon:66,along:[28,32,72,90],alongsid:[9,10],alow:64,alphanumer:[9,10],alreadi:[18,24,28,30,31,32,34,38,56,59,60,64,72,73,77,78,80,84,85,86,88,91],alsa:63,also:[0,3,6,9,10,11,17,19,20,21,22,23,24,26,27,28,29,31,32,34,36,39,40,43,45,46,58,59,60,67,72,73,75,83,84,85,86,90],alt:[19,66,83],alter:2,altern:[0,10,15,21,28,31,34,62,63,82],although:[2,40,47,56,83],altogeth:[35,36,56],alwai:[9,28,31,36,67,83],alwaysshar:56,amateur:63,amazon:[15,20,42,59,63,69,89],amazonaw:72,ambigu:[31,67],amd:[18,19,20,40],america:[9,50],amount:[18,29,57,60,66,77],analog:60,analysi:[2,6,24,60,63],analyt:[6,33,59,60,63,73],analyz:[2,24,63,76],angel:50,angl:66,ani:[2,4,5,9,10,18,23,24,26,28,30,31,32,34,35,39,41,44,47,49,51,52,56,57,58,59,60,63,65,66,72,74,77,78,79,80,82,85,87,90],annot:63,announc:58,anonym:[60,90],anoth:[6,9,10,14,18,20,28,32,53,66,72,73,82],ansibl:[32,63],answer:[0,61,65],antiviru:63,anyon:[66,85,90],anywher:51,aoe:54,apach:[30,63,89],api:[6,63,87],apic:18,apivers:[58,80],app:[6,11,19,20,40,53,58,60,63,64,73,75,83,84],appear:[9,10,11,18,28,46,54,58,66,72,73,74,75,76,77,81,90,92,93],append:[10,34,36,83],appl:67,applet:63,appli:[5,10,31,32,34,48,51,55,58,66,76,79,80,84],applianc:22,applic:[0,9,11,19,27,30,31,34,40,41,43,56,60,63,64,73,76,80,82,83,84,86,87,88,89,90,93],appreci:67,approach:[0,3,4,5,26,29,32,34,35,36,76],appropri:[10,18,19,24,26,30,32,38,56,66,67,80,83,85,86],approv:65,appservic:73,appstream:63,apr:63,apt:[3,17,31,43,56,81],arbitrari:[60,63],arch:[60,76],arch_atom:76,architect:33,architectur:[25,29,32,37,45,52,54,57,58,63,76,80],archiv:[15,24,31,34,36,63],area:[32,63,82],aren:[24,83],arg:58,argc:60,argument:[9,10,23,31,52,53,58,59,60,76],argv:60,ark:[63,71],arol:76,around:23,arrai:[60,76,82],arrow:[9,10],articl:[67,92,93],artifact:[32,37],ask:[0,20,29,34,49,56,61,72],aslr:29,aspect:17,asprintf:60,assembl:63,assert:17,asset:[63,73],assign:[15,33,39,53,54,55,56,80],assist:[2,21,22,24,60,63],associ:[5,15,23,28,48,73,83,90],assum:[2,32,44,47,53,60,67,72,74,75,78,79,80,82,85,87,88,90,92,93],assumpt:[30,81],assur:[10,37,64,81,84,86],asterisk:[66,92],asub:76,asynchron:63,atk:63,atkmm:63,atom:[63,68,71,76],attach:[11,21,22,60],attack:92,attempt:[2,9,10,24,52],attica:63,attr:63,attribut:[8,18,56,66,72,76],audaci:63,audienc:[32,67],audio:63,audiomodul:47,audit:63,augment:0,authent:[29,63,72,73,77,86,93],author:[29,77],authorit:[54,63],authorized_kei:77,auto:[9,10,18,23,31],autoar:63,autoconf:63,autoindex:[28,54],autoinstal:36,autom:[2,5,23,24,32,34,37,63],automat:[2,9,11,23,24,26,28,29,32,35,36,40,49,51,54,60,63,74,78,81,83,93],automot:63,autoproxi:[10,33,88],autospec:[28,31,33,34,41,70],autospecnew:24,autostart:[17,18,41,56,59,63],autoupd:[14,31],autproxi:23,aux:77,auxiliari:26,auxservic:77,avail:[1,3,5,9,10,11,12,16,18,19,20,21,22,24,26,27,28,29,31,32,34,39,40,42,44,46,53,56,57,58,59,60,62,69,70,72,73,74,75,80,82,84,85,90,92,93],avb:47,avbstreamhandl:47,averag:27,avial:23,avoid:[17,18,26,29,32,60,63,66,80,83],avx2:76,avx:58,awai:[4,32],awar:[9,28,32,85],awesom:63,aws:[20,42,59,63,69,72],awscleartestkei:72,axel:63,azur:[15,20,25,42,63,69,89],azurecliprod:73,b26d:11,babel:63,babl:63,back:[6,11,28,32,34,40,49,52,63,66,73,74,83,90],backend:[6,60],background:[23,49,56,74],backport:63,backup:[50,63,73],backward:[63,76],bacon:67,bad:[63,85],bad_signatur:51,balanc:[40,63],banana:67,band:32,bandwidth:[55,63],baobab:63,bar:[9,10,15,60,67,72,93],bare:[13,18,21,22,28,47,53,60,61,73,74,75,78,80,82,87,88,90],base:[0,1,2,3,5,14,15,18,19,24,27,28,29,31,32,33,34,37,40,41,55,56,57,58,63,72,73,74,76,81,83,90,91],baselin:57,basenam:18,baseurl:47,bash:[52,57,58,73],bashrc:[28,73,88],basi:[5,31,48,52,80],basic:[2,14,20,21,22,24,28,31,37,41,42,43,45,50,52,53,56,57,58,59,61,63,66,67,69,73,77,80,81,82,84,87],batch:[59,73],batch_siz:58,batchai:73,batteri:[40,67],bcach:63,bcaf:11,bcc:63,bcdedit:18,bdevic:14,becaus:[0,5,7,15,21,23,28,36,39,40,48,49,51,52,53,54,55,56,57,59,67,71,78,79,80],becom:[29,30,58,93],been:[0,9,16,18,21,22,24,28,29,31,34,35,38,39,46,51,58,60,68,71,73,74,90,92],befor:[6,9,10,11,12,13,15,17,18,20,24,28,29,32,35,36,38,39,41,42,43,47,51,54,56,58,59,60,65,66,67,72,74,77,78,79,80,81,82,83,85,87,90],begin:[18,34,35,36,60,67,73,81],beginn:82,behavior:[2,24,32,35,36,60,83],behind:[14,23,28,31,74,80,85,88],being:[7,23,24,29,32,35,36,38,46,49,56,60,63],believ:[29,60],below:[0,9,10,11,12,14,17,19,20,22,24,29,30,32,34,35,36,38,40,46,49,51,53,54,56,58,59,60,64,66,67,73,74,80,83,84,87,90,92],bench:[58,76],bench_iodim:76,benchmark:[57,63],benefit:[29,32,43,67,80,88],besid:[10,18,86,90],best:[4,14,15,22,25,29,31,55,58,59,63,65,80,89],better:[65,66],between:[0,5,9,10,14,28,30,31,32,33,39,45,54,56,58,59,63,83],beyond:[32,63,91,92],bgp:63,big:[63,77,87],bijiben:63,bill:[15,73],bin:[24,26,31,47,49,52,56,58,59,60,63,73,83],binari:[3,5,24,26,31,36,52,54,58,63,81,85],bind:[63,83,84],bindcarri:55,binutil:63,bio:[6,9,10,16,17,18,19,20,36,40,42,44,54,60,69],bios:9,bios_vers:60,biosdecod:24,bison:63,bit:[12,18,19,20,21,22,57,63,66,71,83],bitmap:[63,66],bla:63,blacklist:[2,29,83],blank:[58,73,80,90],bldg2:45,blender:63,blind:29,blob:73,block:[2,14,23,29,39,46,63,77,86,90],blog:[0,29,92],blue:18,blueprint:32,bluetooth:63,bluez:63,bmap:63,board_nam:60,bodi:[66,67],boinc:63,bold:66,bond1:55,bond:33,bone:73,book:63,boost:63,boot:[9,11,14,15,16,17,18,25,28,30,32,39,40,42,45,46,52,53,54,56,63,69,71,74,83],bootabl:[9,10,13,14,28,32,39,54],bootchart:[39,54],booth:63,bootload:[18,34,36,63,73,83],borgbackup:63,both:[28,29,40,46,49,53,55,59,60,66,74,77,79,80],bottom:[10,15,66,90],bouncer:63,bound:[53,59],box1:45,box:[9,10,17,18,29,59,66,71,72,85,92],bpf:63,bq9mg442b:73,bracket:[38,66],branch:[65,66],brand:68,breakag:28,breakfast:67,bridg:[40,52],bring:[21,22,72,76],broken:[33,51],bronz:68,brotli:63,brows:[15,16,19,20,28,63,74],browsabl:85,browser:[0,9,12,15,21,22,58,60,63,72,73,82,87,90,92,93],bryteis:28,bsd:[24,63,88],btrf:0,bucket:[15,59,63],buffer:53,bug:[0,60],build:[0,2,27,28,31,32,33,37,58,60,63,66,73,74,76,81,82,83],builddir:24,builder:[33,63],buildlog:76,buildreq_add:[2,24],buildreq_ban:2,built:[0,2,17,24,28,29,32,34,36,52,54,56,57,63,73,83],built_module_loc:36,built_module_nam:36,bulk:[27,32,33],bump:[28,63],bundl:[0,4,14,17,18,19,20,21,24,25,26,27,29,32,34,35,36,39,40,41,42,44,45,46,47,49,50,51,53,54,56,57,58,60,64,66,69,70,73,75,76,77,78,79,80,81,82,83,85,87],burn:[9,44],burst:60,bus:[17,53],busctl:23,busi:[32,53],busybox:[78,79],butter:67,button:[9,10,11,15,18,19,20,21,22,56,72,75,82,93],bvlc:59,bvlc_alexnet:59,byte_burst_limit:60,byte_window_length:60,c2750:68,c_librari:24,cab:63,cabextract:63,cabl:53,cach:[28,31,34,63,73,83,84],cachegrind:63,cad:63,caff:59,caffe2:58,caffemodel:59,cafil:51,cairo:63,cairomm:63,calc:63,calcul:[5,63,82],calendar:63,call:[3,6,9,19,21,22,23,28,31,32,34,40,47,52,54,55,59,60,63,66,67,85,90],caller:60,callggrind:63,calloc:60,callout:66,camera:63,can:[2,3,4,5,6,9,10,14,15,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,34,35,36,37,38,40,41,43,44,45,46,48,49,52,56,57,58,59,60,61,62,63,66,67,71,72,73,74,75,76,77,79,80,82,83,84,85,86,88,89,90,91,92,93],cancel:[9,10,18,72],cannot:[0,24,29,31,44,48,50,51,53,56,58,80,90],capabl:[12,31,32,35,36,39,63,71],capac:[19,20,21,46],capit:66,caption:66,captur:[6,28,63],carbon:68,card:[53,63,83,93],care:[13,32,81],carefulli:86,carri:[12,71],carv:63,cascad:31,caset:76,casync:63,cat:[17,24,35,36,40,44,48,52,54,56,64,77,78,79,80],catalog:[15,63,73],catastroph:30,categori:[28,41,56,60],caus:[2,11,24,49,66,80],caution:67,cb9aab:11,ccach:[34,63],cdn:[12,17,20,22,27,34,47,51,52,53,54,73],celeron:68,cell:[58,82],center:26,cento:57,ceph:63,cert:[28,80],certain:[2,29,35,36,40,57],certif:[28,29,42,51,59,63,73,92],certutil:[20,42],cflag:53,cgroup:[48,52],cgroupf:[52,59],chain:[29,35,51],challeng:32,chanc:[0,20,42],chang:[0,5,9,10,14,15,17,18,24,27,28,30,31,32,35,40,45,46,48,53,54,56,59,60,63,66,67,72,73,74,76,78,79,80,81,82,85,88],chapter:85,charact:[9,10,15,45,58,63,66],chardetect:31,charg:[72,73],chassi:45,chat:63,check:[5,6,10,11,13,14,18,19,20,21,22,23,24,28,29,31,37,38,42,43,44,47,50,53,57,58,60,64,66,71,73,74,78,80,82,85,88,90,92],checkbox:[10,21,22,86],checkout:34,checksum:[11,20,29,42],chees:63,chevron:10,chicago:65,children:14,chipset:18,chmod:[12,17,24,28,34,58,72,83,85],choic:[10,32,58,60,67,77],choos:[0,5,9,12,14,15,16,18,51,53,57,58,60,72,73,80],chooser:63,chose:[56,73],chosen:[56,60],chown:[28,85],chroot:28,ciao:39,cidr:80,cidr_netmask:38,cif:86,cinnamon:17,cipher:29,circuitco:68,circumst:2,citi:9,cjson_librari:24,claim:68,clam:63,clamav:63,clamp:60,clang:63,clarifi:66,clariti:[66,67],classif:[59,60,63],classifi:[59,60],claus:[24,67],clean:[1,24,28,31,36,59,60,90],clear:[1,2,3,4,5,6,12,13,14,16,23,25,26,27,28,29,30,31,32,35,36,38,39,40,41,43,44,45,46,47,48,49,50,51,53,54,55,57,58,59,60,63,64,65,66,67,68,71,77,78,80,83,87,88,89,92,93],clearli:[30,66,67],clearlinux:[0,12,14,17,18,20,22,24,26,27,28,31,34,47,49,51,52,53,54,57,58,60,71,76,84],clearlinuxo:18,clearlinuxroot:51,clearlinuxus:85,clearresourcegroup:73,clearvm:73,cli:[15,22,63,86,89],click:[9,11,15,18,19,20,21,22,42,56,58,59,67,72,75,82,85,90,92,93],client:[6,22,23,26,28,31,39,41,47,52,54,63,64,73,74,77,81,84],clipboard:73,cloc:63,clone:[14,22,23,24,57,58,60,63,65,76,80],clone_:34,clone_dmidecod:24,clone_linux:34,cloneabl:32,close:[9,19,20,56,66,67,73,74],cloud:[13,19,20,21,25,31,38,39,41,42,46,54,58,59,61,63,69,73,81],cloudguest:[19,20,32,39,42,63,69,73],clr:[10,13,18,24,26,28,32,34,35,36,37,40,41,49,52,56,59,60,63,72,83,85],clr_debug_daemon:26,clr_debug_fus:26,clrtrust:29,cluster:[32,58,63,73,89],clutter:63,cmake:24,cmd:52,cmdline:[34,35,36,39,60,83],cmrt:63,cnc:63,cnn_tf_v1:58,cockpit:63,code:[2,3,5,6,7,24,25,26,30,35,36,49,59,63,65,73,76],codec:63,coexist:56,coffe:67,cogl:63,cognit:73,cognitiveservic:73,collabor:67,collat:90,collect:[6,47,57,58,63,66,84],collector:[6,60],collid:34,colon:[56,66],color:[53,63],colord:63,colorlevel:56,columbiad:63,column:[11,18,38,73],com:[0,23,24,26,28,34,47,49,52,57,58,59,60,71,72,76,80,84,88,93],combin:[5,6,28,29,31,33,39,60,63],come:[28,29,31,34,35,36,39,46,49,54,73,74,93],command:[2,3,5,11,14,17,18,19,20,22,24,26,27,28,29,30,31,34,35,36,38,39,40,41,42,43,45,46,48,49,50,51,52,53,54,55,56,58,59,60,63,66,67,69,70,72,73,74,76,77,78,79,80,81,82,83,85,86,87,88,90],commenc:67,comment:[60,66],commit:[5,31,34,65],commod:32,common:[8,24,29,31,32,34,45,47,56,58,61,63,67,84,86],commonli:[0,14,44,61,66],commun:[0,23,26,36,58,63,67,80],compani:[66,88],compar:[5,20,31,41,42,43,51],comparison:[34,63],compat32:83,compat:[5,9,10,13,14,18,21,22,28,31,55,63,70,71,76,83],compatibilti:12,compel:74,compil:[0,3,26,34,35,36,60,63,76,83],complement:32,complet:[1,2,3,4,6,9,10,11,15,18,19,21,24,28,34,36,40,43,44,49,53,56,57,58,59,60,61,67,72,73,74,76,81,85,90],complex:[0,23,34,55,58,60,76,92],compli:58,complianc:31,complic:[23,67],compon:[6,12,26,29,31,32,53,57,58,60,63,71,90,92],compos:[5,31,63],composit:63,comprehens:[2,67,68],compress:[5,18,20,26,42,52,63,69],compressor:63,compromis:29,comput:[5,13,20,39,42,45,54,59,63,65,69,72,73,76,77,87],concept:[1,3,5,6,32,61,66,67,74],concert:32,concis:[65,66,67],conclus:67,condit:[40,49,63,66,67],conduct:65,conect:64,conf:[2,23,30,35,39,47,48,50,54,56,60,64,78,79,80,83,84,85,87,88,90],confer:5,confid:[59,67],config:[2,12,14,16,23,24,27,28,32,34,39,53,56,57,60,63,83,88,93],config_rte_build_shared_lib:53,configur:[2,3,13,15,16,17,18,23,27,38,40,48,53,55,58,61,63,64,66,67,72,73,78,81,82,84,85,88,93],confirm:[9,10,18,28,51,53,60,64,68,83,90,92],conflict:[5,18,24,54,83],confus:67,congratul:[9,39,44,45,46,50,54,64,72,73,74,76,77,78,79,80,82,87,90,92],conjunct:59,conki:63,connect:[1,9,10,14,15,16,17,20,21,22,23,31,37,38,44,53,54,59,60,63,71,73,77,80,84,85,87,88,89,90,92],connection_nam:38,connector:[59,63],consciou:29,consecut:66,consequ:67,consid:[13,18,32,34,35,36,40,41,49,66,84,86],consider:[29,64],consist:[6,28,31,32,56,60,65,66,67,73],consol:[14,15,17,18,24,35,63,66,72,73,77,90],construct:[57,67],consult:[18,28,49,80],consum:[28,29,32,37,58],consumpt:[26,63,73],contact:80,contain:[3,4,5,9,10,12,14,24,26,30,33,34,35,36,39,41,45,47,48,51,53,54,55,57,58,59,60,63,66,73,76,77,80,82,84,88,89,90,92],container:[32,59,74,80],containerd:52,content:[3,4,6,9,10,11,26,28,31,32,38,39,42,54,60,62,63,65,66,73,75,83,90],contenturl:28,context:[30,52,63],continu:[2,7,10,18,24,28,32,35,36,38,41,46,58,59,68,72,73,74,77,79,80,83,84,90,92,93],contrast:81,control:[4,18,23,26,32,34,40,48,53,58,60,63,73,80,83,84,85,93],convei:66,conveni:[35,36,60],convent:[10,42,63,66,69],convers:[22,63],convert:[20,58,63],convnet_benchmark:58,cool:[40,73],cooper:67,coordin:[37,59,67],copi:[14,15,24,28,29,30,31,36,58,60,63,72,73,77,82,84,87,90],copyfromloc:77,copyright:[0,52,73],core:[14,17,28,32,39,40,45,52,59,60,63,68,71,73,77],corner:[17,21],corpor:[23,28,52,53,60,73,74,80],correct:[2,6,23,24,28,44,56,58,60,65,66,67],correctli:[24,28,53,58,66,77],correspond:[20,27,28,35,36,42,53,59,69,83,90],corrupt:[20,42],cosmo:73,cosmosdb:73,cost:5,could:[11,49,65,84],count:63,coupl:13,courteou:67,cover:[39,60,67,74,90],cpio:[34,63],cpu:[12,17,18,21,22,33,52,53,58,59,60,71,76],cpu_model:60,cpufreq:40,cpuidl:40,cracklib:29,crash:[6,9,10,60],crd:58,creat:[0,1,2,6,9,10,13,14,15,23,27,30,31,33,34,35,36,37,38,39,46,47,48,49,50,51,52,53,54,55,56,58,63,64,65,66,71,77,80,82,83,84,85,87,88,89,90,93],creation:[2,15,21,22,24,27,31,37,60,63],creation_timestamp:60,creativ:8,credenti:[56,73,85,86,90,92],crio:80,crit:60,critic:[32,63],croni:63,cross:[63,66,73],crowdsourc:32,crypto:63,cryptographi:63,cryptoprocessor:63,cryptsetup:[10,29,63],csp:32,ctl:11,ctrl:[18,19,83,90],cultur:[29,63],cumbersom:[5,31],cumul:[6,60],cup:63,curat:26,curl:[12,14,17,20,22,23,24,28,34,35,36,47,51,53,54,63,73,74,92,93],current:[12,15,16,18,20,27,31,34,40,42,45,46,48,51,54,57,58,60,62,63,69,72,73,76,82,90],current_driv:40,cursor:[18,63],custom:[1,4,6,9,10,15,19,20,21,22,24,27,28,29,30,32,33,35,36,37,39,49,56,57,58,59,60,63,71,72,73,74,87,90,93],custom_modul:36,customiz:[0,4,6,34,35,36,60,63],customresourcedefinit:58,cut:[56,76],cve:63,cycl:[4,33,39,40,60],cyru:63,d54250wyk:68,d6ee7903e14d:52,d73d6040afd7693cccdfece479df9795:60,d_type:52,dad:67,daemon:[6,23,28,30,40,49,50,52,56,60,63,64,74,78,79,80,85,88],dai:[0,29,32,36,60,81,83],daili:[29,31],damag:66,danger:66,darktabl:63,dash:[45,66],dashboard:[60,72,73,90,92],dat:23,data:[0,6,11,26,30,31,32,33,37,45,47,49,53,54,55,58,59,63,66,73,77,82,84,87,92],data_dir:59,data_format:58,data_typ:59,databas:[6,29,39,41,47,60,63,73,82,84,92],datacent:32,datadir:59,datanod:77,dataset:[63,82],datasheet:73,datastor:[21,22],datastore1:22,date:[60,65,80],david:84,dbu:[23,63,75],dbx:63,dcd9adb40611:52,dconf:75,ddd:63,deal:[23,63],deb:[81,84],debug:[6,17,28,33,52,60,63],debug_info_ban:28,debug_info_lib:28,debug_info_src:28,debugcon:17,debugg:[26,63],debuginfo:26,dec:73,decid:[4,6,32,34,79],decis:[29,32,60],declar:[2,24,60],decod:[0,63],decompress:[9,10,11,16,18,19,21,22,33,53,63,82,90],decrypt:63,dedic:[54,73],dedupl:63,deep:[33,63],def:66,defaultlimitnofil:48,defend:29,defin:[27,28,30,34,38,39,40,46,54,59,60,63,66,72,73,76,80,82,87,90],definit:[28,31,34,41,63,66,90],degrad:80,degre:[4,32,67],del:84,delet:[6,14,17,18,24,28,30,49,52,58,60,74,83],delimit:60,deliv:[6,29,31,58,60],deliveri:[6,31,60,73],dell:[36,68],delta:[5,28],demand:[31,40],demo:82,demonstr:[55,59,82],densiti:66,depart:[28,80],depend:[0,4,5,9,10,19,20,24,31,32,37,42,47,49,53,56,57,59,63,78,93],depict:[39,46,54],deploi:[1,3,4,5,20,22,24,29,33,37,41,58,60,63,76,80],deploy:[28,32,37,58,59,63,73,80],deprec:[2,43,79],depth:[42,63,66,82],der:51,deriv:[4,37,57,93],describ:[2,10,14,22,24,25,27,28,31,32,35,36,37,42,44,45,46,47,49,50,51,53,54,55,56,58,59,60,63,65,66,67,68,72,78,79,80,81,85,87,91],descript:[2,20,42,56,63,67,69,73],descriptor:48,deselect:10,design:[0,19,20,21,22,23,28,30,32,42,63,77,83,84,90],desir:[9,10,18,21,27,28,29,30,34,40,49,60,90],desktop:[0,12,13,17,18,19,20,21,22,33,40,41,42,45,59,63,68,69,71,75,76,77,83,85,89,90,92],despit:31,desrt:75,dest_module_loc:36,destin:[30,56,67],destinationtyp:[28,39],destroi:[9,10,11],detach:21,detail:[1,5,9,10,14,15,18,19,21,23,24,28,31,32,34,36,37,38,39,47,48,53,55,57,58,59,61,63,66,67,72,73,74,75,78,80,82,85,87,88,90,92],detect:[2,10,11,23,24,31,36,37,40,59,63,83],determin:[0,17,28,31,35,36,37,40,49,51,53,55,60,83],determinist:63,dev:[10,11,14,24,26,31,35,41,44,46,47,48,49,53,56,57,58,59,63,76,80,83],devbind:53,develop:[5,6,7,9,10,14,18,26,32,33,35,38,43,47,53,57,58,59,60,63,73,75,76,78,84,91],devic:[9,10,11,14,17,18,19,20,31,38,40,44,53,55,58,63,71,73,74,83,93],device_id:53,devicelogin:73,devop:63,devpkg:63,devtest:73,dfs:77,dfu:63,dhcp:[10,23,38,45,54,55,63],diagnos:[5,31,63],diagnost:63,dialog:72,dialogu:[9,10,11,18],dictionari:65,did:[31,67],diff:[31,42,63],differ:[1,3,4,5,9,10,18,19,20,24,27,32,34,40,42,46,48,54,58,60,61,63,69,72,73,75,76,80,85,93],difficult:[66,67,76],diffoscop:63,diffutil:63,dig:23,digikam:63,digit:[29,63,82],dim:76,dir:52,direct:[16,17,23,31,48,54,63,66,67,83,90],directli:[21,22,28,30,31,34,35,36,38,51,57,58,65,66,67,73,82,85],directori:[2,11,14,17,18,20,21,22,24,28,30,31,34,35,36,38,39,42,43,46,48,50,52,53,54,55,56,57,59,60,63,64,66,72,73,76,77,80,82,83,84,85,87,88],disabl:[0,6,9,10,17,18,22,23,29,34,35,36,40,54,56,64,80,93],disallow:[29,90],disassembl:63,disc:19,discard:49,disclaim:7,disclos:66,disconnect:[19,20,21,22,38],discourag:[29,74],discov:[2,24,89],discover:63,discoveri:[23,63,80],discrep:5,discuss:[0,42,56,65,67,90],disk2:11,disk:[6,11,13,14,15,16,17,18,19,20,21,22,28,29,32,33,39,42,54,60,63,69,71,73],diskpart:10,diskutil:[10,11],displai:[6,18,42,45,46,49,53,56,58,60,63,73,80,82,83,85,90],distinct:[4,66],distribut:[0,3,5,23,30,31,34,35,36,37,41,57,58,63,75,77,80,81],distro:[1,11,17,19,20,37,56,60,61,81,83],divid:[37,54,61,67],django:63,djvu:63,dklm:52,dkm:[33,35,63],dkms_binaries_onli:36,dkms_source_tre:36,dla:73,dlpa:52,dlr:58,dlrs_imag:58,dlrsalexnet:58,dlrsresnet50:58,dls:73,dmax:76,dmidecod:24,dnf:[17,56,63],dnn:58,dns:[38,54],dnsmasq:54,dnssec:63,dnsstublisten:54,doc:[63,82],docbook:63,dock:63,docker:[20,32,33,42,58,63,69,79,89],docker_default_runtim:[78,79],docker_image_path:28,docker_nam:58,docker_service_dir:78,dockerfil:[52,57,58],dockerhub:[31,32,63,84],document:[5,7,16,19,20,22,25,28,31,32,34,36,39,40,53,55,58,59,60,61,63,67,68,70,73,74,80,81,82,83,85,87,90],documentroot:90,docutil:63,doe:[2,9,10,12,15,16,24,27,28,30,31,34,35,36,38,40,42,44,47,52,56,59,60,64,74,81,84,92],doesn:[24,32,60],dog:[66,67],dolphin:63,domain:[9,10,23,60,63,85,88],domotica:63,don:[9,15,18,32,56,60,66,67],done:[23,52,58,79,80,90],dont:67,dosfstool:63,dot:[15,45],doubl:[9,18,76,93],dovecot:63,down:[9,10,15,18,19,21,22,28,34,46,67,72,73,90],downgrad:[5,31],downhil:63,download:[5,9,11,12,14,15,16,23,24,26,27,28,29,31,32,33,34,36,44,47,51,52,53,54,57,58,59,63,71,72,73,74,75,82,85,88,90,93],downstream:28,doxygen:63,dpdk:[33,63],drain:81,dri:75,drift:32,drill:46,drive:[9,10,13,14,17,18,19,20,21,22,32,44,54,63,86],driver:[17,18,34,35,36,52,55,63,74,78,89],drop:[18,21,22,48,57,60,64,90],drv:53,dtc:63,due:[0,17,20,23,29,35,36,42,52,60,64],duktap:23,dummi:63,duperemov:63,duplic:[14,63],dure:[2,6,9,10,21,26,28,29,32,34,39,53,54,60,73],dvd:[19,20,21,22],dvi:63,dyamic:63,dyem:52,dynam:[18,32,36,54,63,83,90],e1000:53,e131dc71d339:58,e2fsprog:63,e3825:68,e47ecc039d48409b1c62e5ba874921d7f640243a4c3115bb41b3e1009ecb48e4:58,each:[2,3,5,10,11,20,27,28,31,32,40,42,53,54,55,56,57,58,59,60,66,67,73,76,77,80,81,90],earlier:[38,43,51,66,82,87],easi:[29,31,66,67,74,80,84,85],easier:[32,35,36,45,49,76],easiest:17,easili:[6,14,28,29,30,32,34,63,66,67,84],eat:67,ec23189ef954:52,ec2:72,ec5064287c60:52,ecdsa:[72,77],echo:[24,35,40,53,54,60,78,80,83,88],ecosystem:[63,74],edg:76,edit:[2,10,14,19,20,21,24,27,28,34,36,38,47,56,57,59,60,63,64,65,77,80,87,90],editor:[24,28,34,36,38,41,52,55,63,73,77,80,90],educ:63,efa893350647:52,effect:[23,28,30,32,40,55,60,61,63,66,67,73,90],effici:[26,29,31,32,40,49,67],effortlessli:23,efi:[9,10,11,13,14,18,19,20,21,22,28,39,46],egl:83,egl_external_platform:83,egl_vendor:83,eigen:58,either:[7,10,14,20,28,42,58,59,66,80,85],eject:11,elasticsearch:63,element:66,elev:88,elfutil:63,elig:72,elimin:[20,42],els:[60,66],emac:63,email:[15,24,34,63,84],embed:28,emphas:[63,67],emphasi:[66,67],emploi:[29,32,37,40,48],empti:[9,10,18,28,42],emul:[11,17,19,20,46,50,56,63,66],en_u:14,enabl:[0,5,6,9,10,17,18,21,22,23,29,33,34,35,36,37,40,44,47,50,52,53,54,55,56,58,61,63,66,73,74,75,80,83,87,88,89,90],enable_iot_cloud_output:59,enable_kinesis_output:59,enable_s3_jpeg_output:59,encapsul:5,enchant:63,encod:[0,77],encount:[18,36],encourag:[10,29,92],encrypt:[12,29,63,64,71],end:[6,17,18,19,20,27,31,34,35,36,45,46,56,63,66,84,92],endpoint:[32,58],endsect:83,endtim:73,energi:40,enforc:[31,35,40],engag:26,engin:[13,19,20,23,36,42,57,63,69,87],english:[90,92],enhanc:[5,34,35,36,60],enjoi:49,enlighten:63,eno1:54,eno2:54,enough:[9,10,32,60,80],enp1s0:55,enp1s0f0:55,enp1s0f1:55,enp1s0f2:55,enp1s0f3:55,enp1s0f:55,ensur:[5,9,10,11,14,28,29,31,34,36,37,39,44,51,54,58,60,77,80,81,83,90],entail:82,enter:[9,10,14,15,18,31,40,42,43,46,50,52,56,58,59,60,62,64,72,73,75,76,77,78,80,84,85,86,87,90,92],enterpris:[57,63],entir:[0,5,14,31,36,59,82],entri:[9,10,23,28,34,36,39,44,53,58,63,64,80,92],enumer:63,env:[58,87],environ:[4,9,10,16,17,19,20,21,22,23,27,28,32,37,42,54,58,60,61,63,64,66,69,74,76,78,79,80,83,88],envvar:66,eof:[17,48,52,54,56,78,79,80,83,88],eog:63,ephemer:[30,32,72],epoch:28,ept:[19,20],equal:66,equat:23,equip:66,eras:54,error:[2,6,11,18,24,36,58,60,63,73,80],esc:10,especi:[26,36,40,66,83],establish:[59,60,72,73,77],esxi:[13,19,20,42,69],etc:[2,17,21,23,28,30,31,32,35,36,38,44,47,48,49,50,54,55,56,59,60,63,64,67,74,77,78,79,80,83,84,85,87,88,90,93],etcfstab:0,ethernet:[38,53,54],etherneten01:38,ethtool:63,evalu:[40,49,57],evcd:63,even:[5,49,56,63,71,76],event:[32,63,67,73,93],event_id:60,eventgrid:73,ever:92,everi:[4,10,31,32,39,59,60,63,85],everydai:67,everyth:[30,31,37,67,77],evinc:63,evolut:63,evolv:[60,76,92],exact:31,exampl:[2,10,11,12,17,21,26,29,30,32,34,39,40,41,42,43,44,45,46,48,50,52,54,55,56,57,58,59,63,64,65,67,71,72,74,80,83,85,90,92],example_fil:87,exce:66,exceed:[40,48],except:[10,60,66],excess:[30,60,67],exclud:[9,10,24,26,77],exclus:24,exec:[48,73],execstart:56,execstartpr:56,execstop:56,execus:82,execut:[12,17,18,24,26,27,28,29,32,34,40,43,46,56,58,60,63,66,72,73,75,76,77,82,83,87],exercis:[1,63,84],exist:[2,4,5,9,10,11,14,16,20,21,22,28,30,32,34,35,38,39,45,52,54,56,58,60,64,65,66,72,73,74,79,80,84,85,86],exit:[9,10,18,40,43,44,46,60,73,80,90],exit_failur:60,exiv2:63,expand:[15,21,22,43,46,72,84],expandtab:14,expat:63,expect:[24,28,52,56,67,77,84],experi:[17,18,37,58,59,63],experienc:43,experiment:[52,63],expert:[18,56],expertis:67,expir:[6,47],explain:[0,9,10,14,15,16,17,18,19,20,21,22,38,39,40,44,53,55,57,59,65,66,81,86],explan:[28,60,67,74],explanatori:66,explicitli:[28,29,60,80,81],explor:[9,18,36,73,85,89],exponenti:29,expos:[6,21,22,29,32,60,63,92],exposur:[29,63],express:57,ext2:63,ext4:[14,28,39],ext:[9,10],extend:[61,63],extens:[12,18,35,36,38,40,54,63,66,71,73,76],extent:63,extern:[23,32,35,36,66,83],external_ifac:54,extf:52,extra:[9,10,26,34,40,46,56,63,66],extract:[11,20,24,31,34,36,42,52,54,59,63,82,83,92],extremetuxrac:63,eye:63,f10:[9,44],f1y6sa:77,faa:[59,63],fabric:73,facilit:36,factor:93,factori:[37,47],fahrenheit:67,fail:[23,24,28,49,60,67,80],failov:63,failovermethod:47,failur:[2,6,9,10,24,60,67,80],fairli:32,fallbackntp:50,fals:[14,52,60,77],famili:[21,22,71],familiar:[23,37,67,74],fan:63,fanci:67,fann:63,faq:61,far:90,fast:[5,13,25,34,53,55,61,63,87],faster:[28,34,40],fastest:67,fat32:[9,10],fat:63,fatal:24,favor:32,favorit:28,fcoe:54,fd5155b89857:57,featur:[6,9,10,18,23,29,32,34,40,55,60,61,63,66,70,71,73,74,87,88],fedora:[17,56],feedback:[60,73],felt:0,fetch:[26,75],few:[3,23,38,56,58,66,67,84],ff06fc76ec5148040acb4fcb2bc8105cc72f1963b55de0daf3a4ed664c6fe72c:51,ffffffff:60,fftw:63,fido2:93,field:[9,10,21,22,32,42,56,59,60,69,72,84,90],fifteen:60,figur:[4,6,9,10,11,15,18,19,20,21,22,23,26,30,37,39,42,44,46,53,54,56,58,60,66,72,73,75,82,85,86,90,92],file:[1,5,6,9,10,11,12,13,15,16,17,18,19,20,21,22,23,27,28,34,35,36,37,38,39,41,42,44,46,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,66,67,69,72,73,74,75,76,77,78,80,82,83,86,87,89,90,92,93],filenam:[2,34,42,66,69],fileserv:63,filesystem:[0,5,9,10,24,26,30,49,52,63,73,86],filesystemtyp:[28,39],fill:28,filter:[59,60,63],find:[11,16,19,20,23,24,27,28,39,41,44,46,49,56,58,60,61,63,65,66,67,72,73,76,82,84],findproxyforurl:23,findutil:63,fine:45,finger:29,fingerprint:[72,73,77],finish:[16,19,20,21,22,31,40,46,57,72,73],fio:63,firefox:[0,63],firewal:[6,14,28,54,60],firmwar:[9,10,13,14,16,19,20,21,22,24,28,40,54,63],first:[5,9,10,11,12,14,18,24,28,40,44,46,52,56,58,60,64,65,66,67,74,76,77,82,83],fit:[41,77],five:66,fix:[5,24,29,31,33,46,52,60,63],fixabl:29,flac:63,flag:[28,31,52,53,60,66,76,80],flannel:[58,80],flash:63,flask:[6,60],flat:[22,28],flathub:75,flatpak:[0,63,83,89],flex:63,flexibl:[4,21,32,58,63],floor:45,flow:[23,26,28,39,54,63,65],flowchart:66,fluidsynth:63,fly:[26,28],focu:[6,32,60],focus:[25,32,63,74],folder:[15,24,28,34,44,59,63,66,83,85,93],follow:[2,3,6,9,10,11,12,13,14,17,18,19,20,21,22,24,25,26,27,28,31,32,33,34,35,36,38,39,42,43,44,45,46,47,48,50,51,52,53,54,56,57,58,59,60,61,64,65,66,67,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87,88,90,92],font:63,fontconfig:63,fontforg:63,fonttool:63,foo:76,footprint:71,fopt:76,forc:[40,66,83],forecast:63,foreign:29,fork:[4,32,63,65],form:[0,10,31,32,35,36,45,60,67,74],formal:67,format:[0,5,11,17,20,34,42,53,59,60,63,65,67,69,77,80,85],fortran:63,forum:0,forward:[5,31,34,53,54,56,80],fossil:63,found:[0,22,25,28,29,30,34,40,44,57,59,60,65,66,74,80,84],foundat:28,four:[53,55,59,66,82],fp16:59,fp32:[58,59],fpga:59,fpm:90,fqdn:73,fraction:5,frame:[55,59],framework:[36,41,58,59,63,77,78,80,87],frameworks5:63,free:[9,10,45,58,60,63,72,73],freed:60,freeglut:63,freeli:60,freetyp:63,frequent:[32,61,63,66],freshli:30,fribidi:63,friend:[63,84],friendli:[45,74],from:[1,2,4,6,10,11,12,13,14,15,16,17,18,20,21,22,23,24,26,28,29,30,31,32,33,34,35,36,37,38,40,42,46,52,53,54,57,58,59,60,61,63,66,67,73,75,76,77,79,80,82,83,85,87,88,89,90,92,93],front:[6,11,60,63],frontend:63,frontload:67,fry:67,fstab:59,fstype:14,ftp:[63,88],ftp_proxi:88,fulfil:[9,10,73],full:[18,28,29,43,53,60,63,64,66,73,74],fulli:[6,11,28,56,57,60,90,92],function_handl:59,functionapp:73,fundament:[6,60],further:[2,6,34,67,72,74],furthermor:[76,80],fuse:[26,63],futur:[34,60,67,74],fwupd:63,fwupdat:63,gafr:52,gain:76,game:[63,67,84],gatewai:38,gateway_ip_address:38,gather:37,gcab:63,gcc:[53,60,76],gce:[15,20,42,63,69],gconf:63,gcr:63,gdb:[26,63],gdk:63,gdm:63,geani:63,gear:9,gedit:63,gegl:63,gen:6,gener:[2,5,6,15,16,18,20,26,27,28,31,32,34,36,37,40,42,45,51,53,56,58,60,63,64,66,67,69,71,73,86,87,89,90],geoclu:63,geocod:63,geometri:56,get:[1,3,10,11,17,18,19,20,21,22,28,30,31,39,41,42,43,52,54,55,56,58,59,60,61,66,67,73,76,81,83,85,90],get_config:39,get_rol:39,getaddrinfo:23,getstart:93,gexiv2:63,gfbgraph:63,gflag:63,gftp:63,ghw:63,gif:63,gigabit:53,gigabyt:68,gimp:63,gis:63,git:[5,23,24,31,34,57,58,60,63,76],github:[0,1,24,25,26,31,34,35,36,37,39,47,49,54,57,58,60,63,66,76,88,93],githubusercont:[24,28,34,93],give:[20,21,22,60,67],given:[23,28,41,54,60],gjs:63,glanc:32,glew:63,glib:63,glibc:63,glibmm:63,glm:63,glmark2:63,global:[15,17,24,34,48,63,85],glog:63,glu:63,glvnd:83,gmbh:60,gmime:63,gnome:[0,20,26,42,63,69,86],gnomelib:63,gnu:[20,29,42,63,69],gnuplot:63,gnutl:63,goaccess:63,goal:[0,14,30],gobject:63,goe:[4,60,67],going:[34,56,67,90],gold:68,good:[0,29,32,42,67,76],googl:[13,20,23,42,63,69],googlenet:59,googletest:63,gopath:58,gotoblas2:63,gov:29,govern:32,gpart:63,gperftool:63,gpg:63,gpgcheck:47,gpgme:63,gphoto2:63,gpl:34,gpt:46,gpu:[59,63,83],grammar:[63,65],grammat:67,grant:[27,86,90],granular:[3,5,31],graph:[40,63,87],graphic:[9,12,17,18,34,38,63,64,66,71,83],graphit:63,graphviz:63,graphx:87,great:[59,66,67],greater:[4,9,10,18,60,71],greengrass:[33,63],greengrass_classification_sampl:59,greengrass_lambda:59,greengrass_object_detection_sample_ssd:59,greengrass_sample_python_lambda:59,greengrasshelloworld:59,greengrasssdk:59,greeter:63,grep:[17,18,20,22,24,34,36,50,53,54,56,57,79,83],grid:[45,63,73,82],grilo:63,group:[15,28,34,40,48,63,72,80],grow:[29,68],gset:63,gsl:63,gsound:63,gspell:63,gst:63,gstreamer:63,gtk2:63,gtk3:63,gtk:[63,75],gtkmm3:63,gtkplu:63,gtksourceview:63,gtkspell3:63,gtkwave:63,guarante:[0,28,31,58],guess:90,guest:[13,25,42,53,63,69,85],gui:[17,19,20,40,56,63,64,66],guid:[13,14,15,19,20,21,24,27,28,29,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,50,51,52,53,54,55,56,57,59,60,61,65,66,74,75,76,79,83,85,87,88],guidanc:36,guidelin:[66,67,70,80],guil:63,guilabel:[66,67],gunzip:42,gutenprint:63,gvim:63,gwenview:63,gzip:63,h15:45,h264:0,h370:68,had:[29,67],hadoop:89,ham:63,hand:[18,82],handl:93,handler:[59,80],handwrit:82,happen:[5,11,23,26,31],haproxi:63,hard:[11,16,18,20,21,22,42,54,63,69],harddisk:18,harden:[29,92],hardwar:[0,6,10,18,19,20,21,22,25,34,35,36,40,58,59,60,63,67,70,71,74],harfbuzz:63,has:[0,2,5,6,9,10,16,20,21,22,23,24,27,28,29,30,31,32,34,42,46,49,51,53,54,57,58,60,63,66,67,68,71,73,74,90],hash:[18,31,51,66,80,84],hashfil:[20,42],haskel:63,hate:73,have:[0,4,10,11,14,18,20,23,24,27,28,29,30,31,32,34,35,38,39,44,45,46,47,48,52,53,54,56,57,58,60,65,66,67,71,72,73,74,75,76,77,78,79,80,82,83,85,86,87,88,90,91,92,93],haven:65,hazard:66,hdd:63,hdf:77,header:[35,36,53,60,63,83],headless:63,health:[6,63],healthi:32,heartbeat:60,hello:60,helloclear:24,help:[0,1,19,20,24,26,28,31,34,38,41,57,58,60,61,62,63,65,66,67,73,92],helper:[31,52,63,80],heof:60,here:[0,1,2,10,11,18,20,27,36,42,51,53,60,61,66,67,73,74,75,90],heredoc:60,hermitian:76,hexchat:63,hget:84,hgetal:84,hidden:[56,82],hide:[54,67],hierarchi:30,high:[32,48,60,63,87],higher:[4,40,53],highest:60,highli:[10,57,63,71],highlight:[9,10,63,66,72,73,75],higlight:63,his:63,histori:32,hit:72,hmset:84,hojp:52,hold:[59,60,81,84],holist:0,home:[11,19,20,28,30,32,43,44,56,58,60,63,72,73,74,76,82,85],hook:36,host:[9,10,12,15,17,18,22,23,26,28,32,33,37,39,47,52,53,54,57,58,60,63,64,65,72,73,74,77,78,80,82,85,87,88,90,91,92,93],host_typ:60,hostfwd:17,hostmgmt:[32,63],hostnam:[23,32,33,56,60,80,85,87],hostnamectl:45,hous:28,how:[1,4,5,9,10,14,16,17,18,19,20,21,22,32,34,35,36,38,39,40,41,42,44,45,46,47,50,51,53,54,55,56,57,58,59,61,63,66,67,72,75,78,79,80,81,83,85,86,87,88,90,91,92],howev:[0,4,9,10,23,24,26,32,34,35,41,43,47,58,79,81,83,85,93],hpc:63,href:77,html:[0,58,63,66,90,92],htop:63,htpc:63,http:[0,10,12,14,17,20,22,23,24,26,27,28,29,31,34,35,36,39,47,49,51,52,53,54,57,58,59,60,63,66,71,72,73,74,76,80,87,88,90,92,93],http_proxi:[28,78,80,88],httpd:[30,63,90],httpproxi:28,https_proxi:[28,60,78,80,88],httpsproxi:28,hub:[28,52,57,58],huge:53,hugetlbf:53,hugo:63,human:[26,45],hundr:[3,4],hwloc:63,hybrid:63,hygien:29,hyper:[13,18,20,25,27,42,46,63,69],hypertext:63,hyperv:[16,20,25,42,46,63,69,73],hypervisor:[18,21,22,24,25,32,42,46,69],hypervisorlaunchtyp:18,hyphen:[9,10,31],i350:53,iasimag:63,icdiff:63,icecream:63,ich9:18,ici:[39,54],icon:[9,15,18,21,22,45,63,75,85],icu4c:63,id_rsa:[73,77],idea:67,ideal:63,identif:63,identifi:[0,11,24,30,31,34,36,41,45,49,60,66,83,93],idiom:67,idl:63,idx1:82,idx3:82,ifconfig:[55,80,86],iftop:63,igb:53,igb_uio:53,ignor:[23,29,31,36,46,52,56,83],igt:63,illeg:58,illustr:[4,51,60,72],imag:[4,13,14,15,16,17,18,19,21,24,28,33,38,39,53,54,59,61,63,70,72,73,80,82],imageformat:63,imagemagick:63,imap:63,img:[16,17,20,24,28,42,46,51,53,69],immedi:[9,10,29,30,39,57,60,63,66,90],impact:[0,6,40,49,60],implement:[19,23,31,32,35,48,49,54,63,76,77,78,90],improv:[9,10,28,29,31,49,60,63,65,76],inact:52,incldu:[20,42,69],includ:[0,1,5,6,10,11,14,15,20,24,25,26,28,29,30,31,32,36,37,42,43,45,49,53,54,55,58,59,60,63,64,66,67,69,71,73,74,75,76,77,78,80,83,85,87,88,90,93],includeopt:90,inclus:34,incompat:83,incomplet:9,incorpor:[4,32,37,81],incr:84,increas:[13,17,18,33,40,56,57,67,74],increasingli:40,increment:[28,29,84],incur:73,indent:[14,66],indents:14,independ:[23,73,88],index:[52,63,84,90],indic:[2,9,12,18,23,32,36,42,55,60,66,67,83],indirect:83,individu:[0,3,5,31,34,35,36,48,55,73],industri:[54,63],inetd:56,infer:[2,24,59],inferenc:[6,60],infin:48,influenc:[2,24],info:[26,31,33,52,63,76,78,79],inform:[0,2,5,6,7,9,10,17,19,20,21,22,23,24,25,26,27,28,29,31,32,34,35,36,37,39,40,51,52,53,54,56,57,58,60,61,63,65,66,67,70,72,73,74,75,76,77,80,82,87,88,90,92],infrastructur:[4,37,63,84],infrastuctur:37,ingest:[6,60],init:[28,32,34,39,52,54,58,80],initcall_debug:[39,54],initdb:47,initi:[18,28,34,47,53,54,56,60,63,76,80,82,83,85,92],initrd:[39,54,63],inject:58,inkscap:63,innotek:60,inotifi:63,input:[28,34,56,58,59,63,77,82],input_model:59,input_proto:59,input_shap:59,insecur:52,insensit:45,insert:[9,10,18,35,36,40,44,63,66,84],insid:[16,23,24,36,48,52,57,58,59,63,73],insmod:35,inspect:[2,24,31,39,52,58,82],inspir:[63,84],instal:[1,3,5,11,12,15,16,22,24,26,27,28,29,30,32,33,38,39,41,42,45,46,47,49,50,51,52,57,58,60,61,62,63,64,66,67,69,79,81,82,85,88,89,92,93],installaton:74,installazurecli:73,instanc:[15,24,25,31,39,67,73,84,90],instant:[60,63],instead:[3,5,17,18,19,21,28,29,30,31,32,34,47,49,51,56,67,73,85],instruct:[2,9,10,11,12,14,18,19,20,21,22,24,25,27,28,33,35,36,38,40,44,47,54,56,58,59,61,63,65,67,71,72,73,74,75,76,78,80,81,82,83,85,87,88,90,92,93],int8:58,intact:15,integr:[18,24,26,29,30,32,35,37,43,51,59,63,67,83,84],intel:[6,16,17,18,19,20,25,29,40,52,53,57,58,59,60,63,68,71,73,76,84,92],intel_idl:40,intel_pst:40,intend:[0,9,28,47,56,63,90],intens:34,intent:74,intention:[48,60],interact:[11,17,23,32,54,58,63,73],interdepend:[35,36],interest:[28,32,76],interfac:[6,29,33,34,54,60,63,66,73,83,87],interface_nam:38,intermedi:[52,59],intermediari:[0,37],intermingl:30,intern:[5,8,25,31,51,54,57],internal_ifac:54,internation:63,internet:[9,10,14,41,63,71,73,74,86,87,88],interrupt:[26,66],interv:[59,60],intltool:63,introduc:[26,28,58,66,76],introduct:[66,67],introductori:66,introspect:63,intruct:13,invalid:[15,51],invit:[49,84],invoc:56,invok:[49,58],involv:60,iobas:17,iot:[41,59,63,73],iotop:63,ip_address:38,ip_forward:[54,80],ipc:75,iperf:63,ipmctl:63,ipmi:63,ipmitool:63,iproute2:63,ipset:63,iptabl:[0,54,63],ipv4:[38,54,80],ipvsadm:63,ipx:[33,39],ipxe_app_nam:54,ipxe_boot_script:[39,54],ipxe_port:54,ipxe_root:54,ipxeboot:54,ipynb:82,irc:63,irssi:63,isa:17,iscsi:[54,63],isi:63,isn:80,iso9660:63,iso:[9,10,11,14,20,22,42,63,69],isohybrid:11,isol:[24,32,34,80,83],issu:[0,6,17,19,20,23,24,31,32,34,42,44,49,60,63,65,86],ister:[28,33,39,54],istercloudinitsvc:39,isterconf:39,isv:73,ital:[66,67],item:[12,15,28,31,66,67,72],its:[10,11,20,21,22,24,26,28,31,32,37,42,48,55,56,57,58,59,69,80,82,83,85,90],itself:[32,54,60],j3455:68,jan:73,jar:77,jargon:67,java11:63,java9:63,java:[57,63,87],javascript:63,jdb:63,joa4:52,job:[58,63,73,77],jobtrack:77,joe:[28,63],join:[60,80],journal:[32,36,49,60,63],jpeg:[59,66],jps:77,json:[24,27,28,39,52,63,74],jul:47,jumbo:55,jump:10,june:67,jupyt:63,just:[23,28,29,30,32,43,56,66],k8s:80,k8s_namespac:58,kamera:63,kart:63,kaslr:29,kata:89,kate:63,kbd:[63,66],kcachegrind:63,kcalc:63,kde:63,kdeconnect:63,kdenliv:63,kdiff3:63,keep:[5,20,32,58,60,65,66,67,83,90],keepaliv:63,keepass:63,keepassxc:63,keepimag:14,kei:[6,9,10,15,18,29,32,44,46,56,59,60,63,64,72,73,74,84],kept:60,kernel:[0,3,5,6,13,14,18,19,20,28,29,31,39,40,42,45,48,49,52,54,58,60,63,69,73,82,83],kernel_vers:60,kerneldir:36,kernelv:36,keyboard:[14,18,19,63],keychain:63,keyfil:72,keygen:77,keymap:63,keypad:67,keystrok:66,keyvault:73,keyword:67,kfapp:58,kflow:58,kflow_app:58,kib:75,kill:56,kind:[3,32,55,58,80],kinesi:59,kit:[53,63],kleopatra:63,kmod:63,know:[2,24,28,29,53,58,67,73],knowledg:[43,67],known:[0,5,28,29,32,34,39,40,54,63,72,73,83,86],koji:[37,63],konqueror:63,konsol:63,konvers:63,kpxe:54,krb5:63,krita:63,ksysguard:63,ktarget:34,kube:31,kubeadm:[58,80,81],kubectl:[80,81],kubeflow_src:58,kubeflow_tag:58,kubelet:[80,81],kubernet:[31,63,73,89],kvm:[13,20,24,25,27,28,42,53,63,69],lab:[45,73],label:[9,10,18,46,58,59,66,73,82,90],lacptransmitr:55,ladebug:63,lake:73,lamp:91,lan:[32,54],land:66,languag:[9,14,63,66,67,84,92],laptop:[40,68],larg:[31,32,34,41,53,55,57,59,60,63,77],larger:[11,58,63],last:[47,52,64,66,67],lastli:39,latenc:63,later:[9,15,18,19,20,21,22,24,28,36,56,60,73,87],latest:[9,11,14,15,16,17,24,25,28,31,34,39,51,52,54,57,58,59,60,63,73,74,81,83,90,92],latex:63,latt:63,launch:[11,13,18,24,28,46,52,57,58,63,74,84,89,93],launcher:[58,63],layer3:55,layer:[29,48,53,58,63,82,84,90],layout:[9,29],lcms2:63,ldap:63,ldconfig:83,ldtarbal:36,leaderboard:84,leaner:41,learn:[4,5,15,20,21,23,24,28,31,33,35,36,41,42,44,57,63,66,69,72,73,80,84,89,93],leas:54,leasefil:54,least:[53,54,66,71],leav:[6,15,67,73],lecun:82,left:[0,9,15,18,22,72,76,85,90],lefthand:72,legaci:[20,29,42,63,69],legal:0,lend:32,length:[9,10,60,67],lenovo:68,less:[12,63,71,76],let:[29,63,73,74,92],letsencrypt:63,letter:[9,45,66,67],level:[4,5,6,28,31,32,37,43,48,60,63,66,67,87,92],leverag:[23,29,32,61],lexic:63,lftp:63,lga:18,lib32:83,lib64:[53,59,73,83],lib:[18,26,28,31,36,39,44,47,49,52,54,63,73,76,83],libabigail:63,libarch:63,libassuan:63,libatasmart:63,libav:0,libbench2:76,libcanberra:63,libcap:63,libcgroup:63,libconfig:63,libcpu_extens:59,libcroco:63,libcurl:23,libdatri:63,libdazzl:63,libdir:83,libdrm:63,libepoxi:63,libev:63,libevdev:63,libexec:64,libexif:63,libffi:[63,73],libfontenc:63,libgcrypt:63,libgd:63,libgdata:63,libge:63,libgl:83,libglib:63,libglx:83,libgnomekbd:63,libgpg:63,libgphoto2:63,libgsystem:63,libgtop:63,libgudev:63,libgusb:63,libgweath:63,libic:63,libidn2:63,libidn:63,libinput:63,libiscsi:63,libjpeg:63,libmediaart:63,libmicrohttpd:63,libmnl:63,libmspack:63,libmtp:63,libmypaint:63,libndp:63,libnetfilter_conntrack:63,libnetfilter_cthelp:63,libnetfilter_cttimeout:63,libnetfilter_queu:63,libnfnetlink:63,libnftnl:63,libnl:63,libnotifi:63,liboauth:63,libogg:63,libopa:24,libosinfo:63,libpcap:63,libpciaccess:63,libpea:63,libpinyin:63,libpipelin:63,libpng:63,libpsl:63,libpthread:63,librari:[15,23,24,26,29,32,49,53,58,59,60,63,76,77,82,83,84],libraw:63,libreoffic:63,libreofficeipc0:75,librepo:63,librsvg:63,librte_pmd_e1000:53,libsampler:63,libsass:63,libsctp:63,libseccomp:63,libsecret:63,libsigcplusplu:63,libsmbio:63,libsolv:63,libsoup:63,libspectr:63,libsrtp:63,libssh2:63,libstdcpp:63,libstoragemgmt:63,libtasn1:63,libtelemetri:6,libthai:63,libtirpc:63,libu2f:93,libunwind:63,libus:63,libusb:63,libuuid:24,libuuid_librari:24,libva:63,libvirt:63,libwacom:63,libwebp:63,libwnck3:63,libx11:63,libx11client:63,libxau:63,libxcb:63,libxcomposit:63,libxcursor:63,libxdamag:63,libxdmcp:63,libxext:63,libxfix:63,libxfont2:63,libxfont:63,libxft:63,libxi:63,libxinerama:63,libxkbcommon:63,libxkbfil:63,libxklavi:63,libxml2:63,libxmu:63,libxpm:63,libxr:63,libxrandr:63,libxrend:63,libxscrnsav:63,libxslt:63,libxt:63,libxtst:63,libxv:63,libxvmc:63,libxxf86misc:63,libxxf86vm:63,libyami:63,libzip:63,libzmq:63,licens:[0,8,24,34,47,57,58],life:33,lifecycl:32,light:[60,63],lightdm:63,lightweight:[29,31,54,63,78],like:[18,23,27,28,32,34,35,36,39,56,58,63,66,67,73,76,83,84],limit:[9,23,26,33,40,59,60,63,66,67,80,83],line:[2,5,14,19,20,24,26,28,29,31,34,35,36,38,39,40,47,53,56,60,63,64,73,76,80,83,90],linear:63,link:[15,24,25,28,31,38,54,55,59],linkabl:66,linker:83,linux:[1,2,3,4,5,6,12,13,14,16,23,25,26,27,28,30,31,35,36,38,39,41,43,44,45,46,47,48,49,50,51,53,54,55,57,58,59,60,63,64,65,66,68,71,77,78,79,80,87,88,89,92],linuxapp:53,list:[0,2,10,11,12,15,18,19,20,21,22,24,25,28,31,34,35,36,38,39,40,42,43,49,50,51,52,53,54,55,56,58,60,62,64,65,67,68,69,72,73,74,75,77,82,84,85,90,93],listen:[54,56,60,64],listenstream:[56,64],littl:[1,19,21,61,67],live:[11,12,13,14,19,20,21,28,32,42,52,59,60,61,69,71,76,77,85,90,92],lksctp:63,llen:84,llvm:63,load:[18,23,28,29,53,56,58,63,73,82,83,88],loader:63,local:[0,10,17,19,20,22,24,26,34,39,50,52,55,56,58,63,66,75,77,80,87],local_bundle_dir:28,local_repo_dir:28,local_rpm_dir:28,localhost:[28,54,60,77,80,87,88,90,92],locat:[2,15,17,18,21,22,24,27,28,30,34,39,45,46,49,53,54,56,58,60,63,66,73,74,80,89,90],lock:[34,40,73],log4j:87,log:[2,9,14,17,18,21,24,28,34,40,43,46,49,52,54,55,56,58,60,63,65,72,75,76,77,83,85,86,90,92],logic:[5,55,80],login:[9,10,14,15,17,18,22,29,48,63,73,83,84,90],logout:73,logrot:63,longer:[27,28,33,40,60,79],look:[10,17,20,21,22,23,28,34,35,36,49,53,56,58,60,66,73,80,83],lookup:[23,84],loop:[60,66],loopback:74,los_angel:[9,50],lose:76,losless:63,loss:66,lossless:63,lost:[72,77,80],love:[0,73],low:[40,60,66],lower:[48,66,86],lowercas:[66,67],lowest:[55,60],lpop:84,lrang:84,lrwxrwxrwx:73,lrzit5ar66ibtfia8qmiisrfbum:72,lsblk:[10,11,44],lshw:83,lsmod:[18,36,83],lspci:53,lsusb:93,ltelemetri:60,ltp:63,lts2017:63,lts2018:[18,63],lts2019:63,lts:[18,25,35,36,60,63,83],lua:63,lucen:63,luk:[9,10,29],lvm2:63,lxqt:63,lxt2:63,lxt:63,lyx:63,lz4:63,lzma:63,mac:[39,53],macaddress:73,machin:[6,14,15,19,20,21,22,25,28,31,34,37,42,45,58,63,69,72,74,77,86,87,89],machine_id:60,maco:[10,56],macro:63,macvlan:52,made:[0,6,9,10,20,31,34,39,49,60,67,74,79,90],magic:63,mai:[0,2,9,10,15,17,18,19,24,27,28,30,31,32,33,34,35,36,38,39,40,41,44,45,49,51,55,57,58,59,60,66,67,68,73,74,78,80,83],mail:[63,65],maildir:63,main:[9,18,24,31,34,60,66,67,72,76,82,87,90],mainlin:63,maintain:[0,29,30,32,34,35,36,37,45,52,63,65,73,79,83,84,85],mainten:[0,2,24],maj:[11,46],major:[29,43,63],make:[2,3,5,6,9,11,12,17,18,20,24,26,27,28,29,30,31,32,34,35,36,42,45,49,53,54,56,57,58,59,60,63,64,65,66,69,74,76,79,80,82,83,90],makefil:[2,24,34,53],maker:63,malloc:60,malwar:63,man8:24,man:[5,23,24,28,30,31,35,36,38,40,48,56,62,63],manag:[1,3,5,15,16,18,19,20,21,22,28,29,30,31,34,35,36,37,43,47,48,58,60,61,63,67,73,74,77,80,81,82,83,93],manage_network_ns_lifecycl:80,managedapp:73,managedbi:73,mani:[0,3,4,5,29,31,32,34,35,36,41,42,63,69,74,83,84],manifest:[28,51,58],manipul:[38,63],manner:59,manpag:[55,56],manual:[0,9,18,20,21,22,23,24,31,32,33,34,36,38,40,42,51,54,55,58,60,65,71,78,83,93],manufactur:[83,93],map:[10,63,84],mapper:74,mapr:77,mapreduce_shuffl:77,march:27,mari:84,mariadb:[63,92],mark:[9,31,66,81],marketplac:[72,73],mask:[23,40,54,80],masquerad:54,master:[24,28,31,34,47,57,58,60,67,77,80,81,93],match:[9,10,20,27,31,36,38,42,51,54,55,60,80],materi:1,math:58,mathemat:82,matter:[0,31,63,66,67],max:[48,68,76],max_cstat:40,maxdepth:66,maxim:[21,22],maximum:[9,10,19,40,48,60],mdn:45,mean:[5,19,30,31,34,51,66,67,90],meaning:45,measur:[29,32,63,92],mechan:[35,48,67],med:60,media:[0,11,18,31,63],mediasdk:63,meet:[4,9,10,93],meld:63,mem:53,memcach:63,memor:63,memori:[17,18,19,21,22,29,52,53,59,60,63,71,84],mention:59,menu:[9,11,14,15,18,19,20,34,38,42,44,63,66,72,86,90],menuconfig:34,menuselect:[66,67],mercuri:63,merg:[0,63,65],merriam:65,mesa:[63,83],messag:[10,18,28,34,36,42,46,49,52,59,63,66,72,73,74,80,81,83,86,90],met:49,meta:[63,77],metac:63,metadata:[28,31,47,58,75,80],metal:[13,18,21,22,28,47,53,60,61,74,75,78,80,82,87,88,90],metapackag:63,metaphor:67,method:[1,5,9,10,14,24,31,38,40,46,47,54,60,80,84,85],metric:[32,63],mget:84,micro:[32,72],microsoft:[15,18,20,25,42,63,65,66,69,89],mid:66,middl:18,might:[43,66,67,83],migrat:[32,59,78,89],miimonitorsec:55,mime:63,min:[11,46],minecraft:63,minetest:63,minetestserv:63,mini:[63,73],minicom:63,minim:[5,30,32,49,60,63,71,74],minimalist:63,minimum:[13,14,19,21,28,32,41,58,66,70],minnowboard:68,minor:[19,20,23,29,81],mint:[11,17,56],minut:[52,60],mirror:[9,28],miss:[2,7,24,26,52,65,80],mistak:67,mit:24,mitr:29,mix:[27,30,34,37,47,80],mix_vers:28,mixbundl:28,mixer:[2,5,24,27,31,32,33,34,35,36,37,41,63,70],mixin:33,mixvers:28,mkdir:[28,30,35,36,38,47,48,50,53,54,55,56,58,60,64,77,78,79,80,82,83,87,90,93],mkhermitian:76,mkl:[57,58],mkosi:63,mktarbal:36,mllib:87,mlt:63,mnist:82,mnist_exampl:82,mnt:[44,53],mobil:32,mobilenet:59,mock:[2,24,34],mod:[36,83],mode:[11,14,18,52,53,55,58,63,71,73],model:[5,29,31,58,63,77,82,83,93],model_dir:59,model_loc:59,modeldir:59,modern:[0,34,40,63,71],modeset:83,modest:71,modif:[4,23,30,34,60,73],modifi:[17,23,24,30,31,33,35,36,38,39,46,48,51,53,55,56,60,63,67,73,77,80,84,87,90],modprob:[35,36,53,83],modul:[0,25,29,33,34,53,59,63,83,90],modular:[4,63],module_nam:[35,36],modulepath:83,mom:[28,51,67],moment:65,monitor:[6,29,31,32,37,60,63,73],mono:63,monospac:66,month:66,more:[0,4,5,9,10,14,15,18,19,21,22,23,24,25,27,28,29,31,32,34,35,36,38,40,41,42,44,46,47,52,53,56,57,58,59,60,63,66,67,71,72,73,74,75,80,82,83,84,85,90,93],most:[4,5,23,26,30,34,45,56,60,63,66,67,71],mostli:[24,31,34],motd:[36,81,83],motherboard:18,mount:[9,10,11,14,24,26,28,39,53,59,63,67],mountpoint:[11,14,46],mous:[9,18,19,63],move:[5,20,31,32,53,72,73,82,90,93],movi:63,movidiu:59,mozilla:63,mozjs52:63,mozjs60:63,mp3:63,mpeg:63,mpg123:63,mpv:63,mtd:63,mtr:63,mtubyt:55,much:[2,29,83],multi:[59,63,80,83,89],multilay:63,multimedia:[0,63],multipath:63,multipl:[0,5,10,12,27,29,31,33,34,36,63,65,66,71,74,76,77,84],multiplex:63,multithread:63,mundan:23,musescor:63,music:63,musl:63,must:[2,6,9,10,11,15,21,22,23,24,28,34,35,36,38,39,40,45,52,53,54,55,56,58,59,60,65,66,73,76,77,80,81,83,86,88,90,92],mutt:63,mutter:63,mycroft:63,myhost:80,mynet0:17,mysql:[73,90],mysql_secure_instal:90,name:[2,5,9,10,11,14,15,18,19,20,21,22,23,24,28,31,34,35,36,38,39,42,43,45,46,47,49,50,52,54,55,56,57,58,59,60,62,63,66,68,69,72,73,74,77,80,82,83,84,90,92],namenod:77,namespac:[15,58,60,74,77],nano:90,nasm:63,nat:[39,54],nation:29,nativ:[0,9,10,14,25,28,31,34,35,36,39,45,52,53,58,61,63,67,73,81,83,84],natur:32,nautilu:63,navig:[15,18,21,22,24,27,34,63,67,72,83,90,92],nbserver:58,ncdu:63,ncurs:63,ndctl:63,neatli:41,necessari:[5,26,34,36,37,66,67,76,83,92],need:[1,3,4,5,10,14,15,16,18,19,20,21,22,23,24,26,27,28,29,30,31,32,34,35,36,39,40,41,46,48,49,51,53,54,56,57,58,59,60,61,63,64,66,67,72,73,74,75,76,77,78,79,80,82,83,87,88,90,92,93],negoti:63,neomutt:63,nest:[28,78],net:[17,54,63,73,80,90],netcat:88,netdev:[17,55],netkit:63,netlink:63,netstat:56,nettl:63,network:[0,1,6,14,15,23,26,31,32,38,39,41,44,52,53,56,59,60,63,71,73,74,75,82,84,85,90],networkctl:38,networkd:[54,55,63],networkmanag:[14,49,63],networktest:63,neural:[58,63,82],never:[67,77,87],new_id:53,newer:[20,40,53,76],newest:29,newli:[19,20,22,23,28,43,52,90],newt:63,next:[9,10,17,18,19,20,21,22,28,44,56,58,59,60,63,66,82,92],nfile:48,nfs:63,nftabl:63,nghttp2:63,nginx:[6,54,60,63,74],nhwc:58,nic:55,nil:[14,84],nist:29,nix:63,nload:63,nmap:63,nmcli:38,nmconnect:38,nmtui:[10,38],no_proxi:[28,80,88],no_timer_check:[39,54],no_turbo:40,nobodi:56,node0:53,node1:53,node:[53,56,63,80,89],nodej:63,nodemanag:77,nodev:53,nofil:57,nograph:17,non:[10,12,18,30,54,63,67,83],none:[56,90],nonstandard:63,noption:83,noreplac:[39,54],normal:[23,28,35,36,48,66,75,83,90],nosql:84,notab:14,notat:63,note:[0,11,18,32,56,58,60,63,73,76,80,90,92],notfound:24,noth:28,notic:10,notif:[36,63,83],notmuch:63,novel:26,now:[15,18,19,28,43,56,60,72,73,75,76,80,81,84,90,92,93],noyc:84,nr_hugepag:53,nspr:63,nss:63,ntf:63,ntp:[50,63],nuc5i7ryb:68,nuc5i7ryh:68,nuc6cai:68,nuc6cayb:68,nuc6i5syh:[68,92],nuc6i6syh:68,nuc7i5bnh:68,nuc7i5dnh:68,nuc7i7bnh:68,nuc7i7dnk:68,nuc8i7hvk:68,nuc:92,num:24,numa:53,number:[5,9,10,11,14,15,18,19,20,21,22,24,28,29,31,32,34,40,42,45,46,48,53,54,56,57,60,67,69,73,77,82],numer:[63,92],nvd:29,nvidia:89,oath:63,objdump:76,object:[15,53,59,63,67,73,75],observ:[6,60,80],obtain:[15,23,26,29,31,34,58,63,73,80],obviou:90,ocaml:63,occur:[2,5,10,24,26,31,32,36,49,60,66,83],oci:80,ocr:63,octav:63,off:[18,19,21,24,43],offer:[4,5,19,21,22,24,29,32,42,51,67,69,73,74,77,78,84],offic:63,offici:[28,52,74],offlineimap:63,offload:32,offset:14,oflag:11,often:[36,45,63,76,81],okular:63,old:[28,34],older:[27,29,34,58,60],omit:[2,51],onc:[15,16,22,23,24,26,28,30,32,40,46,56,57,58,60,65,66,72,73,74,76,77,80,82,90,92],one:[0,5,12,15,20,24,28,31,32,34,35,36,41,47,53,54,56,58,59,60,63,66,67,76,77,80,87,88],ones:[49,56,60],onli:[2,5,7,9,10,11,18,24,26,27,28,30,31,32,36,40,41,44,49,54,58,59,60,63,66,67,73,83,84,85,90,91],onlin:[63,92],onscreen:10,onto:[5,18,24,29,34,54,71],oob:17,oop:[6,60],opa:24,open:[0,3,5,9,10,11,14,16,17,18,19,24,26,28,29,31,34,35,36,42,44,46,48,53,56,57,58,60,63,64,65,72,73,74,75,77,78,80,82,83,84,85,87,90],openbla:[57,58,63],opencv:63,openfaa:63,opengl:[63,71,83],openjdk:57,openldap:63,openmpi:63,openqa:63,openscad:63,opensourc:83,openssh:[29,41,52,63,70,73],openssl:[51,63,73],openstack:63,openvino:33,openvswitch:63,oper:[3,5,6,18,19,20,23,26,29,30,32,40,45,52,53,55,58,59,60,63,67,72,73,74,82,83,84,90],opt:[6,49,58,60,83],optic:[18,63],optim:[19,20,25,29,31,42,55,57,58,63,69,76,87],option:[0,2,14,15,18,19,20,21,22,24,31,32,34,38,39,44,51,53,54,57,59,64,66,67,71,72,73,75,76,83,84,85,86,87,90,92],opu:63,oracl:[60,63,65],orc:63,orchestr:[25,37,63,74,80],order:[5,9,10,21,22,28,30,32,44,54,57,59,60,66,67,90],org:[0,12,14,17,20,22,23,24,26,27,28,29,31,34,47,51,52,53,54,60,63,66,71,75,77,92],organ:[32,63,65,67],origin:[17,18,20,22,28,31,42,63,67],ospf:63,oss:58,ostre:63,ostyp:52,osv:[4,32],other:[1,5,9,12,19,20,21,22,23,24,28,30,31,32,34,35,36,40,47,48,58,59,61,63,66,67,68,72,73,81,82,83,84,85,86,88,90],otherwis:[2,10,24,28,34,42,54,58,60],otp:93,our:[0,9,10,16,19,25,28,31,39,43,58,61,62,65,66,67,72,73,74,75,76,77,81,82,84,89,90,92],out:[0,17,24,28,29,31,32,34,40,43,51,56,60,63,65,66,71,73,80,83,92],outag:[32,49],outbound:88,outlin:[24,39,63],output:[11,12,18,20,24,28,31,34,35,36,38,42,45,46,47,49,51,52,53,56,57,58,60,63,64,66,73,74,76,77,82,83,84,87],output_dir:59,outsid:[6,44,55,60,63,66,83,92],over:[9,10,23,26,28,30,33,63,64,66,83,84,93],overh:40,overhead:0,overlai:52,overlap:31,overlay2:74,overlayf:74,overrid:[35,36,60,64,90],overridden:[28,40],overview:[15,66,73],overwrit:[77,83,87],overwritten:31,ovmf:[17,24,28],ovmf_cod:17,ovmf_var:17,own:[4,6,10,24,27,28,29,30,31,34,37,44,54,56,57,58,60,65,85,90],owner:[60,85],ownership:[24,28,75],p11:63,pac:23,pacdiscoveri:23,pack:[28,52],packag:[2,3,4,5,26,28,29,30,31,32,33,35,36,37,41,43,53,57,58,63,64,66,73,74,76,77,78,79,81,82,83,85,87,90],package_nam:36,package_vers:36,packagenam:34,packet:[33,54,63],pacrunn:[23,63],page:[0,5,9,10,11,14,15,16,17,18,19,20,21,22,23,28,30,31,32,35,36,38,40,48,53,56,59,60,61,62,63,65,67,72,73,74,80,90,92],pager:63,paint:63,pair:[59,63,72,73],pam:[29,48],pamnam:56,pane:18,panel:[63,67,90],pango:63,pangomm:63,paradigm:90,paragraph:[66,67],parallel:[63,66],param_cpu_extension_path:59,param_devic:59,param_input_sourc:59,param_model_xml:59,param_num_top_result:59,param_output_directori:59,paramet:[20,21,22,35,36,39,40,42,48,57,63,69,73,83],pari:63,pars:[23,58,63],parser:63,part:[0,7,11,14,28,35,36,37,45,46,63,65,66,67,75,77,81,90],parti:[29,61,63],particip:[9,10],particular:[5,31,32],partit:[11,14,17,21,27,28,32,39,54,63,80],partitionlayout:[28,39,46],partitionmountpoint:[28,39],partner:73,pass:[9,23,24,28,34,36,49,54,56,59,60,63,80],passiv:67,passnic0:53,passnic1:53,passphras:9,passwd:[43,56,59,60],password:[9,10,14,16,17,18,28,29,43,49,56,59,60,63,77,84,85,90,92,93],past:[15,29,58,72],past_vers:28,pasword:24,patch0501:34,patch0502:34,patch1001:34,patch2001:34,patch:[0,18,25,29,31,32,34,63,89],patchset:63,path:[12,27,28,32,35,44,53,56,58,59,60,63,66,73,85],pathnam:73,patriot_usb:11,pattern:[29,30,63,67],paus:52,payload:60,payload_fil:60,payload_format_vers:60,payload_vers:60,pci:[17,53],pciutil:63,pclmul:71,pclmulqdq:12,pcre2:63,pcre:63,pdf:63,pdn:63,pdt:47,pe32:63,peanut:67,peer:67,pem:[28,51,72],penguin:[9,63],per:[9,10,27,29,31,35,36,63,66,67,80],perform:[0,6,14,18,19,22,23,24,25,26,28,29,30,32,33,34,39,43,46,49,51,52,54,56,57,58,59,60,63,64,66,67,71,74,76,80,82,90],period:[67,80],perl:[52,63,73,76,84],perman:[48,72,73,80],permiss:[21,22,28,31,60,75,77,85,88,90],permit:[49,77],permitrootlogin:[17,64],persist:[30,32,34,54,63,71],person:[63,67],perspect:60,philosophi:[29,30,32,40],phoronix:63,photo:63,photographi:63,php:[63,92],phpinfo:90,phpmyadmin:92,phrase:66,physic:[18,32,39,55],pick:[5,34,56,60,66],picki:[24,31,44],pickl:67,pickup:30,pictur:63,pid:56,pidfil:56,pidgin:63,pie:29,piec:[26,28,31,35,36,57,58],pii:60,pim:63,ping:[63,84],pipelin:[32,37],pipewir:63,pitfal:66,pixbuf:63,pixman:63,pkc:63,pkcs11:63,pkg:[2,34,58],pkgconfig:[2,63],pkgconfig_add:2,pkgconfig_ban:2,pkh:0,pl2:76,place:[32,36,60,66,67,73,83,86],plai:[19,20,63],plain:66,plaintext:63,plan:[32,56,66,73,92],plane:[53,58,63,80],plant:56,plasma:63,platform:[10,13,18,25,32,33,40,57,58,63,67,68,72,73,74,76,83],platfrom:63,playback:[0,63],player:[13,21,22,42,63,69],pleas:[0,16,18,24,39,57,58,60,74,75],plot:[63,82],plu:[56,63,67,84],plug:[11,14,63],plugin:[34,52,63,80,93],plumber:5,plzip:63,pmdk:63,png:[63,66],pnp:63,pod:58,point:[9,10,23,28,34,39,41,44,46,49,57,58,60,66,67,73,74,82],pointer:[5,19,31,32,60],polici:[31,60,67,73],polkit:63,poll:[40,53],pong:84,pool:[53,54],pop3:63,pop:[20,42,72],poppler:63,popt:63,popul:54,popular:[31,32,34,63,73,83],port:[10,17,23,28,53,54,55,56,58,63,74,80,84,87,88],portabl:63,portal:[63,73],portion:[5,67],possibl:[0,2,9,24,29,31,32,60,63,66,67,83],post:[0,9,10,14,27,29,31,52,58,60],postarch:14,postgr:[60,73],postgresql:[6,60,63,73],postnonchroot:27,postpon:81,postreboot:14,postrout:54,postscript:63,potenti:[32,49,66,84],power:[4,9,10,18,19,24,32,33,39,44,54,63,67],powerdn:63,poweredg:68,poweroff:[17,24,28],powersav:40,powershel:18,powerst:73,powertop:63,practic:[0,3,6,15,22,29,34,35,36,65,67,80,89],pre:[5,11,17,19,21,22,28,32,36,42,56,57,59,66,69,73],preassign:56,preboot:32,prebuilt:[22,32,63],preced:[15,28],precis:63,precompil:[36,83],preconfigur:[13,19,20,21,74],predefin:30,predict:82,preempt:63,preempt_rt:63,prefer:[9,14,19,20,21,22,50,56,58,67,80],prefix:[83,92],preflight:80,preinstal:[27,28],premad:36,premis:[32,73],prepar:[6,39,54,60],prerequisit:[32,59,66],preschool:63,present:[2,5,9,10,18,45,56,58,66,80,82],press:[9,10,11,18,19,44,46,56,60,65,72,73,90],pretti:45,prevent:[40,83,90],preview:[20,42,67,69,73],previou:[10,11,14,15,17,24,27,28,58,59,60,72,73,80,83],previous:[11,18,21,32,38,54,72,90],price:72,primari:[9,11,28,58,63],primarili:63,primary_dns_ip:38,primer:66,primit:58,princip:73,principl:67,print:[12,42,46,58,60,63,67,72],print_funct:58,printer:63,printf:[60,83],prior:[6,9,67],priorit:[40,54,92],prioriti:[47,66],privaci:60,privat:[23,54,72,73],privateipaddress:73,privileg:[10,11,27,43,46,52,54,55,56,59,63,85,90],pro:[67,82],proactiv:[0,6,29,60],probe:[6,60],probenam:60,problem:[18,23,31,49,60,63,65,66,76],proc:[39,48,54,80],proce:[9,56,72,73],procedur:[59,66],proceed:[11,56,60],process:[2,4,6,11,15,24,27,32,34,37,39,40,41,44,46,47,48,51,53,54,57,59,63,72,74,77,79,83,88],processor:[9,10,13,14,18,19,20,40,63,68,71],procf:49,procp:63,produc:[27,28,31,32,59],product:[19,32,63,66,72,74,91,92],profession:[63,67],profil:[63,73,76,80,83],program:[5,6,26,30,36,40,60,63,73,77,83,84],programm:63,progress:[7,10,11,83],project:[1,3,5,15,24,25,29,32,34,35,36,41,49,53,63,70,73,74,78,83,90],promot:5,prompt:[9,10,14,15,16,18,19,20,42,43,46,60,69,72,73,77,83],proper:[28,67,76],properli:[10,17,21,28,31,44,49,73,77,81,93],properti:[48,56,68,73,77,87,88],proprietari:83,proto:63,protobuf:63,protocol:[54,63,93],prototxt:59,prototyp:58,provid:[0,1,2,3,4,5,6,7,10,17,18,19,20,21,22,23,25,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,45,46,47,48,49,54,55,57,58,59,60,61,63,64,66,67,70,73,74,75,78,80,82,83,84,87,90,93],provis:[27,31,32,33,63,67,73],provisioningst:73,proxi:[14,23,63,74,78,89],proxycommand:88,pseudo:38,ptr:60,pub:[34,73,77],publicipaddress:73,publish:[27,28,29,52,59,65,73,74,83],pull:[32,57,65,72,80,84,88],pulldown:10,pulseaudio:[63,75],punctuat:66,purpos:[6,7,9,51,58,60,63,66,77,87,91],push:[59,83],put:[0,3,6,58,66,67,72],putti:56,pwd:52,pwgen:63,pxe:[20,32,39,42,52,54,63,69],pxe_internal_ip:54,pxe_subnet:54,pxe_subnet_bitmask:54,pxe_subnet_mask_ip:54,pxeclient:54,pydata:63,pygobject:63,python2:63,python3:[31,59,63,73],python:[31,52,58,63,73,84,87],pytorch:63,pytorchtest:58,qemu:[24,25,28,53,63],qpdf:63,qt3d:63,qt5webengin:63,qtbase:63,qtdeclar:63,qtlocat:63,qtsvg:63,qttool:63,qtwebchannel:63,qtwebengin:63,quad:55,quagga:63,quak:63,qualifi:[56,60],qualiti:[37,48,63],quantiti:53,quantiz:58,quassel:63,quasselcor:63,queri:[6,23,33,56,63],question:[0,34,61,65,67,90],quick:[66,83,84],quicker:24,quickli:[5,6,24,32,58,60,66,67],quickstart:[15,84],quiet:[34,39,40,54],quilt:34,quit:31,quot:[66,67],quota:48,qxl:17,r2r:76,r630:68,race:63,radio:63,ram:[18,19,21,71],ramdisk:54,ran:[77,87,90],rand:58,random:[29,73,82],rang:[46,54,55,60],rank:76,rapidli:29,rare:10,rate:[40,60],rate_limit_en:60,rate_limit_strategi:60,rather:[31,66,74],ratio:17,raw:[17,24,28,34,47,63,93],rax:76,rc4:29,rclone:63,rcu:63,rcx:76,rdisk2:11,rdma:63,reach:[28,50,60],read:[0,30,40,49,59,60,61,63,65,66,67,74,77,80,81,85],readabl:[26,63,65,66],reader:[66,67],readi:[9,16,18,19,20,29,34,46,58,60,74,77,80,84,90,92],readili:32,readlin:63,readm:[2,24,35,36,57,66],real:[6,60,63,84],realist:63,realloc:60,realpath:18,realtim:63,reap:43,reason:[0,23,60],reboot:[9,10,17,18,19,21,29,30,34,35,36,39,44,45,54,55,56,63,80,83,93],rebootmgr:63,rebuild:[2,24,32,34,35,36,83],rebuilt:[36,83],recal:[56,92],receiv:[5,6,19,60],recent:29,recogn:63,recognit:[63,82],recommend:[9,11,13,14,19,21,28,35,36,37,41,56,57,58,70,74,76,79,83],recompil:36,record:[6,32,49,53,54,80],record_burst_limit:60,record_burst_window:60,record_expiri:60,record_format_vers:60,record_retention_en:60,record_server_delivery_en:60,record_window_length:60,recurs:63,recursor:63,redefin:4,redeploi:32,redi:[63,73,89],redirect:73,redshift:63,reduc:[19,21,28,40,58,63,66,67],redund:[29,55],ref:66,refer:[5,6,15,16,18,19,21,22,27,29,30,32,33,35,36,37,39,53,54,55,56,61,62,66,67,73,74,85,90,92],referenc:[22,30,66,73,74],reflect:81,refresh:28,refus:80,regard:[24,28,60,66,90],region:[9,15,59,63,73],regist:[21,22,34,73,76,80],registri:[32,52,58,73],regress:45,regul:77,regular:[5,31,52],reinstal:83,rel:[32,49,66],relai:63,relat:[26,48,60,63,66,73,77],relaunch:17,relax:90,releas:[0,4,5,9,10,14,15,18,20,27,28,29,31,32,34,42,44,46,51,53,54,58,59,60,63,66,67,73],releasev:47,relev:[24,31,32,41,66,67],reli:[30,35,36,39,49,54,83],reliabl:[39,54,63],reload:[28,30,38,56,64,78,79,80,83,88,90,93],reluct:76,remain:[0,9,11,15,28,31,46,56,73,74,83],remedi:5,rememb:[22,40,45,66,67,92],remmina:63,remot:[15,17,32,33,63,64,72,80,83,90],remotedesktop:64,remov:[2,5,9,10,18,19,20,22,23,24,28,29,30,31,34,35,36,42,44,49,58,60,63,64,66,67,69,73,79,83,90,92,93],remove_id:53,renam:[45,53,90,92],render:[30,63],renew:63,repair:[5,24,31,44,66,83],repeat:[28,63,66,74],repeatedli:32,replac:[5,20,28,31,32,38,43,52,56,58,59,60,63,66,76,87,90],repli:84,replic:[58,77],repo:[23,24,25,28,34,37,58,60,63],repoadd:24,repopul:28,repoqueri:47,report:[6,9,10,47,49,59,60],reporting_interv:59,repositori:[0,20,21,22,28,29,32,33,34,36,37,39,46,52,54,57,58,60,63,65,66,74,75,80],repostatu:24,repres:[5,21,22,31,34],represent:[59,63],reproduc:32,request:[0,23,26,56,60,65,86],requir:[2,4,5,13,14,19,20,21,23,24,28,32,35,36,37,39,41,42,49,51,52,53,55,56,57,58,60,63,64,66,69,70,73,74,75,79,80,81,82,83,84,90,91,92],requires_add:2,requires_ban:2,requisit:28,requri:63,rescan:10,reserv:[60,73],reset:[10,50,80],reshap:82,resid:[20,28,49],resili:32,resiz:17,resize2f:46,resizepart:46,resnet50:58,resolut:23,resolv:[0,2,5,17,23,24,29,54,63],resourc:[3,15,32,33,34,36,43,53,58,63,71,80],resourcegroup:73,resourcemanag:77,respect:[23,25,28,66,67],respond:[24,90],respons:[4,24,26,32,84,90],rest:[6,10,30,39,56,60,63,66,83],restart:[2,19,21,23,24,28,30,32,33,38,50,54,55,56,64,73,74,78,79,80,81,88,90],restic:63,restor:[17,24,30,44,52,54,83],restrict:[23,48,67],restructuredtext:[65,66,67],result:[2,10,12,15,17,22,24,26,29,31,34,55,57,59,60,76,80,86,87,92],resum:[2,24],ret:60,retain:[35,36,73],retest:82,retri:28,retriev:[14,47,58,63,80,86],retyp:[43,60],reus:[0,14,34,37,77],reusabl:63,revers:[60,63,67,74],revert:[9,10,28,49],review:[10,31,36,41,49,65,72,79,83],revis:7,reword:67,rewrit:[66,67],rhythmbox:63,rich:63,right:[0,9,10,17,18,20,21,22,42,56,60],rip:63,ripng:63,risk:[29,86,93],rmdir:90,rmi:58,rngd:49,roadblock:76,robert:84,robin:63,robust:58,rogu:48,role:[39,41,66,73],roll:[0,5,27,29,31,32,57,63],roller:63,rom:18,root:[2,9,11,14,15,16,17,24,28,29,43,46,52,54,55,56,57,58,59,60,63,73,77,80,85,90,92],rotat:[60,63,76],round:63,rout:[54,56,63],router:54,routin:[2,63],rpm2cpio:34,rpm:[2,28,34,37,81],rpmbuild:[2,24],rpop:84,rpush:84,rrdtool:63,rsa:[73,77],rss:63,rst:66,rstudio:63,rsyslog:63,rte_config:53,rte_sdk:53,rte_target:53,rubi:[63,84],rufu:11,rule:[0,66],run:[2,9,11,12,13,14,15,16,18,19,21,23,24,25,27,28,30,31,32,34,35,36,38,40,41,43,44,46,52,54,55,56,57,63,64,66,67,71,72,76,81,83,85,88,89,90,92,93],runc:[52,58,74,78,80],runtim:[2,5,45,52,58,63,74,77,78,79,83],runtimeclass:80,rusf:52,rust:63,rvi:[19,20],rwsem:34,rwx:28,rwxr:73,s2600wt2:68,s3f:63,safe:[49,73],safeguard:73,said:77,sake:74,salli:45,samba:[63,89],same:[2,5,9,10,14,17,18,24,27,28,31,36,51,53,55,56,60,63,66,67,73,76,79,80,83,85,86],sampl:[36,38,47,49,53,60],sandbox:[24,56,63],sandi:40,sandwich:67,sanit:34,sasl:63,satisfi:[9,10],save:[9,14,19,21,22,28,34,39,44,51,53,54,63,66,74,76,80,82,83,86,92],sbin:87,scala:[57,87],scalabl:[32,34,35,36,58,63],scale:[4,22,33,63,73,77,80],scaling_driv:40,scaling_governor:40,scan:[2,24,63,66,67],scannabl:66,scenario:[28,32,38,80],scene:[23,31],schedul:63,schema:[63,86],scheme:[28,29],school:63,sci:67,scienc:63,scientif:63,scm:63,scon:63,scope:[32,55,91,92],scratch:[28,52],screen:[15,18,19,20,42,56,63,72,73,80,83,90,92],screenshot:[19,20,56,63,66],script:[6,12,14,17,18,23,24,27,28,31,34,39,52,53,54,58,59,60,63,73,76,78,80,83,90],scroll:[9,15],scsi:20,sda1:[11,46],sda2:[11,46],sda3:[11,44,46],sda4:11,sda5:11,sda6:11,sda7:11,sda8:11,sda:[10,11,14,39,46],sdb1:11,sdb:11,sdc1:11,sdc:11,sdd1:11,sdd2:11,sdd3:11,sdd:11,sdk:[24,59,63],sdl2:63,sdl2_gfx:63,sdl2_imag:63,sdl2_mixer:63,sdl2_net:63,sdl2_ttf:63,sdl:63,sdl_gfx:63,sdl_imag:63,sdl_mixer:63,sdl_net:63,sdl_ttf:63,seahors:63,seamless:59,seamlessli:[23,26,80],search:[0,9,23,24,35,36,45,62,63,67,72,75,83,93],second:[9,10,28,45,46,58,59,60,64,66,75,91],secondari:[63,83],secondary_dns_ip:38,secondarynamenod:77,secret:73,section:[10,13,14,16,18,19,20,21,22,28,34,35,36,48,53,56,58,59,60,61,64,66,67,70,72,73,74,80,83,90,91],secur:[0,5,9,10,15,16,22,23,28,31,32,33,34,35,36,48,54,56,59,63,64,66,70,72,73,74,78,80,86,91,92,93],securitytyp:56,sed:80,see:[3,9,10,11,12,14,16,18,19,20,21,22,24,25,28,31,32,34,35,36,38,39,40,42,44,45,48,49,50,53,55,56,57,58,59,60,62,64,65,66,67,71,72,73,76,78,79,80,82,85,90,92,93],seek:0,seen:[46,51,67,92],segment:63,select:[11,14,15,16,18,19,20,21,22,27,28,42,44,56,58,59,60,63,66,67,75,76,82,83,86,90,92],semicolon:67,send:[6,33,49,52,60,63,65,67,84],sens:[6,32,60],sensibl:29,sensit:[29,63],sensor:63,sent:[6,15,49,60],sentenc:[66,67],separ:[0,26,28,32,36,54,55,60,63,66],seper:48,sequenc:66,sequenti:66,seri:[63,66,67,71],serial:63,serie1:34,serv:[25,32,37,54,66,84],server:[5,6,13,14,16,17,20,23,26,29,31,32,37,38,39,41,42,50,52,54,57,63,69,70,71,73,74,77,78,80,82,83,85,86,91],server_nam:[28,54],server_state_dir:28,serverless:63,servernam:86,servic:[15,23,26,28,29,30,31,32,33,36,38,40,50,54,58,59,60,63,64,73,74,77,78,79,80,81,83,84,89,90],session:[26,73,80],sesssion:56,set:[3,5,6,9,12,14,15,16,17,18,19,20,22,23,24,29,30,31,32,33,35,36,38,39,40,41,43,44,46,47,48,54,55,58,59,63,64,66,67,71,72,73,74,75,76,78,80,81,83,84,86,89,91,93],setup:[9,10,14,19,20,32,34,38,43,44,53,54,60,63,66,74,77,85,90,91,92],sever:[3,6,23,56,60,73,90,92],sftp:[29,63],sha256:[51,58,72,73,77],sha256sum:51,sha512:[20,42,51],sha512sum:[20,42,51],sha:29,shall:67,shape:59,shard:59,share:[0,5,15,24,28,30,36,44,49,53,54,57,58,59,60,63,77,80,82,83,84,87,89,90,92],shasum:42,sheer:29,shell:[17,22,57,58,60,63,64,73,78,80],shift:10,shiftwidth:14,ship:[29,32],shortcut:10,shorten:31,shot:59,should:[2,10,12,16,18,22,24,28,30,31,32,36,39,45,51,56,58,59,60,64,66,67,72,73,74,77,82,83,87,90,93],show:[2,9,10,11,18,19,20,24,28,34,36,38,39,41,45,46,49,53,54,56,61,63,64,66,67,72,73,76,81,82,83,88,90,92],shown:[6,9,10,11,14,20,22,35,36,37,42,44,46,47,51,53,54,55,56,60,64,72,73,74,80,81,82,85,86,90,92],shuffl:77,shufflehandl:77,shut:[9,18,19,46,72,73],shutdown:[17,18,28],side:[6,15,22,23,26,47,56,60,63,67,72],sidebar:85,sig:[36,51,83],sig_unenforc:[35,36,83],sign:[15,28,29,35,51,54,63,66,72,73],signatur:[18,28,29,33,35,36,83],signific:[63,67],significantli:[35,36,40],silent:83,simd:[12,71],similar:[0,5,12,19,31,45,52,57,58,60,63,67,73,76,77,80,81,84,90],simpl:[10,20,24,29,31,34,42,49,53,56,58,60,63,66,69,76,77,87,89,90],simpler:67,simpli:[28,29,30,40,60],simplic:[56,80],simplifi:[10,18,41,63],simul:63,simultan:[63,81],sinc:[20,22,31,56,60,73,77,87],singl:[5,10,15,31,36,55,59,60,66,67,71,75,87,89],site:[19,28,31,63,77,80,91,92],situat:0,size:[9,10,11,13,14,17,18,19,21,22,28,32,33,39,51,52,56,58,59,60,77],skim:67,skip:[9,52,77,91],sku:[68,73],sky:63,slave:[55,77,87],sleep:[40,58],slice:[56,84],slightli:[3,40],slim:63,slot:[9,10,44],slow:[63,76],small:[5,20,26,31,32,34,42,51,63],smaller:[28,71],smallest:31,smarctl:63,smart:93,smartd:63,smartmontool:63,smb:[63,85,86],smbpasswd:85,smime:51,smoother:90,smoothli:23,smp:[17,39,54],snack:67,snapshot:73,snippet:58,sock:[28,80,88],socket:[17,26,56,60,63,64,80],socket_path:60,socks_proxi:[80,88],soft:48,softwar:[3,4,6,10,26,28,31,32,34,35,36,37,41,47,49,52,54,57,58,59,60,63,66,70,73,74,77,80,87,90],sole:15,solid:63,solut:[0,6,18,32,49,58,60,63,73,74],some:[1,5,9,10,11,17,19,27,29,31,32,34,36,40,44,48,60,61,63,66,67,73,78,80,83,84,90],someon:[67,90],someth:58,sometim:[0,67],soname1:63,soname2:63,soname3:63,soon:[29,79],sort:84,sound:[40,63],soundfont:63,sourc:[0,2,3,5,9,15,19,25,26,28,29,30,31,35,53,56,59,60,61,63,66,73,74,78,80,83,90],source0:34,source1:34,source2:34,source_with_dkm:36,sourcecod:76,space:[9,10,14,19,21,29,31,33,45,46,58,60,63,71],spacebar:10,sparingli:66,spark:[57,89],spark_master_host:87,spdx:24,speak:67,speaker:67,spec:[2,34,58],special:[6,18,35,36,60,66,76,80,81],specif:[0,6,17,24,25,28,30,31,32,34,36,41,54,56,59,60,63,66,67,73,76,80,84,85,92],specifi:[9,16,19,20,28,34,42,49,52,56,58,59,60,63,69,73,85,86],spectacl:63,speed:[11,31,32,34,63,76,78],speedstep:40,sphinx:[63,65,66,67],spi2:63,spice:[17,63],spin:34,splash:74,split:[3,91],spm:63,spool:[6,60],spool_dir:60,spool_process_tim:60,sprintf:60,sql:[63,73,87],sqlite:63,squar:66,squeezenet:59,squeezenetssd:59,squid:63,src:[26,28,36,47,58,87],srpm:[34,47],srv:54,ssd300:59,ssd:[59,63],sse4_1:12,sse4_2:12,sse:71,ssh:[15,22,29,32,63,64,72,73,80,83],sshd:[17,64],sshd_config:[17,64],ssl:63,sslv3:29,ssocr:63,ssse3:[12,71],stabil:60,stabl:[57,63,75],stack:[0,5,32,43,59,63,84],stage:[9,37],stan:63,standalon:[25,89],standard:[2,12,24,29,54,63,65,66,67,71,74],standarderror:56,standardinput:56,start:[1,2,9,10,11,14,15,16,17,18,19,20,24,26,28,31,34,39,40,41,42,45,48,52,53,54,57,58,59,61,64,66,67,72,73,74,75,77,78,82,83,85,90],start_qemu:[17,20,24,28,42,53,69],starttim:73,startup:[53,54,56,63],state:[5,9,24,28,38,52,58,63,72],statedir:52,stateless:[0,33,70,74,77,80,83,87,90],statement:[67,72],statist:[6,60,63],statu:[11,12,20,26,36,38,50,53,55,58,64,72,73,84,90],stdin:60,stdio:[60,76],stdlib:[60,76],stdout:60,stellarium:63,step:[0,2,10,11,13,14,15,17,18,19,20,21,22,23,24,26,27,28,33,34,35,36,39,44,46,51,52,53,54,56,57,58,59,60,61,64,65,66,67,72,75,77,82,83,85,87,88,91,92],stick:[61,67],still:[28,56,58,86],stock:28,stop:[2,19,21,23,24,52,54,56,58,74,83,84,90],storag:[12,15,18,21,22,26,46,52,58,59,60,63,71,72,73,74,77,78,85,86],store:[0,28,29,38,52,57,59,60,63,73,80,84,90],strace:63,straightforward:[57,60,90],strain:63,strategi:60,stream:[0,12,28,59,63,71,87],streamer:63,strerror:60,strictli:5,stride:76,string:[31,45,52,60,73,84],strong:[66,80],strongli:[28,74,92],struct:60,structur:[28,59,63,65,67,82,84,90],stub:[53,54,63],studi:73,stuffi:67,style:[2,32,63,65,66,67],stylesheet:[63,77],sub:[3,60],subcommand:5,subdirectori:[31,59,83],subfold:[24,34],subject:67,submenu:9,submit:[0,34,63,65,87,92],subnet:54,subscrib:59,subscript:[59,73],subsequ:66,substitut:[17,56],subsystem:[29,40,64],subunit:63,subvers:63,succeed:73,success:[10,12,18,24,31,35,36,51,52,53,55,60,73,82,83,90],successfulli:[2,9,24,31,36,39,44,45,50,52,54,56,60,73,74,76,77,78,79,80,82,83,87,88,90,92],sudo:[10,11,17,18,19,20,24,26,27,28,30,31,34,35,36,38,40,43,44,45,46,47,48,49,50,52,53,54,55,56,58,59,60,62,63,64,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87,88,90,92,93],sudoedit:30,sudoer:60,suffici:[21,22,32],suffix:[20,42],suggest:[60,63,65,84,90],suit:[0,32,34,56,63,80],suitabl:[20,28,42,69],sum:51,summari:[34,63,67],superengi9:84,supermicro:68,supertuxkart:63,supplement:[12,66,71],supplementari:66,suppli:[56,60],support:[0,4,9,10,12,14,17,18,21,25,33,34,36,40,42,48,52,53,54,55,56,57,58,60,63,66,67,71,74,78,80,83,87,89],sure:[11,18,20,24,28,31,34,36,42,45,56,59,60,64,66,67,69,72,73,74,77,83,88],suricata:63,surround:67,suspici:29,sustain:32,svc:54,svg:66,swap:[9,11,14,28,39,46,63,66,80],swapoff:80,swarm:52,swupd:[0,3,4,6,9,17,18,19,23,24,26,27,28,29,30,32,33,34,35,36,37,40,43,44,46,47,49,50,51,52,53,54,56,57,58,59,60,62,63,64,70,72,73,74,75,76,77,78,80,82,83,84,85,87,90],swupd_root:[28,51],symbol:[15,26,28,54],symlink:[28,31,49],sync:11,synchron:[50,63,73],syndic:63,synergi:63,syntax:[10,14,36,53,55,58,63,66,74,84],synthes:63,sys:[40,48,53,54,76],sysadmin:[32,43,50,63,73],sysconfig:83,sysctl:[48,54,80],syslinux:63,syslog:[32,56],sysstat:63,system:[0,3,5,6,11,12,13,14,16,17,18,19,20,21,22,23,24,28,33,34,35,36,37,38,39,40,41,43,45,47,50,52,53,54,57,58,59,60,61,63,64,67,70,72,73,74,76,77,78,79,80,82,83,85,86,89,90,91,92,93],system_nam:60,systemctl:[17,19,23,26,28,30,31,38,40,49,50,52,54,55,56,58,64,74,78,79,80,83,84,85,88,90],systemd:[23,28,31,32,36,39,40,48,49,50,52,54,55,63,64,74,78,79,80,83,84,88],t10k:82,t540p:68,tab:[9,10,14,15,18,21,22,56,73,90],tabl:[0,6,28,46,60,67,73,90,92],tablet:17,tabsiz:14,tabstop:14,tag:[28,34,52,54,58,63,66,72,73],tag_nam:34,take:[0,3,13,28,31,32,34,40,46,53,55,56,57,58,63,65,67,72,73,76,82,90,92],taken:[29,60],talk:67,talloc:63,tallow:[29,49],tar:[15,20,24,34,35,36,42,52,53,54,63,69,90,92],tarbal:[2,24,52,59],target:[1,5,9,14,20,24,32,34,37,42,53,56,59,63,74,76,83],target_clon:76,targetmedia:14,task:[6,23,32,43,60,61,63,72,92],taskbar:[11,86],tasktrack:77,tbb:63,tcc:63,tcl:63,tcp:[17,63],tcpwrapper:29,team:[0,6,9,10,28,29,49,55,60,80],technic:[65,67],techniqu:29,technolog:[5,16,17,18,40,59,63,76],tee:[35,40,48,60,77,78,79,80,83],telem:6,telem_ref:60,telemctl:60,telemetr:[9,10,26,32,33,49,63,70],telemetri:[6,14,45],telemetryui:[6,60],telempostd:[6,60],telemprobd:[6,60],tell:[28,32,49,52,56,67],telnet:63,temperatur:[40,63,67],templat:[14,27,28,30,32,34,39,58,63,73,87],temporari:[10,24,34,48],temporarili:[22,40,54,80,83],tenanc:15,tenant:80,tend:34,tensor:63,tensorflow:[63,89],term:[18,31,32,57,58,63,66,67,83],termin:[11,17,18,19,20,34,38,40,42,44,46,50,60,63,72,73,75,80,83,84],tertiari:63,test:[12,23,28,31,32,34,35,36,37,45,58,60,63,65,67,68,74,76,82,90,91,92],test_telem:60,tester:63,testi:82,testsuit:63,testx:82,tex:63,texinfo:63,texliv:63,texmak:63,text:[10,34,38,50,55,63,64,72,73,77,90,92],tf_cnn_benchmark:58,tftp:54,tftp_root:54,than:[5,31,35,36,40,42,60,66,67,71,74,85],thank:90,thei:[9,20,24,28,29,31,32,36,42,56,58,60,66,67,72,73,76,80,85,92,93],them:[2,6,9,18,24,28,31,34,36,39,42,53,54,57,58,59,60,63,66,67,73,77,80,82,92],theme:[53,63],themselv:[28,88],theori:36,thermal:63,thermal_daemon:63,thermald:40,thermalmonitor:40,thi:[0,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,63,64,66,67,68,70,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93],thing:[13,41,73,90],think:32,thinkpad:68,thinkserv:68,third:[14,29,61,63,66],thoroughli:32,those:[2,3,19,28,32,35,36,39,53,54,73,76,77,79,84,87,91,92],though:[9,56,88],thought:49,thousand:[3,77],thread:[17,24],threat:63,three:[11,45,49,56,58,60,66,67,73],threshold:[40,60],through:[0,2,6,13,17,26,29,30,32,35,36,54,60,63,65,66,72,73,74,75,77,79,93],throughout:[29,92],thu:[19,23,76,77,90],thumb:14,thunderbird:63,ticket:17,tie:31,tier:72,tiff:63,tigervnc:[56,63],time:[0,6,10,14,23,26,28,29,30,33,34,35,40,54,56,63,64,65,73,76,77,80,82,83,84,85,93],timedatectl:50,timer:[31,40],timestamp:59,timesyncd:50,timezon:[50,63],tip:[66,67],titl:[66,67,75],tlsvnc:56,tm_create_record:60,tm_free_record:60,tm_handl:60,tm_send_record:60,tm_set_payload:60,tmp:54,tmux:63,toctre:66,todo:63,togeth:[28,31],token:[58,80,93],toler:32,tone:67,too:30,tool:[0,1,2,3,4,5,10,14,15,17,19,23,24,26,27,28,31,32,38,41,46,47,49,53,56,58,60,61,63,66,71,73,76,82,87,90],toolchain:[28,37,63],toolkit:[33,63],top:[9,17,18,19,20,21,22,23,25,31,34,59,66,72,85,92],topic:[59,65,66,67,73],topolog:[54,63],torch:58,total:[46,52],totem:63,touch:[54,59,60,74,80],toward:67,tpm:63,tracerout:63,track:[5,28,31,34,36,37,60,63],trademark:[66,67],tradeoff:40,tradit:[56,81],traffic:[0,53,54,63],trail:66,train:[58,59,82],traini:82,trainx:82,transfer:[55,63,75],transform:[2,63],transit:28,translat:63,transmithashpolici:55,transpar:[29,32,74],transport:63,treat:[32,66],tree:[0,28,34,57,58,63,66,83],tri:[23,60],trigger:[36,37,52,83,93],trim:47,troubleshoot:[28,40,63],truli:56,trust:[35,36,51,63],trustworthi:51,ts140:68,tsc:[39,54],tsn:63,tty1:83,tue:47,tui:14,tunnel:34,turbo:63,tutori:[31,43,58,61,65,66,72,73,74,75,76,77,78,80,81,82,84,85,86,87,88,90,91,92,93],tux:63,tweak:34,twice:[67,82],two:[5,6,10,14,22,24,28,31,37,42,45,46,53,54,56,57,59,60,63,66,67,69,76,82,83,91],txt:[39,60],type:[6,9,10,11,14,15,18,19,21,22,27,28,32,36,38,39,45,46,56,57,58,59,60,63,66,70,72,73,75,77,80,84,90,93],typeset:63,typic:[0,9,19,20,22,23,26,34,40,66,67,74],typo:65,tzdata:63,u2f:89,ubuntu:[17,36,56,59],ubyt:82,ud5:68,udevadm:93,uefi:[9,10,16,17,21,22,35,36,40,44,54,63,71],uefi_bio:17,ugam76u8bdr6yjc:72,uget:63,uhd:71,uhttpmock:63,uint32_t:60,ule:52,ulimit:[48,57],ultim:32,umount:[11,44],umountdisk:11,unabl:[0,23,24,30,52],unalloc:10,unam:[18,34,35,36,83],unauthor:90,unavail:23,unbind:53,unbound:53,unbundl:63,unchang:20,uncheck:[9,16,20,21,22],unclear:67,uncom:56,uncompress:[11,15,17,53],unconvert:22,undefin:60,under:[2,8,11,14,15,18,19,20,21,22,27,28,30,35,36,40,56,63,66,73,77,82,83,87,93],underli:[6,55,60],underlin:66,underneath:[35,36],underscor:[9,10],understand:[24,28,32,40,41,48,52,66,67,74,80],understood:63,undesir:2,undionli:54,undrain:81,unecessari:67,unexpect:28,unhandl:[6,60],unifi:[29,63],uninform:67,uninterrupt:83,uniqu:[5,15,28,30,32,56,58,60,66,67,73,74],unison:63,unit:[5,9,23,32,48,49,56,64,66,78,80,83,84],univers:[63,65,93],unix2:63,unix:[60,63],unknown:31,unless:[0,14,28,56,67,81],unlik:31,unmanag:38,unmask:23,unmount:[11,44],unnecessari:[29,67],unneed:29,unpack:63,unparallel:67,unprivileg:[24,34,79],unset:23,unsign:35,unstructur:60,untag:58,until:[2,6,10,24,55,60,81,92],untrack:52,untrust:80,unusu:63,unxz:[17,24,42],unzip:63,updat:[1,2,3,4,14,18,23,24,30,33,34,35,36,37,39,41,47,52,54,58,59,60,63,65,66,70,73,74,77,78,80,82,84,85,87,90],upgrad:[35,36,63,81,83],upload:[15,59],upon:[0,9,10,53,56,58,63,71,76],upow:49,upper:[15,48,63],upstream:[0,4,5,24,29,31,32,33,34,35,36,37,43],upstreamvers:28,url:[9,10,23,24,28,31,34,35,36,39,52,58,63,66,73,88,93],urllib3:31,urn:73,usabl:[22,46,63,93],usag:[29,57,58,60,63,66,74],usb:[9,10,13,14,17,44,61,93],usbredir:63,use:[2,3,4,5,6,9,10,11,12,13,14,17,18,19,20,21,22,23,24,25,27,28,29,31,32,34,35,36,38,39,40,41,42,44,46,49,50,51,53,54,55,56,57,58,59,63,64,65,66,67,69,71,73,74,75,76,78,79,80,83,84,85,86,88,90],used:[0,1,2,6,10,22,24,25,26,27,28,29,30,31,32,34,36,37,38,39,40,42,45,49,51,52,53,54,55,56,57,58,59,60,61,63,66,69,71,73,74,76,80,82,85,86,88,90],useful:[2,5,26,28,32,34,35,36,43,48,60,63,82,83,84,90],user1:11,user:[0,2,6,15,16,17,18,19,20,23,24,28,29,32,33,34,35,36,38,40,45,47,58,60,63,64,66,67,72,73,75,77,79,80,83,84,85,87,88,90,92],useradd:[43,59],userid:[43,59,90],usermod:[28,40,43,59],usernam:[15,19,20,24,28,29,34,56,72,73,92],userspac:63,usersusernamedocumentsvirtu:20,uses:[5,10,14,15,23,24,25,27,28,29,30,34,38,40,45,50,52,53,54,55,56,57,58,59,60,63,66,72,78,80,81,82,83,84,85,90],using:[0,2,3,5,6,9,10,11,13,15,16,17,18,19,20,21,22,24,25,26,27,28,29,33,34,35,36,37,38,39,40,42,43,44,45,47,49,51,52,53,54,57,58,59,60,63,65,66,67,69,72,74,77,79,80,81,83,84,86,89,90,92],usr:[0,18,24,26,28,30,31,36,39,44,47,49,53,54,56,57,59,60,64,73,77,80,82,83,84,87,90],usual:[26,63,88],utc:[9,10,63],utf8:45,utf8_unicode_ci:90,utf:[14,63,77],util:[5,11,24,26,31,40,41,43,45,46,55,58,59,60,63,67,73,76,83,85],utilslib:24,uuid:38,v1beta1:80,v4l:63,vala:63,valgrind:63,valid:[2,10,18,24,31,32,33,36,37,40,42,58,60,63,80,81,85,93],valu:[0,2,9,10,20,28,30,32,34,38,39,40,42,48,53,55,56,59,60,63,64,76,77,80,82,84,90,93],valuabl:32,vanilla:63,vari:[9,10,44],variabl:[24,26,28,34,36,38,47,53,54,60,64,66,67,73,76,78,80,87,90],variant:[34,35,36,66,83],variat:28,varieti:92,variou:[0,28,49,63],vasprintf:60,vbox:18,vboxguest:18,vboxsvga:18,vboxvideo:18,vbx_gas_6:18,vcd:63,vcli:22,vdi:18,vec:76,vector:[29,58,63,66],vendor:[32,35,36,53,73],verbos:34,veri:[23,28,31,32,53,84],verif:[20,28,29,31,35,36,42,51,83],verifi:[5,9,10,11,14,18,19,21,22,26,28,30,33,34,36,38,39,46,49,51,52,53,56,58,59,60,63,64,65,67,71,73,74,76,79,80,84,88,90,92],versa:56,version:[4,10,11,14,16,17,18,19,20,21,22,27,29,35,36,38,39,41,42,46,51,52,54,57,59,60,63,66,69,72,73,74,77,78,81,83,88,89,90,92],versions_path:28,versionurl:28,vertic:9,vfat:[9,10,14,28,39],vfio:53,vfs:75,vga:17,vhd:[20,42,69],vhdx:[16,20,42,69],via:[6,28,31,40,54,60,63,64,74,86],vice:56,video0:59,video:[59,63],view:[2,6,9,15,21,22,24,28,34,40,43,56,57,59,60,62,63,66,67,72,80,83,85,87,90],viewabl:[6,60],viewer:[17,63],vim:[14,63],vinagr:63,virt:[17,31,63,78,79],virtio:17,virtual:[0,15,19,20,21,22,25,28,31,33,42,55,61,63,69,74,78,83,90],virtualbox:[13,25,60],virtualmachin:73,virus:63,visibl:26,vision:[59,63],visit:[5,9,10,19,20,21,22,24,32,47,63,72,73,75,82,87,88,90,92],visual:[6,40,59,60,63,66],vlc:63,vma:22,vmdk:[20,22,42,69],vmf:22,vmkfstool:22,vmn:17,vmovdqu:76,vmss:73,vmware:[13,27,42,63,69],vmx:[19,20],vnc:[33,63,64],vncauth:56,vncpasswd:56,vncserver:56,vncviewer:56,vnni:58,voic:63,volatil:63,voltag:[40,63],volum:[22,52,59,63],volunt:63,voxel:63,vpaddd:76,vpddecod:24,vpn:34,vsphere:22,vsprintf:60,vswitch:63,vulner:[29,32,63],vzt:63,w5ff:52,wacom:63,wai:[5,17,24,28,32,51,60,63,65,66,67,76,85,90,92],wait:[29,31,60],walk:[72,77],want:[0,6,9,10,14,18,19,21,27,28,41,43,45,46,56,60,67,72,73,74,77,80],wantedbi:56,warehous:73,warn:[10,31,42,46,52,56,67,72,73,74],wast:[23,40],watch:[31,39,54],watcher:37,wave:63,wayland:[63,75],weaken:67,weather:63,web:[0,6,15,32,37,39,41,54,58,59,60,63,66,73,82,84,87,89,91,93],web_root:54,webapp:73,webauth:93,webcam:[59,63],webkitgtk:63,webm:59,webpag:62,webproxi:63,webserv:[32,41],websit:[24,66,72,73,75,82,83,88,90,92,93],webster:65,weechat:63,week:[0,27,58],weight:[59,63],welcom:[19,20,57,61,66,73,74,92],well:[0,28,29,31,32,34,39,60,66,73,75],were:[24,28,31,36,52,56,58,65,67,82,83],west:72,weston:63,westu:73,wget:63,wgetrc:88,what:[4,31,32,36,39,49,60,66,67,72,73,89],whatprovid:47,wheel:59,when:[2,4,5,9,10,11,13,16,17,18,20,22,23,25,26,28,29,30,31,32,35,36,40,46,49,50,51,53,56,58,59,60,63,66,67,72,73,76,77,80,81,83,85,90,92,93],whenev:[0,26,30,67],where:[2,5,11,14,16,18,20,24,26,28,31,32,36,42,46,52,53,54,56,59,60,66,67,73,76,77,80,83],whether:[9,10,31,32,60,65,79,80],which:[0,3,4,5,6,9,13,14,17,18,20,22,24,27,28,29,31,32,34,35,36,37,39,40,43,45,47,49,53,54,56,58,60,63,64,66,67,71,73,74,76,77,81,83,84,85,86,88,90,93],white:31,whitelist:[31,49],whitespac:66,who:[31,56,67,92],whole:[5,32,82],whom:67,why:[49,66,83],wide:[29,63],widget:[63,67],width:14,wifi:[63,68],wiki:[24,36,66,67],wikipedia:[66,82],wildcard:55,window:[10,14,16,17,18,19,20,21,22,44,56,60,63,72,73,89],wine:63,wire:[9,10,38,67],wireguard:34,wireless:[10,38,63],wireshark:63,wisdom:76,wish:[9,10,18,24,60,67,84],within:[17,28,29,39,40,57,58,60,66,73,82,90],without:[9,23,24,26,30,31,40,54,60,64,66,67,73,78,83,90],wizard:[19,20],woff2:63,won:58,word:[6,19,20,32,40,60,66,77],wordi:66,wordpress:[89,90],wordpressus:[90,92],work:[0,7,8,14,17,20,21,29,32,34,36,44,47,51,52,53,54,56,57,58,60,63,66,74,80,83,90],worker:80,workflow:[28,34,60,63],workload:[32,40,58,63,74,80],workspac:[24,28,34],workstat:[13,17,21,22,33,42,43,69],world:[60,92],worri:23,would:[18,32,39,56,58,67,73],wp_:92,wpa:63,wpa_supplic:63,wpad:23,write:[11,30,39,59,60,63,65,66,82],written:[30,63,65,66,82,92],www:[0,23,28,34,54,90,92,93],wysiwym:63,x11:[63,75,83],x11displayoffset:64,x11forward:64,x11uselocalhost:64,x11vnc:63,x299:68,x86:[40,45,63,71],x86_64:[17,19,20,34,47,52,53,59,60,75,83],xapian:63,xarg:63,xauth:56,xauthor:56,xcb:63,xconfig:34,xdg:[63,75],xdmcp:[56,63],xdot:63,xemac:63,xeon:[58,68,71],xf86:63,xfce4:63,xfce:63,xfsprog:63,xjf:54,xkbcomp:63,xkeyboard:63,xml:[59,63,77],xmlsec1:63,xnvc:56,xorg:[63,83],xorgproto:63,xpdf:63,xqhj:52,xsl:77,xstartup:56,xtabl:63,xterm:63,xtightvncview:56,xtran:63,xvf:[34,35,36],xvnc:56,xxxx:[16,71],xxxxx:16,xzvf:[90,92],yakuak:63,yaml:[10,14,58],yann:82,yarn:[63,77],yasm:63,yes:[17,36,46,56,64,72,73,77,85],yet:[28,29],ymm0:76,you:[1,2,4,6,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,29,31,32,34,35,36,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,66,67,72,73,74,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,93],your:[1,4,5,6,9,11,12,14,15,16,18,19,20,22,23,24,27,28,29,31,34,35,37,38,39,40,41,42,43,44,46,47,49,50,53,54,55,57,58,59,61,63,64,65,66,67,74,76,78,79,81,82,84,85,86,87,88,90,92,93],your_websit:92,yourself:65,yubico:93,yubikei:89,yum:[3,28,31,43],yum_conf:28,z170x:68,zero:[28,34],zeroedthick:22,zfcopipu:77,zip:[20,42,47,59,63,69],zlib:63,zmq:63,znc:63,zone:[50,73],zsh:63,zstd:[47,63],zx2c4:34,zzzz:[35,36,83]},titles:["FAQ","About","Autospec","Bundles","Mixer","swupd: software updater","Telemetrics","<no title>","<no title>","Install Clear Linux* OS from the live desktop","Install Clear Linux* OS on bare metal with live server","Create a bootable USB drive","Check processor and EFI firmware compatibility","Get started","Install using clr-installer and a configuration file","Launch Clear Linux* OS Compute Engine on Google Cloud Platform*","Use Hyper-V*","Run Clear Linux* OS as a KVM guest OS","Install a Clear Linux* OS VM in VirtualBox*","Install Clear Linux* OS as a VMware* Workstation Player guest OS","Run pre-configured Clear Linux* OS image as a VMware* Workstation Player guest OS","Install Clear Linux* OS as a VMware* ESXi guest OS","Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS","Autoproxy","autospec","Kernels","Debug system","ister.py image builder","mixer","OS Security","Stateless","swupd","Deploy at Scale","Guides","Kernel development","Add kernel modules manually","Add kernel modules with DKMS","Architect the life-cycle of Clear Linux* OS","Assign a static IP address","Bulk provision","CPU Power and Performance","Developer Workstation","Download, verify, and decompress a Clear Linux* OS image","Create and enable a new user space","Fix a broken installation","Modify hostname","Increase virtual disk size of an image","Query package info from upstream repository","Resource limits","Restart system services after an OS update","Set the time","Validate signatures","Build a custom Clear Linux* OS based Docker container image","Use DPDK to send packets between platforms","Install over the network with iPXE","Combine multiple interfaces with network bonding","Remote-desktop to a host using VNC","Data Analytics Reference Stack","Deep Learning Reference Stack","Enable AWS Greengrass* and OpenVINO\u2122 toolkit","Telemetrics","Clear Linux* project","Useful bundle commands","Available bundles","openssh-server","Documentation guidelines","Structure and formatting","Writing guide","Compatible Hardware","Clear Linux* OS image types","Reference","Recommended minimum system requirements","Create and launch Clear Linux* OS from Amazon Web Services","Run Clear Linux* OS using Microsoft Azure CLI 2.0","Run Docker* on Clear Linux* OS","Use Flatpak* to install applications on Clear Linux* OS","Use the function multi-version patch generator","Set up a single node cluster with Hadoop*","Install Kata Containers*","Migrate Clear Containers to Kata Containers*","Run Kubernetes*","Kubernetes Best Practices on Clear Linux OS","TensorFlow* machine learning on Clear Linux* OS","Install NVIDIA* Drivers","Run Redis on Clear Linux* OS","Enable simple file sharing with a Windows* machine using Samba*","Connect to Windows* shared location from Clear Linux* OS desktop","Set up a standalone cluster system using Apache* Spark*","Setting up proxy","Tutorials","Set up a LAMP web server on Clear Linux* OS","WordPress* on Clear Linux* OS","Set up WordPress* on a LAMP web server","Enable YubiKey U2F Support"],titleterms:{"default":[0,9,10,30,49,64,79,90],"function":[59,76],"long":67,"new":[10,18,19,20,21,22,24,43,66],"static":[38,60],"try":84,AWS:59,For:10,The:[29,57,60],Use:[16,53,58,67,75,76,80,81,84,90],Useful:62,Using:[38,57,75],VMs:25,ZFS:0,about:[1,78],accept:56,access:17,account:[59,73],activ:[60,67],add:[0,10,17,35,36,43,52,59,80],addit:[18,30,62,74,83],address:38,adopt:32,advanc:[9,10],after:49,agil:32,alias:[35,36],all:47,allow:49,alreadi:[35,36],also:25,altern:83,amazon:72,ami:72,analyt:57,anoth:0,apach:[77,87,90],api:60,app:56,appendix:53,applic:[32,53,75],architect:37,architectur:[6,60],area:30,assign:[9,10,38],attach:20,attack:29,authent:56,autom:[29,80],automat:[10,31,56],autoproxi:23,autospec:[2,24],avail:[0,35,36,63],avoid:67,azur:73,back:60,background:26,backup:32,bare:[10,25,32,76],base:[52,92],basic:[49,72,74,90],befor:[75,92],begin:[75,92],benchmark:58,best:81,between:53,binari:47,bind:53,block:66,bond:55,boost:40,boot:[10,19,20,21,22,34,35,36,44],bootabl:11,brief:67,broken:44,build:[24,34,35,36,46,52,53,57],builder:[27,28],bulk:39,bullet:66,bundl:[3,5,9,10,28,31,43,52,59,62,63,74,84,90],burn:11,can:0,candid:76,capit:67,caution:66,chang:[34,64,90],check:[9,12,35,36,46,48],choos:10,chrome:0,clear:[0,9,10,11,15,17,18,19,20,21,22,24,33,34,37,42,52,56,61,69,70,72,73,74,75,76,79,81,82,84,85,86,90,91],cli:[73,84],client:[56,60],clock:40,clone:34,cloud:[15,32,80],clr:14,cluster:[74,77,80,81,87],code:[34,60,66,82],codebas:29,collect:60,colon:67,combin:55,comma:67,command:[10,47,62,75,84],compat:[12,25,58,68],compil:29,complet:92,compon:56,comput:15,concept:[41,70],conclus:49,conf:[28,36],config:46,configur:[9,10,14,19,20,21,22,28,30,32,34,35,36,39,47,54,56,59,60,71,74,76,77,79,80,83,87,90],connect:[56,72,86],consider:32,consumpt:59,contain:[28,31,32,52,74,78,79],content:[37,51,67],contract:67,contribut:65,control:[2,24,81],convert:[22,59],copi:[0,34],core:41,correct:31,cpu:40,creat:[4,11,16,18,19,20,21,22,24,28,32,43,59,60,72,73,74,92],cri:80,current:[43,47],custom:[34,52,79,80],cve:29,cycl:37,daemon:[77,87],dar:57,data:[57,60,90],databas:90,dealloc:73,debug:[26,83],decompress:[20,42],deep:[58,59],defin:24,delet:10,delta:31,depend:2,deploi:[28,32,59],descript:[23,24,27,28,31,35,36,37,59],design:29,desktop:[9,44,56,86,88],destruct:[9,10],detach:19,detect:76,determin:46,develop:[24,34,41],devic:59,did:0,directli:24,directori:[90,92],disabl:[31,60,83],disallow:49,disk:[9,10,46],displai:17,distribut:32,distro:0,dkm:[36,83],dnf:47,docker:[28,52,57,74,78,84,88],document:[65,66],doe:0,download:[10,17,18,19,20,21,22,42,83,92],dpdk:53,drive:[11,85],driver:[0,40,53,83],edg:59,effect:29,effici:5,efi:12,enabl:[16,19,20,28,31,43,59,60,64,79,85,93],encrypt:[9,10,56],end:[60,67],engin:15,english:67,environ:[24,34,53,59],establish:56,esxi:[21,22],etc:0,exampl:[14,24,27,28,31,35,36,47,49,53,60,66,76,77,82,84,87],exist:[24,36],extract:18,faq:0,featur:58,ffmpeg:0,fft:76,fftw:76,file:[0,2,14,24,30,31,47,79,85],filesystem:46,find:31,finish:[9,10],firefox:93,firewal:0,firmwar:12,fix:44,flatpak:75,fmv:76,format:[22,28,66],forward:64,framework:34,frequenc:40,friendli:67,from:[0,9,19,44,47,56,72,74,86],fstab:0,fullfil:31,gcp:15,gdm:[17,56],gen:60,gener:[0,24,76],get:13,git:88,github:65,gnome:[17,75],googl:[0,15],governor:40,grammar:67,greengrass:59,group:[43,59,73],guest:[17,18,19,20,21,22],gui:92,guid:[33,58,67],guidelin:65,hadoop:77,harden:90,hardwar:68,head:[66,67],host:[56,75,76],hostnam:[9,10,45],how:[0,2,23,24,28,31,49,60,65],hub:74,hugepag:53,hyper:16,hypervisor:[19,20],identifi:38,idl:40,imag:[9,10,11,20,22,27,32,42,44,46,51,52,56,57,58,66,69,74,75,84],imper:67,implement:[26,37],improv:0,includ:34,increas:46,independ:[20,42,69],info:[28,47],inform:[30,47,62,78],infrastructur:32,ing:67,inlin:66,instal:[0,9,10,13,14,17,18,19,20,21,31,34,35,36,43,44,53,54,56,59,71,73,74,75,76,77,78,80,83,84,87,90],instanc:[32,72,79],instruct:66,instrument:60,integr:[5,20,42,74],interfac:[10,38,55],ipx:54,iso:[18,19,21],ister:27,its:43,json:46,jupyt:[58,82],kata:[31,74,78,79,80],kei:77,kernel:[9,10,25,33,34,35,36,53],keyboard:[9,10],ksonnet:58,kubectl:58,kubeflow:58,kubernet:[58,80,81],kvm:17,l3fwd:53,lambda:59,lamp:[90,92],languag:10,latest:[10,19,20,21,22,29],launch:[9,10,15,17,56,72,75],learn:[58,59,82],length:66,level:30,libreoffic:75,libtelemetri:60,life:37,like:0,limit:48,line:[10,66,75],link:[66,67],linux:[0,9,10,11,15,17,18,19,20,21,22,24,29,32,33,34,37,40,42,52,56,61,69,70,72,73,74,75,76,81,82,83,84,85,86,90,91,93],list:[47,63,66],live:[9,10,18,44],load:[35,36],local:[28,59,60],localhost:56,locat:[59,72,86],log:[32,73],login:[56,64,92],loop:76,lsblk:46,machin:[13,16,17,18,24,32,53,60,73,82,85],maco:[11,42],main:10,maintain:28,mainten:33,make:[0,67],manag:[9,10,17,32,38,40,52,90,92],manifest:31,manual:[10,28,35,56,79],map:85,mapreduc:77,mariadb:90,mark:67,markup:66,master:87,meaning:32,mechan:40,media:[9,10],menu:[10,67],metal:[10,25,32,76],method:56,methodolog:32,microsoft:73,migrat:79,minim:29,minimum:[9,10,71],mirror:10,misc:56,mismatch:31,mix:[4,28,32],mixer:[4,28],model:59,modifi:[9,10,28,34,45],modul:[35,36],monitor:49,more:78,mount:[18,44],mozilla:93,multi:[56,58,76],multipl:55,name:67,nativ:[32,80],nautilu:86,navig:[9,10,66],need:0,network:[9,10,16,33,54,55,58,80],networkd:38,networkmanag:38,newli:21,next:[3,6,43,73,80,84,90],nginx:28,nic:53,node:[58,77,81],nomin:67,note:66,notebook:[58,82],notic:66,noun:67,nouveau:83,number:66,nvidia:83,obtain:36,off:46,often:0,onli:[25,47,56],onto:11,openssh:64,openvino:59,optim:59,option:[9,10,17,28,29,35,36,49,56,60,74,80],orchestr:32,order:46,organ:66,other:[0,41],out:[35,36],output:59,over:[54,88],overrid:[30,48],overus:67,overview:[19,20,21,22,32,34,35,36,39,40,44,45,47,49,51,53,54,58,59,60],own:32,pack:31,packag:[0,24,34,47,59,80],packet:53,page:66,parallel:67,paramet:34,partit:[9,10,44,46],pass:53,passphras:10,patch:76,path:83,per:48,perform:40,php:90,phpmyadmin:90,phrase:67,physic:53,pick:32,pktgen:53,plane:81,platform:[15,20,42,53,59,69],player:[19,20],pod:80,port:64,power:[20,21,22,40,46],practic:81,pre:[13,20,24],prebuilt:46,preconfigur:22,preliminari:9,prerequisit:[9,11,14,15,16,18,24,28,31,35,36,37,39,44,47,52,53,54,58,60,64,72,74,77,78,80,81,82,83,84,85,86,87,88,93],present:67,process:14,processor:12,product:67,profil:41,program:[38,88],project:[61,76],provid:24,provis:39,proxi:[9,10,28,80,88],pull:[28,34,74],punctuat:67,pytorch:58,qemu:17,qualiti:56,queri:47,quick:31,quotat:67,realvnc:56,recommend:[10,71],reconfigur:21,record:60,recreat:27,redi:84,refer:[14,24,28,31,57,58,59,60,65,70],relat:[2,4,15,19,20,21,22,24,27,28,31,34,35,36,58,74,80,82,93],releas:[37,47,57],remedi:29,remot:56,remov:52,repositori:47,request:[34,35,36],requir:[0,9,10,59,71],reset:30,resiz:46,resourc:[41,48,59,73,83],restart:[49,60],result:58,root:[10,44,64],rpm:[0,24,47],rule:93,run:[17,20,22,53,58,59,60,73,74,75,77,78,79,80,82,84,87],runtim:80,safe:[9,10],samba:85,sampl:59,save:[10,40,60],scale:[32,40],scan:29,scannabl:67,scenario:60,schema:[9,10],script:56,search:[31,41],secur:[29,90],see:0,select:[9,10,72],send:53,separ:30,serial:67,server:[10,18,21,22,28,56,60,64,84,87,90,92],servic:[48,49,56,72,88],session:[56,88],set:[10,21,28,34,45,50,53,56,60,77,82,85,87,88,90,92],setup:[15,24,28,41,58,80],sftp:64,share:[85,86],shell:88,show:47,signatur:51,simpl:[28,67,85],singl:[58,77],size:46,skip:10,softwar:[0,5,9,24,29,30,43,67,75,83],sourc:[24,34,36,47],space:[43,66],spark:87,spec:24,specif:[20,42,47,69],specifi:[35,36,47],ssh:[17,56,77,88],stack:[33,57,58],standalon:87,start:[13,56,60,84,87],state:40,stateless:[30,32],step:[3,6,9,42,43,73,80,84,90],stop:[60,72,73,79],strategi:32,strong:67,structur:66,submit:[35,36],success:92,support:[19,20,22,59,93],surfac:29,swap:10,swarm:74,swupd:[5,10,31,41,81],system:[9,10,26,29,30,31,32,44,48,49,56,71,75,87,88],systemd:[38,56],tabl:[2,9,10,20,41,42,56,59,68,69],target:[10,28,44],telem:60,telemetr:[6,60],telemetri:[0,9,10,32,49,60],tens:67,tensorflow:[58,82],termin:[56,88],test:[10,24],text:[66,67],tfjob:58,thermal:40,thi:58,through:[53,56],time:[9,50,60],timezon:10,tool:34,toolkit:59,topic:[2,4,15,19,20,21,22,24,27,28,31,34,35,36,58,74,80,82,93],traffic:56,train:1,tree:[35,36],troubleshoot:[10,18,23,78,80],trust:29,tunnel:56,turbo:40,tutori:89,type:[20,42,69],u2f:93,udev:93,uefi:[19,20],under:0,uninstal:[58,83],unmount:18,updat:[0,5,9,10,28,29,31,32,43,49,51,72,81,83],upload:[21,22],upstream:[27,28,47],usag:[26,32,47],usb:11,use:[0,60],used:46,user:[9,10,30,43,48,56,59],using:[14,56,73,75,76,85,87],usual:0,valid:51,variabl:59,vector:76,verb:67,verifi:[20,29,31,42,44],version:[5,28,31,32,34,43,47,58,67,76],via:[56,65],view:45,viewer:56,virtual:[13,16,17,18,24,32,46,53,73],virtualbox:18,vmware:[19,20,21,22],vnc:56,voic:67,warn:66,web:[28,72,90,92],wget:88,what:0,wheel:43,where:0,which:38,white:66,why:0,wide:48,window:[11,42,85,86],without:36,word:67,wordcount:[77,87],wordpress:[91,92],work:[2,23,24,28,31,49],worker:[81,87],workflow:37,workstat:[19,20,41],write:67,x11:64,you:[0,75,92],your:[10,32,45,56,60,72,73,75,77,80],yubikei:93,zone:9}}) \ No newline at end of file diff --git a/tutorials/aws-web/aws-web.html b/tutorials/aws-web/aws-web.html new file mode 100644 index 00000000..d8360f89 --- /dev/null +++ b/tutorials/aws-web/aws-web.html @@ -0,0 +1,1235 @@ + + + + + + + + + + + Create and launch Clear Linux* OS from Amazon Web Services — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Create and launch Clear Linux* OS from Amazon Web Services

+

This tutorial walks you through creating and launching a Clear Linux OS +AMI instance from the +AWS console and complete the following tasks:

+
    +
  1. Locate and select the Clear Linux OS OS Basic AMI in the AWS Marketplace.
  2. +
  3. Create a new public and private key pair to allow you to connect to your +Clear Linux OS instance securely.
  4. +
  5. Launch the new Clear Linux OS instance and connect to it.
  6. +
  7. Update your instance of Clear Linux OS using the swupd command.
  8. +
  9. Stop the Clear Linux OS instance.
  10. +
+
+

Prerequisites

+

This tutorial assumes the following statements are true:

+
    +
  • You are using a linux-based system to access AWS and can run SSH +to access the remote Clear Linux OS AWS image.
  • +
  • Your browser puts downloaded files in the $HOME/Downloads +directory.
  • +
  • You have already set up an AWS user account and logged into the AWS +console.
  • +
+
+

Note

+

This tutorial uses a Clear Linux OS AMI t2.micro instance that is eligible for the +AWS free tier. To learn more about AWS and setting up an account, visit the +AWS website at http://aws.amazon.com.

+
+
+
+

Locate, select, and launch the Clear Linux OS Basic AMI

+
    +
  1. Start from your main AWS services console menu in your browser and select the +EC2 text as shown in figure 1:

    +
    +AWS Console +

    Figure 1: AWS Console

    +
    +

    This selection brings up your EC2 Dashboard menu.

    +
  2. +
  3. To create a new Clear Linux OS instance from the EC2 Dashboard menu, +select the Launch Instance button as shown in figure 2:

    +
    +EC2 Dashboard +

    Figure 2: EC2 Dashboard

    +
    +

    This selection takes you to the +Step 1: Choose an Amazon Machine Image (AMI) menu.

    +
  4. +
  5. To find the Clear Linux OS Basic AMI in the +Step 1: Choose an Amazon Machine Image (AMI) menu, do the +following:

    +
      +
    1. In the lefthand navigation window, select the +AWS Marketplace menu item to bring up the search bar to +Search AWS Marketplace Products.

      +
    2. +
    3. In the search bar, type “clear linux os” and hit the Enter key to +search for and locate the Clear Linux OS Basic AMI.

      +
    4. +
    5. Select the Clear Linux OS Basic AMI by clicking on the +Select button as shown in figure 3:

      +
      +Step 1: Choose AMI +

      Figure 3: Step 1: Choose AMI

      +
      +
    6. +
    7. A pop-up dialog box appears showing you more information about the +Clear Linux OS Basic AMI along with the pricing details for running +Clear Linux OS on different platform configurations as shown in figure 4. Select +the Continue button.

      +
      +Clear Linux OS Basic +

      Figure 4: Clear Linux OS Basic

      +
      +
    8. +
    +
  6. +
  7. The Choose Instance Type menu appears as shown in figure 5.

    +
    +Choose an Instance Type +

    Figure 5: Choose an Instance Type

    +
    +

    Select the t2.micro type by clicking the box on the left side +of the instance and then select the Review and Launch button to +move to the Step 7: Review the Instance Launch menu.

    +
    +

    Note

    +

    You can configure the instance details, add additional storage, add +tags, and configure the security group before selecting the +Review and Launch button if you want to further customize +this Clear Linux OS instance.

    +
    +
  8. +
  9. The Step 7: Review the Instance Launch menu, shown in figure 6, +allows you to +Cancel the process, return to the Previous screen +to change the configuration or Launch the instance defined.

    +
    +Step 7: Review the Instance Launch +

    Figure 6: Step 7: Review the Instance Launch

    +
    +
      +
    1. Select the Launch button. A dialog box appears, as shown in +figure 7, asking you to +Select an existing key pair or create a new pair.

      +
      +Select an existing key pair or create a new pair +

      Figure 7: Select an existing key pair or create a new pair

      +
      +
        +
      1. Select the Create a new key pair option.

        +
      2. +
      3. For the Key pair name field, enter AWSClearTestKey.

        +
      4. +
      5. Select the Download Key Pair button to download the +AWSClearTestKey.pem to your browser’s defined +Downloads directory.

        +
      6. +
      7. When the file finishes downloading, select the +Launch Instances button to proceed to the +Launch Status menu shown in figure 8.

        +
        +Launch Status +

        Figure 8: Launch Status

        +
        +
      8. +
      +
    2. +
    3. Once the Launch Status page changes to what is shown in +figure 9, select the View Instances button to view your +Instances dashboard.

      +
      +View Instance +

      Figure 9: View Instance

      +
      +
    4. +
    +
  10. +
+
+
+

Connect to your Clear Linux OS Basic instance

+

Your Instances Dashboard is shown in figure 10 with the new Clear Linux OS +OS basic instance already selected and in the running state. If there are +other instances available, they are also listed but not selected.

+
+Instance Dashboard +

Figure 10: Instance Dashboard

+
+
    +
  1. To connect to your running instance, click the Connect button +located at the top of your dashboard. AWS brings up the pop-up dialog +box shown in figure 11 describing how to connect to your running instance.
  2. +
+
+Connect to Your Instance +

Figure 11: Connect to Your Instance

+
+
    +
  1. Open a terminal on your system. You should be in your $HOME +directory.

    +
  2. +
  3. Copy the previously downloaded keyfile from the Downloads +directory to the current directory.

    +
    cp Downloads/AWSClearTestKey.pem .
    +
    +
    +
  4. +
  5. Change the attributes of the AWSClearTestKey.pem using the +chmod command as instructed in the dialog box shown in figure +11.

    +
    chmod 400 AWSClearTestKey.pem
    +
    +
    +
  6. +
  7. Copy the text highlighted in the Example: section that is +shown in figure 11. Paste the copied text into your +terminal, change the text before the @ sign to the username clear, and +press the Enter key to execute the command.

    +
    ssh -i "AWSClearTestKey.pem" clear@ec2-34-209-39-184.us-west-2.compute.amazonaws.com
    +
    +
    +
  8. +
  9. A message appears on the terminal stating the authenticity of the host can’t +be established and prompts you with the message:

    +
    The authenticity of host 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com (34.209.39.184)' can't be established.
    +ECDSA key fingerprint is SHA256:LrziT5Ar66iBTfia8qmiIsrfBUm/UGam76U8bDR6yJc.
    +Are you sure you want to continue connecting (yes/no)?
    +
    +
    +
  10. +
  11. Type yes and hit the Enter key. Another warning is printed to the +terminal and you are now at the command prompt of your new Clear Linux OS instance.

    +
    Warning: Permanently added 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com,34.209.39.184' (ECDSA) to the list of known hosts.
    +clear@clr-96a8565d0ca54b0c80364a1e5e7b0f88 ~ $
    +
    +
    +
  12. +
+
+
+

Update the Clear Linux OS instance

+

Run the sudo swupd update command to update the operating +system as shown in figure 12:

+
+sudo swupd update +

Figure 12: sudo swupd update

+
+

In this example we updated from version 18940 to 19100.

+
+
+

Stop the Clear Linux OS instance

+

When you are finished using your AWS Clear Linux OS instance you need to stop it using +the Instances dashboard to stop accruing charges. Complete the +following steps from the Instances dashboard to stop your AWS Clear Linux OS +instance from running.

+
    +
  1. Select the Actions button to bring up a pull-down menu.

    +
  2. +
  3. Select the Instance State menu item to expand the options.

    +
  4. +
  5. Select Stop menu item to shut down the running instance.

    +

    Figure 13 illustrates these steps.

    +
    +Stop Instance +

    Figure 13: Stop Instance

    +
    +
  6. +
  7. A pop-up dialog box appears warning you that any ephemeral storage of +your instance will be lost. Select the Yes, Stop button to stop +your Clear Linux OS instance.

    +
  8. +
+
+Stop Instances +

Figure 14: Stop Instances

+
+

Congratulations! You are up and running with Clear Linux OS on AWS. To see what you +can do with your Clear Linux OS instance, visit our tutorials +section for examples on using your Clear Linux OS system.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/azure.html b/tutorials/azure.html new file mode 100644 index 00000000..f9331379 --- /dev/null +++ b/tutorials/azure.html @@ -0,0 +1,1446 @@ + + + + + + + + + + + Run Clear Linux* OS using Microsoft Azure CLI 2.0 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Clear Linux* OS using Microsoft Azure CLI 2.0

+

Clear Linux* OS is available for you to use in the Microsoft* Azure* marketplace and +is offered with three different images, also known as a +SKU.

+
    +
  • Clear Linux OS Basic - This SKU consists of a bare-bones system which can be used as a +starting point for those wanting to explore and build out a system with +additional software bundles of their choosing.
  • +
  • Clear Linux OS Containers - This SKU comes with the containers-basic software bundle +already installed.
  • +
  • Clear Linux OS Machine-learning - This SKU comes pre-loaded with popular open source +tools for developing machine learning applications.
  • +
+

You can access these images directly from your MS Azure dashboard through the +Azure portal or by using the MS Azure CLI +2.0. If you do not already have an account set up with MS Azure, you can sign +up for a MS Azure free account to access the Clear Linux OS +VM images.

+

The Azure CLI offers the ability to create and manage resources in MS Azure +from the command line. In this tutorial you learn to:

+
    +
  1. Install the latest MS Azure CLI on your Clear Linux OS machine.
  2. +
  3. Log into MS Azure using the CLI 2.0 interface.
  4. +
  5. Create a MS Azure resource group.
  6. +
  7. Locate the Clear Linux OS images.
  8. +
  9. Create and log into the Clear Linux OS virtual machine.
  10. +
  11. Stop and deallocate the Clear Linux OS VM and resources.
  12. +
+

To use the MS Azure CLI 2.0 on your Clear Linux OS system, your system must have the +following packages installed:

+
    +
  • Python 2.7 or later
  • +
  • libffi
  • +
  • OpenSSL 1.0.2
  • +
+

You can check to see what versions you have installed on your system by +running the individual commands as follows:

+
python --version
+
+
+
python 2.7.12
+
+
+
openssl version
+
+
+
OpenSSL 1.0.2n 7 Dec 2017
+
+
+
ls -l /usr/lib64/libffi*
+
+
+
lrwxrwxrwx 1 root root    15 Jan 12  2017 /usr/lib64/libffi.so.6 -> libffi.so.6.0.4
+-rwxr-xr-x 1 root root 38792 Jan 12  2017 /usr/lib64/libffi.so.6.0.4
+
+
+

If you do not have these packages installed on your Clear Linux OS system, install the +sysadmin-basic software bundle using the swupd command:

+
sudo swupd bundle-add sysadmin-basic
+
+
+
+

Note

+

These instructions are for installing the MS Azure CLI 2.0 tools on a Clear Linux OS +system. If you are installing the CLI on another platform, follow the +instructions in the MS Azure Install Azure CLI tutorial for your +specific operating system.

+
+
+

Install MS Azure CLI 2.0 on Clear Linux OS

+
    +
  1. To install the MS Azure CLI 2.0 on Clear Linux OS, use the curl command as +follows:

    +
    curl -L https://aka.ms/InstallAzureCli | bash
    +
    +
    +

    If you get an error message from curl related to the -L +parameter or an error message is generated that includes the text “Object +Moved”, use the full URL instead of the aka.ms redirect address:

    +
    curl https://azurecliprod.blob.core.windows.net/install | bash
    +
    +
    +
  2. +
  3. The installation script begins and prompts you several times during +execution for information.

    +
    +

    Note

    +

    The console output from the script displays your username instead of the +[user] variable shown on this tutorial.

    +
    +
    ===> In what directory would you like to place the install? (leave blank to use '/home/[user]/lib/azure-cli'):
    +
    +
    +

    Press the Enter key to accept the default or you can chose another +directory to install the MS Azure CLI 2.0 tools into.

    +
    ===> In what directory would you like to place the 'az' executable? (leave blank to use '/home/[user]/bin'):
    +
    +
    +

    Press the Enter key to accept the default or you can chose another +directory to install the az executable in.

    +
  4. +
  5. The installation downloads and builds all required tools and when complete +prompts you with:

    +
    ===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): Y
    +
    +
    +

    Type Y and press the Enter key to allow this modification.

    +
    ===> Enter a path to an rc file to update (leave blank to use '/home/[user]/.bashrc'):
    +
    +
    +

    Press the Enter key to accept the default or enter the pathname to +your .bashrc file. The installation completes with the final output +shown below:

    +
    -- Backed up '/home/[user].bashrc' to '/home/[user]/.bashrc.backup'
    +-- Tab completion set up complete.
    +-- If tab completion is not activated, verify that '/home/[user]/.bashrc' is sourced by your shell.
    +--
    +-- ** Run `exec -l $SHELL` to restart your shell. **
    +--
    +-- Installation successful.
    +-- Run the CLI with /home/[user]/bin/az --help
    +
    +
    +
  6. +
  7. The installation program finishes and you must restart your shell for +the changes to take effect. When the installation is successful, run the +following command to restart your shell.

    +
    exec -l $SHELL
    +
    +
    +
  8. +
+

With the MS Azure CLI 2.0 executable successfully built and installed, run +the az command.

+
az
+
+
+

The output from the az command is shown below:

+
     /\
+    /  \    _____   _ _ __ ___
+   / /\ \  |_  / | | | \'__/ _ \
+  / ____ \  / /| |_| | | |  __/
+ /_/    \_\/___|\__,_|_|  \___|
+
+
+Welcome to the cool new Azure CLI!
+
+Here are the base commands:
+
+    account          : Manage Azure subscription information.
+    acr              : Manage Azure Container Registries.
+    acs              : Manage Azure Container Services.
+    ad               : Synchronize on-premises directories and manage Azure Active Directory
+                       resources.
+    advisor          : (PREVIEW) Manage Azure Advisor.
+    aks              : Manage Kubernetes clusters.
+    appservice       : Manage App Service plans.
+    backup           : Commands to manage Azure Backups.
+    batch            : Manage Azure Batch.
+    batchai          : Batch AI.
+    billing          : Manage Azure Billing.
+    cdn              : Manage Azure Content Delivery Networks (CDNs).
+    cloud            : Manage registered Azure clouds.
+    cognitiveservices: Manage Azure Cognitive Services accounts.
+    configure        : Display and manage the Azure CLI 2.0 configuration. This command is
+                       interactive.
+    consumption      : Manage consumption of Azure resources.
+    container        : (PREVIEW) Manage Azure Container Instances.
+    cosmosdb         : Manage Azure Cosmos DB database accounts.
+    disk             : Manage Azure Managed Disks.
+    dla              : (PREVIEW) Manage Data Lake Analytics accounts, jobs, and catalogs.
+    dls              : (PREVIEW) Manage Data Lake Store accounts and filesystems.
+    eventgrid        : Manage Azure Event Grid topics and subscriptions.
+    extension        : Manage and update CLI extensions.
+    feature          : Manage resource provider features.
+    feedback         : Loving or hating the CLI?  Let us know!
+    find             : Find Azure CLI commands.
+    functionapp      : Manage function apps.
+    group            : Manage resource groups and template deployments.
+    image            : Manage custom virtual machine images.
+    interactive      : Start interactive mode.
+    iot              : (PREVIEW) Manage Internet of Things (IoT) assets.
+    keyvault         : Safeguard and maintain control of keys, secrets, and certificates.
+    lab              : Manage Azure DevTest Labs.
+    lock             : Manage Azure locks.
+    login            : Log in to Azure.
+    logout           : Log out to remove access to Azure subscriptions.
+    managedapp       : Manage template solutions provided and maintained by Independent Software
+                       Vendors (ISVs).
+    monitor          : Manage the Azure Monitor Service.
+    mysql            : Manage Azure Database for MySQL servers.
+    network          : Manage Azure Network resources.
+    policy           : Manage resource policies.
+    postgres         : Manage Azure Database for PostgreSQL servers.
+    provider         : Manage resource providers.
+    redis            : Access to a secure, dedicated Redis cache for your Azure applications.
+    reservations     : Manage Azure Reservations.
+    resource         : Manage Azure resources.
+    role             : Manage user roles for access control with Azure Active Directory and service
+                       principals.
+    sf               : Manage and administer Azure Service Fabric clusters.
+    snapshot         : Manage point-in-time copies of managed disks, native blobs, or other
+                       snapshots.
+    sql              : Manage Azure SQL Databases and Data Warehouses.
+    storage          : Manage Azure Cloud Storage resources.
+    tag              : Manage resource tags.
+    vm               : Provision Linux or Windows virtual machines.
+    vmss             : Manage groupings of virtual machines in an Azure Virtual Machine Scale Set
+                       (VMSS).
+    webapp           : Manage web apps.
+
+
+
+
+

Log into your Microsoft Azure account

+
    +
  1. With the az command properly installed and functional, login to +your MS Azure account using the az login command shown below:

    +
    az login
    +
    +
    +

    The output from this command is:

    +
    To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code BQ9MG442B to authenticate.
    +
    +
    +
  2. +
  3. Open your browser and enter the page https://aka.ms/devicelogin as shown +in figure 1:

    +
    +Microsoft Device Login +

    Figure 1: Microsoft Device Login

    +
    +
  4. +
  5. Enter the code BQ9MG442B to authenticate your device as shown in figure +2. The code BQ9MG442B is a random authentication code generated for each +session login and will be different each time you log into MS Azure using +the az login command.

    +
    +Microsoft Device Login - Azure CLI +

    Figure 2: Microsoft Device Login - Azure CLI

    +
    +
  6. +
  7. Once you enter the authentication code, the website changes to a screen to +enter your existing Microsoft Azure credentials.

    +
  8. +
  9. Log in with your existing MS Azure account credentials. Once complete, the +browser screen changes again as shown in figure 3. The screen shows you +have signed into the Microsoft Cross-platform Command Line Interface +application on your device and you can close the window.

    +
    +Microsoft Azure Cross-platform CLI +

    Figure 3: Microsoft Azure Cross-platform CLI

    +
    +
  10. +
+

The MS Azure CLI 2.0 interface is now active using your existing MS Azure +account credentials.

+
+
+

Create a MS Azure resource group

+

To learn more about MS Azure resource groups, visit the +Azure Resource Manager overview for an overview and detailed description +of resources within MS Azure.

+
    +
  1. To create our new resource group, run the az group create ... +command shown below to create a resource group named ClearResourceGroup +using the -n parameter and locate it in the westus region using the +-l parameter.

    +
    az group create -n ClearResourceGroup -l westus
    +
    +
    +
  2. +
  3. When the command has completed, the output from this command is similar to +the following:

    +
    {
    +  "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup",
    +  "location": "westus",
    +  "managedBy": null,
    +  "name": "ClearResourceGroup",
    +  "properties": {
    +    "provisioningState": "Succeeded"
    +  },
    +  "tags": null
    +}
    +
    +
    +
  4. +
+
+
+

Create and log into the Clear Linux OS virtual machine

+

For this tutorial, we are using the Clear Linux OS Basic SKU for our VM.

+
    +
  1. To locate the available Clear Linux OS Basic VM SKU images in the MS Azure +marketplace, run the az vm image ... command:

    +
    az vm image list --offer clear-linux --sku basic --all --output table
    +
    +
    +

    This command may take some time to finish. The output lists all available +Clear Linux OS Basic images available in the Microsoft Azure marketplace as shown +below:

    +
    Offer           Publisher            Sku               Urn                                                            Version
    +--------------  -------------------  ----------------  -------------------------------------------------------------  ---------
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:15780.0.0             15780.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:15960.0.0             15960.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16050.0.0             16050.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16150.0.0             16150.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16500.0.0             16500.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16810.0.0             16810.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:18080.0.0             18080.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:18620.0.0             18620.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:18860.0.0             18860.0.0
    +
    +
    +
    +

    Note

    +

    The output list shows current offerings. New versions are added to the +MS Azure marketplace all the time. To reference the latest version of an +image, you can use the version label latest when specifying an image.

    +
    +
  2. +
  3. The information shown in the Urn column lists the +Publisher:Offer:Sku:Version for each image available and this is the +information we want to create the Clear Linux OS Basic VM. Since we are creating a +Clear Linux OS Basic VM, highlight the clear-linux-project:clear-linux-os:basic: +string and copy it to your clipboard. Use the label +latest instead of referencing a specific version.

    +
  4. +
  5. Create the new Clear Linux OS Basic VM. Run the az vm create ... +command using the URN :clear-linux-project:clear-linux-os:basic:latest +that we copied to the clipboard on the previous step.

    +
    az vm create --resource-group ClearResourceGroup --name ClearVM --image clear-linux-project:clear-linux-os:basic:latest --generate-ssh-keys
    +
    +
    +
    +

    Note

    +

    If you have already defined your public/private SSH key pair and they +are stored in your $HOME/.ssh directory, you do not need to +include the –generate-ssh-keys option.

    +
    +

    Your output from this command will look similar to this output, where +[user] is your user name:

    +
    SSH key files '/home/[user]/.ssh/id_rsa' and '/home/[user]/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage, back up your keys to a safe location.
    +
    +running...
    +
    +{
    +  "fqdns": "",
    +  "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup/providers/Microsoft.Compute/virtualMachines/ClearVM",
    +  "location": "westus",
    +  "macAddress": "00-0D-3A-37-C7-59",
    +  "powerState": "VM running",
    +  "privateIpAddress": "10.0.0.4",
    +  "publicIpAddress": "13.91.4.245",
    +  "resourceGroup": "ClearResourceGroup",
    +  "zones": ""
    +}
    +
    +
    +

    Take note of the public IP address from the output.

    +
  6. +
  7. Login into the new Clear Linux OS Basic VM, run the ssh command with the +public IP address obtained from the previous step as shown:

    +
    ssh [user]@13.91.4.245
    +
    +
    +

    You may see the following message about the authenticity of the host. If +this appears, type yes to proceed connecting to your new Clear Linux OS VM.

    +
    The authenticity of host '13.91.4.245 (13.91.4.245)' can't be established.
    +RSA key fingerprint is SHA256:{unique-number}.
    +Are you sure you want to continue connecting (yes/no)? yes
    +Warning: Permanently added '13.91.4.245' (RSA) to the list of known hosts.
    +
    +[user]@ClearVM ~ $
    +
    +
    +

    You are now logged into your new Clear Linux OS VM as [user], where [user] is your +user name. To check which software bundles are included with +this VM image, run the sudo swupd bundle-list command inside the VM:

    +
    sudo swupd bundle-list
    +
    +
    +

    The output shown should be similar to:

    +
    swupd-client bundle list 3.14.1
    +   Copyright (C) 2012-2017 Intel Corporation
    +
    +bootloader
    +editors
    +kernel-hyperv
    +network-basic
    +openssh-server
    +os-cloudguest-azure
    +os-core
    +os-core-update
    +perl-basic
    +python-basic
    +python3-basic
    +storage-utils
    +sysadmin-basic
    +Current OS version: 19600
    +
    +
    +

    When you are finished using your new Clear Linux OS VM, type exit to close +the SSH terminal and logout.

    +
  8. +
+
+
+

Stop and deallocate the Clear Linux OS VM and resources

+

When you finish using your new Clear Linux OS instance, you must stop the VM and +deallocate the resources in your resource group. If you only stop a VM, the OS +image shuts down but the resources associated with it in your resource group +remain allocated and incurring charges. For instance, if you stop and then +later start the VM using the az vm start... without deallocating +the resources, the IP address is retained and you can access the VM using that +same IP address. To release the resources associated with the VM and stop +incurring charges for them, you must deallocate the resources as well.

+
    +
  1. At the command prompt, enter the az vm stop... command as +follows:

    +
    az vm stop --resource-group ClearResourceGroup --name ClearVM
    +
    +
    +

    This will stop the VM and then output text similar to:

    +
    {
    +  "endTime": "2017-12-13T23:04:02.346676+00:00",
    +  "error": null,
    +  "name": "{unique-name}",
    +  "startTime": "2017-12-13T23:03:59.018536+00:00",
    +  "status": "Succeeded"
    +}
    +
    +
    +
  2. +
  3. Once the VM stops, deallocate the VM resources to stop incurring +charges for the Clear Linux OS instance. Enter the following command:

    +
    az vm deallocate --resource-group ClearResourceGroup --name ClearVM
    +
    +
    +
  4. +
+

Congratulations!

+

You are up and running with Clear Linux OS on MS Azure using the Azure +CLI 2.0 command line tools.

+
+
+

Next steps

+

To see use cases you can fulfill with your Clear Linux OS instance, visit our +tutorials section.

+

For additional information visit the Clear Linux OS +Azure Partner Mini Case Study and the Azure Partner Datasheet.

+

To learn more about the MS Azure CLI 2.0 tool and options that are available, +visit the MS Azure documentation and tutorials website.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/docker/docker.html b/tutorials/docker/docker.html new file mode 100644 index 00000000..21667c73 --- /dev/null +++ b/tutorials/docker/docker.html @@ -0,0 +1,1191 @@ + + + + + + + + + + + Run Docker* on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Docker* on Clear Linux* OS

+

Clear Linux* OS supports multiple containerization platforms, including a Docker +solution. Clear Linux OS has many unique features including a minimal default +installation, which makes it compelling to use as a host for container +workloads, management, and orchestration.

+

This tutorial covers:

+ +
+

Note

+

This tutorial focuses on the installaton of the Docker ecosystem. +If you want to use Clear Linux OS as a Docker container image, refer to the +official Clear Linux OS container image +published on Docker* Hub +and our guide to Build a custom Clear Linux* OS based Docker container image.

+
+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, follow +the bare metal installation instructions.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+

Additionally, you should have:

+
    +
  • A basic understanding of Linux* and Docker.
  • +
  • Clear Linux OS environment that has transparent network access to the Internet. +If you are behind a HTTP proxy server, in a corporate setting for example, +please refer to the Docker proxy instructions .
  • +
+
+
+

Install the containers-basic bundle

+

Software in Clear Linux OS is offered in the form of bundles to provide a +complete function. The containers-basic provides all the required software +packages to run Docker images as containers.

+
    +
  1. First, install the containers-basic bundle by running this +swupd command:

    +
    sudo swupd bundle-add containers-basic
    +
    +
    +
  2. +
  3. Start the Docker daemon through systemd manager by running this command:

    +
    sudo systemctl start docker
    +
    +
    +

    If you want Docker to start automatically on boot, enable the +systemd service by running this command:

    +
    sudo systemctl enable docker
    +
    +
    +
  4. +
  5. Finally, verify docker has been installed by running this +command and checking the version output for both client and server:

    +
    sudo docker version
    +
    +
    +
  6. +
+

Congratulations! At this point, you have a working installation of Docker +on Clear Linux OS. You are ready to start using container images on your system.

+
+
+

Integration with Kata Containers* (optional)

+

Kata Containers, is an open source project aiming to increase security +of containers by using a hardware-backed virtual machine container runtime +rather than software namespace containers that are provided by the standard +Docker runc runtime.

+

Clear Linux OS provides easy integration of the kata-runtime with Docker. +More information on installing and using the kata-runtime may be found at Install Kata Containers*.

+
+

Note

+

The remaining sections of this tutorial are standard to Docker setup +and configuration. If you are familiar with Docker basics, you do not +need to continue reading. The following sections are provided here for +sake of completeness.

+
+
+
+

Additional Docker configuration

+

Perform additional Docker daemon configuration via a configuration file +typically located at /etc/docker/daemon.json. Clear Linux OS features a +Stateless system so the configuration file daemon.json does +NOT exist by default.

+
    +
  1. Create the daemon.json by running this command:

    +
    sudo touch /etc/docker/daemon.json
    +
    +
    +
    +

    Note

    +

    Refer to the Docker documentation on daemon configuration for the +full list of available configuration options and examples.

    +
    +
  2. +
  3. For production systems, we follow Docker’s recommendation to use the +OverlayFS storage driver overlay2, shown below:

    +
    {
    +   "storage-driver": "overlay2"
    +}
    +
    +
    +
    +

    Note

    +

    A testing version is found in Docker Device Mapper storage driver. +If using this storage driver, a warning message may appear: “usage of +loopback devices is strongly discouraged for production use”.

    +
    +
  4. +
  5. Save and close daemon.json.

    +
  6. +
  7. Once you’ve made any required changes, be sure to restart the +Docker daemon through systemd manager by running this command:

    +
    sudo systemctl restart docker
    +
    +
    +
  8. +
+
+
+

Pulling and running an image from Docker Hub

+

Docker Hub is a publically available container image repository which +comes preconfigured with Docker. In the example below we will pull and run +an the official Docker image for nginx*, an open source reverse proxy server.

+
    +
  1. First, pull a container image from Docker Hub using the +docker pull command. Download the latest nginx* Docker +container image by running this command:

    +
    sudo docker pull nginx
    +
    +
    +
  2. +
  3. Create and launch a new container using the docker run +command. Launch a nginx container by running this command:

    +
    sudo docker run --name test-nginx -d -p 8080:80 nginx
    +
    +
    +
    +

    Note

    +

    Below is an explanation of switches used in the command above. For +detailed docker run switches and syntax, refer to the +Docker Documentation .

    +
      +
    • The –name switch lets you provide a friendly name to +target the container for future operations
    • +
    • The -d switch launches the container in the background
    • +
    • The -p switch allows the container’s HTTP port (80) to be +accessible from the Clear Linux OS host on port 8080
    • +
    +
    +
  4. +
  5. You can access the Welcome to Nginx! splash page running in the container +by browsing to http://127.0.0.1:8080 or by running this curl +command from your Clear Linux OS machine:

    +
    curl 127.0.0.1:8080
    +
    +
    +
  6. +
  7. Finally, stop and delete the nginx container by running the +docker stop and docker rm commands.

    +
    sudo docker stop test-nginx
    +sudo docker rm test-nginx
    +
    +
    +
  8. +
+

Congratulations! At this point, you have successfully pulled a nginx +container image from Docker Hub and have run an example container.

+
+
+

Creating a Docker swarm cluster

+

Clusters of Docker hosts are referred to as swarms.

+

The process in this tutorial can be repeated to install Docker on multiple +Clear Linux OS hosts with the intent to form a Docker swarm cluster.

+

The Docker documentation on swarm key concepts and +Docker documentation on creating a swarm can be referenced +for further instructions on setting up a swarm.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/flatpak/flatpak.html b/tutorials/flatpak/flatpak.html new file mode 100644 index 00000000..c220cee3 --- /dev/null +++ b/tutorials/flatpak/flatpak.html @@ -0,0 +1,1066 @@ + + + + + + + + + + + Use Flatpak* to install applications on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use Flatpak* to install applications on Clear Linux* OS

+

This tutorial provides all the required steps to install Flatpak as well as +downloading, installing, and running LibreOffice* on Clear Linux* OS.

+

Please visit the Flatpak website for more information about Flatpak and +how to use it. You can also download it here.

+
+

Before you begin

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +our bare metal installation guide.

+
+

Install Flatpak on your host system

+

Flatpak is included as part of the bundle desktop. To install the +application, log in to your user account and enter the following command:

+
sudo swupd bundle-add desktop
+
+
+
+
+

Install and run the LibreOffice Flatpak image

+

Application developers have the option to bundle their applications using +Flatpak to allow the installation of a single distribution of their +application on different distributions of Linux, including Clear Linux OS. +Flatpak provides a list of applications available through Flathub.

+

Clear Linux OS enables the Flathub repository by default.

+
+

Installing using gnome software

+

All you need to do is to launch gnome software, search for the LibreOffice +app, and click the install button.

+
+install libreoffice step by step +

Figure 1: Installing LibreOffice using gnome-software

+
+
+
+

Installing using the command line

+

Open the gnome-terminal and type the following command to install the +LibreOffice app.

+
flatpak install --user flathub org.libreoffice.LibreOffice
+Installing in user:
+org.libreoffice.LibreOffice/x86_64/stable        flathub 2aff77bd5cf1
+  permissions: ipc, network, pulseaudio, wayland, x11, dri
+  file access: host, xdg-run/dconf
+  dbus access: ca.desrt.dconf, org.gtk.vfs.*
+  dbus ownership: org.libreoffice.LibreOfficeIpc0
+org.libreoffice.LibreOffice.Locale/x86_64/stable flathub 924157b3b009
+Is this ok [y/n]: y
+Installing for user: org.libreoffice.LibreOffice/x86_64/stable from flathub
+[####################] 403 metadata, 4661 content objects fetched; 222574 KiB transferred in 99 seconds
+Now at 2aff77bd5cf1.
+Installing for user: org.libreoffice.LibreOffice.Locale/x86_64/stable from flathub
+[####################] 10 metadata, 71 content objects fetched; 1013 KiB transferred in 3 seconds
+Now at 924157b3b009.
+
+
+
+
+
+

Launch LibreOffice

+

A new set of icons will appear in your Gnome applications list titled LibreOffice. To +execute the application, highlight the application and click on the LibreOffice icon. +LibreOffice will start normally.

+
+Opening LibreOffice app +

Figure 2: Select LibreOffice app

+
+
+

Using the command line

+
flatpak run org.libreoffice.LibreOffice
+
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/fmv.html b/tutorials/fmv.html new file mode 100644 index 00000000..8e0db2cf --- /dev/null +++ b/tutorials/fmv.html @@ -0,0 +1,1284 @@ + + + + + + + + + + + Use the function multi-version patch generator — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use the function multi-version patch generator

+

CPU architectures often gain interesting new instructions as they evolve but +application developers find it difficult to take advantage of those +instructions. The reluctance to lose backward-compatibility is one of the +main roadblocks slowing developers from using advancements in newer computing +architectures. FMV, which first appeared +in GCC 4.8, is a way to have multiple implementations of a function, each +using a different architecture specialized instruction-set extensions. GCC +6 introduces changes to FMV to make it even easier to bring architecture- +based optimizations to the application code.

+

In this tutorial we will use FMV on general code and on +FFT library code (FFTW). Upon completing the +tutorial, you will be able to use this technology on your code and use the +libraries to deploy architecture-based optimizations to your application code.

+
+

Install and configure a Clear Linux OS host on bare metal

+

First, follow our guide to Install Clear Linux* OS from the live desktop. Once the bare +metal installation and initial configuration are complete, add the +desktop-dev bundle to the system. desktop-dev: contains the necessary +development tools like GCC and Perl*.

+

To install the bundles, run the following command in the $HOME +directory:

+
sudo swupd bundle-add desktop-dev
+
+
+
+
+

Detect loop vectorization candidates

+

Now, we need to detect the loop vectorization candidates to be cloned for +multiple platforms with FMV. As an example, we will use the following +simple C code:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
 #include <stdio.h>
+ #include <stdlib.h>
+ #include <sys/time.h>
+ #define MAX 1000000
+
+ int a[256], b[256], c[256];
+
+ void foo(){
+     int i,x;
+     for (x=0; x<MAX; x++){
+         for (i=0; i<256; i++){
+             a[i] = b[i] + c[i];
+         }
+     }
+ }
+
+
+ int main(){
+     foo();
+     return 0;
+ }
+
+
+

Save the example code as example.c in the current directory and build +with the following flags:

+
gcc -O3  -fopt-info-vec  example.c -o example
+
+
+

The build generates the following output:

+
example.c:11:9: note: loop vectorized
+example.c:11:9: note: loop vectorized
+
+
+

The output shows that line 11 is a good candidate for vectorization:

+
for (i=0; i<256; i++){
+    a[i] = b[i] + c[i];
+
+
+
+
+

Generate the FMV patch

+

To generate the FMV patch with the make-fmv-patch project, we +must clone the project and generate a log file with the loop vectorized +information:

+
git clone https://github.com/clearlinux/make-fmv-patch.git
+gcc -O3  -fopt-info-vec  example.c -o example &> log
+
+
+

To generate the patch files, execute:

+
perl ./make-fmv-patch/make-fmv-patch.pl log .
+
+
+

The make-fmv-patch.pl script takes two arguments: <buildlog> and +<sourcecode>. Replace <buildlog> and <sourcecode> with the proper +values and execute:

+
perl make-fmv-patch.pl <buildlog> <sourcecode>
+
+
+

The command generates the following example.c.patch patch:

+
--- ./example.c 2017-09-27 16:05:42.279505430 +0000
++++ ./example.c~    2017-09-27 16:19:11.691544026 +0000
+@@ -5,6 +5,7 @@
+
+ int a[256], b[256], c[256];
+
++__attribute__((target_clones("avx2","arch=atom","default")))
+ void foo(){
+     int i,x;
+     for (x=0; x<MAX; x++){
+
+
+

We recommend you use the make-fmv-patch script to add the attribute +generating the target clones on the function foo. Thus, we can have the +following code:

+
#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#define MAX 1000000
+
+int a[256], b[256], c[256];
+
+__attribute__((target_clones("avx2","arch=atom","default")))
+void foo(){
+    int i,x;
+    for (x=0; x<MAX; x++){
+        for (i=0; i<256; i++){
+            a[i] = b[i] + c[i];
+        }
+    }
+}
+
+
+int main(){
+    foo();
+    return 0;
+}
+
+
+

Changing the value of the $avx2 variable, we can change the target +clones when adding the patches or in the make-fmv-patch.pl script:

+
my $avx2 = '__attribute__((target_clones("avx2","arch=atom","default")))'."\n";
+
+
+

Compile the code again with FMV and add the option to analyze the objdump +log:

+
gcc -O3 example.c -o example -g
+objdump -S example | less
+
+
+

You can see the multiple clones of the foo function:

+
foo
+foo.avx2.0
+foo.arch_atom.1
+
+
+

The cloned functions use AVX2 registers and vectorized instructions. To +verify, enter the following commands:

+
vpaddd (%r8,%rax,1),%ymm0,%ymm0
+vmovdqu %ymm0,(%rcx,%rax,1)
+
+
+
+
+

FFT project example using FFTW

+

To follow the same approach with a package like FFTW, we must use the +-fopt-info-vec flag to get a build log file similar to:

+
~/make-fmv-patch/make-fmv-patch.pl results/build.log fftw-3.3.6-pl2/
+
+patching fftw-3.3.6-pl2/libbench2/verify-lib.c @ lines (36 114 151 162 173 195 215 284)
+patching fftw-3.3.6-pl2/tools/fftw-wisdom.c @ lines (150)
+patching fftw-3.3.6-pl2/libbench2/speed.c @ lines (26)
+patching fftw-3.3.6-pl2/tests/bench.c @ lines (27)
+patching fftw-3.3.6-pl2/libbench2/util.c @ lines (181)
+patching fftw-3.3.6-pl2/libbench2/problem.c @ lines (229)
+patching fftw-3.3.6-pl2/tests/fftw-bench.c @ lines (101 147 162 249)
+patching fftw-3.3.6-pl2/libbench2/mp.c @ lines (79 190 215)
+patching fftw-3.3.6-pl2/libbench2/caset.c @ lines (5)
+patching fftw-3.3.6-pl2/libbench2/verify-r2r.c @ lines (44 187 197 207 316 333 723)
+
+
+

For example, the fftw-3.3.6-pl2/tools/fftw-wisdom.c.patch file +generates the following patches:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
    --- fftw-3.3.6-pl2/libbench2/verify-lib.c   2017-01-27 21:08:13.000000000 +0000
+    +++ fftw-3.3.6-pl2/libbench2/verify-lib.c~  2017-09-27 17:49:21.913802006 +0000
+    @@ -33,6 +33,7 @@
+
+     double dmax(double x, double y) { return (x > y) ? x : y; }
+
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+     static double aerror(C *a, C *b, int n)
+     {
+         if (n > 0) {
+    @@ -111,6 +112,7 @@
+    }
+
+    /* make array hermitian */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void mkhermitian(C *A, int rank, const bench_iodim *dim, int stride)
+    {
+         if (rank == 0)
+    @@ -148,6 +150,7 @@
+    }
+
+    /* C = A + B */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void aadd(C *c, C *a, C *b, int n)
+    {
+         int i;
+    @@ -159,6 +162,7 @@
+    }
+
+    /* C = A - B */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void asub(C *c, C *a, C *b, int n)
+    {
+         int i;
+    @@ -170,6 +174,7 @@
+    }
+
+    /* B = rotate left A (complex) */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void arol(C *b, C *a, int n, int nb, int na)
+    {
+         int i, ib, ia;
+    @@ -192,6 +197,7 @@
+         }
+    }
+
+
+

With these patches, we can select where to apply the FMV technology making +bringing architecture-based optimizations to application code even easier.

+

Congratulations!

+

You have successfully installed an FMV development environment on Clear Linux OS. +Furthermore, you used cutting edge compiler technology to improve the +performance of your application based on Intel Architecture technology and +profiling of the specific execution of your application.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/hadoop.html b/tutorials/hadoop.html new file mode 100644 index 00000000..bf2553d5 --- /dev/null +++ b/tutorials/hadoop.html @@ -0,0 +1,1218 @@ + + + + + + + + + + + Set up a single node cluster with Hadoop* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set up a single node cluster with Hadoop*

+

This tutorial walks you through the process of installing, configuring, and +running Apache* Hadoop on Clear Linux* OS. The Apache Hadoop software library is a +framework for distributed processing of large data sets across clusters of +computers using simple programming models. It is designed to scale up from +single servers to thousands of machines, with each machine offering local +computation and storage.

+
+

Prerequisites

+

Before following this tutorial, you should follow the +Install Clear Linux* OS from the live desktop to ensure you have installed Clear Linux OS.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+

For the purposes of this tutorial, we will install Hadoop in a single machine +running both the master and slave daemons.

+
+
+

Install Apache Hadoop

+

Apache Hadoop is included in the big-data-basic bundle. To install the +framework, enter the following command:

+
sudo swupd bundle-add big-data-basic
+
+
+
+
+

Configure Apache Hadoop

+
    +
  1. To create the configuration directory, enter the following command:

    +
    sudo mkdir /etc/hadoop
    +
    +
    +
  2. +
  3. Copy the defaults from /usr/share/defaults/hadoop to +/etc/hadoop with the following command:

    +
    $ sudo cp /usr/share/defaults/hadoop/* /etc/hadoop
    +
    +
    +
    +

    Note

    +

    Since Clear Linux OS is a stateless system, you should never modify the +files under the /usr/share/defaults directory. The software +updater will overwrite those files.

    +
    +
  4. +
+

Once all the configuration files are in /etc/hadoop, we must edit +them to fit our needs. The NameNode server is the master server. It manages +the namespace of the files system and regulates the clients’ access to files. +The first file we edit, /etc/hadoop/core-site.xml, informs the Hadoop +daemon where NameNode is running.

+

In this tutorial, our NameNode runs in our localhost. Follow these steps +to set it up correctly:

+
    +
  1. Open the /etc/hadoop/core-site.xml file using the editor of your +choice and modify the file as follows:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    +<configuration>
    +<property>
    +<name>fs.default.name</name>
    +<value>hdfs://localhost:9000</value>
    +</property>
    +</configuration>
    +
    +
    +
  2. +
  3. Edit the /etc/hadoop/hdfs-site.xml file. This file configures the +HDFS daemons. This configuration +includes the list of permitted and excluded data nodes and the size of +said blocks. In this example, we are setting the number of block +replication to 1 from the default of 3 as follows:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    +<configuration>
    +<property>
    +<name>dfs.replication</name>
    +<value>1</value>
    +</property>
    +<property>
    +<name>dfs.permission</name>
    +<value>false</value>
    +</property>
    +</configuration>
    +
    +
    +
  4. +
  5. Edit the /etc/hadoop/mapred-site.xml file. This file configures +all daemons related to MapReduce: JobTracker and TaskTrackers. With +MapReduce, Hadoop can process big amounts of data in multiple systems. In +our example, we set YARN as our +runtime framework for executing MapReduce jobs as follows:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    +<configuration>
    +<property>
    +<name>mapreduce.framework.name</name>
    +<value>yarn</value>
    +</property>
    +</configuration>
    +
    +
    +
  6. +
  7. Edit the /etc/hadoop/yarn-site.xml file. This file configures all +daemons related to YARN: ResourceManager and NodeManager. In our +example, we implement the mapreduce_shuffle service, which is the +default as follows:

    +
    <?xml version="1.0"?>
    +<configuration>
    +<property>
    +<name>yarn.nodemanager.aux-services</name>
    +<value>mapreduce_shuffle</value>
    +</property>
    +<property>
    +<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    +<value>org.apache.hadoop.mapred.ShuffleHandler</value>
    +</property>
    +</configuration>
    +
    +
    +
  8. +
+
+
+

Configure your SSH key

+
    +
  1. Create a SSH key. If you already have one, skip this step.

    +
    sudo ssh-keygen -t rsa
    +
    +
    +
  2. +
  3. Copy the key to your authorized keys.

    +
    sudo cat /root/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys
    +
    +
    +
  4. +
  5. Log into the localhost. If no password prompt appears, you are ready to +run the Hadoop daemons.

    +
    sudo ssh localhost
    +
    +
    +
  6. +
+
+
+

Run the Hadoop daemons

+

With all the configuration files properly edited, we are ready to start the +daemons.

+

When we format the NameNode server, it formats the meta-data related to +data nodes. Thus, all the information on the data nodes is lost and the nodes +can be reused for new data.

+
    +
  1. Format the NameNode server with the following command:

    +
    sudo hdfs namenode -format
    +
    +
    +
  2. +
  3. Start the DFS in NameNode and DataNodes with the following command:

    +
    sudo start-dfs.sh
    +
    +
    +
  4. +
  5. The console output should be similar to:

    +
    Starting namenodes on [localhost]
    +The authenticity of host 'localhost (::1)' can't be established.
    +ECDSA key fingerprint is
    +SHA256:97e+7TnomsS9W7GjFPjzY75HGBp+f1y6sA+ZFcOPIPU.
    +Are you sure you want to continue connecting (yes/no)?
    +
    +
    +

    Enter yes to continue.

    +
  6. +
  7. Start the YARN daemons ResourceManager and NodeManager with the +following command:

    +
    sudo start-yarn.sh
    +
    +
    +
  8. +
  9. Ensure everything is running as expected with the following command:

    +
    sudo jps
    +
    +
    +
  10. +
  11. The console output should be similar to:

    +
    22674 DataNode
    +26228 Jps
    +22533 NameNode
    +23046 ResourceManager
    +22854 SecondaryNameNode
    +23150 NodeManager
    +
    +
    +
  12. +
+
+
+

Run the MapReduce wordcount example

+
    +
  1. Create the input directory.

    +
    sudo hdfs dfs -mkdir -p /user/root/input
    +
    +
    +
  2. +
  3. Copy a file from the local file system to the HDFS.

    +
    sudo hdfs dfs -copyFromLocal local-file /user/root/input
    +
    +
    +
  4. +
  5. Run the wordcount example.

    +
    sudo hadoop jar /usr/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount input output
    +
    +
    +
  6. +
  7. Read output file “part-r-00000”. This file contains the number of times +each word appears in the file.

    +
    sudo hdfs dfs -cat /user/root/output/part-r-00000
    +
    +
    +
  8. +
+

Congratulations!

+

You successfully installed and setup a single node Hadoop cluster. +Additionally, you ran a simple wordcount example.

+

Your single node Hadoop cluster is up and running!

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/kata.html b/tutorials/kata.html new file mode 100644 index 00000000..056375ae --- /dev/null +++ b/tutorials/kata.html @@ -0,0 +1,1089 @@ + + + + + + + + + + + Install Kata Containers* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+
+
+

Install Kata Containers*

+

This tutorial describes how to install, configure, and run Kata Containers +on Clear Linux* OS. Kata Containers is an open source project developing a +lightweight implementation of VMs that offer the +speed of containers and the security of VMs.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, follow +the bare metal installation tutorial.

+

If you have Clear Containers installed on your Clear Linux OS system, then follow the +migrate Clear Containers to Kata Containers tutorial.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Install Kata Containers

+

Kata Containers is included in the containers-virt bundle. +To install the framework, enter the following command:

+
sudo swupd bundle-add containers-virt
+
+
+

Restart the Docker* and Kata Containers systemd services.

+
sudo systemctl daemon-reload
+sudo systemctl restart docker
+
+
+
+
+

Run Kata Containers

+
sudo docker run -ti busybox sh
+
+
+
+

Note

+

If you use a proxy server and your proxy environment variables are already +set, run the following commands as a shell script to configure Docker:

+
docker_service_dir="/etc/systemd/system/docker.service.d/"
+sudo mkdir -p "$docker_service_dir"
+cat <<EOF | sudo tee "$docker_service_dir/proxy.conf"
+[Service]
+Environment="HTTP_PROXY=$http_proxy"
+Environment="HTTPS_PROXY=$https_proxy"
+EOF
+echo "Reloading unit files and starting docker service"
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+sudo docker info
+
+
+
+

Congratulations!

+

You’ve successfully installed and set up Kata Containers on Clear Linux OS.

+
+
+

More information about Docker

+

Docker on Clear Linux OS provides a docker.service file to start the Docker +daemon. The daemon will use runc or kata-runtime depending on the +environment:

+
    +
  • If you are running Clear Linux OS on bare metal or on a VM with Nested +Virtualization activated, Docker uses kata-runtime as the +default runtime.
  • +
  • If you are running Clear Linux OS on a VM without Nested Virtualization, +Docker uses runc as the default runtime.
  • +
+

You do not need to manually configure the runtime for Docker, because +it automatically uses the runtime supported by the system.

+
+

Troubleshooting

+
    +
  • To change the Docker storage driver, see +Additional Docker configuration.

    +
  • +
  • For some Clear Linux OS versions before 27000, you may need to manually +configure Docker* to use Kata Containers by default.

    +

    To do so, enter:

    +
    sudo mkdir -p /etc/systemd/system/docker.service.d/
    +cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/50-runtime.conf
    +[Service]
    +Environment="DOCKER_DEFAULT_RUNTIME=--default-runtime kata-runtime"
    +EOF
    +
    +
    +
  • +
  • To check the version of Clear Linux OS on your system, enter:

    +
    sudo swupd info
    +
    +
    +
  • +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/kata_migration.html b/tutorials/kata_migration.html new file mode 100644 index 00000000..546f01fb --- /dev/null +++ b/tutorials/kata_migration.html @@ -0,0 +1,1055 @@ + + + + + + + + + + + Migrate Clear Containers to Kata Containers* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Migrate Clear Containers to Kata Containers*

+

Clear Containers and Kata Containers can co-exist in the same system. +Both can be installed through the containers-virt bundle. However, we +recommend that you migrate to Kata Containers because Clear Containers is no +longer maintained and will soon be deprecated on Clear Linux* OS.

+

This guide describes how to migrate to Kata Containers and assumes that:

+ +
+

Stop Clear Containers instances

+

As an unprivileged user, stop all running instances of Clear Containers:

+
for container in $(sudo docker ps -q); do sudo docker stop $container; done
+
+
+
+
+

Manually migrate customized configuration files

+

If you have made changes to your Clear Containers configuration, review +those changes and decide whether to manually apply those changes to your +Kata Containers configuration.

+

Make any required changes before continuing this process.

+
+

Note

+

You do not need to manually remove any Clear Containers packages.

+
+
+
+

Enable Kata Containers as default

+
    +
  1. Configure Docker to use the Kata Containers runtime by default.

    +
    sudo mkdir -p /etc/systemd/system/docker.service.d/
    +cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/51-runtime.conf
    +[Service]
    +Environment="DOCKER_DEFAULT_RUNTIME=--default-runtime kata-runtime"
    +EOF
    +
    +
    +
  2. +
  3. Restart the Docker systemd services.

    +
    sudo systemctl daemon-reload
    +sudo systemctl restart docker
    +
    +
    +
  4. +
  5. Verify Docker is using Kata Containers.

    +
    sudo docker info | grep -i 'default runtime'
    +Default Runtime: kata-runtime
    +
    +
    +
  6. +
+
+
+

Run Kata Containers

+

Use the following command:

+
sudo docker run -ti busybox sh
+
+
+

Congratulations!

+

You’ve successfully migrated from Clear Containers to Kata Containers.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/kubernetes/kubernetes-bp.html b/tutorials/kubernetes/kubernetes-bp.html new file mode 100644 index 00000000..e60901a4 --- /dev/null +++ b/tutorials/kubernetes/kubernetes-bp.html @@ -0,0 +1,1064 @@ + + + + + + + + + + + Kubernetes Best Practices on Clear Linux OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Kubernetes Best Practices on Clear Linux OS

+
+

Use swupd to update clusters

+

This tutorial shows you how to manage your Kubernetes cluster while using +swupd to update Clear Linux* OS.

+

In our tutorial Run Kubernetes*, we explain how to set up a Kubernetes +cluster on Clear Linux OS using kubeadm. Kubeadm documentation often builds on the +assumption that the distribution uses a traditional package manager (e.g., +RPM/DEB).

+

In contrast, Clear Linux OS uses swupd to update the OS, which in this case updates +all of the kubernetes node and client binaries simultaneously, as part of +the cloud-native-basic bundle (e.g., kubectl, kubeadm, kubelet). Running +sudo swupd update requires special care to ensure the OS +incorporates the latest Kubernetes upgrades.

+

This document describes best practices to manage cluster upgrades with +kubeadm on a Clear Linux OS-based cluster.

+
+
+

Prerequisites

+

Assure that you:

+ +
+

Note

+

Other Linux* distros shown in Kubernetes upgrade documentation reflect +apt-get update, apt-mark hold kubeadm, and similar commands; however, such commands are not valid on Clear Linux OS.

+
+
+
+

Update the control plane

+
    +
  1. Read kubernetes documentation before you begin.

    +
  2. +
  3. On your master node, run the command:

    +
    sudo swupd update
    +
    +
    +
    +

    Note

    +

    If the minor version of Kubernetes changes, Clear Linux OS shows a message-of-the-day, or motd. When the motd appears, you must postpone a kubelet restart on master and nodes until the control plane is properly updated. swupd update does not restart services automatically unless explicitly configured to do so.

    +
    +
  4. +
  5. Now follow these instructions in kubernetes documentation.

    + +
  6. +
+
+
+

Update worker nodes

+
    +
  1. On each worker node, run the command:

    +
    sudo swupd update
    +
    +
    +
  2. +
  3. Now follow these instructions in kubernetes documentation:

    + +
  4. +
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/kubernetes/kubernetes.html b/tutorials/kubernetes/kubernetes.html new file mode 100644 index 00000000..a0a54b26 --- /dev/null +++ b/tutorials/kubernetes/kubernetes.html @@ -0,0 +1,1332 @@ + + + + + + + + + + + Run Kubernetes* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Kubernetes*

+

This tutorial describes how to install, configure, and run the +Kubernetes container orchestration system on Clear Linux* OS using CRI+O and +kata-runtime.

+

Kubernetes* is an open source system for automating deployment, scaling, and +management of containerized applications. It groups containers that make up +an application into logical units for easy management and discovery.

+

Kata Containers* kata-runtime adheres to +OCI guidelines and work seamlessly with +Kubernetes. Kata Containers provide strong isolation for untrusted +workloads or multi-tenant scenarios. Kata Containers can be +allocated on a per-pod basis so you can mix and match both on the same host +to suit your needs.

+ +
+

Prerequisites

+

This tutorial assumes you have already installed Clear Linux OS. For detailed +instructions on installing Clear Linux OS on a bare metal system, follow the +bare metal installation tutorial. +Learn about the benefits of having an up-to-date system for cloud +orchestration on the swupd: software updater page.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Install Kubernetes and CRI runtimes

+

Kubernetes, a set of supported CRI +runtimes, and networking plugins, are included in the cloud-native-basic +bundle.

+

To install this framework, enter the following command:

+
sudo swupd bundle-add cloud-native-basic
+
+
+
+

Note

+

For more on networking plugins, see Install pod network add-on.

+
+
+
+

Configure Kubernetes

+

This tutorial uses the basic default Kubernetes configuration for simplicity. +You must define your Kubernetes configuration according to your specific +deployment and your security needs.

+
    +
  1. Enable IP forwarding to avoid kubeadm preflight check errors:

    +

    Create (or edit if it exists) the file /etc/sysctl.d/60-k8s.conf +and include the following line:

    +
    net.ipv4.ip_forward = 1
    +
    +
    +

    Apply the change:

    +
    sudo systemctl restart systemd-sysctl
    +
    +
    +
  2. +
  3. Enable the kubelet service:

    +
    sudo systemctl enable kubelet.service
    +
    +
    +
  4. +
  5. Disable swap using one of the following methods, either:

    +
      +
    1. Temporarily:

      +
      sudo swapoff -a
      +
      +
      +
      +

      Note

      +

      Swap will be enabled at next reboot, causing failures in +your cluster.

      +
      +
    2. +
    +

    or:

    +
      +
    1. Permanently:

      +

      Mask the swap partition:

      +
      sudo systemctl mask $(sed -n -e 's#^/dev/\([0-9a-z]*\).*#dev-\1.swap#p' /proc/swaps) 2>/dev/null
      +sudo swapoff -a
      +
      +
      +
      +

      Note

      +

      On systems with limited resources, some performance degradation may +be observed while swap is disabled.

      +
      +
    2. +
    +
  6. +
  7. Switch to root to modify the hosts file:

    +
    sudo -s
    +
    +
    +
  8. +
  9. Create (or edit if it exists) the hosts file that Kubernetes will read to +locate the master’s host:

    +
    echo "127.0.0.1 localhost `hostname`" >> /etc/hosts
    +
    +
    +
  10. +
  11. Exit root:

    +
    exit
    +
    +
    +
  12. +
+
+
+

Configure and run Kubernetes

+

This section describes how to configure and run Kubernetes with CRI-O and +kata-runtime.

+
+

Configure and run CRI-O + kata-runtime

+
    +
  1. Enable the CRI-O service:

    +
    sudo systemctl enable crio.service
    +
    +
    +
  2. +
  3. Enter the commands:

    +
    sudo systemctl daemon-reload
    +sudo systemctl restart crio
    +
    +
    +
  4. +
  5. Initialize the master control plane with the command below and follow the +displayed instructions to set up kubectl:

    +
    sudo kubeadm init --cri-socket=/run/crio/crio.sock
    +
    +
    +
  6. +
  7. Register kata-runtime as a RuntimeClass handler:

    +
    cat << EOF | kubectl apply -f -
    +kind: RuntimeClass
    +apiVersion: node.k8s.io/v1beta1
    +metadata:
    +    name: native
    +handler: runc
    +---
    +kind: RuntimeClass
    +apiVersion: node.k8s.io/v1beta1
    +metadata:
    +    name: kata-containers
    +handler: kata
    +EOF
    +
    +
    +
  8. +
+
+
+
+

Install pod network add-on

+

You must choose and install a pod network add-on to allow your pods to +communicate. Check whether or not your add-on requires special flags when you +initialize the master control plane.

+

Notes about flannel add-on

+

If you choose the flannel add-on, then you must add the following to the +kubeadm init command:

+
--pod-network-cidr 10.244.0.0/16
+
+
+

Furthermore, if you are using CRI-O and flannel and you want to use +Kata Containers, edit the /etc/crio/crio.conf file to add:

+
[crio.runtime]
+manage_network_ns_lifecycle = true
+
+
+
+
+

Use your cluster

+

Once your master control plane is successfully initialized, instructions on +how to use your cluster and its IP, token, and hash values are +displayed. It is important that you record the cluster values because they +are needed when joining worker nodes to the cluster. Some values have a valid +period. The values are presented in a format similar to:

+
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash>
+
+
+

Congratulations!

+

You’ve successfully installed and set up Kubernetes in Clear Linux OS using CRI-O and +kata-runtime. You are now ready to follow on-screen instructions to deploy a +pod network to the cluster and join worker nodes with the displayed token +and IP information.

+
+ +
+

Cloud native setup automation (optional)

+

Clone the cloud-native-setup repository on your system and follow the +instructions. This repository includes helper scripts to automate configuration.

+
+
+

Package configuration customization (optional)

+

Clear Linux OS is a stateless system that looks for user-defined package configuration +files in the /etc/<package-name> directory to be used as default. If +user-defined files are not found, Clear Linux OS uses the distribution-provided +configuration files for each package.

+

If you customize any of the default package configuration files, you must +store the customized files in the /etc/ directory. If you edit any of +the distribution-provided default files, your changes will be lost in the +next system update.

+

For example, to customize CRI-O configuration in your system, run the +following commands:

+
sudo mkdir /etc/crio
+sudo cp /usr/share/defaults/crio/crio.conf /etc/crio/
+sudo $EDITOR /etc/crio/crio.conf
+
+
+

Learn more about Stateless in Clear Linux OS and view the Clear Linux OS documentation.

+
+
+

Proxy configuration (optional)

+

If you use a proxy server, you must set your proxy environment variables and +create an appropriate proxy configuration file for both CRI-O services. Consult your IT department if you are behind a corporate proxy for +the appropriate values. Ensure that your local IP is explicitly included +in the environment variable NO_PROXY. (Setting localhost is not enough.)

+

If you have already set your proxy environment variables, run the following +commands as a shell script to configure all of these services in one step:

+
services=('crio')
+for s in "${services[@]}"; do
+sudo mkdir -p "/etc/systemd/system/${s}.service.d/"
+cat << EOF | sudo tee "/etc/systemd/system/${s}.service.d/proxy.conf"
+[Service]
+Environment="HTTP_PROXY=${http_proxy}"
+Environment="HTTPS_PROXY=${https_proxy}"
+Environment="SOCKS_PROXY=${socks_proxy}"
+Environment="NO_PROXY=${no_proxy}"
+EOF
+done
+
+
+
+ +
+

Troubleshooting

+
    +
  • <HOSTNAME> not found in <IP> message.

    +

    Your DNS server may not be appropriately configured. Try adding an +entry to the /etc/hosts file with your host’s IP and Name.

    +

    For example: 100.200.50.20 myhost

    +

    Use the commands hostname and hostname -I to retrieve them.

    +
  • +
  • Images cannot be pulled.

    +

    You may be behind a proxy server. Try configuring your proxy settings, +using the environment variables HTTP_PROXY, HTTPS_PROXY, and NO_PROXY +as required in your environment.

    +
  • +
  • Connection refused error.

    +

    If you are behind a proxy server, you may need to add the master’s IP to +the environment variable NO_PROXY.

    +
  • +
  • Connection timed-out or Access Refused errors.

    +

    You must ensure that the appropriate proxy settings are available from the +same terminal where you will initialize the control plane. To verify the +proxy settings that Kubernetes will actually use, run the commands:

    +
    echo $HTTP_PROXY
    +echo $HTTPS_PROXY
    +echo $NO_PROXY
    +
    +
    +

    If the displayed proxy values are different from your assigned values, the +cluster initialization will fail. Contact your IT support team to learn how +to set the proxy variables permanently, and how to make them available for +all the types of access that you will use, such as remote SSH access.

    +

    If the result of the above commands is blank, you may need to add a +profile to the /etc directory. To do so, follow these steps.

    +
      +
    1. Create a profile in /etc

      +
      sudo touch profile
      +
      +
      +
    2. +
    3. With a preferred editor, open profile, and enter your proxy settings. +Example shown below.

      +
      export "HTTP_PROXY=http://proxy.example.com:443"
      +export "HTTPS_PROXY=http://proxy.example.com:445"
      +export "SOCKS_PROXY=http://proxy.example.com:1080"
      +export "NO_PROXY= site.com,.site.com,localhost,127.0.0.1,<master IP>
      +
      +
      +
      +

      Note

      +

      <master IP> can be obtained by running ifconfig.

      +
      +
    4. +
    5. Save and exit the profile.

      +
    6. +
    7. Run:

      +
      sudo source profile
      +
      +
      +
    8. +
    9. To ensure your system isn’t running previous session variables, run:

      +
      sudo kubeadm reset --cri-socket=/run/crio/crio.sock
      +
      +
      +
    10. +
    11. Continue below while passing -E in the command as shown.

      +
    12. +
    +
  • +
  • Missing environment variables.

    +

    If you are behind a proxy server, pass environment variables by adding -E +to the command that initializes the master control plane.

    +
    /* Kubernetes with CRI-O + kata-runtime */
    +sudo -E kubeadm init --cri-socket=/run/crio/crio.sock
    +
    +
    +
  • +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/machine-learning/machine-learning.html b/tutorials/machine-learning/machine-learning.html new file mode 100644 index 00000000..ae6d2a31 --- /dev/null +++ b/tutorials/machine-learning/machine-learning.html @@ -0,0 +1,1174 @@ + + + + + + + + + + + TensorFlow* machine learning on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

TensorFlow* machine learning on Clear Linux* OS

+

This tutorial will demonstrate the installation and execusion of a TensorFlow* +machine learning example on Clear Linux* OS. It uses a Jupyter* Notebook and MNIST +data for handwriting recognition.

+

The initial steps will have you set up a Jupyter kernel and run a Notebook +on a bare-metal Clear Linux OS system.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. For +detailed instructions on installing Clear Linux OS on a bare metal system, follow the +bare metal installation tutorial.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+

Once your system is updated, add the following bundles to your system:

+
    +
  • machine-learning-web-ui: This bundle contains the Jupyter application.
  • +
  • machine-learning-basic: This bundle contains TensorFlow and other useful +tools.
  • +
+

To install the bundles, run the following commands in your $HOME +directory:

+
sudo swupd bundle-add machine-learning-web-ui
+
+sudo swupd bundle-add machine-learning-basic
+
+
+
+
+

Set up a Jupyter notebook

+

With all required packages and libraries installed, set up the file structure +for the Jupyter Notebook.

+
    +
  1. In the $HOME directory, create a directory for the Jupyter +Notebooks named Notebooks.

    +
    mkdir Notebooks
    +
    +
    +
  2. +
  3. Within Notebooks, create a directory named Handwriting.

    +
    mkdir Notebooks/Handwriting
    +
    +
    +
  4. +
  5. Change to the new directory.

    +
    cd Notebooks/Handwriting
    +
    +
    +
  6. +
  7. Copy the MNIST_example.ipynb file into the Handwriting +directory.

    +
    +

    Note

    +

    After installing the machine-learning basic bundle, you can find the +example code under +/usr/share/doc/tensorflow/MNIST_example.ipynb.

    +
    +
  8. +
+

The example code downloads and decompresses the MNIST data directly into the +./mnist directory. Alternatively, download the four files directly +from the Yann LeCun’s MNIST Database website and save them into a +mnist directory within the Handwriting directory.

+

The files needed are:

+ +
+
+

Run the Jupyter machine learning example code

+

With Clear Linux OS, Jupyter, and TensorFlow installed and configured, we can +run the example code.

+
    +
  1. Go to the ($HOME)/Notebooks directory and start Jupyter with the +following commands:

    +
    cd ~/Notebooks
    +
    +jupyter notebook
    +
    +
    +

    The Jupyter server starts and opens a web browser showing the Jupyter file +manager with a list of files in the current directory, see figure 1.

    +
    +Jupyter file manager +

    Figure 1: The Jupyter file manager shows the list of available files.

    +
    +
  2. +
  3. Click on the Handwriting directory. The MNIST_example.ipynb +file created earlier should be listed there, see figure 2.

    +
    +Example file within the Jupyter file manager +

    Figure 2: The example file within the Jupyter file manager.

    +
    +
  4. +
  5. To run the hand writing example, click on the MNIST_example.ipynb +file to load the notebook, see figure 3.

    +
    +The loaded MNIST_example notebook +

    Figure 3: The loaded MNIST_example notebook within the Jupyter file +manager.

    +
    +
  6. +
  7. Click the run-cell button to execute the code in the current cell and +move to the next.

    +
  8. +
  9. Select the In [2] cell and click the run-cell button to load +the MNIST data. The successful output is shown on figure 4.

    +
    +Successful import of MNIST data +

    Figure 4: Output after successfully importing the MNIST data.

    +
    +

    After the MNIST data was successfully downloaded and extracted into the +mnist directory within the ($HOME)/Notebooks/Handwriting +directory, four .gz files are present and the four data sets were created: +trainX, trainY, testX and testY.

    +
  10. +
  11. To inspect the imported data, the function in In [3] first +instructs Jupyter to reshape the data into an array of 28 x 28 images and to +plot the area in a 28 x 28 grid. Click the run-cell button twice to show +the first two digits in the trainX dataset, see figure 5.

    +
    +Function to reshape data. +

    Figure 5: A function reshapes the data and displays the first two +digits in the trainX dataset.

    +
    +
  12. +
  13. The In [4] cell defines the neural network. It provides the +inputs, defines the hidden layers, runs the training model, and sets up +the output layer, see figure 6. Click the run-cell button four times to +perform these operations.

    +
    +Defining, building and training the neural network model +

    Figure 6: Defining, building and training the neural network model.

    +
    +
  14. +
  15. To test the accuracy of the prediction the system makes, select the +In [8] cell and click the run-cell button. In this example, +the number 6 was predicted with a 99% accuracy, see figure 7.

    +
    +Prediction example +

    Figure 7: The system predicts a number providing the accuracy of the +prediction.

    +
    +
    +

    Note

    +

    To retest the accuracy of a random data point’s prediction, run the +cell In [8] again. It will take another random data point +and predict its value.

    +
    +
  16. +
  17. To check the accuracy for the whole dataset, select the In [10] +cell and click the run-cell button. Our example’s accuracy is +calculated as 97.17%, see figure 8.

    +
    +System's accuracy +

    Figure 8: The system’s accuracy for the entire data set.

    +
    +
  18. +
+

For more in-depth information on the model used and the mathematics it entails, +visit the TensorFlow tutorials +TensorFlow MNIST beginners demo and TensorFlow MNIST pros demo.

+

Congratulations!

+

You have successfully installed a Jupyter kernel on Clear Linux OS. In addition, you +trained a neural network to successfully predict the values contained in a +data set of hand-written number images.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/nvidia.html b/tutorials/nvidia.html new file mode 100644 index 00000000..7f7111c4 --- /dev/null +++ b/tutorials/nvidia.html @@ -0,0 +1,1320 @@ + + + + + + + + + + + Install NVIDIA* Drivers — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install NVIDIA* Drivers

+

NVIDIA manufactures graphics processing units (GPU), also known as +graphics cards.

+

NVIDIA devices on Linux* have two popular device driver options: the +opensource drivers from the nouveau project or the proprietary drivers +published by NVIDIA. The nouveau drivers are built into the Clear Linux* OS +kernel and are loaded automatically at system boot if a compatible card +is detected.

+

These instructions show how to use the proprietary NVIDIA drivers, which +require a manual installation.

+
+

Warning

+

Software installed outside of swupd is not updated +with Clear Linux OS updates and must be updated and maintained manually.

+

For example, the file /usr/lib/libGL.so conflicts with the file +provided by the mesa package in Clear Linux OS and the file NVIDIA provides. If a Clear Linux OS +update overwrites these files, a reinstallation of the NVIDIA driver might +be required.

+
+ +
+

Prerequisites

+
    +
  • A Clear Linux OS system with a desktop installed
  • +
  • An NVIDIA device installed
  • +
+
+
+

Install DKMS

+

The Dynamic Kernel Module System (DKMS) allows the NVIDIA kernel modules to be automatically +integrated when kernel updates occur in Clear Linux OS.

+

Install the appropriate DKMS bundle using the instructions below:

+
+

Note

+

The Long Term Support (LTS) kernel variant is more likely to remain +compatible between updates with NVIDIA drivers.

+
+

The kernel-native-dkms bundle provides the dkms program and +Linux kernel headers, which are required for compiling kernel modules.

+

The kernel-native-dkms bundle also:

+
    +
  • Adds a systemd update trigger +(/usr/lib/systemd/system/dkms-new-kernel.service) to automatically +run DKMS to rebuild modules after a kernel upgrade occurs with swupd +update.
  • +
  • Disables kernel module signature verification by appending a kernel +command-line parameter (module.sig_unenforce) from the +/usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf file.
  • +
  • Adds a notification to the Message of the Day (MOTD) indicating kernel +module signature verification is disabled.
  • +
+
+

Warning

+

We recommend that you always review the swupd update output +to make sure kernel modules were successfully rebuilt against the new +kernel. This is especially important for systems where a successful boot +relies on a kernel module.

+
+

Install the kernel-native-dkms or kernel-lts-dkms +bundle:

+
    +
  1. Determine which kernel variant is running on Clear Linux OS. Only the native +and lts kernels are enabled to build and load out-of-tree kernel modules +with DKMS.

    +
    $ uname -r
    +5.XX.YY-ZZZZ.native
    +
    +
    +

    Ensure .native or .lts is in the kernel name.

    +
  2. +
  3. Install the DKMS bundle corresponding to the installed kernel. Use +kernel-native-dkms for the native kernel or +kernel-lts-dkms for the lts kernel.

    +
    sudo swupd bundle-add kernel-native-dkms
    +
    +
    +

    or

    +
    sudo swupd bundle-add kernel-lts-dkms
    +
    +
    +
  4. +
  5. Update the Clear Linux OS bootloader and reboot.

    +
    sudo clr-boot-manager update
    +reboot
    +
    +
    +
  6. +
+
+
+

Download and install the NVIDIA drivers

+
+

Download the NVIDIA drivers for Linux

+
    +
  1. Identify the NVIDIA GPU model that is installed.

    +
    sudo lshw -C display
    +
    +
    +
  2. +
  3. Go to the NVIDIA Driver Downloads website . Search for and download the +appropriate driver based on the NVIDIA GPU model you have with Linux +64-bit selected as the Operating System .

    +
  4. +
  5. Open a terminal and navigate to where the +NVIDIA-Linux-x86_64-<VERSION>.run file was saved. In this +example, it was saved in the Downloads folder.

    +
    cd ~/Downloads/
    +
    +
    +
  6. +
  7. Make the NVIDIA-Linux-x86_64-<VERSION>.run file executable.

    +
    chmod +x :file:`NVIDIA-Linux-x86_64-<VERSION>.run`
    +
    +
    +
  8. +
+
+
+

Disable the nouveau driver

+

The proprietary NVIDIA driver is incompatible with the nouveau driver and +must be disabled before installation can continue.

+
    +
  1. Disable the nouveau driver by creating a blacklist file under +/etc/modprobe.d and reboot.

    +
    sudo mkdir /etc/modprobe.d
    +
    +printf "blacklist nouveau \noptions nouveau modeset=0 \n" | sudo tee --append /etc/modprobe.d/disable-nouveau.conf
    +
    +
    +
  2. +
  3. Reboot the system and log back in. It is normal for the graphical +environment not to start without the NVIDIA driver loaded.

    +
  4. +
+
+
+

Configure alternative software paths

+

The NVIDIA installer is directed to install files under +/opt/nvidia as much as possible to keep its contents isolated from the +rest of the Clear Linux OS system files under /usr. The dynamic linker and X +server must be configured to use the content under +/opt/nvidia.

+
    +
  1. Configure the dynamic linker to look for and to cache shared libraries under +/opt/nvidia/lib and /opt/nvidia/lib32 in addition to the +default paths.

    +
    echo "include /etc/ld.so.conf.d/*.conf" |  sudo tee --append /etc/ld.so.conf
    +
    +sudo mkdir /etc/ld.so.conf.d
    +printf "/opt/nvidia/lib \n/opt/nvidia/lib32 \n" | sudo tee --append /etc/ld.so.conf.d/nvidia.conf
    +
    +
    +
  2. +
  3. Reload the dynamic linker run-time bindings and library cache.

    +
    sudo ldconfig
    +
    +
    +
  4. +
  5. Create a Xorg configuration file to search for modules under +/opt/nvidia in addition to the default path.

    +
    sudo mkdir -p /etc/X11/xorg.conf.d/
    +
    +sudo tee /etc/X11/xorg.conf.d/nvidia-files-opt.conf > /dev/null <<'EOF'
    +Section "Files"
    +        ModulePath      "/usr/lib64/xorg/modules"
    +        ModulePath      "/opt/nvidia/lib64/xorg/modules"
    +EndSection
    +EOF
    +
    +
    +
  6. +
+
+
+

Install the NVIDIA drivers

+
    +
  1. A terminal not running on /dev/tty1 is useful to view uninterrupted +installation progress. Switch to a secondary virtual terminal by pushing +CTRL + ALT + F2 or remotely login over SSH.

    +
  2. +
  3. Navigate to the directory where the NVIDIA installer was downloaded.

    +
    cd ~/Downloads/
    +
    +
    +
  4. +
  5. Run the installer with the advanced options below.

    +
    sudo ./NVIDIA-Linux-x86_64-<VERSION>.run \
    +--utility-prefix=/opt/nvidia \
    +--opengl-prefix=/opt/nvidia \
    +--compat32-prefix=/opt/nvidia \
    +--compat32-libdir=lib32 \
    +--x-prefix=/opt/nvidia \
    +--x-module-path=/opt/nvidia/lib64/xorg/modules \
    +--x-library-path=/opt/nvidia/lib64 \
    +--x-sysconfig-path=/etc/X11/xorg.conf.d \
    +--documentation-prefix=/opt/nvidia \
    +--application-profile-path=/etc/nvidia \
    +--no-precompiled-interface \
    +--no-nvidia-modprobe \
    +--no-distro-scripts \
    +--force-libglx-indirect \
    +--glvnd-egl-config-path=/etc/glvnd/egl_vendor.d \
    +--egl-external-platform-config-path=/etc/egl/egl_external_platform.d  \
    +--dkms \
    +--silent
    +
    +
    +
  6. +
  7. The graphical interface may automatically start after the NVIDIA driver +is loaded. Return to the working terminal and log back in if necessary.

    +
  8. +
  9. Confirm that the NVIDIA kernel modules are loaded.

    +
    lsmod | grep ^nvidia
    +
    +
    +
  10. +
  11. Run a Clear Linux OS system verification to restore files that the NVIDIA installer +likely deleted.

    +
    sudo swupd repair --quick --bundles=lib-opengl
    +
    +
    +
  12. +
+
+

Note

+

The NVIDIA software places some files under the /usr subdirectory +that are not managed by Clear Linux OS and conflict with the Clear Linux OS stateless design.

+

Although a limited version of swupd repair is run above, +other uses of the swupd repair command should be avoided +with the proprietary NVIDIA drivers installed.

+
+
+
+
+

Updating the NVIDIA drivers

+

The proprietary NVIDIA drivers are installed manually outside of swupd and must be updated manually when needed.

+

Updating the NVIDIA drivers follows the same steps as initial installation, +however the desktop environment must first be stopped so that the drivers are +not in use.

+
    +
  1. Follow the steps in the Download the NVIDIA Drivers for Linux section +to get the latest NVIDIA drivers.

    +
  2. +
  3. Temporarily set the default boot target to the multi-user, which is +a non-graphical runtime.

    +
    sudo systemctl set-default multi-user.target
    +
    +
    +
  4. +
  5. Reboot the system and log back in. It is normal for the graphical +environment not to start.

    +
  6. +
  7. Follow the steps in the Install the NVIDIA Drivers section to update +the NVIDIA drivers. This installation will overwrite the previous NVIDIA +drivers and files.

    +
  8. +
  9. Set the default boot target back to the graphical target.

    +
    sudo systemctl set-default graphical.target
    +
    +
    +
  10. +
  11. Reboot the system and log back in.

    +
  12. +
  13. Trigger a flatpak update that will download the runtime corresponding +with the new NVIDIA drivers for the flatpak apps that require it.

    +
    flatpak update
    +
    +
    +
  14. +
+
+
+

Uninstalling the NVIDIA drivers

+

The NVIDIA drivers and associated software can be uninstalled and nouveau +driver restored with the instructions in this section.

+
    +
  1. Remove the modprobe.d file that prevents nouveau from loading.

    +
    sudo rm /etc/modprobe.d/disable-nouveau.conf
    +
    +
    +
  2. +
  3. Remove the xorg.conf.d file that adds a search path for X modules.

    +
    sudo rm /etc/X11/xorg.conf.d/nvidia-files-opt.conf
    +
    +
    +
  4. +
  5. Run the sudo /opt/nvidia/bin/nvidia-uninstall

    +
  6. +
  7. Follow the prompts on the screen and reboot the system.

    +
  8. +
+
+
+

Debugging installation of NVIDIA drivers

+
    +
  • The NVIDIA driver places installer and uninstaller logs under +/var/log/nvidia-install and /var/log/nvidia-uninstall.
  • +
  • NVIDIA-Linux-x86_64-<VERSION>.run --advanced-options shows many +parameters to control installation behavior.
  • +
  • NVIDIA-Linux-x86_64-<VERSION>.run --extract-only extracts +installation files into a directory named +NVIDIA-Linux-x86_64-<VERSION>.
  • +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/redis.html b/tutorials/redis.html new file mode 100644 index 00000000..4bf7bcdd --- /dev/null +++ b/tutorials/redis.html @@ -0,0 +1,1172 @@ + + + + + + + + + + + Run Redis on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Redis on Clear Linux* OS

+

Redis is an in-memory key:value store designed for quick lookups, accessible +over the network. In this tutorial, you’ll install redis and launch a +redis-server on Clear Linux OS, plus learn a few basic redis commands. We also invite +you to pull our Clear Linux Redis instance on dockerhub* for application +or infrastructure development.

+

While the redis data structure store can serve as a NoSQL database for a Web application, it’s also easy to integrate in an existing stack. For example, you could use the Redis caching layer for real-time responses on a leaderboard in a gaming app. Redis offers many client libraries with language-specific bindings for Python, Perl, Ruby, and more.

+ +
+

Prerequisites

+
    +
  • Install the redis-native bundle in Clear Linux OS
  • +
  • Install the containers-basic bundle in Clear Linux OS (only required in Example 2)
  • +
+
+
+

Install the redis bundle

+

In Clear Linux OS, find redis in the redis-native bundle.

+
    +
  1. Open a Terminal and login as an administrative user.
  2. +
  3. Add redis-native.
  4. +
+
sudo swupd bundle-add redis-native
+
+
+
+

Note

+

If the bundle already exists, no action is required.

+
+
+
+

Start the redis-server

+

A systemd service unit is available to control the redis server. +By default, redis runs on port 6379.

+
    +
  1. Start the service.

    +
    systemctl start redis
    +
    +
    +
    +

    Note

    +

    To stop redis run systemctl stop redis.

    +
    +
  2. +
  3. Assure the service is running.

    +
    systemctl status redis
    +
    +
    +
  4. +
  5. Verify the redis-server sends a reply.

    +
    redis-cli ping
    +
    +
    +
    +

    Note

    +

    Expected output: PONG.

    +
    +
  6. +
  7. Optional: If you wish to apply advanced configuration, copy the +redis.conf into /etc/ directory.

    +
    sudo cp /usr/share/defaults/etc/redis.conf /etc/
    +
    +
    +
  8. +
+

The redis-server is now ready to use on Clear Linux OS. Try some examples below.

+
+
+

Example 1: Use the redis-cli and try commands

+

One advantage of redis over other NoSQL databases is that developers can +easily access data structures like lists, sets, sorted sets, strings, and +hashes using collection operations commands similar to those found in many +programming languages. These exercises are inspired by try redis io.

+

After your redis-server is running, try some basic commands.

+
    +
  1. Enter the redis-cli. It provides syntax suggestions as you type.

    +
    redis-cli
    +
    +
    +
  2. +
  3. SET key to hold string value. In the set create connections and increment.

    +
    SET server:name "clearlinux"
    +
    +
    +
    MGET server:name
    +
    +
    +
    +

    Note

    +

    If the key does not exist or hold a key value, nil is returned.

    +
    +
    SET connections 100
    +
    +
    +
    INCR connections
    +
    +
    +
    INCR connections
    +
    +
    +
    DEL connections
    +
    +
    +
  4. +
  5. Create a friends list and insert new values at the end of the list.

    +
    RPUSH friends "Deb"
    +
    +
    +
    RPUSH friends "David"
    +
    +
    +
    RPUSH friends "Mary"
    +
    +
    +
  6. +
  7. Modify friends list, using a common slice method with a 0-index.

    +
    LRANGE friends 0 1
    +
    +
    +
    LLEN friends
    +
    +
    +
    LPOP friends
    +
    +
    +
    RPOP friends
    +
    +
    +
    LLEN friends
    +
    +
    +
  8. +
  9. Consider using a hash, a very useful data type, which maps string fields +and string values, offering multiple lookup methods.

    +

    Enter many user key:values with HMSET. Then try HGET and HGETALL.

    +
    HMSET user:1000 name "Robert Noyce" password "SuperEngi9eer" email "robert.noyce@intel.com"
    +
    +
    +
    HGET user:1000 name
    +
    +
    +
    HGET user:1000 email
    +
    +
    +
    HGETALL user:1000
    +
    +
    +
  10. +
+
+
+

Example 2: Run the Clear Linux OS redis docker image

+

We also provide a Clear Linux Redis instance, which is +updated continuously and maintained by Clear Linux OS development.

+
sudo swupd bundle-add containers-basic
+
+
+
sudo systemctl start docker
+
+
+
sudo -E docker pull clearlinux/redis
+
+
+
+
+

Next Steps

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/smb/smb-desktop.html b/tutorials/smb/smb-desktop.html new file mode 100644 index 00000000..0ee98180 --- /dev/null +++ b/tutorials/smb/smb-desktop.html @@ -0,0 +1,1057 @@ + + + + + + + + + + + Connect to Windows* shared location from Clear Linux* OS desktop — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Tutorials »
  • + +
  • Connect to Windows* shared location from Clear Linux* OS desktop
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Connect to Windows* shared location from Clear Linux* OS desktop

+

This tutorial explains how to access an existing shared drive on +Windows* via Server Message Block (SMB) / Common Internet File System (CIFS) +from the Clear Linux OS GNOME desktop. CIFS filesystem is generally used to access +shared storage locations, or share files.

+
+

Prerequisites

+ +
+
+

Connect to Windows shared location with Nautilus

+
    +
  1. From the desktop, select Files from the application menu.

    +
    +

    Note

    +

    GNOME Files is also known as Nautilus.

    +
    +
  2. +
  3. In Files, select Other Locations.

    +
    +Files, Other Locations +

    Figure 1: Files, Other Locations

    +
    +
  4. +
  5. In the lower taskbar, beside Connect to Server, +enter the file-sharing address using the Windows sharing schema:

    +
    smb://servername/Share
    +
    +
    +
    +Connect to Server +

    Figure 2: Connect to Server

    +
    +
  6. +
  7. Optional: If there are issues with DNS, you can use an IP address in +place of the servername above. You must still specify the share.

    +
  8. +
  9. Optional: On the Windows machine, in a CLI, retrieve the IP address by +entering the command:

    +
    ifconfig
    +
    +
    +
    +

    Note

    +

    If using the IP address, assure that it is accessible and secure.

    +
    +
  10. +
  11. Select Connect.

    +
  12. +
  13. The server will request authentication, as shown in Figure 3.

    +
    +Authentication +

    Figure 3: Authentication

    +
    +
  14. +
  15. Log in with the same Windows system credentials for which you granted +access to the share.

    +
  16. +
  17. Select the appropriate checkbox to save your credentials. Consider +carefully the security risks as a result of your selection.

    +
  18. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/smb/smb.html b/tutorials/smb/smb.html new file mode 100644 index 00000000..f4116828 --- /dev/null +++ b/tutorials/smb/smb.html @@ -0,0 +1,1097 @@ + + + + + + + + + + + Enable simple file sharing with a Windows* machine using Samba* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Enable simple file sharing with a Windows* machine using Samba*

+

This tutorial describes how to enable simple file sharing from a system +running Clear Linux* OS to a Windows machine using Samba. For more advanced sharing, +refer to the Samba guide.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. For +detailed instructions, follow the steps in Install Clear Linux* OS from the live desktop.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Set up file sharing

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Add the storage-utils bundle, which includes the Samba binaries.

    +
    swupd bundle-add storage-utils
    +
    +
    +
    +

    Note

    +

    The os-clr-on-clr bundle also includes the Samba binaries.

    +
    +
  4. +
  5. Create a configuration file called /etc/samba/smb.conf. In this +example, [Downloads] enables a folder share with a specific user. +[Documents] enables a folder share with any user. The example assumes that a +user account clearlinuxuser already exists.

    +

    If valid users is not specified, then anyone with a user account on the +machine and with their Samba password already set can access the folder. +However, the account is only able to access files and folders for which +they have appropriate permissions.

    +

    Use chown or chmod to change either the owner of the +file or the permissions to allow other users to access the file.

    +
    [Global]
    +map to guest = bad user
    +
    +[Downloads]
    +path=/home/clearlinuxuser/Downloads
    +read only = no
    +guest ok = no
    +valid users = clearlinuxuser
    +
    +[Documents]
    +path=/home/clearlinuxuser/Documents
    +read only = no
    +browsable = yes
    +guest ok = yes
    +
    +
    +
  6. +
  7. Enable the Samba daemon to start every time.

    +
    systemctl enable smb
    +systemctl start smb
    +
    +
    +
  8. +
  9. Use smbpasswd to add the initial password for the user +account to access the share. Be aware that Samba maintains its own list of +passwords for user accounts. The Samba password list can be different than +the password used to log in.

    +
    smbpasswd -a clearlinuxuser
    +
    +
    +
  10. +
+

Setup is complete and a Windows machine on the same network can access the +shares. Windows uses the format \\[server IP or hostname]\folder to +access shares. Access the shares directly with Windows Explorer or by +mapping a network drive.

+

Use the IP address of the Clear Linux OS machine for an easy access method. If the +Clear Linux OS machine is behind an Active Directory domain controller or a DNS server, +use the hostname of the Clear Linux OS machine. For other ways to access shares using a +hostname instead of an IP address, see Chapter 7 of the Samba guide.

+
+
+

Map Clear Linux OS drive in Windows

+
    +
  1. Open Windows Explorer and click on the left sidebar on This PC +to change the options available at the top.

    +
  2. +
  3. Click the Map Network Drive icon and enter the path in the +format: \\[server IP or hostname]\[shared folder]

    +
  4. +
  5. Check the box Connect using different credentials. Enter +the Samba user clearlinuxuser and the password created with +smbpasswd. See Figure 1 for details.

    +
    +Map a network drive in Windows Explorer +

    Figure 1: Map a network drive in Windows Explorer.

    +
    +
  6. +
+

When complete, Windows Explorer displays the share drive as shown in Figure 2.

+
+View a share drive in Windows Explorer +

Figure 2: View a share drive in Windows Explorer.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/spark.html b/tutorials/spark.html new file mode 100644 index 00000000..af83443e --- /dev/null +++ b/tutorials/spark.html @@ -0,0 +1,1116 @@ + + + + + + + + + + + Set up a standalone cluster system using Apache* Spark* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+
+
+

Set up a standalone cluster system using Apache* Spark*

+

This tutorial describes how to install, configure, and run Apache Spark on +Clear Linux* OS. Apache Spark is a fast general-purpose cluster computing system with +the following features:

+
    +
  • Provides high-level APIs in Java*, Scala*, Python*, and R*.
  • +
  • Includes an optimized engine that supports general execution graphs.
  • +
  • Supports high-level tools including Spark SQL, MLlib, GraphX, and Spark +Streaming.
  • +
+

In this tutorial, you will install Spark on a single machine running the +master daemon and a worker daemon.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +the bare metal installation guide.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Install Apache Spark

+

Apache Spark is included in the big-data-basic bundle. To install the +framework, enter:

+
sudo swupd bundle-add big-data-basic
+
+
+
+
+

Configure Apache Spark

+
    +
  1. Create the configuration directory with the command:

    +
    sudo mkdir /etc/spark
    +
    +
    +
  2. +
  3. Copy the default templates from /usr/share/defaults/spark to +/etc/spark with the command:

    +
    sudo cp /usr/share/defaults/spark/* /etc/spark
    +
    +
    +
    +

    Note

    +

    Since Clear Linux OS is a stateless system, you should never modify the +files under the /usr/share/defaults directory. The software +updater overwrites those files.

    +
    +
  4. +
  5. Copy the template files below to create custom configuration files:

    +
    sudo cp /etc/spark/spark-defaults.conf.template /etc/spark/spark-defaults.conf
    +sudo cp /etc/spark/spark-env.sh.template /etc/spark/spark-env.sh
    +sudo cp /etc/spark/log4j.properties.template /etc/spark/log4j.properties
    +
    +
    +
  6. +
  7. Edit the /etc/spark/spark-env.sh file and add the +SPARK_MASTER_HOST variable. Replace the example address below +with your localhost IP address. View your IP address using the +hostname -I command.

    +
    SPARK_MASTER_HOST="10.300.200.100"
    +
    +
    +
    +

    Note

    +

    This optional step enables the master’s web user interface to +view information needed later in this tutorial.

    +
    +
  8. +
  9. Edit the /etc/spark/spark-defaults.conf file and update the +spark.master variable with the SPARK_MASTER_HOST address and port 7077.

    +
    spark.master    spark://10.300.200.100:7077
    +
    +
    +
  10. +
+
+
+

Start the master server and a worker daemon

+
    +
  1. Start the master server using:

    +
    sudo /usr/share/apache-spark/sbin/./start-master.sh
    +
    +
    +
  2. +
  3. Start one worker daemon and connect it to the master using the +spark.master variable defined earlier:

    +
    sudo /usr/share/apache-spark/sbin/./start-slave.sh spark://10.300.200.100:7077
    +
    +
    +
  4. +
  5. Open an internet browser and view the worker daemon information using +the master’s IP address and port 8080:

    +
    http://10.300.200.100:8080
    +
    +
    +
  6. +
+
+
+

Run the Spark wordcount example

+
    +
  1. Run the wordcount example using a file on your local host and output the +results to a new file with the following command:

    +
    sudo spark-submit /usr/share/apache-spark/examples/src/main/python/wordcount.py ~/Documents/example_file > ~/Documents/results
    +
    +
    +
  2. +
  3. Open an internet browser and view the application information using +the master’s IP address and port 8080:

    +
    http://10.300.200.100:8080
    +
    +
    +
  4. +
  5. View the results of the wordcount application in the ~/Documents/results file.

    +
  6. +
+

Congratulations!

+

You successfully installed and set up a standalone Apache Spark cluster. +Additionally, you ran a simple wordcount example.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/tutorial-proxy.html b/tutorials/tutorial-proxy.html new file mode 100644 index 00000000..a72cec4a --- /dev/null +++ b/tutorials/tutorial-proxy.html @@ -0,0 +1,1103 @@ + + + + + + + + + + + Setting up proxy — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Setting up proxy

+

This tutorial shows you how to configure your system for use behind an +outbound proxy to access the Internet.

+

Clear Linux OS applications already benefit from the Autoproxy +feature.

+ +
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +the bare metal installation guide.

+
+
+

Shells and programs in a desktop session

+
+

Terminal

+

Add the following to your ~/.bashrc:

+
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:

+
echo >> ~/.wgetrc <<EOF
+http_proxy = your.http-proxy.url:port
+https_proxy = your.https-proxy.url:port
+ftp_proxy = your.http-proxy.url:port
+no_proxy = your-company-domain.com, localhost
+EOF
+
+
+
+
+

System service (Docker)

+

For Docker (and other services that use systemd), you can follow these steps to configure and check proxy settings:

+
+

Note

+

Be sure to use sudo, as you will need elevated permissions.

+
+
    +
  1. Create /etc/systemd/system/docker.service.d directory to host +configuration information for the Docker service.

    +
  2. +
  3. Create /etc/systemd/system/docker.service.d/http-proxy.conf and add:

    +
    +
    [Service]
    +Environment="HTTP_PROXY=http://your.http-proxy.url:port/"
    +Environment="HTTPS_PROXY=http://your.https-proxy.url:port/"
    +
    +
    +
    +
  4. +
  5. Load the changes and restart the service:

    +
    +
    sudo systemctl daemon-reload
    +sudo systemctl restart docker
    +
    +
    +
    +
  6. +
  7. Verify that changes have loaded:

    +
    +
    systemctl show --property=Environment docker
    +
    +
    +
    Environment=HTTP_PROXY=http://your.http-proxy.url:port/ HTTPS_PROXY=http://your.https-proxy.url:port/
    +
    +
    +
    +
  8. +
+
+

Note

+

This process enables the ability to successfully run docker pull. +Containers themselves must be configured independently.

+
+
+
+

git over ssh

+

Add the following to your ~/.ssh/config:

+
host github.com
+    port 22
+    user git
+    ProxyCommand connect-proxy -S your.ssh-proxy.url:port %h %p
+
+
+
+

Note

+

Though netcat is included with Clear Linux, it is not the BSD version, +which is the one usually used to enable git over ssh.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/tutorials.html b/tutorials/tutorials.html new file mode 100644 index 00000000..8766a2b4 --- /dev/null +++ b/tutorials/tutorials.html @@ -0,0 +1,1015 @@ + + + + + + + + + + + Tutorials — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/wordpress/web-server-install.html b/tutorials/wordpress/web-server-install.html new file mode 100644 index 00000000..94152495 --- /dev/null +++ b/tutorials/wordpress/web-server-install.html @@ -0,0 +1,1426 @@ + + + + + + + + + + + Set up a LAMP web server on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set up a LAMP web server on Clear Linux* OS

+

This tutorial provides instructions on how to set up a +LAMP web server on Clear Linux* OS and how +to use phpMyAdmin* to manage an associated database. Note that this +tutorial installs MariaDB*, which is a drop-in replacement for MySQL*.

+

In order to create a web server using Clear Linux OS as the host OS, your host system +must be running Clear Linux OS. This tutorial assumes you have installed Clear Linux OS on your +host system. For detailed instructions on installing Clear Linux OS on a bare metal +system, visit Install Clear Linux* OS from the live desktop.

+

This tutorial covers:

+ +
+

Install Apache

+

Apache is an open source HTTP web server application that can run on several +operating systems, including Clear Linux OS. Go to the Apache HTTP Server Project +for more information.

+
+

Install the web-server-basic bundle

+

The web-server-basic bundle contains the packages needed to install the +Apache software bundle on Clear Linux OS.

+
+

Note

+

Before you install new packages, update the Clear Linux OS with the following +console command:

+
sudo swupd update
+
+
+
+
    +
  1. To install the bundle, enter the following command:

    +
    sudo swupd bundle-add web-server-basic
    +
    +
    +
  2. +
  3. To start the Apache service, enter the following commands:

    +
    sudo systemctl enable httpd.service
    +sudo systemctl start httpd.service
    +
    +
    +
  4. +
  5. To verify that the Apache server application is running, open a web +browser and navigate to: http://localhost.

    +

    If the service is running, a confirmation message will appear, similar to the +message shown in figure 1.

    +
    +This web server is operational from host. +

    Figure 1: Confirmation that the Apache service is running.

    +
    +
    +

    Note

    +

    The index.html file is located in the /var/www/html directory +of your host system. You will copy this file into a new location after you +modify the configuration in the next step.

    +
    +
  6. +
+
+
+
+

Change the default configuration and data directory

+

Clear Linux OS is designed to be a Stateless operating system which means that you +must create an optional configuration file to override the default values. +The default location of the Apache configuration file, httpd.conf, +is located in the /usr/share/defaults/httpd directory. Clear Linux OS can +override this directory as part of the stateless paradigm. This default +.conf file includes the following directives that allow for additional +locations of configuration definitions:

+
# Virtual hosts
+IncludeOptional /usr/share/defaults/httpd/conf.d/*.conf
+IncludeOptional /usr/share/defaults/httpd/conf.modules.d/*.conf
+IncludeOptional /etc/httpd/conf.d/*.conf
+IncludeOptional /etc/httpd/conf.modules.d/*.conf
+
+
+

In this section you will define your own httpd.conf file to override the +default values, and define a custom DocumentRoot for your web server.

+
    +
  1. Create the directory structure for /etc/httpd/conf.d.

    +
    sudo mkdir -p /etc/httpd/conf.d
    +
    +
    +
  2. +
  3. Create and open the httpd.conf file in your new /etc/httpd/conf.d +directory.

    +
    sudo nano /etc/httpd/conf.d/httpd.conf
    +
    +
    +
  4. +
  5. Add the DocumentRoot variable to httpd.conf. Copy the content +listed below into the new /etc/httpd/conf.d/httpd.conf file.

    +
    #
    +# Set a new location for DocumentRoot
    +#
    +DocumentRoot "/var/www/tutorial"
    +
    +#
    +# Relax access to content within /var/www/tutorial for this example
    +#
    +<Directory "/var/www/tutorial">
    +  AllowOverride none
    +  Require all granted
    +</Directory>
    +
    +
    +
  6. +
  7. Create a new DocumentRoot directory structure and copy the +index.html file from /var/www/html directory to +/var/www/tutorial.

    +
    sudo mkdir –p /var/www/tutorial
    +cd /var/www/tutorial
    +sudo cp /var/www/html/index.html .
    +
    +
    +
  8. +
  9. To ensure a successful setup, edit the new index.html file with an +obvious change.

    +
    sudo nano index.html
    +
    +
    +

    For example, we changed the default message

    +

    “It works!”

    +

    to

    +

    “It works from its new location!”

    +
  10. +
  11. Stop and then restart httpd.service.

    +
    sudo systemctl stop httpd.service
    +sudo systemctl start httpd.service
    +
    +
    +
  12. +
  13. Go to http://localhost to view the new screen. You should see your updated +default message from step 5.

    +
  14. +
  15. Change the configuration back to the default /var/www/html +location. To do this, edit the /etc/httpd/conf.d/httpd.conf file +again and replace any instance of /var/www/tutorial with /var/www/html.

    +
    sudo nano /etc/httpd/conf.d/httpd.conf
    +
    +
    +
  16. +
  17. Stop and then restart httpd.service.

    +
    sudo systemctl stop httpd.service
    +sudo systemctl start httpd.service
    +
    +
    +
  18. +
  19. Go to http://localhost and verify that you can see the default screen +again.

    +
  20. +
  21. Optionally, remove the /var/www/tutorial directory you previously created.

    +
    sudo rm /var/www/tutorial/index.html
    +sudo rmdir /var/www/tutorial
    +
    +
    +
  22. +
+
+
+

Install PHP

+

An Apache installation allows you to display static web pages. Enabling PHP +allows you to generate and display dynamic web pages. To add this +functionality to your web server, install PHP on your system.

+
    +
  1. To get the php components, enter the following command:

    +
    sudo swupd bundle-add php-basic
    +
    +
    +
  2. +
  3. To enable PHP, enter the following commands:

    +
    sudo systemctl enable php-fpm.service
    +sudo systemctl start php-fpm.service
    +sudo systemctl restart httpd.service
    +
    +
    +

    After restarting the Apache service, test your PHP installation.

    +
  4. +
  5. Create and open a file named phpinfo.php in the /var/www/html/ +directory using a text editor.

    +
    sudo nano /var/www/html/phpinfo.php
    +
    +
    +
  6. +
  7. Add the following line to the file:

    +
    <?PHP phpinfo() ?>
    +
    +
    +
  8. +
  9. Go to http://localhost/phpinfo.php.

    +
  10. +
  11. Verify that the PHP information screen appears, similar to figure 2:

    +
    +PHP information screen +

    Figure 2: The PHP information screen.

    +
    +
  12. +
+

If the PHP information screen is displayed, you have successfully installed +the PHP components and are now ready to add your database application to +complete your LAMP server implementation.

+
+
+

Install MariaDB

+

Install MariaDB to store content. MariaDB is a drop-in replacement for MySQL +and is available in the database-basic Clear Linux OS bundle.

+
    +
  1. To install the database-basic bundle, enter the following command:

    +
    sudo swupd bundle-add database-basic
    +
    +
    +
  2. +
  3. To start MariaDB after it is installed, enter the following commands:

    +
    sudo systemctl enable mariadb
    +sudo systemctl start mariadb
    +
    +
    +
  4. +
  5. To check the status of MariaDB, enter the following command:

    +
    sudo systemctl status mariadb
    +
    +
    +

    Press Ctrl + c or q to exit.

    +
  6. +
+
+

Security hardening

+

With the MariaDB service running, we can perform some basic security +hardening.

+
    +
  1. To add a basic layer of security, enter the following command:

    +
    sudo mysql_secure_installation
    +
    +
    +
  2. +
  3. Respond to the questions that appear in the script below.

    +
    +

    Note

    +

    Our suggested responses follow each question.

    +
    +
    Enter current password for root (enter for none):
    +
    +
    +

    In order to secure MariaDB, we need the current password for the root +user. For a newly installed MariaDB without a set root password, the +password is blank. Thus, press enter to continue.

    +
    OK, successfully used password, moving on...
    +
    +Set root password? [Y/n]
    +
    +
    +

    Set the root password to prevent unauthorized MariaDB root user logins. +To set a root password, type ‘y’.

    +
    New password:
    +
    +
    +

    Type the desired password for the root user.

    +
    Re-enter new password:
    +
    +
    +

    Re-type the desired password for the root user.

    +
    Password updated successfully!
    +Reloading privilege tables..
    +... Success!
    +
    +Remove anonymous users? [Y/n]
    +
    +
    +

    By default, a MariaDB installation includes an anonymous user that allows +anyone to log in to MariaDB without a user account. This anonymous user +is intended only for testing and for a smoother installation. To remove +the anonymous user and make your database more secure, type ‘y’.

    +
    ... Success!
    +Disallow root login remotely? [Y/n]
    +
    +
    +

    Normally, root should only be allowed to connect from the ‘localhost’. This +ensures that someone cannot guess the root password from the network. To +block any remote root login, type ‘y’.

    +
    ... Success!
    +Remove test database and access to it? [Y/n]
    +
    +
    +

    By default, MariaDB includes a database named ‘test’ which anyone can access. +This database is also intended only for testing and should be removed. To +remove the test database, type ‘y’.

    +
    - Dropping test database...
    +... Success!
    +- Removing privileges on test database...
    +... Success!
    +Reload privilege tables now? [Y/n]
    +
    +
    +

    Reloading the privilege tables ensures all changes made so far take +effect immediately. To reload the privilege tables, type ‘y’.

    +
    ... Success!
    +
    +Cleaning up...
    +
    +
    +

    All done! If you’ve completed all of the above steps, your MariaDB +installation should now be secure.

    +

    Thanks for using MariaDB!

    +
  4. +
+

The MariaDB installation is complete, and we can now install phpMyAdmin to +manage the databases.

+
+
+
+

Install phpMyAdmin

+

The web-based tool phpMyAdmin is a straightforward way to manage MySQL or +MariaDB databases. Visit the phpMyAdmin website for the complete +discussion regarding phpMyAdmin, its documentation, the latest downloads, +and other useful information.

+

In this tutorial, we use the latest English version of phpMyAdmin.

+
    +
  1. Download the phpMyAdmin-<version>-english.tar.gz file to your +~/Downloads directory. Here, <version> refers to the current +version available at https://www.phpmyadmin.net/downloads.

    +
    +

    Note

    +

    This example downloads and uses version 4.6.4.

    +
    +
  2. +
  3. Once the file has been successfully downloaded and verified, decompress +the file and directories into the Apache web server document root +directory. Use the following commands:

    +
    cd /var/www/html
    +sudo tar –xzvf ~/Downloads/phpMyAdmin-4.6.4-english.tar.gz
    +
    +
    +
  4. +
  5. To keep things simple, rename the newly created +phpMyAdmin-4.6.4-english directory to phpMyAdmin with the +following command:

    +
    sudo mv phpMyAdmin-4.6.4-english phpMyAdmin
    +
    +
    +
  6. +
+
+
+

Use phpMyAdmin to manage a database

+

You can use the phpMyAdmin web-based tool to manage your databases. Follow the +steps below for setting up a database called “WordPress”.

+
    +
  1. Verify that a successful installation of all LAMP server components by +going to http://localhost/phpMyAdmin. See figure 3.

    +
  2. +
  3. Log in with your root userid and the password you set up when you ran the +mysql_secure_installation command. Enter your +credentials and select Go to log in:

    +
    +phpMyAdmin login page +

    Figure 3: The phpMyAdmin login page.

    +
    +
  4. +
  5. Verify a successful login by confirming that the main phpMyAdmin page +displays, as shown in figure 4:

    +
    +phpMyAdmin dashboard +

    Figure 4: The phpMyAdmin dashboard.

    +
    +
  6. +
  7. Set up a database by selecting the Databases tab, as shown in +figure 5.

    +
  8. +
  9. Enter WordPress in the text field below the Create database +label.

    +
  10. +
  11. Select the utf8_unicode_ci option from the +Collation drop-down menu beside the text field.

    +
  12. +
  13. Click Create.

    +
    +Databases tab +

    Figure 5: The Databases tab.

    +
    +
  14. +
  15. Set up user permissions by selecting the WordPress database +located in the left panel. See figure 6.

    +
  16. +
  17. Select the Privileges tab. Figure 6 shows its contents.

    +
    +Privileges tab +

    Figure 6: The Privileges tab.

    +
    +
  18. +
  19. Click Add user account located at the bottom of the +Privileges tab. The Add user account page appears, as shown +in figure 7.

    +
    +User accounts tab +

    Figure 7: The User accounts tab.

    +
    +
  20. +
  21. Enter the following information in the corresponding fields that appear +in figure 7 above:

    +
      +
    • User name: wordpressuser
    • +
    • Password: wp-example
    • +
    • Re-type: wp-example
    • +
    +
  22. +
  23. In the Database for user account section, select +Grant all privileges on database “WordPress”.

    +
  24. +
  25. At the bottom of the page, click Go.

    +
  26. +
+

If successful, you should see the screen shown in figure 8:

+
+User added successfully +

Figure 8: The user wordpressuser is successfully added.

+
+

Congratulations!

+

You have now created a fully functional LAMP server along with a +WordPress*-ready database using Clear Linux OS.

+
+
+

Next steps

+

Next, add the WordPress components needed to host a WordPress website with Set up WordPress* on a LAMP web server.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/wordpress/wordpress.html b/tutorials/wordpress/wordpress.html new file mode 100644 index 00000000..b0fe6e15 --- /dev/null +++ b/tutorials/wordpress/wordpress.html @@ -0,0 +1,1009 @@ + + + + + + + + + + + WordPress* on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

WordPress* on Clear Linux* OS

+

This tutorial describes how to setup a web server to host a WordPress* site on a +Clear Linux* OS system. The tutorial is split into two sections:

+
    +
  1. Set up a LAMP web server on Clear Linux* OS
  2. +
  3. Set up WordPress* on a LAMP web server
  4. +
+

If you already have a Clear Linux OS based LAMP web server, +you can skip ahead to the second section of this tutorial.

+
+

Note

+

This tutorial is for development and testing purposes only. Additional steps +are required to secure production systems. Those steps are beyond the scope +of this tutorial.

+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/wordpress/wp-install.html b/tutorials/wordpress/wp-install.html new file mode 100644 index 00000000..043a26ac --- /dev/null +++ b/tutorials/wordpress/wp-install.html @@ -0,0 +1,1150 @@ + + + + + + + + + + + Set up WordPress* on a LAMP web server — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set up WordPress* on a LAMP web server

+

This tutorial shows you how to install the WordPress* components on your Clear Linux OS +LAMP server. At the end of +Set up a LAMP web server on Clear Linux* OS, you created a WordPress-ready database using +phpMyAdmin* and MariaDB*. Now that the LAMP server is up and running, you +can add the WordPress components needed to host a WordPress website on your system.

+
+

Before you begin

+

This tutorial assumes that you have successfully completed +Install Clear Linux* OS from the live desktop and you have Set up a LAMP web server on Clear Linux* OS.

+
+
+

Create a WordPress server

+

WordPress can be installed in a variety of ways. These instructions are +written for users who have followed our instructions for installing phpMyAdmin +when they set up a LAMP web server. Note that +all steps in this tutorial have been tested using a NUC6i5SYH Intel® NUC. +Visit the NUC6i5SYH product page for detailed information.

+

Numerous online articles are available to help you name your website and +acquire the necessary certificates. Those tasks are beyond the scope of this tutorial.

+

You can take several actions to harden your website from attacks. The security +of your website and the data it contains are complex and ever-evolving tasks. +Prioritize security if you plan to expose your website to the outside world. +This tutorial does not address security measures that you can take to harden +your site but we strongly encourage you to take action.

+
+

Note

+

Throughout this tutorial, we reference your website name as <your_website>.

+
+
+

Download WordPress and manage directories

+

For this tutorial, you will create a WordPress blog that can be accessed at: +http://<your_website>/blog.

+

To accomplish this setup, you must add WordPress components to the /var/www/html/blog +directory.

+

Follow these steps:

+
    +
  1. Navigate to the top level of the website’s root directory:

    +
    cd /var/www/html
    +
    +
    +
  2. +
  3. Download the latest version of WordPress:

    +
    sudo curl -O https://wordpress.org/latest.tar.gz
    +
    +
    +
  4. +
  5. Extract all files and directories from the downloaded file:

    +
    sudo tar –xzvf latest.tar.gz
    +
    +
    +
  6. +
  7. Rename the top-level WordPress directory to “blog”:

    +
    sudo mv wordpress blog
    +
    +
    +
  8. +
  9. Remove the downloaded tar file:

    +
    sudo rm latest.tar.gz
    +
    +
    +
  10. +
+
+
+

Set up WordPress with web-based GUI

+

Recall that you created a database and user when you installed phpMyAdmin when you +set up a Clear Linux OS based web server. Next, you must +connect WordPress to the database and install WordPress.

+

To continue with the setup, go to: http://<your_website>/blog/wp-admin/install.php. +The WordPress language option screen appears, as shown in figure 1.

+
    +
  1. Select English and click Continue.

    +
    +WordPress language selection +

    Figure 1: WordPress language selection screen.

    +
    +

    The WordPress installation continues until the Welcome screen appears, as shown in +figure 2:

    +
    +WordPress welcome screen +

    Figure 2: WordPress Welcome screen.

    +
    +
  2. +
  3. Click Let’s go!.

    +
  4. +
  5. Enter database connection specifics in the screen that appears, as shown in figure 3 +below.

    +
      +
    • Database name: WordPress
    • +
    • Database username: wordpressuser
    • +
    • Database password: wp-example (asterisks will not appear in the text box)
    • +
    • Database host: localhost
    • +
    • Table prefix: wp_
    • +
    +
    +Database connection details +

    Figure 3: Information necessary for WordPress to connect to the database.

    +
    +
  6. +
  7. Click Submit to complete the setup.

    +

    Figure 4 shows the confirmation screen that verifies a successful setup. WordPress +is connected to the MariaDB database.

    +
    +Successful database connection. +

    Figure 4: Successful WordPress connection.

    +
    +
  8. +
  9. Click Run the install. +The installer runs until WordPress is fully installed on your system.

    +
  10. +
+
+
+

Complete successful login

+

Once the installation is complete, you can name your blog and create a WordPress username +and password. See figure 5.

+
+WordPress user creation +

Figure 5: WordPress site information screen.

+
+
    +
  1. Enter all required information.

    +
  2. +
  3. Click Install WordPress.

    +
  4. +
  5. Verify that the initial login screen appears once the installation is complete. See figure 6:

    +
    +WordPress login +

    Figure 6: The WordPress login screen.

    +
    +
  6. +
  7. Enter your WordPress username and password.

    +
  8. +
  9. Check Remember me to save your credentials.

    +
  10. +
  11. Click Log in.

    +
  12. +
+

Figure 7 shows the WordPress dashboard after a successful login:

+
+WordPress Dashboard +

Figure 7: The WordPress dashboard.

+
+

You are ready to go!

+

To check out your blog as it is seen by the outside world, enter: +http://<your_website>/blog on your browser. Figure 8 shows the result:

+
+WordPress blog +

Figure 8: Your WordPress blog.

+
+

Congratulations, your WordPress blog is up and running!

+

You have successfully installed WordPress on a host system.

+

Add new entries to your blog and share them with the world using Clear Linux OS!

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/yubikey-u2f.html b/tutorials/yubikey-u2f.html new file mode 100644 index 00000000..dd84bce7 --- /dev/null +++ b/tutorials/yubikey-u2f.html @@ -0,0 +1,1086 @@ + + + + + + + + + + + Enable YubiKey U2F Support — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Enable YubiKey U2F Support

+

YubiKey* is a USB security token manufactured by Yubico. Depending on the +model, a YubiKey can support different authentication protocols including: +One-Time Password (OTP), Smart card, FIDO2, and Universal 2nd Factor (U2F).

+

These instructions will go over configuring a YubiKey for U2F authentication +through a web browser on a Clear Linux* OS system.

+

A list of websites +accepting U2F authentication with the YubiKey is available on the Yubico +website. See the Yubico website to learn more about the Yubikey: +https://www.yubico.com/getstarted/meet-the-yubikey/

+ +
+

Prerequisites

+

This tutorial assumes you have:

+
    +
  1. Clear Linux OS installed and running.
  2. +
  3. Mozilla Firefox installed on Clear Linux OS.
  4. +
  5. A YubiKey.
  6. +
+
+
+

Enable Linux udev rules for YubiKey

+

udev is the Linux device manager which handles events when USB +devices are added and removed. Custom rules needs to be created to properly +identify the YubiKey and provide applications access.

+

These instructions are derived from: Yubico support article Using Your U2F +YubiKey with Linux

+
    +
  1. Create the udev rules folder under /etc

    +
    sudo mkdir -p /etc/udev/rules.d/
    +
    +
    +
  2. +
  3. Download the u2f rules from the Yubico GitHub:

    +
    curl -O https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules
    +
    +
    +
  4. +
  5. Move the downloaded 70-u2f.rules file into the /etc/udev +folder

    +
    sudo mv 70-u2f.rules /etc/udev/rules.d/
    +
    +
    +
  6. +
  7. The udev rules should automatically be reloaded. However, they can be +manually reloaded or reboot the system:

    +
    sudo udevadm control --reload-rules && sudo udevadm trigger
    +
    +
    +
  8. +
  9. Plugin and validate the YubiKey appears as a USB device:

    +
    lsusb
    +
    +
    +
  10. +
+
+
+

Enable U2F in Mozilla Firefox

+

Firefox comes with U2F web authentication support disabled by default. U2F +needs to be enabled in the advanced settings.

+

These instructions are derived from: Yubico support article Enabling U2F +support in Mozilla Firefox

+
    +
  1. Launch Mozilla Firefox

    +
  2. +
  3. In the URL bar, type about:config to access the advanced +settings.

    +
    about:config
    +
    +
    +
  4. +
  5. Click the I accept the risk! button to continue to the advanced settings

    +
  6. +
  7. Search for the security.webauth.u2f and double-click it +so Value becomes true.

    +
  8. +
+

Your YubiKey is now usable on Clear Linux OS with Mozilla Firefox with websites that +support U2F authentication.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/.buildinfo b/zh_CN/.buildinfo new file mode 100644 index 00000000..d87e332e --- /dev/null +++ b/zh_CN/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: cc99ba4fd98ddc62c1fab24f336360f5 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/zh_CN/FAQ/faq.html b/zh_CN/FAQ/faq.html new file mode 100644 index 00000000..288d2600 --- /dev/null +++ b/zh_CN/FAQ/faq.html @@ -0,0 +1,1179 @@ + + + + + + + + + + + FAQ — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

FAQ

+

Below is a list of commonly asked questions with answers sourced from the +Clear Linux* OS team and Clear Linux community forums.

+ +
+

General

+
+

Why did you make another distro?

+

The Clear Linux OS team felt that performance was left on the table with Linux software. +Clear Linux OS 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 Clear Linux OS improvements?

+

Yes, we absolutely love open source reuse and upstreaming improvements.

+
+

+
+
+
+

How often do you update?

+

The Clear Linux OS team puts out multiple releases a week, often releasing 2 or more +times a day. This rolling release approach allows Clear Linux OS to remain agile to +upstream changes and security patches.

+
+

+
+
+
+

Is telemetry required?

+

The telemetry solution provided by Clear Linux OS is entirely optional and customizable. +It is disabled by default. If you do choose to enable telemetry, the data +helps the Clear Linux OS team proactively identify and resolve bugs. See the +telemetry page for more information.

+
+

+
+
+
+

What is the default firewall?

+

Clear Linux OS packages 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?

+

Clear Linux OS has a stateless design that maintains a separation between system files +and user files. Default values are stored under /usr/share/defaults/. +Files under /etc/ are not created unless you create one.

+

A blog post explaining how this is accomplished with /etc/fstab/ +specifically is available here: +https://clearlinux.org/news-blogs/where-etcfstab-clear-linux

+
+

+
+
+
+
+

Software packages

+
+

How is software installed and updated?

+

Clear Linux OS provides software in the form of bundles and +updates software with swupd.

+

FlatPak* is an application virtualization solution that allows +more software to be available to Clear Linux OS users by augmenting the software Clear Linux OS +packages natively with software available through FlatPak.

+

Our goal is to have software packaged natively and made available through +bundles whenever possible.

+
+

+
+
+
+

Does Clear Linux OS use RPMs like other distros?

+

Clear Linux OS provides software in the form of 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 Clear Linux OS system with the +right tools, but that is not the intended use case.

+
+

+
+
+
+

Can I install a software package from another OS on Clear Linux OS?

+

Software that is packaged in other formats for other Linux distributions is +not guaranteed to work on Clear Linux OS and may be impacted by Clear Linux OS updates.

+

If the software you’re seeking is open source, please submit a request to add +it to Clear Linux OS. Submit requests on GitHub* here: +https://github.com/clearlinux/distribution/issues

+
+

+
+
+
+
+

Software availability

+
+

What software is available on Clear Linux OS?

+

Available software can be found in the Software Store, through the GNOME* +Software application on the desktop, or by using swupd search.

+
+

+
+
+
+

Is Google* Chrome* available?

+

The Google Chrome web browser is not distributed as a bundle in Clear Linux OS 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.

+

Clear Linux OS 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 Clear Linux OS repository, including discussion of an alternative +hardware-based solution: +https://github.com/clearlinux/distribution/issues/429.

+

While Clear Linux OS cannot distribute FFmpeg, a manual solution to build and install +FFmpeg under /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 Clear Linux OS because of copyright and licensing +complexities. BTRFS is an alternative filesystem that is available in Clear Linux OS +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 Clear Linux OS kernels, in many cases the Clear Linux OS team will enable it +upon request. Submit requests on GitHub here: +https://github.com/clearlinux/distribution/issues

+

The Clear Linux OS 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 Clear Linux OS. See the +kernel modules page for more information.

+
+

+
+
+
+
+ + +
+ +
+
+ + + + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/_images/00-sign-in.png b/zh_CN/_images/00-sign-in.png new file mode 100644 index 00000000..4b9840ee Binary files /dev/null and b/zh_CN/_images/00-sign-in.png differ diff --git a/zh_CN/_images/01-cloud-storage.png b/zh_CN/_images/01-cloud-storage.png new file mode 100644 index 00000000..0888723d Binary files /dev/null and b/zh_CN/_images/01-cloud-storage.png differ diff --git a/zh_CN/_images/01-install-libreoffice.gif b/zh_CN/_images/01-install-libreoffice.gif new file mode 100644 index 00000000..62775293 Binary files /dev/null and b/zh_CN/_images/01-install-libreoffice.gif differ diff --git a/zh_CN/_images/02-openlibreoffice.gif b/zh_CN/_images/02-openlibreoffice.gif new file mode 100644 index 00000000..92ff6b7b Binary files /dev/null and b/zh_CN/_images/02-openlibreoffice.gif differ diff --git a/zh_CN/_images/02-storage-browser.png b/zh_CN/_images/02-storage-browser.png new file mode 100644 index 00000000..704f94b8 Binary files /dev/null and b/zh_CN/_images/02-storage-browser.png differ diff --git a/zh_CN/_images/03-create-bucket.png b/zh_CN/_images/03-create-bucket.png new file mode 100644 index 00000000..36a1da38 Binary files /dev/null and b/zh_CN/_images/03-create-bucket.png differ diff --git a/zh_CN/_images/04-bucket-created.png b/zh_CN/_images/04-bucket-created.png new file mode 100644 index 00000000..064719cb Binary files /dev/null and b/zh_CN/_images/04-bucket-created.png differ diff --git a/zh_CN/_images/10-image-upload.png b/zh_CN/_images/10-image-upload.png new file mode 100644 index 00000000..babaf2d1 Binary files /dev/null and b/zh_CN/_images/10-image-upload.png differ diff --git a/zh_CN/_images/11-bucket-uploaded.png b/zh_CN/_images/11-bucket-uploaded.png new file mode 100644 index 00000000..ce368e44 Binary files /dev/null and b/zh_CN/_images/11-bucket-uploaded.png differ diff --git a/zh_CN/_images/20-gce-image.png b/zh_CN/_images/20-gce-image.png new file mode 100644 index 00000000..7b8a2ccb Binary files /dev/null and b/zh_CN/_images/20-gce-image.png differ diff --git a/zh_CN/_images/20-image-library.png b/zh_CN/_images/20-image-library.png new file mode 100644 index 00000000..a70cceee Binary files /dev/null and b/zh_CN/_images/20-image-library.png differ diff --git a/zh_CN/_images/21-create-image.png b/zh_CN/_images/21-create-image.png new file mode 100644 index 00000000..4ef4d43b Binary files /dev/null and b/zh_CN/_images/21-create-image.png differ diff --git a/zh_CN/_images/22-image-list.png b/zh_CN/_images/22-image-list.png new file mode 100644 index 00000000..4347e462 Binary files /dev/null and b/zh_CN/_images/22-image-list.png differ diff --git a/zh_CN/_images/30-create-vm.png b/zh_CN/_images/30-create-vm.png new file mode 100644 index 00000000..528a461e Binary files /dev/null and b/zh_CN/_images/30-create-vm.png differ diff --git a/zh_CN/_images/30-vm-catalog.png b/zh_CN/_images/30-vm-catalog.png new file mode 100644 index 00000000..06071cf6 Binary files /dev/null and b/zh_CN/_images/30-vm-catalog.png differ diff --git a/zh_CN/_images/30-vm-instances.png b/zh_CN/_images/30-vm-instances.png new file mode 100644 index 00000000..3c38bd8d Binary files /dev/null and b/zh_CN/_images/30-vm-instances.png differ diff --git a/zh_CN/_images/30-vm-none.png b/zh_CN/_images/30-vm-none.png new file mode 100644 index 00000000..e043ef03 Binary files /dev/null and b/zh_CN/_images/30-vm-none.png differ diff --git a/zh_CN/_images/31-select-boot-disk.png b/zh_CN/_images/31-select-boot-disk.png new file mode 100644 index 00000000..b0b44cdf Binary files /dev/null and b/zh_CN/_images/31-select-boot-disk.png differ diff --git a/zh_CN/_images/40-clear-vm-security.png b/zh_CN/_images/40-clear-vm-security.png new file mode 100644 index 00000000..8d45b4a4 Binary files /dev/null and b/zh_CN/_images/40-clear-vm-security.png differ diff --git a/zh_CN/_images/40-ssh-key.png b/zh_CN/_images/40-ssh-key.png new file mode 100644 index 00000000..e18a390c Binary files /dev/null and b/zh_CN/_images/40-ssh-key.png differ diff --git a/zh_CN/_images/41-vm-created.png b/zh_CN/_images/41-vm-created.png new file mode 100644 index 00000000..ec4f3a20 Binary files /dev/null and b/zh_CN/_images/41-vm-created.png differ diff --git a/zh_CN/_images/42-ssh-vm.png b/zh_CN/_images/42-ssh-vm.png new file mode 100644 index 00000000..92badb80 Binary files /dev/null and b/zh_CN/_images/42-ssh-vm.png differ diff --git a/zh_CN/_images/architect-lifecycle-1.png b/zh_CN/_images/architect-lifecycle-1.png new file mode 100644 index 00000000..294d0f35 Binary files /dev/null and b/zh_CN/_images/architect-lifecycle-1.png differ diff --git a/zh_CN/_images/autoproxy_0.png b/zh_CN/_images/autoproxy_0.png new file mode 100644 index 00000000..7a02cd81 Binary files /dev/null and b/zh_CN/_images/autoproxy_0.png differ diff --git a/zh_CN/_images/aws-web-1.png b/zh_CN/_images/aws-web-1.png new file mode 100644 index 00000000..c4fad685 Binary files /dev/null and b/zh_CN/_images/aws-web-1.png differ diff --git a/zh_CN/_images/aws-web-10.png b/zh_CN/_images/aws-web-10.png new file mode 100644 index 00000000..b4fbeb13 Binary files /dev/null and b/zh_CN/_images/aws-web-10.png differ diff --git a/zh_CN/_images/aws-web-11.png b/zh_CN/_images/aws-web-11.png new file mode 100644 index 00000000..2a6dcab0 Binary files /dev/null and b/zh_CN/_images/aws-web-11.png differ diff --git a/zh_CN/_images/aws-web-12.png b/zh_CN/_images/aws-web-12.png new file mode 100644 index 00000000..1091ea72 Binary files /dev/null and b/zh_CN/_images/aws-web-12.png differ diff --git a/zh_CN/_images/aws-web-13.png b/zh_CN/_images/aws-web-13.png new file mode 100644 index 00000000..507c8c12 Binary files /dev/null and b/zh_CN/_images/aws-web-13.png differ diff --git a/zh_CN/_images/aws-web-14.png b/zh_CN/_images/aws-web-14.png new file mode 100644 index 00000000..36e10661 Binary files /dev/null and b/zh_CN/_images/aws-web-14.png differ diff --git a/zh_CN/_images/aws-web-2.png b/zh_CN/_images/aws-web-2.png new file mode 100644 index 00000000..8bb6ffa0 Binary files /dev/null and b/zh_CN/_images/aws-web-2.png differ diff --git a/zh_CN/_images/aws-web-3.png b/zh_CN/_images/aws-web-3.png new file mode 100644 index 00000000..7beb5ad8 Binary files /dev/null and b/zh_CN/_images/aws-web-3.png differ diff --git a/zh_CN/_images/aws-web-4.png b/zh_CN/_images/aws-web-4.png new file mode 100644 index 00000000..cd143b51 Binary files /dev/null and b/zh_CN/_images/aws-web-4.png differ diff --git a/zh_CN/_images/aws-web-5.png b/zh_CN/_images/aws-web-5.png new file mode 100644 index 00000000..9c70a903 Binary files /dev/null and b/zh_CN/_images/aws-web-5.png differ diff --git a/zh_CN/_images/aws-web-6.png b/zh_CN/_images/aws-web-6.png new file mode 100644 index 00000000..a5819f7a Binary files /dev/null and b/zh_CN/_images/aws-web-6.png differ diff --git a/zh_CN/_images/aws-web-7.png b/zh_CN/_images/aws-web-7.png new file mode 100644 index 00000000..dad60bd8 Binary files /dev/null and b/zh_CN/_images/aws-web-7.png differ diff --git a/zh_CN/_images/aws-web-8.png b/zh_CN/_images/aws-web-8.png new file mode 100644 index 00000000..9e927a43 Binary files /dev/null and b/zh_CN/_images/aws-web-8.png differ diff --git a/zh_CN/_images/aws-web-9.png b/zh_CN/_images/aws-web-9.png new file mode 100644 index 00000000..2c1f411c Binary files /dev/null and b/zh_CN/_images/aws-web-9.png differ diff --git a/zh_CN/_images/azure-1.png b/zh_CN/_images/azure-1.png new file mode 100644 index 00000000..25c1800f Binary files /dev/null and b/zh_CN/_images/azure-1.png differ diff --git a/zh_CN/_images/azure-2.png b/zh_CN/_images/azure-2.png new file mode 100644 index 00000000..8364393c Binary files /dev/null and b/zh_CN/_images/azure-2.png differ diff --git a/zh_CN/_images/azure-3.png b/zh_CN/_images/azure-3.png new file mode 100644 index 00000000..dfb1c11c Binary files /dev/null and b/zh_CN/_images/azure-3.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-01.png b/zh_CN/_images/bare-metal-install-desktop-01.png new file mode 100644 index 00000000..2e94163e Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-01.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-011.png b/zh_CN/_images/bare-metal-install-desktop-011.png new file mode 100644 index 00000000..2e94163e Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-011.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-02.png b/zh_CN/_images/bare-metal-install-desktop-02.png new file mode 100644 index 00000000..bce97b57 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-02.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-03.png b/zh_CN/_images/bare-metal-install-desktop-03.png new file mode 100644 index 00000000..a2650b35 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-03.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-04.png b/zh_CN/_images/bare-metal-install-desktop-04.png new file mode 100644 index 00000000..0ae7d397 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-04.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-05.png b/zh_CN/_images/bare-metal-install-desktop-05.png new file mode 100644 index 00000000..7efc721f Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-05.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-06.png b/zh_CN/_images/bare-metal-install-desktop-06.png new file mode 100644 index 00000000..8a966ab7 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-06.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-07.png b/zh_CN/_images/bare-metal-install-desktop-07.png new file mode 100644 index 00000000..13a3d5f2 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-07.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-08.png b/zh_CN/_images/bare-metal-install-desktop-08.png new file mode 100644 index 00000000..e35d2948 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-08.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-09.png b/zh_CN/_images/bare-metal-install-desktop-09.png new file mode 100644 index 00000000..8497270d Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-09.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-10.png b/zh_CN/_images/bare-metal-install-desktop-10.png new file mode 100644 index 00000000..db05151c Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-10.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-11.png b/zh_CN/_images/bare-metal-install-desktop-11.png new file mode 100644 index 00000000..8fdfdcf0 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-11.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-12.png b/zh_CN/_images/bare-metal-install-desktop-12.png new file mode 100644 index 00000000..98edfbb7 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-12.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-13.png b/zh_CN/_images/bare-metal-install-desktop-13.png new file mode 100644 index 00000000..99cc6763 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-13.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-14.png b/zh_CN/_images/bare-metal-install-desktop-14.png new file mode 100644 index 00000000..f47bd702 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-14.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-15.png b/zh_CN/_images/bare-metal-install-desktop-15.png new file mode 100644 index 00000000..d81b6dc3 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-15.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-16.png b/zh_CN/_images/bare-metal-install-desktop-16.png new file mode 100644 index 00000000..9560bf24 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-16.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-17.png b/zh_CN/_images/bare-metal-install-desktop-17.png new file mode 100644 index 00000000..d51a0fa7 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-17.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-18.png b/zh_CN/_images/bare-metal-install-desktop-18.png new file mode 100644 index 00000000..d6ac2d52 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-18.png differ diff --git a/zh_CN/_images/bare-metal-install-desktop-19.png b/zh_CN/_images/bare-metal-install-desktop-19.png new file mode 100644 index 00000000..a82cb2a6 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-desktop-19.png differ diff --git a/zh_CN/_images/bare-metal-install-server-01.png b/zh_CN/_images/bare-metal-install-server-01.png new file mode 100644 index 00000000..2e94163e Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-01.png differ diff --git a/zh_CN/_images/bare-metal-install-server-02.png b/zh_CN/_images/bare-metal-install-server-02.png new file mode 100644 index 00000000..688f85d5 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-02.png differ diff --git a/zh_CN/_images/bare-metal-install-server-03.png b/zh_CN/_images/bare-metal-install-server-03.png new file mode 100644 index 00000000..b644a0a5 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-03.png differ diff --git a/zh_CN/_images/bare-metal-install-server-04.png b/zh_CN/_images/bare-metal-install-server-04.png new file mode 100644 index 00000000..73bb3f90 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-04.png differ diff --git a/zh_CN/_images/bare-metal-install-server-05.png b/zh_CN/_images/bare-metal-install-server-05.png new file mode 100644 index 00000000..9be288ee Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-05.png differ diff --git a/zh_CN/_images/bare-metal-install-server-06.png b/zh_CN/_images/bare-metal-install-server-06.png new file mode 100644 index 00000000..3e45ec66 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-06.png differ diff --git a/zh_CN/_images/bare-metal-install-server-07.png b/zh_CN/_images/bare-metal-install-server-07.png new file mode 100644 index 00000000..2ebac81e Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-07.png differ diff --git a/zh_CN/_images/bare-metal-install-server-08.png b/zh_CN/_images/bare-metal-install-server-08.png new file mode 100644 index 00000000..7ec125b4 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-08.png differ diff --git a/zh_CN/_images/bare-metal-install-server-09.png b/zh_CN/_images/bare-metal-install-server-09.png new file mode 100644 index 00000000..9ccd2c2b Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-09.png differ diff --git a/zh_CN/_images/bare-metal-install-server-10.png b/zh_CN/_images/bare-metal-install-server-10.png new file mode 100644 index 00000000..9603f3ae Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-10.png differ diff --git a/zh_CN/_images/bare-metal-install-server-11.png b/zh_CN/_images/bare-metal-install-server-11.png new file mode 100644 index 00000000..351bf7f1 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-11.png differ diff --git a/zh_CN/_images/bare-metal-install-server-12.png b/zh_CN/_images/bare-metal-install-server-12.png new file mode 100644 index 00000000..268260be Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-12.png differ diff --git a/zh_CN/_images/bare-metal-install-server-13.png b/zh_CN/_images/bare-metal-install-server-13.png new file mode 100644 index 00000000..7de11593 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-13.png differ diff --git a/zh_CN/_images/bare-metal-install-server-14.png b/zh_CN/_images/bare-metal-install-server-14.png new file mode 100644 index 00000000..2dd429f5 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-14.png differ diff --git a/zh_CN/_images/bare-metal-install-server-15.png b/zh_CN/_images/bare-metal-install-server-15.png new file mode 100644 index 00000000..1913d944 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-15.png differ diff --git a/zh_CN/_images/bare-metal-install-server-16.png b/zh_CN/_images/bare-metal-install-server-16.png new file mode 100644 index 00000000..72974308 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-16.png differ diff --git a/zh_CN/_images/bare-metal-install-server-17.png b/zh_CN/_images/bare-metal-install-server-17.png new file mode 100644 index 00000000..315d7673 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-17.png differ diff --git a/zh_CN/_images/bare-metal-install-server-18.png b/zh_CN/_images/bare-metal-install-server-18.png new file mode 100644 index 00000000..4a082720 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-18.png differ diff --git a/zh_CN/_images/bare-metal-install-server-19.png b/zh_CN/_images/bare-metal-install-server-19.png new file mode 100644 index 00000000..79db68cb Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-19.png differ diff --git a/zh_CN/_images/bare-metal-install-server-20.png b/zh_CN/_images/bare-metal-install-server-20.png new file mode 100644 index 00000000..4aed6b7c Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-20.png differ diff --git a/zh_CN/_images/bare-metal-install-server-21.png b/zh_CN/_images/bare-metal-install-server-21.png new file mode 100644 index 00000000..11ed3660 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-21.png differ diff --git a/zh_CN/_images/bare-metal-install-server-22.png b/zh_CN/_images/bare-metal-install-server-22.png new file mode 100644 index 00000000..77cddd2a Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-22.png differ diff --git a/zh_CN/_images/bare-metal-install-server-23.png b/zh_CN/_images/bare-metal-install-server-23.png new file mode 100644 index 00000000..7662d260 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-23.png differ diff --git a/zh_CN/_images/bare-metal-install-server-24.png b/zh_CN/_images/bare-metal-install-server-24.png new file mode 100644 index 00000000..1f26f912 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-24.png differ diff --git a/zh_CN/_images/bare-metal-install-server-25.png b/zh_CN/_images/bare-metal-install-server-25.png new file mode 100644 index 00000000..c1e425bc Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-25.png differ diff --git a/zh_CN/_images/bare-metal-install-server-26.png b/zh_CN/_images/bare-metal-install-server-26.png new file mode 100644 index 00000000..6a584f88 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-26.png differ diff --git a/zh_CN/_images/bare-metal-install-server-27.png b/zh_CN/_images/bare-metal-install-server-27.png new file mode 100644 index 00000000..92023a3f Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-27.png differ diff --git a/zh_CN/_images/bare-metal-install-server-28.png b/zh_CN/_images/bare-metal-install-server-28.png new file mode 100644 index 00000000..bd19aacf Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-28.png differ diff --git a/zh_CN/_images/bare-metal-install-server-29.png b/zh_CN/_images/bare-metal-install-server-29.png new file mode 100644 index 00000000..7a4b9676 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-29.png differ diff --git a/zh_CN/_images/bare-metal-install-server-30.png b/zh_CN/_images/bare-metal-install-server-30.png new file mode 100644 index 00000000..fdb1d556 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-30.png differ diff --git a/zh_CN/_images/bare-metal-install-server-31.png b/zh_CN/_images/bare-metal-install-server-31.png new file mode 100644 index 00000000..7a046191 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-31.png differ diff --git a/zh_CN/_images/bare-metal-install-server-32.png b/zh_CN/_images/bare-metal-install-server-32.png new file mode 100644 index 00000000..863561c3 Binary files /dev/null and b/zh_CN/_images/bare-metal-install-server-32.png differ diff --git a/zh_CN/_images/bootable-usb-mac-01.png b/zh_CN/_images/bootable-usb-mac-01.png new file mode 100644 index 00000000..1fa8114c Binary files /dev/null and b/zh_CN/_images/bootable-usb-mac-01.png differ diff --git a/zh_CN/_images/bootable-usb-windows-02.png b/zh_CN/_images/bootable-usb-windows-02.png new file mode 100644 index 00000000..399ff4d1 Binary files /dev/null and b/zh_CN/_images/bootable-usb-windows-02.png differ diff --git a/zh_CN/_images/bootable-usb-windows-03.png b/zh_CN/_images/bootable-usb-windows-03.png new file mode 100644 index 00000000..a4345853 Binary files /dev/null and b/zh_CN/_images/bootable-usb-windows-03.png differ diff --git a/zh_CN/_images/bulk-provision-flow.png b/zh_CN/_images/bulk-provision-flow.png new file mode 100644 index 00000000..036982f7 Binary files /dev/null and b/zh_CN/_images/bulk-provision-flow.png differ diff --git a/zh_CN/_images/debug-diagram.png b/zh_CN/_images/debug-diagram.png new file mode 100644 index 00000000..d85a4045 Binary files /dev/null and b/zh_CN/_images/debug-diagram.png differ diff --git a/zh_CN/_images/dlrs-fig-1.png b/zh_CN/_images/dlrs-fig-1.png new file mode 100644 index 00000000..8054b120 Binary files /dev/null and b/zh_CN/_images/dlrs-fig-1.png differ diff --git a/zh_CN/_images/dlrs-fig-2.png b/zh_CN/_images/dlrs-fig-2.png new file mode 100644 index 00000000..df7a72ab Binary files /dev/null and b/zh_CN/_images/dlrs-fig-2.png differ diff --git a/zh_CN/_images/dlrs-fig-3.png b/zh_CN/_images/dlrs-fig-3.png new file mode 100644 index 00000000..ce07bbc0 Binary files /dev/null and b/zh_CN/_images/dlrs-fig-3.png differ diff --git a/zh_CN/_images/dlrs-fig-4.png b/zh_CN/_images/dlrs-fig-4.png new file mode 100644 index 00000000..387cda2d Binary files /dev/null and b/zh_CN/_images/dlrs-fig-4.png differ diff --git a/zh_CN/_images/dlrs-fig-5.png b/zh_CN/_images/dlrs-fig-5.png new file mode 100644 index 00000000..6c7923be Binary files /dev/null and b/zh_CN/_images/dlrs-fig-5.png differ diff --git a/zh_CN/_images/download-verify-decompress-windows-fig-1.png b/zh_CN/_images/download-verify-decompress-windows-fig-1.png new file mode 100644 index 00000000..0b0ee7f6 Binary files /dev/null and b/zh_CN/_images/download-verify-decompress-windows-fig-1.png differ diff --git a/zh_CN/_images/download-verify-decompress-windows-fig-11.png b/zh_CN/_images/download-verify-decompress-windows-fig-11.png new file mode 100644 index 00000000..0b0ee7f6 Binary files /dev/null and b/zh_CN/_images/download-verify-decompress-windows-fig-11.png differ diff --git a/zh_CN/_images/increase-virtual-disk-size-1.png b/zh_CN/_images/increase-virtual-disk-size-1.png new file mode 100644 index 00000000..a4692c9a Binary files /dev/null and b/zh_CN/_images/increase-virtual-disk-size-1.png differ diff --git a/zh_CN/_images/increase-virtual-disk-size-2.png b/zh_CN/_images/increase-virtual-disk-size-2.png new file mode 100644 index 00000000..90b1eb28 Binary files /dev/null and b/zh_CN/_images/increase-virtual-disk-size-2.png differ diff --git a/zh_CN/_images/machine-learning-1.png b/zh_CN/_images/machine-learning-1.png new file mode 100644 index 00000000..caddc867 Binary files /dev/null and b/zh_CN/_images/machine-learning-1.png differ diff --git a/zh_CN/_images/machine-learning-2.png b/zh_CN/_images/machine-learning-2.png new file mode 100644 index 00000000..70ee944c Binary files /dev/null and b/zh_CN/_images/machine-learning-2.png differ diff --git a/zh_CN/_images/machine-learning-3.png b/zh_CN/_images/machine-learning-3.png new file mode 100644 index 00000000..b54503a5 Binary files /dev/null and b/zh_CN/_images/machine-learning-3.png differ diff --git a/zh_CN/_images/machine-learning-4.png b/zh_CN/_images/machine-learning-4.png new file mode 100644 index 00000000..7cfdbe5d Binary files /dev/null and b/zh_CN/_images/machine-learning-4.png differ diff --git a/zh_CN/_images/machine-learning-5.png b/zh_CN/_images/machine-learning-5.png new file mode 100644 index 00000000..ae7e7d03 Binary files /dev/null and b/zh_CN/_images/machine-learning-5.png differ diff --git a/zh_CN/_images/machine-learning-6.png b/zh_CN/_images/machine-learning-6.png new file mode 100644 index 00000000..b074d787 Binary files /dev/null and b/zh_CN/_images/machine-learning-6.png differ diff --git a/zh_CN/_images/machine-learning-7.png b/zh_CN/_images/machine-learning-7.png new file mode 100644 index 00000000..0c6715fa Binary files /dev/null and b/zh_CN/_images/machine-learning-7.png differ diff --git a/zh_CN/_images/machine-learning-8.png b/zh_CN/_images/machine-learning-8.png new file mode 100644 index 00000000..add49999 Binary files /dev/null and b/zh_CN/_images/machine-learning-8.png differ diff --git a/zh_CN/_images/mixer-about-1.png b/zh_CN/_images/mixer-about-1.png new file mode 100644 index 00000000..8120a068 Binary files /dev/null and b/zh_CN/_images/mixer-about-1.png differ diff --git a/zh_CN/_images/network-boot-flow.png b/zh_CN/_images/network-boot-flow.png new file mode 100644 index 00000000..7ad68c76 Binary files /dev/null and b/zh_CN/_images/network-boot-flow.png differ diff --git a/zh_CN/_images/network-boot-setup.png b/zh_CN/_images/network-boot-setup.png new file mode 100644 index 00000000..dc9239db Binary files /dev/null and b/zh_CN/_images/network-boot-setup.png differ diff --git a/zh_CN/_images/pktgen_lw3fd.png b/zh_CN/_images/pktgen_lw3fd.png new file mode 100644 index 00000000..d17318b1 Binary files /dev/null and b/zh_CN/_images/pktgen_lw3fd.png differ diff --git a/zh_CN/_images/pyshical_net.png b/zh_CN/_images/pyshical_net.png new file mode 100644 index 00000000..182ba6ce Binary files /dev/null and b/zh_CN/_images/pyshical_net.png differ diff --git a/zh_CN/_images/run-cell-button.png b/zh_CN/_images/run-cell-button.png new file mode 100644 index 00000000..b61de4ce Binary files /dev/null and b/zh_CN/_images/run-cell-button.png differ diff --git a/zh_CN/_images/smb-1.png b/zh_CN/_images/smb-1.png new file mode 100644 index 00000000..8b0b4196 Binary files /dev/null and b/zh_CN/_images/smb-1.png differ diff --git a/zh_CN/_images/smb-2.png b/zh_CN/_images/smb-2.png new file mode 100644 index 00000000..f7a852ff Binary files /dev/null and b/zh_CN/_images/smb-2.png differ diff --git a/zh_CN/_images/smb-desktop-1.png b/zh_CN/_images/smb-desktop-1.png new file mode 100644 index 00000000..866a45ef Binary files /dev/null and b/zh_CN/_images/smb-desktop-1.png differ diff --git a/zh_CN/_images/smb-desktop-2.png b/zh_CN/_images/smb-desktop-2.png new file mode 100644 index 00000000..9ed4a61d Binary files /dev/null and b/zh_CN/_images/smb-desktop-2.png differ diff --git a/zh_CN/_images/smb-desktop-3.png b/zh_CN/_images/smb-desktop-3.png new file mode 100644 index 00000000..7688e484 Binary files /dev/null and b/zh_CN/_images/smb-desktop-3.png differ diff --git a/zh_CN/_images/stateless-1.png b/zh_CN/_images/stateless-1.png new file mode 100644 index 00000000..550f37ce Binary files /dev/null and b/zh_CN/_images/stateless-1.png differ diff --git a/zh_CN/_images/stateless-2.png b/zh_CN/_images/stateless-2.png new file mode 100644 index 00000000..94e8af22 Binary files /dev/null and b/zh_CN/_images/stateless-2.png differ diff --git a/zh_CN/_images/telemetry-backend-1.png b/zh_CN/_images/telemetry-backend-1.png new file mode 100644 index 00000000..9cd8df75 Binary files /dev/null and b/zh_CN/_images/telemetry-backend-1.png differ diff --git a/zh_CN/_images/telemetry-e2e.png b/zh_CN/_images/telemetry-e2e.png new file mode 100644 index 00000000..75868291 Binary files /dev/null and b/zh_CN/_images/telemetry-e2e.png differ diff --git a/zh_CN/_images/telemetry-e2e1.png b/zh_CN/_images/telemetry-e2e1.png new file mode 100644 index 00000000..75868291 Binary files /dev/null and b/zh_CN/_images/telemetry-e2e1.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-01.png b/zh_CN/_images/virtualbox-cl-installer-01.png new file mode 100644 index 00000000..7722a886 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-01.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-02.png b/zh_CN/_images/virtualbox-cl-installer-02.png new file mode 100644 index 00000000..365f8545 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-02.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-03.png b/zh_CN/_images/virtualbox-cl-installer-03.png new file mode 100644 index 00000000..496f270a Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-03.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-04.png b/zh_CN/_images/virtualbox-cl-installer-04.png new file mode 100644 index 00000000..31662623 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-04.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-05.png b/zh_CN/_images/virtualbox-cl-installer-05.png new file mode 100644 index 00000000..c250776d Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-05.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-06.png b/zh_CN/_images/virtualbox-cl-installer-06.png new file mode 100644 index 00000000..9926af81 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-06.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-07.png b/zh_CN/_images/virtualbox-cl-installer-07.png new file mode 100644 index 00000000..8f2c2b34 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-07.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-08.png b/zh_CN/_images/virtualbox-cl-installer-08.png new file mode 100644 index 00000000..7b23c454 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-08.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-09.png b/zh_CN/_images/virtualbox-cl-installer-09.png new file mode 100644 index 00000000..f6feabfa Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-09.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-10.png b/zh_CN/_images/virtualbox-cl-installer-10.png new file mode 100644 index 00000000..0ffd96e8 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-10.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-11.png b/zh_CN/_images/virtualbox-cl-installer-11.png new file mode 100644 index 00000000..b0ca6d35 Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-11.png differ diff --git a/zh_CN/_images/virtualbox-cl-installer-12.png b/zh_CN/_images/virtualbox-cl-installer-12.png new file mode 100644 index 00000000..ba6344de Binary files /dev/null and b/zh_CN/_images/virtualbox-cl-installer-12.png differ diff --git a/zh_CN/_images/vmw-player-01.png b/zh_CN/_images/vmw-player-01.png new file mode 100644 index 00000000..23ba879a Binary files /dev/null and b/zh_CN/_images/vmw-player-01.png differ diff --git a/zh_CN/_images/vmw-player-02.png b/zh_CN/_images/vmw-player-02.png new file mode 100644 index 00000000..89ad86e6 Binary files /dev/null and b/zh_CN/_images/vmw-player-02.png differ diff --git a/zh_CN/_images/vmw-player-03.png b/zh_CN/_images/vmw-player-03.png new file mode 100644 index 00000000..e037b30e Binary files /dev/null and b/zh_CN/_images/vmw-player-03.png differ diff --git a/zh_CN/_images/vmw-player-04.png b/zh_CN/_images/vmw-player-04.png new file mode 100644 index 00000000..ea4d9f69 Binary files /dev/null and b/zh_CN/_images/vmw-player-04.png differ diff --git a/zh_CN/_images/vmw-player-05.png b/zh_CN/_images/vmw-player-05.png new file mode 100644 index 00000000..27147973 Binary files /dev/null and b/zh_CN/_images/vmw-player-05.png differ diff --git a/zh_CN/_images/vmw-player-06.png b/zh_CN/_images/vmw-player-06.png new file mode 100644 index 00000000..d8157359 Binary files /dev/null and b/zh_CN/_images/vmw-player-06.png differ diff --git a/zh_CN/_images/vmw-player-07.png b/zh_CN/_images/vmw-player-07.png new file mode 100644 index 00000000..89686569 Binary files /dev/null and b/zh_CN/_images/vmw-player-07.png differ diff --git a/zh_CN/_images/vmw-player-08.png b/zh_CN/_images/vmw-player-08.png new file mode 100644 index 00000000..891e3366 Binary files /dev/null and b/zh_CN/_images/vmw-player-08.png differ diff --git a/zh_CN/_images/vmw-player-09.png b/zh_CN/_images/vmw-player-09.png new file mode 100644 index 00000000..0644ac29 Binary files /dev/null and b/zh_CN/_images/vmw-player-09.png differ diff --git a/zh_CN/_images/vmw-player-10.png b/zh_CN/_images/vmw-player-10.png new file mode 100644 index 00000000..4f6687c7 Binary files /dev/null and b/zh_CN/_images/vmw-player-10.png differ diff --git a/zh_CN/_images/vmw-player-11.png b/zh_CN/_images/vmw-player-11.png new file mode 100644 index 00000000..1eba9c88 Binary files /dev/null and b/zh_CN/_images/vmw-player-11.png differ diff --git a/zh_CN/_images/vmw-player-preconf-01.png b/zh_CN/_images/vmw-player-preconf-01.png new file mode 100644 index 00000000..69b6a24e Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-01.png differ diff --git a/zh_CN/_images/vmw-player-preconf-02.png b/zh_CN/_images/vmw-player-preconf-02.png new file mode 100644 index 00000000..d24c0612 Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-02.png differ diff --git a/zh_CN/_images/vmw-player-preconf-03.png b/zh_CN/_images/vmw-player-preconf-03.png new file mode 100644 index 00000000..2fbe4cea Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-03.png differ diff --git a/zh_CN/_images/vmw-player-preconf-04.png b/zh_CN/_images/vmw-player-preconf-04.png new file mode 100644 index 00000000..6a01685f Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-04.png differ diff --git a/zh_CN/_images/vmw-player-preconf-05.png b/zh_CN/_images/vmw-player-preconf-05.png new file mode 100644 index 00000000..22f40dfc Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-05.png differ diff --git a/zh_CN/_images/vmw-player-preconf-06.png b/zh_CN/_images/vmw-player-preconf-06.png new file mode 100644 index 00000000..eeb4b36e Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-06.png differ diff --git a/zh_CN/_images/vmw-player-preconf-07.png b/zh_CN/_images/vmw-player-preconf-07.png new file mode 100644 index 00000000..4f46b24e Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-07.png differ diff --git a/zh_CN/_images/vmw-player-preconf-08.png b/zh_CN/_images/vmw-player-preconf-08.png new file mode 100644 index 00000000..d86378bb Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-08.png differ diff --git a/zh_CN/_images/vmw-player-preconf-09.png b/zh_CN/_images/vmw-player-preconf-09.png new file mode 100644 index 00000000..416fb206 Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-09.png differ diff --git a/zh_CN/_images/vmw-player-preconf-10.png b/zh_CN/_images/vmw-player-preconf-10.png new file mode 100644 index 00000000..3efc71e4 Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-10.png differ diff --git a/zh_CN/_images/vmw-player-preconf-11.png b/zh_CN/_images/vmw-player-preconf-11.png new file mode 100644 index 00000000..8cd9d0a9 Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-11.png differ diff --git a/zh_CN/_images/vmw-player-preconf-12.png b/zh_CN/_images/vmw-player-preconf-12.png new file mode 100644 index 00000000..36f43d3e Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-12.png differ diff --git a/zh_CN/_images/vmw-player-preconf-13.png b/zh_CN/_images/vmw-player-preconf-13.png new file mode 100644 index 00000000..30f77a88 Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-13.png differ diff --git a/zh_CN/_images/vmw-player-preconf-14.png b/zh_CN/_images/vmw-player-preconf-14.png new file mode 100644 index 00000000..e115111e Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-14.png differ diff --git a/zh_CN/_images/vmw-player-preconf-15.png b/zh_CN/_images/vmw-player-preconf-15.png new file mode 100644 index 00000000..7d2111fa Binary files /dev/null and b/zh_CN/_images/vmw-player-preconf-15.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-1.png b/zh_CN/_images/vmware-esxi-install-cl-1.png new file mode 100644 index 00000000..828ca838 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-1.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-10.png b/zh_CN/_images/vmware-esxi-install-cl-10.png new file mode 100644 index 00000000..85688105 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-10.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-11.png b/zh_CN/_images/vmware-esxi-install-cl-11.png new file mode 100644 index 00000000..bb134ba2 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-11.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-12.png b/zh_CN/_images/vmware-esxi-install-cl-12.png new file mode 100644 index 00000000..ba26d552 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-12.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-13.png b/zh_CN/_images/vmware-esxi-install-cl-13.png new file mode 100644 index 00000000..3f11505d Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-13.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-14.png b/zh_CN/_images/vmware-esxi-install-cl-14.png new file mode 100644 index 00000000..59e07de1 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-14.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-15.png b/zh_CN/_images/vmware-esxi-install-cl-15.png new file mode 100644 index 00000000..9d654081 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-15.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-16.png b/zh_CN/_images/vmware-esxi-install-cl-16.png new file mode 100644 index 00000000..bb134ba2 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-16.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-2.png b/zh_CN/_images/vmware-esxi-install-cl-2.png new file mode 100644 index 00000000..a3554e92 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-2.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-3.png b/zh_CN/_images/vmware-esxi-install-cl-3.png new file mode 100644 index 00000000..aec0c8d0 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-3.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-4.png b/zh_CN/_images/vmware-esxi-install-cl-4.png new file mode 100644 index 00000000..30cabb0e Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-4.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-5.png b/zh_CN/_images/vmware-esxi-install-cl-5.png new file mode 100644 index 00000000..f1e7cee1 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-5.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-6.png b/zh_CN/_images/vmware-esxi-install-cl-6.png new file mode 100644 index 00000000..b0a58487 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-6.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-7.png b/zh_CN/_images/vmware-esxi-install-cl-7.png new file mode 100644 index 00000000..4971a78e Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-7.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-8.png b/zh_CN/_images/vmware-esxi-install-cl-8.png new file mode 100644 index 00000000..b188da8a Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-8.png differ diff --git a/zh_CN/_images/vmware-esxi-install-cl-9.png b/zh_CN/_images/vmware-esxi-install-cl-9.png new file mode 100644 index 00000000..24e72696 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-install-cl-9.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-1.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-1.png new file mode 100644 index 00000000..828ca838 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-1.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-10.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-10.png new file mode 100644 index 00000000..9648bdaa Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-10.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-11.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-11.png new file mode 100644 index 00000000..c12c90fb Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-11.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-12.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-12.png new file mode 100644 index 00000000..9d654081 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-12.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-13.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-13.png new file mode 100644 index 00000000..bb134ba2 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-13.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-2.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-2.png new file mode 100644 index 00000000..a3554e92 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-2.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-3.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-3.png new file mode 100644 index 00000000..209a9492 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-3.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-4.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-4.png new file mode 100644 index 00000000..30cabb0e Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-4.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-5.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-5.png new file mode 100644 index 00000000..f1e7cee1 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-5.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-6.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-6.png new file mode 100644 index 00000000..b0a58487 Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-6.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-7.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-7.png new file mode 100644 index 00000000..4971a78e Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-7.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-8.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-8.png new file mode 100644 index 00000000..fe3c517f Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-8.png differ diff --git a/zh_CN/_images/vmware-esxi-preconfigured-cl-image-9.png b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-9.png new file mode 100644 index 00000000..d1af9ceb Binary files /dev/null and b/zh_CN/_images/vmware-esxi-preconfigured-cl-image-9.png differ diff --git a/zh_CN/_images/vnc-1.png b/zh_CN/_images/vnc-1.png new file mode 100644 index 00000000..bb496aaf Binary files /dev/null and b/zh_CN/_images/vnc-1.png differ diff --git a/zh_CN/_images/vnc-10.png b/zh_CN/_images/vnc-10.png new file mode 100644 index 00000000..be6751fc Binary files /dev/null and b/zh_CN/_images/vnc-10.png differ diff --git a/zh_CN/_images/vnc-2.png b/zh_CN/_images/vnc-2.png new file mode 100644 index 00000000..aa7561f7 Binary files /dev/null and b/zh_CN/_images/vnc-2.png differ diff --git a/zh_CN/_images/vnc-3.png b/zh_CN/_images/vnc-3.png new file mode 100644 index 00000000..29365e08 Binary files /dev/null and b/zh_CN/_images/vnc-3.png differ diff --git a/zh_CN/_images/vnc-4.png b/zh_CN/_images/vnc-4.png new file mode 100644 index 00000000..b3608289 Binary files /dev/null and b/zh_CN/_images/vnc-4.png differ diff --git a/zh_CN/_images/vnc-6.png b/zh_CN/_images/vnc-6.png new file mode 100644 index 00000000..5a808e34 Binary files /dev/null and b/zh_CN/_images/vnc-6.png differ diff --git a/zh_CN/_images/vnc-7.png b/zh_CN/_images/vnc-7.png new file mode 100644 index 00000000..a20e6c97 Binary files /dev/null and b/zh_CN/_images/vnc-7.png differ diff --git a/zh_CN/_images/vnc-8.png b/zh_CN/_images/vnc-8.png new file mode 100644 index 00000000..fa702cb4 Binary files /dev/null and b/zh_CN/_images/vnc-8.png differ diff --git a/zh_CN/_images/vnc-9.png b/zh_CN/_images/vnc-9.png new file mode 100644 index 00000000..a8cafba4 Binary files /dev/null and b/zh_CN/_images/vnc-9.png differ diff --git a/zh_CN/_images/web-server-install-1.png b/zh_CN/_images/web-server-install-1.png new file mode 100644 index 00000000..d1dd0e22 Binary files /dev/null and b/zh_CN/_images/web-server-install-1.png differ diff --git a/zh_CN/_images/web-server-install-2.png b/zh_CN/_images/web-server-install-2.png new file mode 100644 index 00000000..b0fd4d3f Binary files /dev/null and b/zh_CN/_images/web-server-install-2.png differ diff --git a/zh_CN/_images/web-server-install-3.png b/zh_CN/_images/web-server-install-3.png new file mode 100644 index 00000000..5fbdad01 Binary files /dev/null and b/zh_CN/_images/web-server-install-3.png differ diff --git a/zh_CN/_images/web-server-install-4.png b/zh_CN/_images/web-server-install-4.png new file mode 100644 index 00000000..2c553ce9 Binary files /dev/null and b/zh_CN/_images/web-server-install-4.png differ diff --git a/zh_CN/_images/web-server-install-5.png b/zh_CN/_images/web-server-install-5.png new file mode 100644 index 00000000..292dfbc6 Binary files /dev/null and b/zh_CN/_images/web-server-install-5.png differ diff --git a/zh_CN/_images/web-server-install-6.png b/zh_CN/_images/web-server-install-6.png new file mode 100644 index 00000000..0700a210 Binary files /dev/null and b/zh_CN/_images/web-server-install-6.png differ diff --git a/zh_CN/_images/web-server-install-7.png b/zh_CN/_images/web-server-install-7.png new file mode 100644 index 00000000..f3f9c327 Binary files /dev/null and b/zh_CN/_images/web-server-install-7.png differ diff --git a/zh_CN/_images/web-server-install-8.png b/zh_CN/_images/web-server-install-8.png new file mode 100644 index 00000000..3e631ec1 Binary files /dev/null and b/zh_CN/_images/web-server-install-8.png differ diff --git a/zh_CN/_images/wp-install-1.png b/zh_CN/_images/wp-install-1.png new file mode 100644 index 00000000..3d1239fe Binary files /dev/null and b/zh_CN/_images/wp-install-1.png differ diff --git a/zh_CN/_images/wp-install-2.png b/zh_CN/_images/wp-install-2.png new file mode 100644 index 00000000..6adc942a Binary files /dev/null and b/zh_CN/_images/wp-install-2.png differ diff --git a/zh_CN/_images/wp-install-3.png b/zh_CN/_images/wp-install-3.png new file mode 100644 index 00000000..9e713210 Binary files /dev/null and b/zh_CN/_images/wp-install-3.png differ diff --git a/zh_CN/_images/wp-install-4.png b/zh_CN/_images/wp-install-4.png new file mode 100644 index 00000000..124f3b8e Binary files /dev/null and b/zh_CN/_images/wp-install-4.png differ diff --git a/zh_CN/_images/wp-install-5.png b/zh_CN/_images/wp-install-5.png new file mode 100644 index 00000000..6651b16f Binary files /dev/null and b/zh_CN/_images/wp-install-5.png differ diff --git a/zh_CN/_images/wp-install-6.png b/zh_CN/_images/wp-install-6.png new file mode 100644 index 00000000..6118eebb Binary files /dev/null and b/zh_CN/_images/wp-install-6.png differ diff --git a/zh_CN/_images/wp-install-7.png b/zh_CN/_images/wp-install-7.png new file mode 100644 index 00000000..554a0d36 Binary files /dev/null and b/zh_CN/_images/wp-install-7.png differ diff --git a/zh_CN/_images/wp-install-8.png b/zh_CN/_images/wp-install-8.png new file mode 100644 index 00000000..1e477c25 Binary files /dev/null and b/zh_CN/_images/wp-install-8.png differ diff --git a/zh_CN/_sources/FAQ/faq.rst.txt b/zh_CN/_sources/FAQ/faq.rst.txt new file mode 100644 index 00000000..4b7be4f2 --- /dev/null +++ b/zh_CN/_sources/FAQ/faq.rst.txt @@ -0,0 +1,189 @@ +.. _faq: + +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/zh_CN/_sources/about.rst.txt b/zh_CN/_sources/about.rst.txt new file mode 100644 index 00000000..a17ef5f0 --- /dev/null +++ b/zh_CN/_sources/about.rst.txt @@ -0,0 +1,24 @@ +.. _about: + +About +##### + +Clear Linux is a little different from other distros. Here are some important +tools and concepts for managing your install. + +Training +******** + +Additional training materials are available in the `how-to-clear`_ GitHub\* +project to help you get started with |CL| tools. + +The training helps you create a customized OS that is based on |CL| and provides +complete details on the methods and tools used to create updates and how to +deploy updates to targets. + +To complete the training, you will need a clean |CL| installation and a network connection. The project includes all files needed to complete the exercises. + +* `how-to-clear`_ training on GitHub + + +.. _how-to-clear: https://github.com/clearlinux/how-to-clear diff --git a/zh_CN/_sources/concepts/autospec-about.rst.txt b/zh_CN/_sources/concepts/autospec-about.rst.txt new file mode 100644 index 00000000..ed3e03d9 --- /dev/null +++ b/zh_CN/_sources/concepts/autospec-about.rst.txt @@ -0,0 +1,106 @@ +.. _autospec-about: + +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 ``rpmbuild`` +requires a tarball and .spec file to start, ``autospec`` requires only a tarball +and package name to start. + +How autospec works +****************** + +``autospec`` attempts to infer the requirements of the .spec file by analyzing +the source code and :file:`Makefile` information. It will continuously run +updated builds based on new information discovered from build failures until it +has a complete and valid .spec file. Although not required, you can influence +the behavior of ``autospec`` by providing :ref:`control files `. + +The basic process is described in the following steps: + +#. The :command:`make autospec` command generates a .spec based on + analysis of code and control files, if present. + +#. ``autospec`` creates a ``build root`` with ``mock`` config. + +#. ``autospec`` attempts to build an RPM from the generated .spec. + +#. ``autospec`` detects any missed declarations in the .spec. + +#. If build errors occur, ``autospec`` will scan the build log to try and detect + the root cause. + +#. If ``autospec`` detects the root cause and knows how to continue, it will restart the build + automatically at step 1 with updated build instructions. + +#. Otherwise, ``autospec`` will stop the build for user inspection and editing of control files + to resolve the errors. The user resumes the process at step 1 after errors are resolved. + +Following these steps, ``autospec`` continues to rebuild the package, based on +new information discovered from build failures, until it has a valid .spec. If +no build errors occur, RPM packages are successfully built. + +.. _control-files: + +Control files +************* + +It is possible to influence the behavior of ``autospec`` by providing control +files. These files may be used to alter the default behavior of the configure +routine, to blacklist build dependencies, etc. Control files must be located +in the same directory as the resulting .spec. + +Table 1 shows control files used to control dependencies, for example. + +.. list-table:: **Table 1. Control files to control dependencies** + :widths: 20 80 + :header-rows: 1 + + * - Filename + - Description + * - buildreq_add + - Each line in the file provides the name of a package to add as a + build dependency to the .spec. + * - buildreq_ban + - Each line in the file is a build dependency that under no + circumstance should be automatically added to the build dependencies. + This is useful to block automatic configuration routines adding + undesired functionality, or to omit any automatically discovered + dependencies during tarball scanning. + * - pkgconfig_add + - Each line in the file is assumed to be a pkgconfig() build + dependency. Add the pkg-config names here, as ``autospec`` will + automatically transform the names into their ``pkgconfig($name)`` + style when generating the .spec. + * - pkgconfig_ban + - Each line in this file is a pkgconfig() build dependency that should + not be added automatically to the build, much the same as + `` buildreq_ban``. As with ``pkgconfig_add``, these names are + automatically transformed by ``autospec`` into their correct + ``pkgconfig($name))`` style. + * - requires_add + - Each line in the file provides the name of a package to add as a + runtime dependency to the .spec. + * - requires_ban + - Each line in the file is a runtime dependency that under no + circumstance should be automatically added to the runtime + dependencies. This is useful to block automatic configuration + routines adding undesired functionality, or to omit any automatically + discovered dependencies during tarball scanning. + +Further control of the build can be achieved through the use of the +``options.conf`` file. If this file does not exist, it is created by +``autospec`` with default values. If certain deprecated configuration +files exists ``autospec`` will use the value indicated by those files and +remove them. + +For a comprehensive list of control files, view the `autospec readme`_. + +Related topics +************** + +* :ref:`autospec` +* :ref:`mixer` + +.. _autospec readme: https://github.com/clearlinux/autospec diff --git a/zh_CN/_sources/concepts/bundles-about.rst.txt b/zh_CN/_sources/concepts/bundles-about.rst.txt new file mode 100644 index 00000000..0db3efb2 --- /dev/null +++ b/zh_CN/_sources/concepts/bundles-about.rst.txt @@ -0,0 +1,30 @@ +.. _bundles-about: + +Bundles +####### + +Linux-based operating systems contain the code of several hundred, if +not thousands, of open source projects. To make this manageable, +distributions use a concept called "packages" to configure and compile +the source code of these projects into binaries. + +Many distributions then split the content of these compiled packages +into so-called sub-packages, which are the granularity at which these +distributions deploy their software. With those kinds of distributions, +system administrators can then install and update sub-packages +individually or as a set, using tools such as "yum" and "apt-get." + +The |CL-ATTR| takes a slightly different approach. While we also use the +concept of packages to manage compiling source code into binaries, we do not +use the package concept to deploy software. Instead, we provide software +"bundles" that are installed and managed using :ref:`swupd`. +Each bundle contains as many or as few open source projects needed to provide a complete functionality. + +Next steps +========== + +To put this concept into practice, see the following resources: + +* :ref:`bundles` +* :ref:`bundle-commands` +* :ref:`compatible-kernels` diff --git a/zh_CN/_sources/concepts/mixer-about.rst.txt b/zh_CN/_sources/concepts/mixer-about.rst.txt new file mode 100644 index 00000000..0548ed50 --- /dev/null +++ b/zh_CN/_sources/concepts/mixer-about.rst.txt @@ -0,0 +1,54 @@ +.. _mixer-about: + +Mixer +##### + +|CL-ATTR| is a powerful, modular, and customizable OS. Upstream |CL| offers +many images to support different environments and use-cases. There are +hundreds of bundles that will meet most, if not all, of your OS and software +needs. + +However, if you need additional customization or content, |CL| provides the +mixer tool. Depending on your needs, the mixer tool allows you to: + +* :ref:`create-mix` to create a distinct derivative of the |CL| that + contains your custom software. + +.. _create-mix: + +Create a mix +============ + +When creating a mix, you can + +* Use any existing upstream bundles with no modification. +* Redefine what goes into existing bundles. +* Create completely new, custom bundles with your own custom packages. + +With mixer you are not required to incorporate every upstream release into +your mix. You decide which upstream versions to update your derivative to, as +illustrated in Figure 1. + +.. figure:: figures/mixer-about-1.png + :scale: 75% + :alt: Creating a custom mix. + + Figure 1: With a custom mix, you add your custom bundle and decide which + upstream versions to update your mix to, on your own release cycle. + +Creating your own mix forks away from the |CL| upstream and requires that you +act as your own OSV. There is a greater level of responsibility, requiring +more infrastructure and processes to adopt. However, with this approach, you +have a higher degree of control and customization of your custom |CL|. + +Related topics +============== + +|CL| provides flexibility in how you customize your OS. Learn more about +mixer and related topics to decide which customization approach is best for +you. + +* :ref:`mixer` +* :ref:`bundles-about` +* :ref:`swupd-about` +* :ref:`deploy-at-scale` diff --git a/zh_CN/_sources/concepts/swupd-about.rst.txt b/zh_CN/_sources/concepts/swupd-about.rst.txt new file mode 100644 index 00000000..8d6e5bb4 --- /dev/null +++ b/zh_CN/_sources/concepts/swupd-about.rst.txt @@ -0,0 +1,97 @@ +.. _swupd-about: + +swupd: software updater +####################### + +:command:`swupd` is an operating system software manager and update program +that operates at a file-level to enable verifiable integrity and update +efficiency. + +Visit the `swupd man page`_ for more details. + +Versioning +========== + +Using package managers to keep track of software version compatibility or compare multiple systems on many Linux distributions can be cumbersome. + +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. + +While administrators can pick and choose which `bundles`_ a system has +installed, a single |CL| version number strictly represents one combination +of all software versions that can be installed onto a system of that |CL| +version. This method of whole OS versioning offers unique advantages. +Namely, system administrators can quickly compare multiple |CL| systems that share the same version for important software and security fixes. + + +Updating +======== + +|CL| promotes regular and automated updating of software to ensure +integration of new enhancements and security fixes. Refer to :ref:`security` +documentation for more information. + +Learn how to update your system using :ref:`swupd `. + +Update efficiency +----------------- + +Because :command:`swupd` operates at the individual file-level instead of a +package-level, |CL| updates are small and fast. + +On many Linux\* distributions, updates to a particular software package +require the whole software package to be downloaded and replaced +--even for one line of code. + +In |CL|, updates are generated using the :ref:`mixer ` tool. Mixer calculates the difference between two |CL| versions and makes available +*binary deltas*, which contain only the changed portion of files. This +*binary delta technology* [1]_ means :command:`swupd` on |CL| systems only +needs to download and apply a small fraction of a package in order to +receive an update. + +The :ref:`mixer ` tool additionally computes updates files in +multiple compression formats, allowing :command:`swupd` to utilize the most +efficiently compressed format for a |CL| system to minimize the cost +to update. + +Update integrity +---------------- + +This is the basis of the :command:`swupd diagnose` subcommand, which allows a |CL| system to check for any discrepancies to system files. As necessary, +:command:`swupd repair` provides a useful way for software developers to remediate these discrepancies and return to a known filesystem state. + +Bundles +======= + +|CL-ATTR| approaches software management differently than many other +Linux-based operating systems. + +Instead of deploying granular software packages, |CL| uses the concept of +bundles with pre-associated software. Each bundle encapsulates a particular +use-case, which is enabled by composing all the required upstream open-source +projects and packages into one logical unit. + +This bundle-based approach offers some unique advantages: + +* Bundles provide a particular functionality, or stack, which + include all associated runtime dependencies. + +* Software package dependencies are resolved on the server, so file-level + conflicts do not occur on the target system after an update. + +* All combinations of bundles are able to co-exist on a |CL| system. + +For more information on bundles, visit: + +* :ref:`bundles` +* :ref:`bundles-about` +* :ref:`bundle-commands` +* :ref:`compatible-kernels` + +.. [1] The software update technology for |CL-ATTR| was first presented at the Linux Plumbers conference in 2012. + +.. _swupd man page: https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst + diff --git a/zh_CN/_sources/concepts/telemetry-about.rst.txt b/zh_CN/_sources/concepts/telemetry-about.rst.txt new file mode 100644 index 00000000..34a12d1e --- /dev/null +++ b/zh_CN/_sources/concepts/telemetry-about.rst.txt @@ -0,0 +1,82 @@ +.. _telemetry-about: + +Telemetrics +########### + +One of the key features of |CL-ATTR| is telemetry, which is used to +monitor system health. Telemetry enables developers to observe and proactively +address issues before end users are impacted. + +*Telemetrics* is a combination word made from: + +* *Telemetry* which is sensing and reporting data. +* *Analytics* which is using visualization and statistical inferencing to make + sense of the reported data. + +|CL| telemetry reports system-level debug/crash information using specialized probes. The +probes monitor system tasks such as :abbr:`swupd (software updater)`, kernel +oops, machine error checks, and BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to quickly focus on an issue and monitor corrective actions. + +|CL| telemetry is fully customizable and can be used during software development +for debugging purposes. You can use **libtelemetry** in your code to create custom +telemetry records. You can also use **telem-record-gen** in script files or call +it from another program. + +.. note:: + + The |CL| telemetry client is disabled by default until you decide to enable it. Telemetry is an **opt-in** solution and can be easily enabled or disabled. + +Architecture +************ + +|CL| telemetry has two fundamental components, which are shown in figure 1: + +* Client: generates and delivers records to the backend server via the network. +* Backend: captures records sent from the client and displays the cumulative + content through a specialized interface. + + .. note:: + + If you want to capture your own records for analysis, you must set up + your own backend server. + +.. figure:: ../guides/telemetrics/figures/telemetry-e2e.png + :scale: 75% + :alt: Clear Linux Telemetry Architecture. + + Figure 1: Clear Linux Telemetry Architecture. + +The telemetry client provides the front end of a complete telemetrics solution +and includes the following components: + +* **telemprobd**, a daemon that prepares the telemetry records and spools them on disk prior to delivery +* **telempostd**, a daemon that sends the records to the telemetry backend server or leaves them on disk until deleting after the record expires. + +* **probes**, that collect specific types of data from the operating system. +* **libtelemetry**, that telemetrics probes use to create telemetrics records and + send them to the telemprobd daemon for further processing. + + +The telemetry backend provides the server-side component of a complete telemetrics solution and +consists of: + +* Nginx web server. +* Two Flask apps: + + * Collector, an ingestion web app for records received from telemetrics-client probes. + * TelemetryUI, a web app that exposes several views to visualize the telemetry data + and also provides a REST API to perform queries. + +* PostgreSQL as the underlying database server. + +The default telemetry backend server reports back to the |CL| development team +and is not viewable outside the Intel firewall. If you want to collect your +own records, then you must set up your own telemetry backend server. + +Next steps +********** + +To put this concept into practice, refer to :ref:`telem-guide`. + diff --git a/zh_CN/_sources/disclaimers.rst.txt b/zh_CN/_sources/disclaimers.rst.txt new file mode 100644 index 00000000..6f2dfb6e --- /dev/null +++ b/zh_CN/_sources/disclaimers.rst.txt @@ -0,0 +1,12 @@ +:orphan: + +.. _disclaimers: + + +.. rubric:: Disclaimer + +.. important:: + This documentation is a work in progress and is being provided for + informative purposes only. Because it is a work in progress, there are + parts that are either missing or will be revised as code development + continues. diff --git a/zh_CN/_sources/documentation_license.rst.txt b/zh_CN/_sources/documentation_license.rst.txt new file mode 100644 index 00000000..758a7a24 --- /dev/null +++ b/zh_CN/_sources/documentation_license.rst.txt @@ -0,0 +1,12 @@ +:orphan: + +.. raw:: html + + Creative Commons License
This work is licensed under a Creative Commons + Attribution 4.0 International License + diff --git a/zh_CN/_sources/get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst.txt b/zh_CN/_sources/get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst.txt new file mode 100644 index 00000000..25d1ada5 --- /dev/null +++ b/zh_CN/_sources/get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst.txt @@ -0,0 +1,542 @@ +.. _bare-metal-install-desktop: + +Install |CL-ATTR| from the live desktop +####################################### + +This page explains how to boot the |CL-ATTR| live desktop image, from which +you can install |CL| or explore without modifying the host system. + +.. contents:: + :local: + :depth: 1 + +System requirements +******************* + +Before installing |CL|, verify that the host system supports the +installation: + +* :ref:`system-requirements` +* :ref:`compatibility-check` + +Preliminary steps +***************** + +#. Visit our `Downloads`_ page. + +#. Download the file :file:`clear--live-desktop.iso`, + also called the |CL| Desktop. + + .. note:: + + is the latest |CL| auto-numbered release. + +#. Verify and decompress the file per your OS. + + * :ref:`download-verify-decompress` + +#. Follow your OS instructions to create a bootable USB drive. + + * :ref:`bootable-usb` + +.. _install-on-target-start: + +Install from live image +*********************** + +After you download and burn the live desktop image on a USB drive, follow +these steps. + +#. Insert the USB drive into an available USB slot. + +#. Power on the system. + +#. Open the system BIOS setup menu by pressing the :kbd:`F2` key. + Your BIOS setup menu entry point may vary. + +#. In the setup menu, enable the UEFI boot and set the USB drive as the + first option in the device boot order. + +#. Save these settings, e.g. :kbd:`F10`, and exit. + +#. Reboot the target system. + +#. Select :guilabel:`Clear Linux OS` in the boot menu, shown in Figure 1. + + .. figure:: figures/bare-metal-install-desktop-01.png + :scale: 100% + :alt: Clear Linux OS in boot menu + + Figure 1: Clear Linux OS in boot menu + +.. _install-on-target-end: + +Software (optional) +=================== + +Explore |CL| bundles and other software. Double-click the +:guilabel:`Software` icon from the Activities menu, shown in Figure 2. +Ensure a network connection exists before launching the Software application. + +.. note:: + + While running the |CL| live desktop image, the Software application is + intended only for exploration. Do not attempt to install applications during + exploration. + +Launch the |CL| installer +========================= + +#. After the live desktop image boots, scroll over the vertical + :guilabel:`Activities` menu at left. + +#. Click the |CL| penguin icon to launch the installer, shown in Figure 2. + + .. figure:: figures/bare-metal-install-desktop-02.png + :scale: 100% + :alt: Install Clear Linux OS icon + + Figure 2: |CL| installer icon + +#. After the installer is launched, it will appear as shown in Figure 3. + + .. figure:: figures/bare-metal-install-desktop-03.png + :scale: 100% + :alt: |CL| Desktop Installer + + Figure 3: |CL| OS Desktop Installer + +#. In :guilabel:`Select Language`, select a language from the options, or + type your preferred language in the search bar. + +#. Select :guilabel:`Next`. + +Checking prerequisites +====================== + +The installer automatically launches :guilabel:`Checking Prerequisites`, +which checks your target system for compatibility and network connectivity. + +After the installer shows `Prerequisites passed`, select :guilabel:`Next` to +proceed with installation. + +.. figure:: figures/bare-metal-install-desktop-04.png + :scale: 100% + :alt: Checking Prerequisites + + Figure 4: Checking Prerequisites + +Network Proxy (optional) +------------------------ + +#. Configure :guilabel:`Network Proxy` settings. + +#. In the top right menu bar, select the :guilabel:`Power button`. + +#. Select :guilabel:`Wired Connected` and then :guilabel:`Wired Settings`. + + #. In :guilabel:`Network Proxy`, select the :guilabel:`Gear` icon to view + options. + + #. Select an option from `Automatic`, `Manual` or `Disabled`. + + #. Close :guilabel:`Network Proxy`. + +#. Close :guilabel:`Settings`. + +.. _incl-bare-metal-beta-start: + +Minimum installation requirements +********************************* + +To fulfill minimum installation requirements, complete the +`Required options`_. We also recommend completing `Advanced options`_. + +.. note:: + + * The :kbd:`Install` button is only highlighted **after** you complete + `Required options`_. + + * Check marks indicate a selection has been made. + + * An Internet connection is required. You may want to launch a browser + prior to installation to verify your Internet connection. + +|CL| Desktop Installer +********************** + +The |CL| Desktop Installer Main Menu appears as shown in Figure 5. To meet +the minimum requirements, enter values in all submenus for the +:guilabel:`Required options`. After you complete them, your selections appear +below submenus and a check mark appears at right. + +.. figure:: figures/bare-metal-install-desktop-05.png + :scale: 100% + :alt: Clear Linux OS Desktop Installer - Main Menu + + Figure 5: Clear Linux OS Desktop Installer - Main Menu + +Navigation +********** + +* Use the :kbd:`mouse` to navigate or select options. + +* Use :kbd:`Tab` key to navigate between :guilabel:`Required options` + and :guilabel:`Advanced options` + +* Use :kbd:`Up` or :kbd:`Down` arrow keys to navigate the submenus. + +* Select :kbd:`Confirm`, or :kbd:`Cancel` in submenus. + +Required options +**************** + +Select Time Zone +================ + +#. From the Main Menu, select :guilabel:`Select Time Zone`. `UTC` is selected + by default. + +#. In :guilabel:`Select Time Zone`, navigate to the desired time zone. + Or start typing the region and then the city. + (.e.g., :file:`America/Los_Angeles`). + +#. Select :guilabel:`Confirm`. + + .. figure:: figures/bare-metal-install-desktop-06.png + :scale: 100% + :alt: Select System Timezone + + Figure 6: Select System Time Zone + +Select Keyboard +=============== + +#. From the Main Menu, select :guilabel:`Select Keyboard`. + +#. Navigate to your desired keyboard layout. We select "us" for the + United States. + +#. Select :guilabel:`Confirm`. + + .. figure:: figures/bare-metal-install-desktop-07.png + :scale: 100% + :alt: Select Keyboard menu + + Figure 7: Select Keyboard menu + +Select Installation Media +========================= + +#. From the Main Menu, select :guilabel:`Select Installation Media`. + +#. Choose an installation method: `Safe Installation`_ or + `Destructive Installation`_. + + .. figure:: figures/bare-metal-install-desktop-08.png + :scale: 100% + :alt: Select Installation Media + + Figure 8: Select Installation Media + +Safe Installation +----------------- + +Use this method to safely install |CL| on media with available space, or +alongside existing partitions, and accept the `Default partition schema`_. +If enough free space exists, safe installation is allowed. + +.. note:: + + |CL| allows installation alongside another OS. Typically, when you boot + your system, you can press an `F key` to view and select a bootable + device or partition during the BIOS POST stage. Some BIOSes present the + |CL| partition, and you can select and boot it. However, other + BIOSes may only show the primary partition, in which case you will not be + able boot |CL|. Be aware of this possible limitation. + + +Destructive Installation +------------------------ + +Use this method to destroy the contents of the target device, install |CL| +on it, and accept the `Default partition schema`_. + +Disk encryption +=============== + +For greater security, disk encryption is supported using LUKS. Encryption is +optional. + +#. To encrypt the root partition, select :guilabel:`Enable Encryption`, + as shown in Figure 9. + + .. figure:: figures/bare-metal-install-desktop-09.png + :scale: 100% + :alt: Enable Encryption + + Figure 9: Enable Encryption + +#. When :guilabel:`Encryption Passphrase` appears, enter a passphrase. + + .. figure:: figures/bare-metal-install-desktop-10.png + :scale: 100% + :alt: Encryption Passphrase + + Figure 10: Encryption Passphrase + + .. note:: + + Minimum length is 8 characters. Maximum length is 94 characters. + +#. Enter the same passphrase in the second field. + +#. Select :guilabel:`Confirm` in the dialogue box. + + .. note:: + + :guilabel:`Confirm` is only highlighted if passphrases match. + +#. Select :guilabel:`Confirm` in submenu. + +Manage User +=========== + +#. In Required Options, select :guilabel:`Manage User`. + +#. In :guilabel:`User Name`, enter a user name. + + .. figure:: figures/bare-metal-install-desktop-11.png + :scale: 100% + :alt: Manage User + + Figure 11: Manage User + +#. In :guilabel:`Login`, create a login name. It must start with a letter + and can use numbers, hyphens, and underscores. Maximum length is 31 + characters. + +#. In :guilabel:`Password`, enter a password. Minimum length is + 8 characters. Maximum length is 255 characters. + +#. In :guilabel:`Confirm`, enter the same password. + + .. note:: + + :guilabel:`Administrator` rights are selected by default. + For security purposes, the default user must be assigned as an + Administrator. + +#. Select :kbd:`Confirm`. + + .. note:: + + Select :guilabel:`Cancel` to return to the Main Menu. + +Modify User +----------- + +#. In Manager User, select :guilabel:`Manage User`. + +#. Modify user details as desired. + +#. Select :guilabel:`Confirm` to save the changes you made. + + .. note:: + + Optional: Select :guilabel:`Cancel` to return to the Main Menu to + revert changes. + +Optional: Skip to `Finish installation`_. + +Telemetry +========= + +Choose whether to participate in `telemetry`. :ref:`telem-guide` is a |CL| +feature that reports failures and crashes to the |CL| development +team for improvements. For more information, see :ref:`telemetry-about`. + +#. From :guilabel:`Required Options`, select :guilabel:`Telemetry`. + +#. Select :kbd:`Yes`. + + .. figure:: figures/bare-metal-install-desktop-12.png + :scale: 100% + :alt: Enable Telemetry + + Figure 12: Enable Telemetry + +#. If you don't wish to participate, select :kbd:`No`. + +Advanced options +**************** + +After you complete the `Required options`_, we recommend completing +:guilabel:`Advanced options`--though they're not required. Doing so +customizes your development environment, so you're ready to go immediately +after reboot. + +.. note:: + + You can always add more bundles later with :ref:`swupd-guide`. + +Bundle Selection +================ + +#. On the Advanced menu, select :guilabel:`Bundle Selection` + +#. Select your desired bundles. + + .. figure:: figures/bare-metal-install-desktop-13.png + :scale: 100% + :alt: Bundle Selection + + Figure 13: Bundle Selection + +#. Select :kbd:`Confirm`. + +#. View the bundles that you selected. + + .. figure:: figures/bare-metal-install-desktop-14.png + :scale: 100% + :alt: Bundle Selections - Advanced Options + + Figure 14: Bundle Selections - Advanced Options + +Optional: Skip to `Finish installation`_. + +Assign Hostname +=============== + +#. In Advanced Options, select :guilabel:`Assign Hostname`. + +#. In :guilabel:`Hostname`, enter the hostname only (excluding the domain). + + .. figure:: figures/bare-metal-install-desktop-15.png + :scale: 100% + :alt: Assign Hostname + + Figure 15: Assign Hostname + + .. note:: + + Hostname does not allow empty spaces. Hostname must start with an + alphanumeric character but may also contain hyphens. Maximum length of + 63 characters. + +#. Select :kbd:`Confirm`. + +Optional: Skip to `Finish installation`_. + +Kernel Configuration +==================== + +#. In :guilabel:`Kernel Configuration`, navigate to select your desired + kernel. :guilabel:`Native` is selected by default. + + .. figure:: figures/bare-metal-install-desktop-16.png + :scale: 100% + :alt: Kernel Configuration + + Figure 16: Kernel Configuration + +#. To add arguments, enter the argument in :guilabel:`Add Extra Arguments`. + +#. To remove an argument, enter the argument in :guilabel:`Remove Arguments`. + +#. Select :kbd:`Confirm`. + +Software Updater Configuration +============================== + +#. In Advanced Options, select :guilabel:`Software Updater Configuration`. + +#. In :guilabel:`Mirror URL`, follow the instructions if you wish to + specify a different installation source. + +#. :guilabel:`Enable Auto Updates` is selected by default. If you **do not** + wish to enable automatic software updates, uncheck the box. + + .. figure:: figures/bare-metal-install-desktop-17.png + :scale: 100% + :alt: Software Updater Configuration + + Figure 17: Software Updater Configuration + +#. Select :kbd:`Confirm`. + +Finish installation +******************* + +#. When you are satisfied with your installation configuration, select + :guilabel:`Install`. + + .. figure:: figures/bare-metal-install-desktop-18.png + :scale: 100% + :alt: Assign Hostname + + Figure 18: Finish installation + + .. note: + + All check marks must appear in :guilabel:`Required Options` for the + :guilabel:`Install` button to be enabled. + +#. If you do not enter a selection for all :guilabel:`Required Options`, + the :guilabel:`Install` button remains disabled, as shown + in Figure 19. Return to `Required Options`_ and make selections. + + .. figure:: figures/bare-metal-install-desktop-19.png + :scale: 100% + :alt: Required Options - Incomplete + + Figure 19: Required Options - Incomplete + +#. After installation is complete, select :guilabel:`Exit`. + +#. Shut down the target system. + +#. Remove the USB or any installation media. + +#. Power on your system. + + .. note:: + + Allow time for the graphical login to appear. A login prompt shows the administrative user that you created. + +#. Log in as the administrative user. + +Congratulations. You successfully installed |CL|. + +Default partition schema +======================== + +Create partitions per requirements in Table 1. + +.. list-table:: **Table 1. Default partition schema** + :widths: 25, 25, 25, 25 + :header-rows: 1 + + * - FileSystem + - Label + - Mount Point + - Default size + + * - **VFAT(FAT32)** + - boot + - /boot + - 150MB + + * - **linux-swap** + - swap + - + - 256MB + + * - **ext[234] or XFS** + - root + - / + - *Size depends upon use case/desired bundles.* + +.. _Downloads: https://clearlinux.org/downloads + + diff --git a/zh_CN/_sources/get-started/bare-metal-install-server/bare-metal-install-server.rst.txt b/zh_CN/_sources/get-started/bare-metal-install-server/bare-metal-install-server.rst.txt new file mode 100644 index 00000000..7e0225de --- /dev/null +++ b/zh_CN/_sources/get-started/bare-metal-install-server/bare-metal-install-server.rst.txt @@ -0,0 +1,869 @@ +.. _bare-metal-install-server: + +Install |CL-ATTR| on bare metal with live server +################################################ + +This page explains how to install |CL-ATTR| on bare metal from a bootable USB +drive using a live server image. + +.. contents:: + :local: + :depth: 1 + +System requirements +******************* + +Before installing |CL|, verify that the host system supports the +installation: + +* :ref:`system-requirements` +* :ref:`compatibility-check` + +Download the latest |CL| live server image +****************************************** + +Get the latest |CL| installer image from the `Downloads`_ page. Look for the +:file:`clear-[version number]-live-server.iso` file. + +#. Verify and decompress the file per your OS. + + * :ref:`download-verify-decompress` + +#. Follow your OS instructions to create a bootable USB drive. + + * :ref:`bootable-usb` + +Install |CL| on your target system +********************************** + +Ensure that your system is configured to boot UEFI. The installation method +described below requires a wired Internet connection with DHCP. + +.. note:: + + Alternatively, you can install |CL| over a wireless connection by first + using `nmtui`. Follow the `nmtui` instructions shown in Figure 2. + +Follow these steps to install |CL| on the target system: + +#. Insert the USB drive into an available USB slot. + +#. Power on the system. + +#. Open the system BIOS setup menu by pressing the :kbd:`F2` key. + Your BIOS setup menu entry point may vary. + + .. note:: + |CL| supports UEFI boot. Some hardware may list UEFI and non-UEFI USB + boot entries. In this case, you should select the `UEFI` boot + option. + +#. In the setup menu, enable the UEFI boot and set the USB drive as the first + option in the device boot order. + +#. Save these settings and exit. + +#. Reboot the target system. + +#. This action launches the |CL| installer boot menu, shown in figure 1. + + .. figure:: figures/bare-metal-install-server-01.png + :scale: 100% + :alt: Clear Linux OS Installer boot menu + + Figure 1: Clear Linux OS Installer boot menu + +#. With :guilabel:`Clear Linux OS` highlighted, select :kbd:`Enter`. + +Launch the |CL| Installer +************************* + +#. At the :guilabel:`login` prompt, enter :command:`root`. + +#. Follow the onscreen instructions, shown in Figure 2, and + enter a temporary password. + + .. figure:: figures/bare-metal-install-server-02.png + :scale: 100% + :alt: root login + + Figure 2: root login + +#. At the :guilabel:`root` prompt, enter :command:`clr-installer` and + press :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-03.png + :scale: 100% + :alt: clr-installer command + + Figure 3: clr-installer command + +Minimum installation requirements +********************************* + +To fulfill minimum installation requirements, complete the +`Required options`_. While not required, we encourage you to apply the +`Recommended options`_. `Advanced options`_ are optional. + +.. note:: + + * The :kbd:`Install` button is **only highlighted after** you complete + `Required options`_. + +Main Menu +********* +The |CL| Installer Main Menu appears as shown in Figure 4. + +.. figure:: figures/bare-metal-install-server-04.png + :scale: 100% + :alt: Clear Linux OS Installer + + Figure 4: Clear Linux OS Installer + +The |CL| Installer Main Menu has two tabs: :guilabel:`[R] Required options` +and :guilabel:`[A] Advanced options`. Navigate between tabs using the arrow +these shortcut keys: + +* :kbd:`Shift+A` for :guilabel:`[A] Advanced options` +* :kbd:`Shift+R` for :guilabel:`[R] Required options` + +To meet the minimum requirements, enter your choices in the +:guilabel:`Required options`. After confirmation, your selections appear +beside the :guilabel:`>>` chevron, below the menu options. + +Navigation +********** + +* Select :kbd:`Tab` or :kbd:`Up/Down` arrows to highlight your choice. + +* Select :kbd:`Enter` or :kbd:`Spacebar` to confirm your choice. + +* Select :kbd:`Cancel` or :kbd:`Esc` to cancel your choice. + +Required options +**************** + +Choose Timezone +=============== + +#. From the Main Menu, navigate to :guilabel:`Choose Timezone`. + `UTC` is the default. + +#. Select :kbd:`Enter`. + +#. In :guilabel:`Select System Timezone`, use :kbd:`Up/Down` arrows + navigate to the desired timezone. + +.. todo: User need only select Enter; can only select Confirm with mouse. + +#. Press :kbd:`Enter` to confirm. + + .. figure:: figures/bare-metal-install-server-05.png + :scale: 100% + :alt: Select System Timezone + + Figure 5: Select System Timezone + +Choose Language +=============== + +#. From the Main Menu, navigate to :guilabel:`Choose Language`. + +#. Select :kbd:`Enter`. + +#. In :guilabel:`Select System Language`, navigate to your desired language. + +#. Press :kbd:`Enter` to confirm. + + .. figure:: figures/bare-metal-install-server-06.png + :scale: 100% + :alt: Select System Language + + Figure 6: Select System Language + +Configure the Keyboard +====================== + +#. From the Main Menu, select :guilabel:`Configure the Keyboard`. + +#. Select :kbd:`Enter`. + +#. In :guilabel:`Select Keyboard`, navigate to the desired option. + +#. Select :kbd:`Enter` to :kbd:`Confirm`. + +#. Optional: In :guilabel:`Test keyboard`, type text to assure + that the keys map to your keyboard. + + .. figure:: figures/bare-metal-install-server-07.png + :scale: 100% + :alt: Select Keyboard menu + + Figure 7: Select Keyboard menu + +Configure Installation Media +============================ + +#. From the Main Menu, select :guilabel:`Configure Installation Media`. + +#. Choose an installation method: + * `Safe Installation`_ + * `Destructive Installation`_ + * `Advanced Configuration`_ + + + .. figure:: figures/bare-metal-install-server-08.png + :scale: 100% + :alt: Select Installation Media + + Figure 8: Select Installation Media + +#. Select :guilabel:`Rescan Media` to show available installation targets. + +.. todo: Revise below section to match the dev-gui-00 + +Safe Installation +----------------- + +Use this method to safely install |CL| on media with available space, or +alongside existing partitions, and accept the `Default partition schema`_. +If enough free space exists, safe installation is allowed. See also +`Troubleshooting`_ below. + +Destructive Installation +------------------------ + +Use this method to destroy the contents of the target device, install |CL| +on it, and accept the `Default partition schema`_. + +.. note:: + + From the :guilabel:`Select Installation Media` menu, select + :guilabel:`Enable Encryption` to encrypt the root filesystem for either + option above. See also `Disk encryption`_ for more information. + +Advanced Configuration +---------------------- + +Use this method to manually configure partitions. These must meet +`Default partition schema`_. You may also choose `Disk encryption`_ during +configuration of each partition. + +.. note:: + + `Advanced Configuration` is available in the installer versions 1.2.0 and + above. + +#. From :guilabel:`Select Installation Media`, shown in Figure 8 above, + select :guilabel:`Advanced Configuration`. + +#. In :guilabel:`Advanced Configuration`, navigate to :file:`/dev/sda` + and then press :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-09.png + :scale: 100% + :alt: Advanced configuration menu + + Figure 9: Advanced configuration menu + +#. Choose a partition method: + + * :guilabel:`Auto Partition` Select this option to accept the + `Default partition schema`_. + + #. Navigate to and press :guilabel:`Confirm`. + + #. Continue with installation configuration. Jump to `Telemetry`_. + + * `Manual Partition`_ Continue below. + +Manual Partition +---------------- + +We provide a simple example below. + +#. Navigate to the unallocated media (e.g.,`/dev/sda`) until highlighted, as + shown in Figure 9. + +#. Press :guilabel:`Enter` to edit the partition. + +#. The :guilabel:`Partition Setup` menu appears, shown in Figure 10. + + .. note:: + + After adding the first partition, select :guilabel:`Free Space` to add another partition. + +root partition +-------------- + +#. We configure the `root` partition as shown in Figure 10. + Configuration of the `root` partition varies. + + .. figure:: figures/bare-metal-install-server-10.png + :scale: 100% + :alt: root partition + + Figure 10: root partition + +#. Navigate to :guilabel:`Add` and press :guilabel:`Enter`. + +boot partition +-------------- + +#. We configure the `boot` partition as shown in Figure 11. + + .. figure:: figures/bare-metal-install-server-11.png + :scale: 100% + :alt: boot partition + + Figure 11: boot partition + +#. Navigate to :guilabel:`Add` and press :guilabel:`Enter`. + +swap partition +-------------- + +#. In the :guilabel:`File System` pulldown menu, select `swap`, and + enter a label. We enter the minimum required size (e.g., 256M). + + .. figure:: figures/bare-metal-install-server-12.png + :scale: 100% + :alt: swap partition + + Figure 12: swap partition + +#. Navigate to :guilabel:`Add` and press :guilabel:`Enter`. + +#. Next, navigate to :guilabel:`Confirm` and press :guilabel:`Enter`, + shown in Figure 13. + + Manual partitioning is complete. + + .. figure:: figures/bare-metal-install-server-13.png + :scale: 100% + :alt: Final configuration of disk partitions + + Figure 13: Final configuration of disk partitions + +#. You may skip to the `Telemetry`_ section below. + +Disk encryption +=============== + +For greater security, disk encryption is supported using LUKS for the +any partition except `/boot` on |CL|. To encrypt the root partition, see the +example below. Encryption is optional. + +Encryption Passphrase +--------------------- + +|CL| uses a single passphrase for encrypted partitions. Additional keys may +be configured post-installation using the ``cryptsetup`` tool. + +#. Optional: Select :guilabel:`[X] Encrypt` to encrypt the root partition, + as shown in Figure 14. + + .. figure:: figures/bare-metal-install-server-14.png + :scale: 100% + :alt: Encrypt partition + + Figure 14: Encrypt partition + +#. The :guilabel:`Encryption Passphrase` dialogue appears. + + .. note:: + + Minimum length is 8 characters. Maximum length is 94 characters. + + .. figure:: figures/bare-metal-install-server-15.png + :scale: 100% + :alt: Encryption Passphrase + + Figure 15: Encryption Passphrase + +#. Enter the same passphrase in the first and second field. + +#. Navigate to :guilabel:`Confirm` and press :kbd:`Enter`. + + .. note:: + + :guilabel:`Confirm` is only highlighted if passphrases match. + +Telemetry +========= + +:ref:`telem-guide` is a |CL| feature that reports failures and crashes to +the |CL| development team for improvements. For more detailed information, +visit our :ref:`telemetry-about` page. + +Select your desired option on whether to participate in `telemetry`. + +#. In the Main Menu, navigate to :guilabel:`Telemetry` and select + :kbd:`Enter`. + +#. Select :kbd:`Tab` to highlight your choice. + +#. Select :kbd:`Enter` to confirm. + + .. figure:: figures/bare-metal-install-server-16.png + :scale: 100% + :alt: Enable Telemetry + + Figure 16: Enable Telemetry + +Recommended options +******************* + +After you complete the `Required options`_, we highly recommend completing +these selected `Advanced options`_ at minimum: + +* `Manage User`_ Assign a new user with administrative rights +* `Assign Hostname`_ Simplify your development environment + +Skip to finish installation +=========================== + +After selecting values for all :guilabel:`Required options`, you may skip +to `Finish installation`_. + +Otherwise, continue below. In the Main Menu, select +:guilabel:`Advanced options` for additional configuration. + +Advanced options +**************** + +Configure Network Interfaces +============================ + +By default, |CL| is configured to automatically detect the host network +interface using DHCP. However, if you want to use a static IP address or if +you do not have a DHCP server on your network, follow these instructions to +manually configure the network interface. Otherwise, default network +interface settings are automatically applied. + +.. note:: + + If DHCP is available, no user selection may be required. + +#. Navigate to :guilabel:`Configure Network Interfaces` and + select :kbd:`Enter`. + +#. Navigate to the network :guilabel:`interface` you wish to change. + +#. When the desired :guilabel:`interface` is highlighted, select + :guilabel:`Enter` to edit. + + .. note:: Multiple network interfaces may appear. + + .. figure:: figures/bare-metal-install-server-17.png + :scale: 100% + :alt: Configure Network Interfaces + + Figure 17: Configure Network Interfaces + +#. Notice :guilabel:`Automatic / dhcp` is selected by default (at bottom). + + Optional: Navigate to the checkbox :guilabel:`Automatic / dhcp` and select + :kbd:`Spacebar` to deselect. + + .. figure:: figures/bare-metal-install-server-18.png + :scale: 100% + :alt: Network interface configuration + + Figure 18: Network interface configuration + +#. Navigate to the appropriate fields and assign the desired + network configuration. + +#. To save settings, navigate to :guilabel:`Confirm` and select + :kbd:`Enter`. + + .. note:: + + To revert to previous settings, navigate to the :guilabel:`Cancel` + and select :kbd:`Enter`. + +#. Upon confirming network configuration, the :guilabel:`Testing Networking` + dialogue appears. Assure the result shows success. If a failure occurs, + your changes will not be saved. + +#. Upon confirmation, you are returned to :guilabel:`Network interface` + settings. + +#. Navigate to and select :guilabel:`Main Menu`. + +Optional: Skip to `Finish installation`_. + +Proxy +===== + +|CL| automatically attempts to detect proxy settings, as described in +:ref:`autoproxy`. If you need to manually assign proxy settings, follow this +instruction. + +#. From the Advanced options menu, navigate to :guilabel:`Proxy`, and + select :kbd:`Enter`. + +#. Navigate to the field :guilabel:`HTTPS Proxy`. + + .. figure:: figures/bare-metal-install-server-19.png + :scale: 100% + :alt: Configure the network proxy + + Figure 19: Configure the network proxy + +#. Enter the desired proxy address and port using conventional syntax, + such as: \http://address:port. + +#. Navigate to :guilabel:`Confirm` and select :kbd:`Enter`. + +#. To revert to previous settings, navigate to :guilabel:`Cancel` + and select :guilabel:`Cancel`. + +Optional: Skip to `Finish installation`_. + +Test Network Settings +===================== + +To manually assure network connectivity before installing |CL|, +select :guilabel:`Test Network Settings` and select :guilabel:`Enter`. + +A progress bar appears as shown in Figure 20. + +.. figure:: figures/bare-metal-install-server-20.png + :scale: 100% + :alt: Testing Networking dialogue + + Figure 20: Testing Networking dialogue + +.. note:: + + Any changes made to network settings are automatically tested + during configuration. + +Optional: Skip to `Finish installation`_. + +Bundle Selection +================ + +#. On the Advanced menu, select :guilabel:`Bundle Selection` + +#. Navigate to the desired bundle using :kbd:`Tab` or :kbd:`Up/Down` arrows. + +#. Select :kbd:`Spacebar` to select the checkbox for each desired bundle. + + .. figure:: figures/bare-metal-install-server-21.png + :scale: 100% + :alt: Bundle Selection + + Figure 21: Bundle Selection + +#. Optional: To start developing with |CL|, we recommend + adding :file:`os-clr-on-clr`. + +#. Navigate to and select :kbd:`Confirm`. + + You are returned to the :guilabel:`Advanced options` menu. + +Optional: Skip to `Finish installation`_. + +Manage User +=========== + +Add New User +------------ + +#. In Advanced Options, select :guilabel:`Manage User`. + +#. Select :guilabel:`Add New User` as shown in Figure 22. + + .. figure:: figures/bare-metal-install-server-22.png + :scale: 100% + :alt: Add New User, User Name + + Figure 22: Add New User + +#. Optional: Enter a :guilabel:`User Name`. + + .. note: + + The User Name must be alphanumeric and can include spaces, commas, or hyphens. Maximum length is 64 characters. + + .. figure:: figures/bare-metal-install-server-23.png + :scale: 100% + :alt: User Name + + Figure 23: User Name + +#. Enter a :guilabel:`Login`. + + .. note:: + + The User Login must be alphanumeric and can include hyphens and underscores. Maximum length is 31 characters. + +#. Enter a :guilabel:`Password`. + + .. note: + + Minimum length is 8 characters. Maximum length is 255 characters. + +#. In :guilabel:`Confirm`, enter the same password. + +#. Optional: Navigate to the :guilabel:`Administrative` checkbox and select + :kbd:`Spacebar` to assign administrative rights to the user. + + .. note:: + + Selecting this option enables sudo privileges for the user. + +#. Select :kbd:`Confirm`. + + .. note:: + + If desired, select :guilabel:`Reset` to reset the form. + +#. In :guilabel:`Manage User`, navigate to :guilabel:`Confirm`. + +#. With :guilabel:`Confirm` highlighted, select :kbd:`Enter`. + +Modify / Delete User +-------------------- + +#. In :guilabel:`Manage User`, navigate to the user you wish + to modify until highlighted, as shown in Figure 24. + +#. Select :kbd:`Enter` to modify the user. + + .. figure:: figures/bare-metal-install-server-24.png + :scale: 100% + :alt: Modify User + + Figure 24: Modify User + +#. Modify user details as desired. + +#. Navigate to :kbd:`Confirm` until highlighted. + + .. note:: + + Optional: Select :guilabel:`Reset` to rest the form. + +#. Select :guilabel:`Confirm` to save the changes you made. + +#. Optional: In :guilabel:`Modify User`, to delete the user, navigate to + the :guilabel:`Delete` button and select :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-25.png + :scale: 100% + :alt: Delete User + + Figure 25: Delete User + +You are returned to :guilabel:`Manage User`. + +#. Navigate to :kbd:`Confirm` until highlighted. + +#. Select :guilabel:`Enter` to complete :guilabel:`Manage User` options. + +Optional: Skip to `Finish installation`_. + +Kernel Command Line +=================== + +For advanced users, |CL| provides the ability to add or remove kernel +arguments. If you want to append a new argument, enter the argument here. +This argument will be used every time you install or update a +new kernel. + +#. In Advanced Options, select :guilabel:`Tab` to highlight + :guilabel:`Kernel Command Line`. + +#. Select :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-26.png + :scale: 100% + :alt: kernel command line + + Figure 26: kernel command line + +#. Choose from the following options. + + * To add arguments, enter the argument in :guilabel:`Add Extra Arguments`. + + * To remove an argument, enter the argument in + :guilabel:`Remove Arguments`. + +#. Select :kbd:`Confirm`. + +Optional: Skip to `Finish installation`_. + +Kernel Selection +================ + +#. Select a kernel option. By default, the latest kernel release is + selected. Native kernel is shown in Figure 27. + +#. To select a different kernel, navigate to it using :guilabel:`Tab`. + + .. figure:: figures/bare-metal-install-server-27.png + :scale: 100% + :alt: Kernel selection + + Figure 27: Kernel selection + +#. Select :kbd:`Spacebar` to select the desired option. + +#. Navigate to :kbd:`Confirm` and select :kbd:`Enter`. + +Optional: Skip to `Finish installation`_. + +Swupd Mirror +============ + +If you have your own custom mirror of |CL|, you can add its URL. + +#. In Advanced Options, select :guilabel:`Swupd Mirror`. + +#. To add a local swupd mirror, enter a valid URL in :guilabel:`Mirror URL:` + +#. Select :kbd:`Confirm`. + + .. figure:: figures/bare-metal-install-server-28.png + :scale: 100% + :alt: Swupd Mirror + + Figure 28: Swupd Mirror + +Optional: Skip to `Finish installation`_. + +Assign Hostname +=============== + +#. In Advanced Options, select :guilabel:`Assign Hostname`. + +#. In :guilabel:`Hostname`, enter the hostname only (excluding the domain). + + .. note:: + + Hostname does not allow empty spaces. Hostname must start with an + alphanumeric character but may also contain hyphens. Maximum length of + 63 characters. + + .. figure:: figures/bare-metal-install-server-29.png + :scale: 100% + :alt: Assign Hostname + + Figure 29: Assign Hostname + +#. Navigate to :kbd:`Confirm` until highlighted. + +#. Select :kbd:`Confirm`. + +Optional: Skip to `Finish installation`_. + +Automatic OS Updates +==================== + +Automatical OS updates are enabled by default. In the rare case that you +need to disable automatic software updates, follow the onscreen instructions, +shown in Figure 30. + +#. In Advanced Options, select :guilabel:`Automatic OS Updates`. + +#. Select the desired option. + + .. figure:: figures/bare-metal-install-server-30.png + :scale: 100% + :alt: Automatic OS Updates + + Figure 30: Automatic OS Updates + +You are returned to the :guilabel:`Main Menu`. + +Save Configuration Settings +=========================== + +#. In Advanced Options, select :guilabel:`Save Configuration Settings`. + +#. A dialogue box shows the installation configuration was saved to + :file:`clr-installer.yaml` + + .. figure:: figures/bare-metal-install-server-31.png + :scale: 100% + :alt: Automatic OS Updates + + Figure 31: Automatic OS Updates + +#. Use the :file:`clr-installer.yaml` file to install |CL|, with the same + configuration, on multiple targets. + +Finish installation +******************* + +#. When you are satisfied with your installation configuration, navigate to + :guilabel:`Install` and select :kbd:`Enter`. + + .. figure:: figures/bare-metal-install-server-32.png + :scale: 100% + :alt: Select Install + + Figure 32: Select Install + +#. Select :guilabel:`reboot`. + + .. note:: + + If you do not assign an administrative user, upon rebooting, + enter `root` and set the root password immediately. + +#. When the system reboots, remove any installation media present. + +Default partition schema +======================== + +Create partitions per requirements in Table 1. + +.. list-table:: **Table 1. Default partition schema** + :widths: 25, 25, 25, 25 + :header-rows: 1 + + * - FileSystem + - Label + - Mount Point + - Default size + + * - ``VFAT(FAT32)`` + - boot + - /boot + - 150MB + + * - ``linux-swap`` + - swap + - + - 256MB + + * - ``ext[234] or XFS`` + - root + - / + - *Size depends upon use case/desired bundles.* + +Troubleshooting +*************** + +For Configure Installation Media +================================ + +If a warning message appears that no media or space is available after +entering :guilabel:`Configure Installation Media`: + +- Verify that target media has enough free space. + +- Confirm the USB is properly connected to and mounted on target media. + +- Review the size of existing partitions on the target media: + + - Linux\* OS: :command:`lsblk -a` + - Windows\* OS: :command:`diskpart`, then :command:`list disk` + - macOS\* platform: :command:`diskutil list` + +.. _Downloads: https://clearlinux.org/downloads diff --git a/zh_CN/_sources/get-started/bootable-usb/bootable-usb.rst.txt b/zh_CN/_sources/get-started/bootable-usb/bootable-usb.rst.txt new file mode 100644 index 00000000..995cf3f5 --- /dev/null +++ b/zh_CN/_sources/get-started/bootable-usb/bootable-usb.rst.txt @@ -0,0 +1,208 @@ +.. _bootable-usb: + +Create a bootable USB drive +########################### + +Follow the instructions applicable to your system to create a bootable |CL-ATTR| +USB drive: + +* :ref:`bootable-usb-linux` +* :ref:`bootable-usb-mac` +* :ref:`bootable-usb-windows` + +Prerequisites +************* + +* Use an **8GB** or larger USB drive. +* Download the |CL| live boot image or interactive installer image from the + `Downloads`_ page. + +.. _bootable-usb-linux: + +Create a bootable USB drive on Linux\* +************************************** + +Make sure you have have completed all `Prerequisites`_. + +Before burning the image onto your USB drive, +:ref:`verify and decompress your image `. + +Burn the |CL| image onto a USB drive +==================================== + +.. caution:: + + |CAUTION-BACKUP-USB| + +#. Open a terminal emulator and get root privilege. + + .. code-block:: bash + + sudo -s + +#. Go to the directory with the decompressed image. + +#. Plug in the USB drive. + +#. Identify the USB drive using the :command:`lsblk` command. This shows all + drives attached to the system, including the primary hard disk. In the + example output below, there are 4 drives + (`/dev/sda`, `/dev/sdb`, `/dev/sdc`, and `/dev/sdd`) attached, where + `/dev/sda` is primary drive. The remaining are three USB drives. The output + also shows the mounted partitions (under the `MOUNTPOINT` column) for each + drive. + + .. code-block:: bash + + lsblk + + Example output: + + .. code-block:: console + + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sdd 8:48 1 15G 0 disk + ├─sdd2 8:50 1 5G 0 part /run/media/user1/960c184f-3bb7-42b7-bcaf-0c1282 + ├─sdd3 8:51 1 8G 0 part /run/media/user1/704f3382-b26d-4f34-af1b-cb9aab + └─sdd1 8:49 1 2G 0 part + sdb 8:16 1 14.8G 0 disk + └─sdb1 8:17 1 14.8G 0 part /run/media/user1/PATRIOT_USB + sdc 8:32 1 7.3G 0 disk + └─sdc1 8:33 1 7.3G 0 part /run/media/user1/LINUX MINT + sda 8:0 0 335.4G 0 disk + ├─sda4 8:4 0 28G 0 part + ├─sda2 8:2 0 3.7G 0 part [SWAP] + ├─sda7 8:7 0 6G 0 part /home + ├─sda5 8:5 0 1G 0 part /boot + ├─sda3 8:3 0 954M 0 part /boot/efi + ├─sda1 8:1 0 28G 0 part + ├─sda8 8:8 0 30G 0 part / + └─sda6 8:6 0 7.9G 0 part [SWAP] + +#. You must unmount a USB drive before burning an image onto it. Note that + some Linux distros automatically mount a USB drive when it is plugged in. + Unmount a USB drive with the :command:`umount` command followed by the device + identifier/partition. For example: + + .. code-block:: bash + + umount /dev/sdd2 + umount /dev/sdd3 + +#. Burn the image onto the USB drive. The example below burns an uncompressed + image onto ``: + + .. code-block:: bash + + dd if=./clear-[version number]-[image type] of= oflag=sync bs=4M status=progress + +.. caution:: + + |CAUTION-UNMOUNT-USB-PARTITIONS| + +.. _bootable-usb-mac: + +Create a bootable USB drive on macOS\* +************************************** + +Make sure you have have completed all `Prerequisites`_. + +Before burning the image onto your USB drive, +:ref:`verify and decompress your image `. + +Burn the |CL| image onto a USB drive +==================================== + +.. caution:: + + |CAUTION-BACKUP-USB| + +#. Launch the Terminal app. + +#. Go to the directory with the decompressed image. + +#. Plug in a USB drive and get its identifier: + + .. code-block:: bash + + diskutil list + + This will list available disks and their partitions, as shown in Figure 1. + + .. figure:: figures/bootable-usb-mac-01.png + :scale: 100 % + :alt: Get USB drive identifier + + Figure 1: macOS - Get USB drive identifier + +#. Unmount the USB drive identified in the previous step. For example: + + .. code-block:: bash + + diskutil umountDisk /dev/disk2 + +#. Burn the image onto the drive using the :command:`dd` command. + The example below burns an uncompressed image onto ``: + + .. code-block:: bash + + sudo dd if=./clear-[version number]-[image type] of= bs=4m + + To speed up the imaging process, add an ‘r’ in front of the disk identifier. + For example `/dev/rdisk2`. + + Press :kbd:`-T` to check imaging progress. + +#. Eject the USB drive. + + .. code-block:: bash + + diskutil eject /dev/disk2 + +.. _bootable-usb-windows: + +Create a bootable USB drive on Windows\* +**************************************** + +Make sure you have have completed all `Prerequisites`_. + +Before burning the image onto your USB drive, +:ref:`verify and decompress your image `. + +Burn the |CL| image onto a USB drive +==================================== + +.. caution:: + + |CAUTION-BACKUP-USB| + +#. Download the `Rufus`_ utility to burn the image onto a USB drive. + We use Rufus 3.5 here. **Only use the latest version of Rufus**. + +#. Plug in the USB drive and open Rufus. + +#. Under `Boot selection`, click the :guilabel:`SELECT` button. + +#. Find and select the previously extracted |CL| image file. + +#. Click the :guilabel:`START` button. See Figure 2. + + .. figure:: figures/bootable-usb-windows-02.png + :scale: 80 % + :alt: Rufus utility + + Figure 2: Rufus utility + +#. When the dialogue appears, select + :guilabel:`Write in ISO image mode (Recommended)`. See Figure 3. + + .. figure:: figures/bootable-usb-windows-03.png + :scale: 80 % + :alt: ISOHybrid image detected + + Figure 3: ISOHybrid image detected + +#. Select the Windows taskbar menu for USB and select eject. + +.. _Rufus: https://rufus.ie/ +.. _Downloads: https://clearlinux.org/downloads diff --git a/zh_CN/_sources/get-started/compatibility-check.rst.txt b/zh_CN/_sources/get-started/compatibility-check.rst.txt new file mode 100644 index 00000000..ff17e55e --- /dev/null +++ b/zh_CN/_sources/get-started/compatibility-check.rst.txt @@ -0,0 +1,68 @@ +.. _compatibility-check: + +Check processor and EFI firmware compatibility +############################################## + +Before installing |CL-ATTR|, check your host system's processor and EFI firmware +compatibility. To check compatibilty, choose one of the following paths: + +* From a system with a Linux\* OS installed, follow the instructions to :ref:`check-compatibility-steps`. + +* From a non-Linux OS, first :ref:`bare-metal-install-desktop` and then follow + the instructions to :ref:`check-compatibility-steps`. + +.. note:: + This does not check other system components (for example: storage and + graphics) for compatibility with |CL|. + +.. _check-compatibility-steps: + +Check compatibility +******************* + +#. Download the `clear-linux-check-config.sh`_ file. + + If a browser is not available, use: + + .. code-block:: console + + curl -O https://cdn.download.clearlinux.org/current/clear-linux-check-config.sh + +#. Make the script executable. + + .. code-block:: console + + chmod +x clear-linux-check-config.sh + +#. Run the script. + + #. Check to see if the host's processor and EFI firmware is capable of + running |CL|. + + .. code-block:: console + + ./clear-linux-check-config.sh host + + #. Check to see if the host is capable of running |CL| in a container. + + .. code-block:: console + + ./clear-linux-check-config.sh container + + The script prints a list of test results similar to the output below. + All items should return a `SUCCESS` status. This example indicates the + host's processor and EFI firmware support running |CL|. + + .. code-block:: console + + Checking if host is capable of running Clear Linux* OS + + SUCCESS: 64-bit CPU (lm) + SUCCESS: Supplemental Streaming SIMD Extensions 3 (ssse3) + SUCCESS: Streaming SIMD Extension v4.1 (sse4_1) + SUCCESS: Streaming SIMD Extensions v4.2 (sse4_2) + SUCCESS: Advanced Encryption Standard instruction set (aes) + SUCCESS: Carry-less Multiplication extensions (pclmulqdq) + SUCCESS: EFI Firmware + +.. _clear-linux-check-config.sh: https://cdn.download.clearlinux.org/current/clear-linux-check-config.sh diff --git a/zh_CN/_sources/get-started/get-started.rst.txt b/zh_CN/_sources/get-started/get-started.rst.txt new file mode 100644 index 00000000..a0ff24fd --- /dev/null +++ b/zh_CN/_sources/get-started/get-started.rst.txt @@ -0,0 +1,49 @@ +.. _get-started: + +Get started +########### + +The Get Started section guides you through the requirements and installation of +|CL-ATTR|. Follow these step-by-step intructions to get started with |CL|, fast. + +Pre-install +*********** + +There are a couple of things to take care of before you install. + +* :ref:`system-requirements` +* :ref:`compatibility-check` +* :ref:`bootable-usb` + +When installing |CL-ATTR| in a VM, consider which kernel to use. + +* :ref:`Compatible VM kernels ` + +.. toctree:: + :maxdepth: 1 + :hidden: + + compatibility-check + bootable-usb/bootable-usb + +Install +******* + +.. toctree:: + :maxdepth: 1 + + bare-metal-install-desktop/bare-metal-install-desktop + bare-metal-install-server/bare-metal-install-server + install-configfile + +.. _virtual-machine-install: + +Install in a virtual machine +**************************** + +.. toctree:: + :maxdepth: 1 + :glob: + + virtual-machine-install/* + ../../guides/maintenance/increase-virtual-disk-size.rst \ No newline at end of file diff --git a/zh_CN/_sources/get-started/install-configfile.rst.txt b/zh_CN/_sources/get-started/install-configfile.rst.txt new file mode 100644 index 00000000..60a1bf75 --- /dev/null +++ b/zh_CN/_sources/get-started/install-configfile.rst.txt @@ -0,0 +1,192 @@ +.. _install-configfile: + +Install using clr-installer and a configuration file +#################################################### + +This page explains how to install |CL-ATTR| using the clr-installer tool +with a configuration file. The configuration file (:file:`clr-installer.yaml`) +can be reused to duplicate the same installation configuration on additional +machines. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +Ensure that your target system supports the installation: + +* :ref:`system-requirements` +* :ref:`compatibility-check` + +Process +******* + +This guide describes two methods for using a configuration file with the +clr-installer tool. You can use either method to achieve the same goal. Choose +the method that works best for your setup. + +If you are installing |CL| for the first time, we recommend Example 1. + +To clone an existing |CL| setup on another system, we recommend Example 2. + +Example 1 +========= + +This method uses a configuration file template to perform a new installation. + +Perform the following steps: + +#. Go to `Downloads`_ and download the latest Clear Linux OS Server image. + + For example: + https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz + +#. Follow the instructions to :ref:`bootable-usb` based on your OS. + +#. Boot up the USB thumb drive. +#. Select :guilabel:`Clear Linux OS` from the menu. +#. In the console window, log in as root and set a password. +#. Verify you have a network connection to the Internet and configure proxy + settings if you're working behind a firewall. +#. Download a :file:`live-server.yaml` template. + + For example: + + .. code-block:: bash + + curl -O https://download.clearlinux.org/releases/30010/clear/config/image/live-server.yaml + +#. Edit the template and change the settings as needed. + + Commonly-changed settings include: + +.. _install-configfile-yaml-begin: + + #. Under *block-devices*, set “file: "/dev/sda"” or enter your preferred device. + #. Under *targetMedia*, set the third partition size to “0” to use the entire disk space. + #. Under *bundles*, add additional bundles as needed. + #. Delete the *post-install* section unless you have post-installation scripts. + #. Under *Version*, set a version number. To use the latest version, set to “0”. + + Commonly-changed settings are shown in lines 15, 34, 37, and 51 below. + See `Installer YAML Syntax`_ for more details. + + .. code-block:: bash + :linenos: + :emphasize-lines: 14,15,34,37,51 + + #clear-linux-config + + # c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil + # vi: set shiftwidth=2 tabstop=2 expandtab: + # :indentSize=2:tabSize=2:noTabs=true: + + # File: developer-live-server.yaml + # Use Case: Live Image which boots into login prompt + # Optionally allows for installing Clear Linux OS + # using the TUI clr-installer by running clr-installer + + # switch between aliases if you want to install to an actual block device + # i.e /dev/sda + block-devices: [ + {name: "bdevice", file: "/dev/sda"} + ] + + targetMedia: + - name: ${bdevice} + type: disk + children: + - name: ${bdevice}1 + fstype: vfat + mountpoint: /boot + size: "150M" + type: part + - name: ${bdevice}2 + fstype: swap + size: "32M" + type: part + - name: ${bdevice}3 + fstype: ext4 + mountpoint: / + size: "0" + type: part + + bundles: [os-core, os-core-update, NetworkManager, clr-installer, vim] + + autoUpdate: false + postArchive: false + postReboot: false + telemetry: false + iso: true + keepImage: true + autoUpdate: false + + keyboard: us + language: en_US.UTF-8 + kernel: kernel-native + + version: 30010 + +.. _install-configfile-yaml-end: + +Start the installation with the command: + +.. code-block:: bash + + clr-installer --config live-server.yaml + +Example 2 +========= + +This method uses a saved configuration file from a previous installation, +which you can use to easily duplicate the installation on additional machines. + +Perform the following steps: + +#. Open a console window on a system where |CL| was installed to retrieve a + copy of the configuration file. + +#. In the console window, log in as root and enter your password. + +#. Change directory to :file:`/root` and copy the :file:`clr-installer.yaml` + file to a USB thumb drive. + + .. code-block:: bash + + cd /root + cp clr-installer.yaml + +Start the installation on the target with the following steps: + +#. Go to `Downloads`_ and download the latest Clear Linux OS Server image. + + For example: + https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz + +#. Follow the instructions to :ref:`bootable-usb` based on your OS. + +#. Boot up the USB thumb drive. +#. Select :guilabel:`Clear Linux OS` from the menu. +#. In the console window, log in as root and set a password. +#. Verify you have a network connection to the Internet and configure proxy + settings if you're working behind a firewall. +#. Plug in and mount the USB thumb drive containing the retrieved + :file:`clr-installer.yaml` configuration file. +#. Start the installation with the command: + + .. code-block:: bash + + clr-installer --config clr-installer.yaml + +References +********** + +* `Clear Linux Installer`_ +* `Installer YAML Syntax`_ + +.. _Downloads: https://clearlinux.org/downloads +.. _Clear Linux Installer: https://github.com/clearlinux/clr-installer + +.. _Installer YAML Syntax: https://github.com/clearlinux/clr-installer/blob/master/scripts/InstallerYAMLSyntax.md \ No newline at end of file diff --git a/zh_CN/_sources/get-started/virtual-machine-install/gce.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/gce.rst.txt new file mode 100644 index 00000000..c94913b0 --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/gce.rst.txt @@ -0,0 +1,266 @@ +.. _gce: + +Launch |CL-ATTR| Compute Engine on Google Cloud Platform\* +########################################################## + +This page explains the steps to create a virtual machine instance of +|CL-ATTR| on `Google Cloud Platform`_ (:abbr:`GCP (Google Cloud Platform)`). + +.. 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. + +Setup |CL| VM on GCP +******************** + +#. Sign in to your Google\* account on the + `Google Cloud Console `_: + + .. figure:: figures/gce/00-sign-in.png + :scale: 50 % + :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:: + + Refer to the + `Quickstart Using a Linux VM `_ + guide to learn about the process of creating VM instances on GCP. + +#. Navigate to the latest |CL| + `release folder `_ + 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. + +#. Create a *Storage Bucket* for hosting the |CL| image source archive + downloaded in the previous step: + + * Click the :guilabel:`Navigation menu` icon on the upper left screen menu. + + * Select the :menuselection:`Storage` item from the side bar on the left. You + will be sent to the Storage Browser tool or the Cloud Storage overview page. + + .. figure:: figures/gce/01-cloud-storage.png + :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 Browser tool + + Figure 3: Cloud Storage Browser tool + + * Click the :guilabel:`CREATE BUCKET` button to enter the bucket creation tool. + The bucket name must be unique because buckets in the Cloud Storage share + a single global namespace. + + Leave the remaining options set to the defaults, and click the + :guilabel:`Create` button at the bottom to create a *Bucket*. + + .. figure:: figures/gce/03-create-bucket.png + :scale: 50 % + :alt: Set a unique bucket name + + Figure 4: Set bucket name + +#. Once the bucket is created, click the :guilabel:`Upload files` button + on the Bucket details page to upload the |CL| GCE image archive + to the named bucket: + + .. figure:: figures/gce/04-bucket-created.png + :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 :guilabel:`Navigation menu` icon on the upper left screen menu. + + * Select the :menuselection:`Compute Engine --> Images` from the side bar on + the left. + + .. 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 :guilabel:`[+] CREATE IMAGE` + menu item to create a custom image: + + .. figure:: figures/gce/20-image-library.png + :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:`Source`, select :guilabel:`Browse`. + +#. 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 :guilabel:`Create` button + at the bottom to import the Clear Linux GCE image to the image library. + + .. figure:: figures/gce/22-image-list.png + :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 :guilabel:`Navigation menu` icon on the upper left screen menu. + + * Select :menuselection:`Compute Engine --> VM Instances` from the side bar on + the left. + + .. 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. + +#. Alternatively, click the :guilabel:`CREATE INSTANCE` button on the VM + instances page to create a VM instance. + + .. figure:: figures/gce/30-vm-none.png + :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 + + Figure 14: VM instances list + + * Under :guilabel:`Region`, choose a region based on the + `Best practices for Compute Engine regions selection`_. + + * Under :guilabel:`Boot disk`, click the :guilabel:`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 :menuselection:`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 :guilabel:`Management, security, disks, networking, sole tenancy` + group. + + .. figure:: figures/gce/40-clear-vm-security.png + :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 must configure the VM instance with your + SSH public key, so that you are able to access it remotely. + + Refer to :ref:`security` for more details. + + * Click the :menuselection:`Security` tab, copy and paste your SSH public key: + + .. figure:: figures/gce/40-ssh-key.png + :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, + because it is an invalid character while creating user accounts in + |CL|. + + * Click the :guilabel:`Create` button to create the |CL| VM. + +#. 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 + + 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 login to the Clear Linux VM + + Figure 20: SSH login to Clear Linux VM + +Related topics +************** + +* :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 diff --git a/zh_CN/_sources/get-started/virtual-machine-install/hyper-v.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/hyper-v.rst.txt new file mode 100644 index 00000000..45e00741 --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/hyper-v.rst.txt @@ -0,0 +1,68 @@ +.. _hyper-v: + +Use Hyper-V\* +############# + +This page explains how to run |CL-ATTR| inside a +`Windows Server Virtualization`_\* or **Hyper-V** environment. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +* Enable `Intel® Virtualization Technology`_ (Intel® VT) + +* Enable `Intel® Virtualization Technology for Directed I/O`_ (Intel® VT-d) in + your BIOS/UEFI firmware configuration. + +Enable Hyper-V +************** + +Please refer to `Install Hyper-V on Windows 10`_ to enable and configure +*Hyper-V* on your machine. + +Create a virtual network +************************ + +Once *Hyper-V* has been enabled on your Windows system you will need to +create a virtual network in the **Hyper-V Manager**. Refer to the +`Create a virtual network`_ documentation to create and configure +a virtual network. + +Create a virtual machine +************************ + +#. Download and decompress the latest hyperv disk image + :file:`clear-XXXXX-hyperv.img.gz`, where XXXXX is the latest + available version of |CL| from our `Downloads`_ page. + +#. Create a virtual machine using the **Hyper-V Manager**: + + a. Choose **Generation 2** when prompted to *specify VM generation*. + b. Choose **Use an existing virtual hard disk** and browse to find the + :file:`clear-XXXX-hyperv.vhdx` file. + c. When finished, open VM settings, select Firmware Section and in Secure + Boot config, **uncheck** Enable Secure Boot. + + .. note:: Currently, |CL| does not boot with `secure boot` + enabled. + +#. Connect to your new VM and start it. You should see a prompt: + + .. code-block:: console + + > User: root + +#. Set a root user password. + +Your virtual machine running |CL| is ready! + +.. _Windows Server Virtualization: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/about/ +.. _Install Hyper-V on Windows 10: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v +.. _Create a virtual network: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/connect-to-network +.. _Downloads: https://cdn.download.clearlinux.org/image/ +.. _Intel® Virtualization Technology: http://www.intel.com/content/www/us/en/virtualization/virtualization-technology/intel-virtualization-technology.html +.. _Intel® Virtualization Technology for Directed I/O: https://software.intel.com/en-us/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices \ No newline at end of file diff --git a/zh_CN/_sources/get-started/virtual-machine-install/kvm.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/kvm.rst.txt new file mode 100644 index 00000000..8678e5eb --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/kvm.rst.txt @@ -0,0 +1,253 @@ +.. _kvm: + +Run |CL-ATTR| as a KVM guest OS +############################### + +This page explains how to run |CL-ATTR| in a virtualized environment using +:abbr:`KVM (Kernel-based Virtual Machine)`. + +.. contents:: + :local: + :depth: 1 + +Install QEMU-KVM +**************** + +#. Enable the `Intel® Virtualization Technology`_ (Intel® VT) and the + `Intel® Virtualization Technology for Directed I/O`_ (Intel® VT-d) in the + host machine’s BIOS. + +#. Log in and open a terminal emulator. + +#. Install `QEMU*-KVM` on the host machine. Below are some example distros. + + * On |CL|: + + .. code-block:: bash + + sudo swupd bundle-add kvm-host + + * On Ubuntu\* 18.04 LTS Desktop: + + .. code-block:: bash + + sudo apt-get install qemu-kvm + + * On Mint\* 19.1 “Cinnamon” Desktop: + + .. code-block:: bash + + sudo apt-get install qemu-kvm + + * On Fedora\* 30 Workstation: + + .. code-block:: bash + + sudo dnf install qemu-kvm + +Download and launch the virtual machine +*************************************** + +#. Download the latest pre-built |CL| KVM image file from + the `image `_ directory. Look for + ``clear--kvm.img.xz``. You can also use this command: + + .. code-block:: bash + + 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: + + .. code-block:: bash + + unxz -v clear--kvm.img.xz + +#. Download the 3 OVMF files (`OVMF.fd`, `OVMF_CODE.fd`, `OVMF_VARS.fd`) that + provides UEFI support for virtual machines. + + .. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/OVMF.fd + curl -O https://cdn.download.clearlinux.org/image/OVMF_CODE.fd + curl -O https://cdn.download.clearlinux.org/image/OVMF_VARS.fd + + .. note:: + + The default OVMF files from |CL| may not work for some distro version(s). + You may get an `ASSERT` in the `debug.log` file when starting the VM. + If that is the case, use the distro-specific-OVMF files instead. + For example, the |CL| OVMF files work for Ubuntu 18.04 LTS, but not for Ubuntu 19.04 LTS. + Installing and using the OVMF files for Ubuntu 19.04 LTS resolved the `ASSERT` issue. + +#. Download the `start_qemu.sh`_ script from the + `image `_ directory. This script + will launch the |CL| VM and provide console interaction within the same + terminal emulator window. + + .. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh + +#. Make the script executable: + + .. code-block:: bash + + chmod +x start_qemu.sh + +#. Start the |CL| KVM virtual machine: + + .. code-block:: bash + + sudo ./start_qemu.sh clear--kvm.img + +#. Log in as ``root`` user and set a new password. + +SSH access into the virtual machine +*********************************** + +To interact with the |CL| VM through SSH instead of the console it was +launched from, follow these steps. + +#. Configure SSH in the |CL| VM to allow root login: + + .. code-block:: bash + + cat > /etc/ssh/sshd_config << EOF + PermitRootLogin yes + EOF + +#. Enable and start SSH server in the |CL| VM: + + .. code-block:: bash + + systemctl enable sshd + systemctl start sshd + +#. Determine the IP address of the host on which you will launch the VM. + Substitute in the next step with this information. + + .. code-block:: bash + + ip a + +#. SSH into the |CL| VM using the default port of `10022`: + + .. code-block:: bash + + ssh -p 10022 root@ + +Optional: Add the GNOME Display Manager (GDM) +********************************************* + +To add :abbr:`GDM (GNOME Display Manager)` to the |CL| VM, follow these steps: + +#. Shutdown the active |CL| VM. + + .. code-block:: bash + + poweroff + +#. Install the Spice viewer on the local host or remote system. Below are some + example distros. + + * On Clear Linux: + + .. code-block:: bash + + sudo swupd bundle-add virt-viewer + + * On Ubuntu\* 18.04 LTS Desktop: + + .. code-block:: bash + + sudo apt-get install virt-viewer + + * On Mint\* 19.1 “Cinnamon” Desktop: + + .. code-block:: bash + + sudo apt-get install virt-viewer + + * On Fedora\* 30 Workstation: + + .. code-block:: bash + + sudo dnf install virt-viewer + +#. Modify the :file:`start_qemu.sh` script to increase memory (`-m`), add + graphics driver (`-vga`), and add Spice (`-spice`, `-usb`, and + `-device`) support. + + .. code-block:: console + + qemu-system-x86_64 \ + -enable-kvm \ + ${UEFI_BIOS} \ + -smp sockets=1,cpus=4,cores=2 -cpu host \ + -m 4096 \ + -vga qxl \ + -nographic \ + -spice port=5924,disable-ticketing \ + -usb \ + -device usb-tablet,bus=usb-bus.0 \ + -drive file="$IMAGE",if=virtio,aio=threads,format=raw \ + -netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \ + -device virtio-net-pci,netdev=mynet0 \ + -debugcon file:debug.log -global isa-debugcon.iobase=0x402 $@ + +#. Due to changes in the :file:`start_qemu.sh` script from the previous step, + using the same OVMF files will result in the VM not booting properly and + you end up in the the UEFI shell. The easiest way to avoid this is to delete + the OVMF files and restore the originals before relaunching the VM. + +#. Increase the size of the VM by 10GB to accommodate the GDM installation: + + .. code-block:: bash + + qemu-img resize -f raw clear--kvm.img +10G + +#. Relaunch the |CL| VM: + + .. code-block:: bash + + sudo ./start_qemu.sh clear--kvm.img + +#. Determine the IP address of the host on which you will launch the VM. + Substitute in the next step with this information. + + .. code-block:: bash + + ip a + +#. From the local host or remote system, open a new terminal emulator window + and connect into the |CL| VM using the Spice viewer: + + .. code-block:: bash + + remote-viewer spice://:5924 + +#. Log in as `root` user into the |CL| VM. + +#. Follow these steps from :ref:`increase-virtual-disk-size` to resize the partition of the virtual disk of the VM. + +#. Add GDM to the |CL| VM: + + .. code-block:: bash + + swupd bundle-add desktop-autostart + +#. Reboot the |CL| VM to start GDM: + + .. code-block:: bash + + reboot + +#. Go through the GDM out-of-box experience (OOBE). + +#. The default aspect ratio of the GDM GUI for the |CL| VM is 4:3. To change + it, use GDM's `Devices > Displays` setting tool (located at the top-right corner). + + +.. _Intel® Virtualization Technology: https://www.intel.com/content/www/us/en/virtualization/virtualization-technology/intel-virtualization-technology.html +.. _Intel® Virtualization Technology for Directed I/O: https://software.intel.com/en-us/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices +.. _start_qemu.sh: https://cdn.download.clearlinux.org/image/start_qemu.sh diff --git a/zh_CN/_sources/get-started/virtual-machine-install/virtualbox-cl-installer.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/virtualbox-cl-installer.rst.txt new file mode 100644 index 00000000..2a25674d --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/virtualbox-cl-installer.rst.txt @@ -0,0 +1,404 @@ +.. _virtualbox-cl-installer: + +Install a |CL-ATTR| VM in VirtualBox\* +###################################### + +This page explains how to create a virtual machine on the `VirtualBox`_ +hypervisor with |CL-ATTR| as the guest operating system. These instructions +support the |CL| live-server installer to create the |CL| virtual machine (VM). + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +#. Enable virtualization, such as `Intel® Virtualization Technology`_ + (Intel® VT), on the host system from EFI/BIOS. + +#. Download and install |VB| **version 6.0 or greater** from + `VirtualBox`_ using the `VirtualBox Installation Instructions`_ for your + platform. + +Download and extract the |CL| installer ISO +******************************************* + +#. Download the :file:`clear--live-server.iso.xz` of + |CL| on the `Downloads`_ page. + +#. Validate the integrity of the downloaded image by checking the file hash + and signatures. Refer to :ref:`validate-signatures` for detailed steps. + +#. Decompress the downloaded image. + + - On Windows you can use `7zip`_ to extract the file by right-clicking the + file to *Extract Here* (in the same directory) + + .. figure:: figures/vbox/virtualbox-cl-installer-01.png + :scale: 100% + :alt: 7zip extract here command + + Figure 1: 7zip extract here command + + - On Linux : + + .. code-block:: bash + + xz -d clear--live-server.iso.xz + +#. Delete the originally downloaded compressed file. + +Create a new |VB| virtual machine +********************************* + +A new :abbr:`VM (Virtual Machine)` needs to be created in |VBM| where |CL| +will be installed. General instructions for creating a virtual machine and +details about using different settings are available in the VirtualBox manual section `Creating Your First Virtual Machine`_. + +#. Launch the |VBM| from your host system. + +#. Click the :guilabel:`New` button to create a new VM. + +#. Choose :guilabel:`Expert mode`. + +#. On the :guilabel:`Create Virtual Machine` screen, enter the following settings: + + - **Name**: Choose name (e.g. ClearLinuxOS-VM). + - **Type**: Linux + - **Version**: **Linux 2.6 / 3.x / 4.x (64-bit)** + - **Hard disk**: `Create a virtual hard disk now` + - **Memory size default**: 2048 MB (Adjust appropriately.) + + .. note:: + Later, if you want to change the amount of RAM allocated, power down your VM. Return to :file:`Settings > System` and change + :guilabel:`Base Memory` to the desired size. + + .. figure:: figures/vbox/virtualbox-cl-installer-02.png + :scale: 100% + :alt: Create Virtual Machine + + Figure 2: Create Virtual Machine + +#. Click :guilabel:`Create`. + +#. On the :guilabel:`Create Virtual Hard Disk` screen, select: + + - **File location** + - **File size**: **32.00 GB**. Adjust size to your needs. + - **Hard disk file type**: `VDI (VirtualBox Disk Image)` + - **Storage on physical hard disk**:`Dynamically allocated` + + .. figure:: figures/vbox/virtualbox-cl-installer-03.png + :scale: 100% + :alt: Create Virtual Hard Disk + + Figure 3: Create Virtual Hard Disk + +#. Click :guilabel:`Create`. + + A new virtual machine will be created and appear in the |VBM|. + +#. Click :guilabel:`Settings` to configure the |CL| VM. + +#. In the left-hand menu, navigate to the :menuselection:`System` menu. + +#. On the :guilabel:`Motherboard` tab, select the :guilabel:`Chipset` menu, and + then select :menuselection:`ICH9`. See Figure 4. + + .. note:: + + You can select which chipset will be presented to the virtual machine. + Consult the `VM VirtualBox User Manual`_ for more details. + +#. In :guilabel:`Enabled Features`, check these boxes: + + - **Enable I/O APIC** + - **Enable EFI (special OSes only)** + + .. figure:: figures/vbox/virtualbox-cl-installer-04.png + :scale: 100% + :alt: Settings > System + + Figure 4: Settings > System + + .. note:: + + By default, only 1 virtual CPU is allocated to the new VM. Consider + increasing the number of virtual processors allocated to the virtual + machine under Settings > System > Processor for increased + performance. + +#. Click :guilabel:`OK`. + +Install |CL| on the |VB| VM +*************************** + +|CL| is ready to be installed. + +Mount the installation ISO +========================== + +The |CL| installer ISO needs to be mounted as a virtual CD-ROM on the VM +before powering the VM on. + +#. From the *ClearLinux-OS* :guilabel:`Settings` menu at left, select + :guilabel:`Storage`. + +#. From :guilabel:`Storage Devices`, middle column, click the blue + disk labeled :guilabel:`Empty`. + +#. From the :guilabel:`Attributes` menu, click the blue CD disk next to + the :guilabel:`Optical Drive` drop down menu and click + :guilabel:`Choose Virtual Optical Disk File...` + + .. figure:: figures/vbox/virtualbox-cl-installer-05.png + :scale: 100% + :alt: Choose Virtual Optical Disk Drive + + Figure 5: Choose Virtual Optical Disk Drive + +#. Where there appears :guilabel:`Please choose a virtual optical disk file`, + select the ISO file and click *Open*. + + .. figure:: figures/vbox/virtualbox-cl-installer-06.png + :scale: 100% + :alt: Mounting an ISO + + Figure 6: Mounting an ISO + +#. Click :guilabel:`OK` to exit and return to the main |VBM|. + +Install |CL| with live-server installer +======================================= + +#. In the |VBM|, select virtual machine you created and click :guilabel:`Start`. + + .. figure:: figures/vbox/virtualbox-cl-installer-07.png + :scale: 100% + :alt: Start the installer + + Figure 7: Start the installer + + .. note:: + + To release the mouse cursor from the VM console window, press the right + :kbd:`Ctrl` key on the keyboard. + +#. When :guilabel:`Clear Linux Installer` in boot manager appears, + select :kbd:`Enter`. Do not install the bundle `desktop-autostart`. + +#. Follow the steps in :ref:`bare-metal-install-server` to + install |CL| onto the VM virtual disk. Note: + + #. In :guilabel:`Configure Installation Media`, navigate top + VBOX HARDDISK, and then select :guilabel:`Confirm`. + + #. In :menuselection:`Advanced options --> Manage User`, create an + administrative user. + + #. Do not install the bundle `desktop-autostart`. + +#. When |CL| installation is complete, click :guilabel:`Exit`. + +#. At the prompt, enter: + + .. code-block:: bash + + shutdown now + +Unmount the ISO +=============== + +The |CL| installer ISO needs to be unmounted to allow the VM to boot from the +virtual hard disk. + +#. Return to the |VBM|. + +#. Click :guilabel:`Settings` to configure the |CL| VM. + +#. From the VM :guilabel:`Settings` window, navigate to the :guilabel:`Storage` + pane in the left menu. + +#. From the middle :guilabel:`Storage Devices` column, click the blue CD disk + labeled :guilabel:`clear--live-server.iso` under the + :guilabel:`Controller: IDE`. + +#. From the :guilabel:`Attributes` column at right, in :guilabel:`Optical Drive`, + select the blue CD icon beside and click + :guilabel:`Remove Disk from Virtual Drive`. + + .. figure:: figures/vbox/virtualbox-cl-installer-08.png + :scale: 100% + :alt: Remove Disk from Virtual Drive + + Figure 8: Remove Disk from Virtual Drive + +#. Click :guilabel:`OK` to exit the :guilabel:`VM Settings` menu and return to + the main |VBM|. + +Install |VB| Linux Guest Additions +================================== + +|CL| provides Linux Guest Additions drivers for full compatibility using an +install script in the **kernel-lts** (Long Term Support) bundle by |CL|. + +#. From the |VBM| select the |CL| VM, and select :guilabel:`Start`. + +#. In the VM Console, log in as the administrative user previously created. + + .. note:: + A message may appear: "A kernel update is available: you may wish + to reboot the system." + + To update the kernel, enter: + + .. code-block:: bash + + sudo reboot + + At initial login, enter the administrative user's password and continue. + +#. Validate the installed kernel is **kernel-lts** by checking the output + of the :command:`uname -r` command. It should end in **.lts** or **.lts2018**. + + .. code-block:: bash + + uname -r + .lts + + If the running kernel is not **lts**: install the LTS kernel manually, + update the bootloader, and check again: + + .. code-block:: bash + + sudo swupd bundle-add kernel-lts + clr-boot-manager set-kernel $(basename $(realpath /usr/lib/kernel/default-lts)) + clr-boot-manager update + reboot + +#. Remove any kernel bundles that do not end in *-lts* or *kernel-install* + to simplify and avoid conflicts: + + .. code-block:: bash + + sudo swupd bundle-list | grep kernel + sudo swupd bundle-remove + +#. In the VM Console top menu, click :guilabel:`Devices`, and select + :guilabel:`Insert Guest Additions CD image...` to mount the |VB| driver + installation to the |CL| VM. + + .. figure:: figures/vbox/virtualbox-cl-installer-09.png + :scale: 100% + :alt: Insert Guest Additions CD image + + Figure 9: Insert Guest Additions CD image + +#. If a dialogue appears, "VBx_GAs_6.0.8... Would you like to run it?", + select :guilabel:`Cancel`. + + Instead, we provide a script to patch and install |VB| drivers on |CL|. + +#. Open a Terminal and enter the script: + + .. code-block:: bash + + sudo install-vbox-lga + + .. note:: + + Successful installation shows: "Guest Additions installation complete". + If drivers are already installed, don't re-install them. + +#. Shut down the system. Select :menuselection:`Machine --> ACPI Shutdown`. + + .. figure:: figures/vbox/virtualbox-cl-installer-10.png + :scale: 100% + :alt: Powering off a VirtualBox VM + + Figure 10: Powering off a VirtualBox VM + +#. Select :guilabel:`Settings`, :guilabel:`Display`. + +#. In :guilabel:`Graphics Controller`, select :guilabel:`VBoxSVGA` + to adjust screen size dynamically. + + .. figure:: figures/vbox/virtualbox-cl-installer-11.png + :scale: 100% + :alt: Remove Disk from Virtual Drive + + Figure 11: VirtualBox hardware acceleration error + +#. In the |VBM|, select :guilabel:`Start`. + +#. In the VM console, login and verify the |VB| drivers are loaded: + + .. code-block:: bash + + lsmod | grep ^vbox + + You should see drivers loaded with names beginning with **vbox**: + (e.g., vboxvideo, vboxguest). + +#. Add `desktop-autostart` for a full desktop experience. + + .. code-block:: bash + + sudo swupd bundle-add desktop-autostart + +#. Reboot the VM and log in with the administrative user. + + .. code-block:: bash + + sudo reboot + +The |CL| VM running on |VB| is ready to develop and explore. + +Troubleshooting +*************** + +#. **Problem:** On a Microsoft\* Windows\* OS, |VB| encounters an error when + trying to start a VM indicating *VT-X/AMD-v hardware acceleration is not + available on your system.* + + .. figure:: figures/vbox/virtualbox-cl-installer-12.png + :scale: 100% + :alt: Remove Disk from Virtual Drive + + Figure 12: VirtualBox hardware acceleration error + + **Solution:** First, double check the `Prerequisites`_ section to make + sure *Hardware accelerated virtualization* extensions have been enabled + in the host system's EFI/BIOS. + + *Hardware accelerated virtualization*, may get disabled for |VB| when + another hypervisor, such as *Hyper-V* is enabled. + + To disable *Hyper-V* execute this command in an + **Administrator: Command Prompt or Powershell**, and reboot the system: + + .. code-block:: bash + + bcdedit /set {current} hypervisorlaunchtype off + + To enable Hyper-V again, execute this command in an + **Administrator: Command Prompt or Powershell**, and reboot the system: + + .. code-block:: bash + + bcdedit /set {current} hypervisorlaunchtype Auto + +.. _VirtualBox Installation Instructions: https://www.virtualbox.org/manual/ch02.html + +.. _VirtualBox: https://www.virtualbox.org + +.. _Downloads: https://clearlinux.org/downloads + +.. _`Creating Your First Virtual Machine`: https://www.virtualbox.org/manual/UserManual.html#gui-createvm + +.. _7zip: http://www.7-zip.org/ + +.. _Intel® Virtualization Technology: https://www.intel.com/content/www/us/en/virtualization/virtualization-technology/intel-virtualization-technology.html + +.. _VM VirtualBox User Manual: https://docs.oracle.com/cd/E97728_01/E97727/html/settings-system.html \ No newline at end of file diff --git a/zh_CN/_sources/get-started/virtual-machine-install/vmw-player-preconf.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/vmw-player-preconf.rst.txt new file mode 100644 index 00000000..a51b94ab --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/vmw-player-preconf.rst.txt @@ -0,0 +1,308 @@ +.. _vmw-player-preconf: + +Run pre-configured |CL-ATTR| image as a VMware\* Workstation Player guest OS +############################################################################ + +This page explains how to deploy a pre-configured |CL| VMware image on +`VMware Workstation 14 Player`_. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +VMware Workstation 14 Player is a type 2 hypervisor. It runs on top of +another operating system such as Windows\* or Linux\*. With VMware ESXi, you +can create, configure, manage, and run |CL-ATTR| :abbr:`VMs (Virtual Machines)` +on your local system. + +.. note:: + + Screenshots in this document show VMware Workstation 14 Player for Windows. + Menus and prompts in the Linux version have minor wording differences. + +Install the VMware Workstation Player hypervisor +************************************************ + +#. Enable :abbr:`Intel® VT (Intel® Virtualization Technology)` and + :abbr:`Intel® VT-d (Intel® Virtualization Technology for Directed I/O)` in + your system's BIOS. + +#. `VMware Workstation 14 Player`_ is available for Windows and Linux. + Download your preferred version. + +#. Depending on which OS you're running, install it by following one of these + instructions: + + * On supported Linux distros: + + #. Enable a GUI desktop. + + #. Start a terminal emulator. + + #. Start the installer by issuing the command below and following the + guided steps. + + .. code-block:: bash + + sudo sh ./VMware-Player-[version number].x86_64.bundle + + * On Windows: + + #. Start the installer. + #. Follow the setup wizard. + +For additional help, see the `VMware Workstation Player Documentation`_. + +Download the latest |CL| VMware image +************************************* + +Get the latest |CL| VMware image from the `image`_ repository. +Look for :file:`clear-[version number]-vmware.vmdk.xz`. You can also use +this command: + +.. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware) + +Visit :ref:`image-types` for additional information about all available |CL| images. + +.. include:: ../../guides/maintenance/download-verify-decompress.rst + :Start-after: verify-windows: + +We also provide instructions for other operating systems: + +* :ref:`download-verify-decompress-linux` + +Create and configure a new VM +***************************** + +#. Start the `VMware Workstation Player` app. +#. On the home screen, click :guilabel:`Create a New Virtual Machine`. See + figure 1. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-01.png + :scale: 100% + :alt: VMware Workstation 14 Player - Create a new virtual machine + + Figure 1: VMware Workstation 14 Player - Create a new virtual machine + +#. On the :guilabel:`Welcome to the New Virtual Machine Wizard` screen, + select the :guilabel:`I will install the operating system later` option. + See figure 2. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-02.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select install operating system + + Figure 2: VMware Workstation 14 Player - Select install operating + system later. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Select a Guest Operating System` screen, set the + :guilabel:`Guest operating system` setting to :guilabel:`Linux`. + See figure 3. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-03.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select guest operating system type + + Figure 3: VMware Workstation 14 Player - Select guest operating system + type + +#. Set :guilabel:`Version` setting to + :guilabel:`Other Linux 3.x or later kernel 64-bit`. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Name the Virtual Machine` screen, give your new VM a + name. See figure 4. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-04.png + :scale: 100% + :alt: VMware Workstation 14 Player - Name virtual machine + + Figure 4: VMware Workstation 14 Player - Name virtual machine + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Specify Disk Capacity` screen, click + the :guilabel:`Next` button. Keep the default disk settings unchanged. + When we attach the pre-configured |CL| VMware image, we will remove the + default virtual disk and replace it with the pre-configured one. See + figure 5. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-05.png + :scale: 100% + :alt: VMware Workstation 14 Player - Set disk capacity + + Figure 5: VMware Workstation 14 Player - Set disk capacity + +#. On the :guilabel:`Ready to Create Virtual Machine` screen, click the + :guilabel:`Customize Hardware...` button. See figure 6. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-06.png + :scale: 100% + :alt: VMware Workstation 14 Player - Customize hardware + + Figure 6: VMware Workstation 14 Player - Customize hardware + +#. Under the :guilabel:`Device` list, select :guilabel:`Processors`. See + figure 7. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-07.png + :scale: 100% + :alt: VMware Workstation 14 Player - Set virtualization engine option + + Figure 7: VMware Workstation 14 Player - Set virtualization engine + option + +#. Under the :guilabel:`Virtualization engine` section, + check :guilabel:`Virtualize Intel VT-x/EPT or AMD-V/RVI`. + +#. To disconnect the virtual CD/DVD (IDE) since it is not needed, under the + :guilabel:`Device` list, select :guilabel:`New CD/DVD (IDE)`. See figure 8. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-08.png + :scale: 100% + :alt: VMware Workstation 14 Player - Disconnect CD/DVD (IDE) + + Figure 8: VMware Workstation 14 Player - Disconnect CD/DVD (IDE) + +#. Under the :guilabel:`Device status` section, uncheck + :guilabel:`Connect at power on`. + +#. Click the :guilabel:`Close` button. + +#. Click the :guilabel:`Finish` button. + +Attach the pre-configured |CL| VMware image +******************************************* + +#. Move the downloaded and decompressed pre-configured |CL| VMware image file + :file:`clear-[version number]-basic.vmdk` to the directory where your + newly-created VM resides. + + .. note:: + + Depending on the OS, you can typically find the VMware VM files under: + + * On Linux distros: :file:`/home/username/vmware` + * On Windows: :file:`C:\Users\username\Documents\Virtual Machines` + +#. On the :guilabel:`VMware Workstation Player` home screen, select your + newly-created VM. See figure 9. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-09.png + :scale: 100% + :alt: VMware Workstation 14 Player - Edit virtual machine settings + + Figure 9: VMware Workstation 14 Player - Edit virtual machine settings + +#. Click :guilabel:`Edit virtual machine settings`. + +#. To remove the default hard disk, under the :guilabel:`Device` list, select + :guilabel:`Hard Disk (SCSI)`. See figure 10. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-10.png + :scale: 100% + :alt: VMware Workstation 14 Player - Remove hard drive + + Figure 10: VMware Workstation 14 Player - Remove hard drive + +#. Click the :guilabel:`Remove` button. + +#. To add a new hard disk and attach the pre-configured |CL| VMware image, + click the :guilabel:`Add...` button. See Figure 11. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-11.png + :scale: 100% + :alt: VMware Workstation 14 Player - Add new hard drive + + Figure 11: VMware Workstation 14 Player - Add new hard drive + +#. Under the :guilabel:`Hardware types` section, select :guilabel:`Hard Disk`. + +#. Click the :guilabel:`Next` button. + +#. Select your preferred :guilabel:`Virtual disk type`. See figure 12. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-12.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select virtual disk type + + Figure 12: VMware Workstation 14 Player - Select virtual disk type + +#. Select the :guilabel:`Use an existing virtual disk` option. See figure 13. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-13.png + :scale: 100% + :alt: VMware Workstation 14 Player - Use existing virtual disk + + Figure 13: VMware Workstation 14 Player - Use existing virtual disk + +#. Click the :guilabel:`Browse` button and select the pre-configured |CL| + VMware image file. See figure 14. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-14.png + :scale: 100% + :alt: VMware Workstation 14 Player - Select ready-made VMware |CL| + + Figure 14: VMware Workstation 14 Player - Select ready-made VMware |CL| + image file + +#. Click the :guilabel:`Finish` button. + + .. note:: + + When asked to convert the existing virtual disk to a newer format, + selecting either option works. + +Enable UEFI boot support +************************ + +|CL| needs UEFI support to boot. To enable it, add the +following line to the end of your VM's :file:`.vmx` file: + +.. code-block:: console + + firmware = "efi" + +.. note:: + + Depending on the OS, you can typically find the VMware VM files under: + + * On Linux distros: :file:`/home/username/vmware` + * On Windows: :file:`C:\\Users\\username\\Documents\\Virtual Machines` + +Power on the VM +*************** + +After configuring the settings above, power on your |CL| virtual machine. + +#. On the :guilabel:`VMware Workstation Player` home screen, select your + VM. See figure 15. + + .. figure:: figures/vmw-player-preconf/vmw-player-preconf-15.png + :scale: 100% + :alt: VMware Workstation 14 Player - Power on virtual machine + + Figure 15: VMware Workstation 14 Player - Power on virtual machine + +#. Click :guilabel:`Play virtual machine`. + +Related topics +************** + +For other guides on using the VMWare Player and ESXi, see: + +* :ref:`vmw-player` +* :ref:`vmware-esxi-install-cl` +* :ref:`vmware-esxi-preconfigured-cl-image` + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html +.. _VMware Workstation 14 Player: https://www.vmware.com/products/workstation-player.html +.. _VMware Workstation Player Documentation: https://docs.vmware.com/en/VMware-Workstation-Player/index.html diff --git a/zh_CN/_sources/get-started/virtual-machine-install/vmw-player.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/vmw-player.rst.txt new file mode 100644 index 00000000..a1028274 --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/vmw-player.rst.txt @@ -0,0 +1,296 @@ +.. _vmw-player: + +Install |CL-ATTR| as a VMware\* Workstation Player guest OS +########################################################### + +This page explains how to create a new VM and install |CL| on it with the +VMware Workstation Player hypervisor. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +`VMware Workstation Player`_ is a type 2 hypervisor. It runs on top of +Windows\* or Linux\* operating systems. With VMware ESXi, you can +create, configure, manage, and run |CL-ATTR| :abbr:`VMs (Virtual Machines)` +on your local system. + +VMware offers a type 1 hypervisor called `VMware ESXi`_ designed for the +cloud environment. For information on how to install |CL| as guest OS on +it, see :ref:`vmware-esxi-install-cl`. + +.. note:: + + The screenshots on this document show the Windows version of the + VMware Workstation 15 Player. The menus and prompts are similar to those + in other versions and for the Linux OS save some minor wording differences. + +If you prefer to use a pre-configured |CL| VMware image instead, +see our :ref:`vmw-player-preconf` guide. + +Install the VMware Workstation Player hypervisor +************************************************ + +#. Enable :abbr:`Intel® VT (Intel® Virtualization Technology)` and + :abbr:`Intel® VT-d (Intel® Virtualization Technology for Directed I/O)` in + your system's BIOS. + +#. `VMware Workstation Player`_ is available for Windows and Linux. + Download your preferred version. + + .. note:: + + By default, selecting download means you receive the latest version + of this application. Commands may differ based on the version. + +#. Install VMware Workstation Player following the instructions + appropriate for your system's OS: + + * On supported Linux distros: + + #. Enable a GUI desktop. + #. Start a terminal emulator. + #. Start the installer by issuing the command below and follow the + guided steps. + + .. code-block:: console + + sudo sh ./VMware-Player-[version number].x86_64.bundle + + * On Windows: + + #. Start the installer. + #. Follow the setup wizard. + +For additional help, see the `VMware Workstation Player Documentation`_. + +Download the latest |CL| installer +********************************** + +Get the latest installer with |CL| OS Desktop from the `downloads`_ page. + +Visit :ref:`image-types` for additional information about all available |CL| images. + +We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to :ref:`download-verify-decompress`. + +Create and configure a new VM +***************************** + +#. Start the `VMware Workstation Player` app. + +#. On the home screen, click :guilabel:`Create a New Virtual Machine`. See + Figure 1. + + .. figure:: figures/vmw-player/vmw-player-01.png + :scale: 100% + :alt: VMware Workstation Player - Create a new virtual machine + + Figure 1: VMware Workstation Player - Create a new virtual + machine + +#. On the :guilabel:`Welcome to the New Virtual Machine Wizard` screen, + select the :guilabel:`Installer disc image file (iso)` option. + See Figure 2. + + .. figure:: figures/vmw-player/vmw-player-02.png + :scale: 100% + :alt: VMware Workstation Player - Select |CL| installer ISO + + Figure 2: VMware Workstation Player - Select |CL| installer ISO + +#. Click the :guilabel:`Browse` button and select the decompressed |CL| + installer ISO. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Select a Guest Operating System`, set the + :guilabel:`Guest operating system` setting to :guilabel:`Linux`. See + Figure 3. + + .. figure:: figures/vmw-player/vmw-player-03.png + :scale: 100% + :alt: VMware Workstation Player - Select guest operating system type + + Figure 3: VMware Workstation Player - Select guest operating system + type + +#. Set the :guilabel:`Version` setting to + :guilabel:`Other Linux 4.x or later kernel 64-bit`. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Name the Virtual Machine` screen, name the new VM. See + Figure 4. + + .. figure:: figures/vmw-player/vmw-player-04.png + :scale: 100% + :alt: VMware Workstation Player - Name virtual machine + + Figure 4: VMware Workstation Player - Name virtual machine + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Specify Disk Capacity` screen, set the VM's maximum disk + size. See Figure 5. + + .. figure:: figures/vmw-player/vmw-player-05.png + :scale: 100% + :alt: VMware Workstation Player - Set disk capacity + + Figure 5: VMware Workstation Player - Set disk capacity + + .. note:: + + For optimal performance with the |CL| Desktop image, we recommend 32GB + of drive space. See :ref:`system-requirements` for more details. + +#. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Ready to Create Virtual Machine` screen, click the + :guilabel:`Customize Hardware...` button. See Figure 6. + + .. figure:: figures/vmw-player/vmw-player-06.png + :scale: 100% + :alt: VMware Workstation Player - Customize hardware + + Figure 6: VMware Workstation Player - Customize hardware + +#. Select :guilabel:`Memory` and set the size to 2GB. See Figure 7. + + .. figure:: figures/vmw-player/vmw-player-07.png + :scale: 100% + :alt: VMware Workstation Player - Set memory size + + Figure 7: VMware Workstation Player - Set memory size + + .. note:: + The |CL| installer ISO needs a minimum of 2GB of RAM. + After completing installation, |CL| can run on as little as + 128MB of RAM. Thus, you can reduce the memory size if needed. + See :ref:`system-requirements` for more details. + +#. Under the :guilabel:`Device` list, select :guilabel:`Processors`. See + Figure 8. + + .. figure:: figures/vmw-player/vmw-player-08.png + :scale: 100% + :alt: VMware Workstation Player - Set virtualization engine option + + Figure 8: VMware Workstation Player - Set virtualization engine + option + +#. Under the :guilabel:`Virtualization engine` section, + check :guilabel:`Virtualize Intel VT-x/EPT or AMD-V/RVI`. + +#. Click the :guilabel:`Close` button. + +#. Click the :guilabel:`Finish` button. + +Install |CL| into the new VM +**************************** + +#. Select the newly-created VM and click the :guilabel:`Play virtual machine` + button. See Figure 9. + + .. figure:: figures/vmw-player/vmw-player-09.png + :scale: 100% + :alt: VMware Workstation Player - Power on virtual machine + + Figure 9: VMware Workstation Player - Power on virtual machine + +#. Follow the :ref:`install-on-target-start` guide to complete the + installation of |CL|. + +#. After the installation completes, reboot the VM. This reboot restarts the + |CL| installer. + +Detach the |CL| installer ISO from the VM +***************************************** + +#. To enable the mouse pointer so you access VMware Workstation Player's + menus, press :kbd:`` + :kbd:`` on the keyboard. + +#. To disconnect the CD/DVD to stop it from booting the |CL| installer ISO + again, click the :guilabel:`Player` menu. See Figure 10. + + .. figure:: figures/vmw-player/vmw-player-10.png + :scale: 100% + :alt: VMware Workstation Player - Edit CD/DVD settings + + Figure 10: VMware Workstation Player - Edit CD/DVD settings + +#. Go to :menuselection:`Removable Devices-->CD/DVD (IDE)-->Disconnect`. + +#. Click the :guilabel:`OK` button. + +Enable UEFI boot support +************************ + +|CL| needs UEFI support to boot. To enable UEFI: + +#. Power off the VM. click the :guilabel:`Player` menu. See Figure 11. + + .. figure:: figures/vmw-player/vmw-player-11.png + :scale: 100% + :alt: VMware Workstation Player - Power off virtual machine + + Figure 11: VMware Workstation Player - Power off virtual machine + +#. Go to :guilabel:`Power` and select :guilabel:`Shut Down Guest`. + +#. Add the following line to the end of your VM's :file:`.vmx` file: + + .. code-block:: console + + firmware = "efi" + + .. note:: + + Depending on the OS, you can typically find the VMware VM files under: + + * On Linux distros: :file:`/home/username/vmware` + * On Windows: :file:`C:\\Users\\username\\Documents\\Virtual Machines` + + +#. After configuring the settings above, power on your |CL| virtual machine. + On the :guilabel:`VMware Workstation Player` home screen, select your + VM. See Figure 9. + +#. Click :guilabel:`Play virtual machine`. + +#. Install Open VM Tools. You may want to install the `open-vm-tools` in + your virtual machine. The Open Virtual Machine Tools (open-vm-tools) are + the open source implementation of VMware Tools for Linux guest operating + systems. In |CL| you can use the following to install the bundle in your VM + + .. code-block:: console + + sudo swupd bundle-add os-cloudguest-vmware + sudo systemctl enable --now open-vm-tools + +More information is available on the `VMWare Tools Product Documentation`_ site. + +Related topics +************** + +For other guides on using the VMWare Player and ESXi, see: + +* :ref:`vmw-player-preconf` +* :ref:`vmware-esxi-install-cl` +* :ref:`vmware-esxi-preconfigured-cl-image` + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html + +.. _VMware Workstation Player: + https://www.vmware.com/products/workstation-player.html + +.. _VMware Workstation Player Documentation: + https://docs.vmware.com/en/VMware-Workstation-Player/index.html + +.. _downloads: https://clearlinux.org/downloads + +.. _VMWare Tools Product Documentation: https://docs.vmware.com/en/VMware-Tools/10.1.0/com.vmware.vsphere.vmwaretools.doc/GUID-8B6EA5B7-453B-48AA-92E5-DB7F061341D1.html diff --git a/zh_CN/_sources/get-started/virtual-machine-install/vmware-esxi-install-cl.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/vmware-esxi-install-cl.rst.txt new file mode 100644 index 00000000..902548a4 --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/vmware-esxi-install-cl.rst.txt @@ -0,0 +1,288 @@ +.. _vmware-esxi-install-cl: + +Install |CL-ATTR| as a VMware\* ESXi guest OS +############################################# + +This page explains how to create a new :abbr:`VM (Virtual Machine)` and +manually install |CL-ATTR| on the new VM with VMware ESXi 6.5. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +`VMware ESXi`_ is a type 1 bare-metal hypervisor that runs directly on top +of server hardware. With VMware ESXi, you can create, configure, manage, and +run |CL| virtual machines in the cloud. + +Manually installing |CL| on a new VM gives additional configuration flexibility +during installation. For example: alternate disk sizes, number of partitions, +pre-installed bundles, etc. + +If you prefer to use a preconfigured |CL| VMware image instead, refer to +:ref:`vmware-esxi-preconfigured-cl-image`. + +.. note:: + + VMware also offers a type 2 hypervisor designed for the desktop environment, + called `VMware Workstation Player`_. Refer to :ref:`vmw-player-preconf` or + :ref:`vmw-player` for more information. + + Visit :ref:`image-types` to learn more about all available images. + +Download the latest |CL| installer ISO +************************************** + +Get the latest |CL| installer ISO image from the `image`_ repository. +Look for :file:`clear-[version number]-installer.iso.xz`. + +We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to :ref:`download-verify-decompress`. + +Upload the |CL| installer ISO to the VMware server +************************************************** + +#. Connect to the VMware server and log into an account with sufficient + permission to create and manage VMs. +#. Under the :guilabel:`Navigator` window, select :guilabel:`Storage`. + See Figure 1. +#. Under the :guilabel:`Datastores` tab, click the :guilabel:`Datastore browser` + button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-1.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Storage + + Figure 1: VMware ESXi - Navigator > Storage + +#. Click the :guilabel:`Create directory` button and name the directory `ISOs`. + See Figure 2. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-2.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Create directory + + Figure 2: VMware ESXi - Datastore > Create directory + +#. Select the newly-created directory and click the :guilabel:`Upload` button. + See Figure 3. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-3.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Upload ISO + + Figure 3: VMware ESXi - Datastore > Upload ISO + +#. Select the decompressed |CL| installer ISO file :file:`clear-[version number]-installer.iso` + and upload it. + +Create and configure a new VM +***************************** + +In this section, you will create a new VM, configure its basic parameters such +as drive size, number of CPUs, memory size, and then attach the |CL| installer ISO. + +#. Under the :guilabel:`Navigator` window, select :guilabel:`Virtual Machines`. + See Figure 4. +#. In the right window, click the :guilabel:`Create / Register VM` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-4.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines + + Figure 4: VMware ESXi - Navigator > Virtual Machines + +#. On the :guilabel:`Select creation type` step: + + #. Select the :guilabel:`Create a new virtual machine` option. + See Figure 5. + #. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-5.png + :scale: 100 % + :alt: VMware ESXi - Create a new virtual machine + + Figure 5: VMware ESXi - Create a new virtual machine + +#. On the :guilabel:`Select a name and guest OS` step: + + #. Give the new VM a name in the :guilabel:`Name` field. See Figure 6. + #. Set the :guilabel:`Compatability` option to :guilabel:`ESXi 6.5 virtual machine`. + #. Set the :guilabel:`Guest OS family` option to :guilabel:`Linux`. + #. Set the :guilabel:`Guest OS version` option to :guilabel:`Other 3.x or later Linux (64-bit)`. + #. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-6.png + :scale: 100 % + :alt: VMware ESXi - Give a name and select guest OS type + + Figure 6: VMware ESXi - Give a name and select guest OS type + +#. On the :guilabel:`Select storage` step: + + #. Accept the default option. + #. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Customize settings` step: + + #. Click the :guilabel:`Virtual Hardware` button. See Figure 7. + #. Expand the :guilabel:`CPU` setting and enable :guilabel:`Hardware virtualization` by + checking :guilabel:`Expose hardware assisted virtualization to the guest OS`. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-7.png + :scale: 100 % + :alt: VMware ESXi - Enable hardware virtualization + + Figure 7: VMware ESXi - Enable hardware virtualization + + #. Set :guilabel:`Memory` size to 2048MB (2GB). See Figure 8. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-8.png + :scale: 100 % + :alt: VMware ESXi - Set memory size + + Figure 8: VMware ESXi - Set memory size + + .. note:: + + The |CL| installer ISO needs a minimum of 2GB of RAM to work properly. + You can reduce the memory size after the installation completes if you want, + because a minimum |CL| installation can function on as little as 128MB of RAM. + See :ref:`system-requirements` for more details. + + #. Set :guilabel:`Hard disk 1` to the desired capacity. See Figure 9. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-9.png + :scale: 100 % + :alt: VMware ESXi - Set hard disk size + + Figure 9: VMware ESXi - Set hard disk size + + .. note:: + + A minimum |CL| installation can exist on 600MB of drive space. + See :ref:`system-requirements` for more details. + + #. Attach the |CL| installer ISO. For the :guilabel:`CD/DVD Drive 1` setting, + click the drop-down list to the right of it and select the :guilabel:`Datastore ISO file` + option. Then select the |CL| installer ISO :file:`clear-[version number]-installer.iso` + that you previously uploaded to the VMware server. See Figure 10. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-10.png + :scale: 100 % + :alt: VMware ESXi - Set CD/DVD to boot installer ISO + + Figure 10: VMware ESXi - Set CD/DVD to boot installer ISO + +#. Click the :guilabel:`Next` button. +#. Click the :guilabel:`Finish` button. + +Install |CL| into the new VM +**************************** + +#. Power on the VM. + + #. Under the :guilabel:`Navigator` window, select :guilabel:`Virtual Machines`. + See Figure 11. + #. In the right window, select the newly-created VM. + #. Click the :guilabel:`Power on` button. + #. Click on the icon representing the VM to bring it into view and maximize + its window. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-11.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines > Power on VM + + Figure 11: VMware ESXi - Navigator > Virtual Machines > Power on VM + +#. Follow the :ref:`install-on-target-start` guide to complete the installation of + |CL|. +#. After the installation is complete, follow the |CL| instruction to reboot it. + This will restart the installer again. + +Reconfigure the VM's settings to boot the newly-installed |CL| +************************************************************** + +After |CL| has been installed using the installer ISO, it must be detached so +it will not run again. Also, in order to boot the newly-installed |CL|, you must +enable UEFI support. + +#. Power off the VM. + + #. Click the :guilabel:`Actions` button - located on the top-right corner + of the VM's windows - and go to the :guilabel:`Power` setting and + select the :guilabel:`Power off` option. See Figure 12. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-12.png + :scale: 100 % + :alt: VMware ESXi - Actions > Power off + + Figure 12: VMware ESXi - Actions > Power off + +#. Edit the VM settings. + + #. Click the :guilabel:`Actions` button again and select :guilabel:`Edit settings`. + See Figure 13. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-13.png + :scale: 100 % + :alt: VMware ESXi - Actions > Edit settings + + Figure 13: VMware ESXi - Actions > Edit settings + +#. Disconnect the CD/DVD to stop it from booting the |CL| installer ISO again. + + #. Click the :guilabel:`Virtual Hardware` button. See Figure 14. + #. For the :guilabel:`CD/DVD Drive 1` setting, uncheck the + :guilabel:`Connect` checkbox. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-14.png + :scale: 100 % + :alt: VMware ESXi - Disconnect the CD/DVD drive + + Figure 14: VMware ESXi - Disconnect the CD/DVD drive + +#. |CL| needs UEFI support in order to boot. Enable it. + + #. Click the :guilabel:`VM Options` button. See Figure 15. + #. Expand the :guilabel:`Boot Options` setting. + #. For the :guilabel:`Firmware` setting, click the drop-down list to the right + of it and select the :guilabel:`EFI` option. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-15.png + :scale: 100 % + :alt: VMware ESXi - Set boot firmware to EFI + + Figure 15: VMware ESXi - Set boot firmware to EFI + +#. Click the :guilabel:`Save` button. + +Power on the VM and boot |CL| +***************************** + +After configuring the settings above, power on the VM. + +#. Under the :guilabel:`Navigator` window, select :guilabel:`Virtual Machines`. + See Figure 16. +#. In the right window, select the VM. +#. Click the :guilabel:`Power on` button. +#. Click on the icon representing the VM to bring it into view and maximize + its window. + + .. figure:: figures/vmware-esxi/vmware-esxi-install-cl-16.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines > Power on VM + + Figure 16: VMware ESXi - Navigator > Virtual Machines > Power on VM + +Related topics +************** + +* :ref:`vmware-esxi-preconfigured-cl-image` + + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html +.. _VMware Workstation Player: https://www.vmware.com/products/workstation-player.html +.. _image: https://cdn.download.clearlinux.org/image diff --git a/zh_CN/_sources/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst.txt b/zh_CN/_sources/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst.txt new file mode 100644 index 00000000..f19165d5 --- /dev/null +++ b/zh_CN/_sources/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst.txt @@ -0,0 +1,288 @@ +.. _vmware-esxi-preconfigured-cl-image: + +Run preconfigured |CL-ATTR| image as a VMware\* ESXi guest OS +############################################################# + +This page explains how to deploy a preconfigured |CL| VMware +:abbr:`VM (Virtual Machine)` image on a VMware ESXi 6.5 host. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +`VMware ESXi`_ is a type 1 bare-metal hypervisor which runs directly on top +of server hardware. With VMware ESXi, you can create, configure, manage, +and run |CL-ATTR| virtual machines at scale. + +We provide a preconfigured |CL| VMware image that can be run on a VMware ESXi +6.5 host. + +If manuall installation is preferred, refer to :ref:`vmware-esxi-install-cl`. + +.. note:: + + VMware also offers a type 2 hypervisor designed for the desktop environment, + called `VMware Workstation Player`_. Refer to :ref:`vmw-player-preconf` or + :ref:`vmw-player` for more information. + +Download the latest |CL| VMware image +************************************* + +Get the latest |CL| VMware prebuilt image from the `image`_ repository. +Look for :file:`clear-[version number]-vmware.vmdk.xz`. You can also use +this command: + +.. code-block:: bash + + curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware) + +Visit :ref:`image-types` for additional information about all available |CL| images. + +We also provide instructions for downloading and verifying a Clear Linux ISO. +For more information, refer to :ref:`download-verify-decompress`. + +Upload the |CL| image to the VMware server +****************************************** + +Once the |CL| VMware prebuilt image has been downloaded and +decompressed on your local system, it must be uploaded to a datastore +on the VMware ESXi server. + +The steps in this section can also be referenced from the VMware documentation +`Using Datastore File Browser in the VMware Host Client`_. + +#. Connect to the VMware ESXi server and login to an account with sufficient + permission to create and manage VMs. + +#. Under the :guilabel:`Navigator` window on the left side, + select :guilabel:`Storage`. + See Figure 1 + +#. Under the :guilabel:`Datastores` tab, click + the :guilabel:`Datastore browser` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-1.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Storage + + Figure 1: VMware ESXi - Navigator > Storage + +#. Click the :guilabel:`Create directory` button and name the directory + `Clear Linux VM`. See Figure 2. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-2.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Create directory + + Figure 2: VMware ESXi - Datastore > Create directory + +#. Select the newly-created directory and click the :guilabel:`Upload` + button. See Figure 3. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-3.png + :scale: 100 % + :alt: VMware ESXi - Datastore > Upload VMware image + + Figure 3: VMware ESXi - Datastore > Upload VMware image + +#. Select the decompressed |CL| VMware image file + :file:`clear-[version number]-vmware.vmdk` and upload it. + +Convert the |CL| image to an ESXi-supported format +************************************************** + +Once the |CL| VMware prebuilt image has been uploaded to the VMware ESXi +datastore, it must be converted to a format for usable with VMware's ESXi +hypervisor. + +The steps in this section can also be referenced from the VMware documentation on `Cloning and converting virtual machine disks with vmkfstools`_ + +#. SSH into the `vSphere Management Assistant`_ appliance that is managing + the ESXi host or connect to the vSphere hosting using the `vSphere CLI`_. + + .. note:: + + If there is no :abbr:`vMA (vSphere Management Assistant)` appliance or :abbr:`vCLI (vSphere CLI)` configured and available, + you can temporarily enable SSH directly on the ESXi host by following the + steps described in `Enable the Secure Shell (SSH) in the VMware Host Client`_ . + + As a security best practice, remember to disable SSH access after following the steps in this section. + + +#. Locate the uploaded image, which is typically found in + :file:`/vmfs/volumes/datastore1`. + +#. Use the :command:`vmkfstools` command to perform the conversion, as + shown below: + + .. code-block:: console + + vmkfstools -i clear-[version number]-vmware.vmdk -d zeroedthick clear-[version number]-esxi.vmdk + + Two files should result from this: + + * :file:`clear-[version number]-esxi-flat.vmdk` + * :file:`clear-[version number]-esxi.vmdk` + + The :file:`clear-[version number]-esxi.vmdk` file will be used in the + next section when you create a new VM. + +Create and configure a new VM +***************************** + +In this section, you will create a new VM, configure its basic parameters +such as number of CPUs, memory size, and then attach the converted |CL| +VMware image. Also, in order to boot |CL|, you must enable UEFI support. + +#. Under the :guilabel:`Navigator` window, select + :guilabel:`Virtual Machines`. See Figure 4. + +#. In the right window, click the :guilabel:`Create / Register VM` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-4.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines + + Figure 4: VMware ESXi - Navigator > Virtual Machines + +#. On the :guilabel:`Select creation type` step: + + #. Select the :guilabel:`Create a new virtual machine` option. See + Figure 5. + + #. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-5.png + :scale: 100 % + :alt: VMware ESXi - Create a new virtual machine + + Figure 5: VMware ESXi - Create a new virtual machine + +#. On the :guilabel:`Select a name and guest OS` step: + +#. Give the new VM a name in the :guilabel:`Name` field. See Figure 6. + +#. Set the :guilabel:`Compatability` option to + :guilabel:`ESXi 6.5 virtual machine`. +#. Set the :guilabel:`Guest OS family` option to :guilabel:`Linux`. +#. Set the :guilabel:`Guest OS version` option to + :guilabel:`Other 3.x or later Linux (64-bit)`. +#. Click the :guilabel:`Next` button. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-6.png + :scale: 100 % + :alt: VMware ESXi - Give a name and select guest OS type + + Figure 6: VMware ESXi - Give a name and select guest OS type + +#. On the :guilabel:`Select storage` step: + + #. Accept the default option. + #. Click the :guilabel:`Next` button. + +#. On the :guilabel:`Customize settings` step: + + #. Click the :guilabel:`Virtual Hardware` button. See Figure 7. + #. Expand the :guilabel:`CPU` setting and enable + :guilabel:`Hardware virtualization` by checking + :guilabel:`Expose hardware assisted virtualization to the guest OS`. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-7.png + :scale: 100 % + :alt: VMware ESXi - Enable hardware virtualization + + Figure 7: VMware ESXi - Enable hardware virtualization + + #. Remove the default :guilabel:`Hard drive 1` setting by clicking + the `X` icon on the right side. See Figure 8. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-8.png + :scale: 100 % + :alt: VMware ESXi - Remove hard drive + + Figure 8: VMware ESXi - Remove hard drive + + #. Since a preconfigured image will be used, + the :guilabel:`CD/DVD Drive 1` setting will not be needed. Disable it + by unchecking the :guilabel:`Connect` checkbox. See Figure 9. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-9.png + :scale: 100 % + :alt: VMware ESXi - Disconnect the CD/DVD drive + + Figure 9: VMware ESXi - Disconnect the CD/DVD drive + + #. Attach the :file:`clear-[version number]-esxi.vmdk` file that was + converted from the preconfigured |CL| VMware image. + + #. Click the :guilabel:`Add hard disk` button and select the + :guilabel:`Existing hard drive` option. See Figure 10. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-10.png + :scale: 100 % + :alt: VMware ESXi - Add an existing hard drive + + Figure 10: VMware ESXi - Add an existing hard drive + + #. Select the converted :file:`clear-[version number]-esxi.vmdk` + file. Do not use the original unconverted + :file:`clear-[version number]-vmware.vmdk` file. See Figure 11. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-11.png + :scale: 100 % + :alt: VMware ESXi - Select the converted `vmdk` file + + Figure 11: VMware ESXi - Select the converted + :file:`clear-[version number]-esxi.vmdk` file + +#. |CL| needs UEFI support in order to boot. Enable UEFI boot support. + + #. Click the :guilabel:`VM Options` button. See Figure 12. + #. Expand the :guilabel:`Boot Options` setting. + #. For the :guilabel:`Firmware` setting, click the drop-down list to + the right of it and select the :guilabel:`EFI` option. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-12.png + :scale: 100 % + :alt: VMware ESXi - Set boot firmware to EFI + + Figure 12: VMware ESXi - Set boot firmware to EFI + +#. Click the :guilabel:`Save` button. +#. Click the :guilabel:`Next` button. +#. Click the :guilabel:`Finish` button. + +Power on the VM and boot |CL| +***************************** + +After configuring the settings above, power on the VM. + +#. Under the :guilabel:`Navigator` window, select + :guilabel:`Virtual Machines`. See Figure 13. +#. In the right window, select the newly-created VM. +#. Click the :guilabel:`Power on` button. +#. Click on the icon representing the VM to bring it into view and maximize + its window. + + .. figure:: figures/vmware-esxi/vmware-esxi-preconfigured-cl-image-13.png + :scale: 100 % + :alt: VMware ESXi - Navigator > Virtual Machines > Power on VM + + Figure 13: VMware ESXi - Navigator > Virtual Machines > Power on VM + +Related topics +************** + +* :ref:`vmware-esxi-install-cl` + +.. _VMware ESXi: https://www.vmware.com/products/esxi-and-esx.html +.. _Using Datastore File Browser in the VMware Host Client: https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.html.hostclient.doc/GUID-7533A767-8396-4844-A3F2-206047D254EA.html +.. _vSphere Management Assistant: https://www.vmware.com/support/developer/vima/ +.. _vSphere CLI: https://www.vmware.com/support/developer/vcli/ +.. _Cloning and converting virtual machine disks with vmkfstools: https://kb.vmware.com/kb/1028042 +.. _Enable the Secure Shell (SSH) in the VMware Host Client: https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.html.hostclient.doc/GUID-B649CB74-832F-467B-B6A4-8BA67AD5C1F0.html +.. _VMware Workstation Player: https://www.vmware.com/products/workstation-player.html +.. _image: https://cdn.download.clearlinux.org/image diff --git a/zh_CN/_sources/guides/clear/autoproxy.rst.txt b/zh_CN/_sources/guides/clear/autoproxy.rst.txt new file mode 100644 index 00000000..3b850229 --- /dev/null +++ b/zh_CN/_sources/guides/clear/autoproxy.rst.txt @@ -0,0 +1,153 @@ +.. _autoproxy: + +Autoproxy +######### + +Autoproxy is provided to enable |CL-ATTR| to work smoothly behind a +corporate proxy. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +Autoproxy tries to detect a Proxy Auto-Config (PAC) script and use it to +automatically resolve the proxy needed for a given connection. With +Autoproxy, you can use |CL| inside any proxy environment without having to +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 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 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\* +distributions with a few minor additions and modifications. We leveraged the +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 +parse it. + +.. figure:: figures/autoproxy_0.png + :width: 400px + + Figure 1: Autoproxy Flow + +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 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. + +Troubleshooting +=============== + +Autoproxy allows |CL| to operate seamlessly behind a proxy +because :ref:`swupd ` and other |CL| tools are implemented on +top of libcurl. Tools that do not use libcurl, like git, must +be configured independently. + +If you are familiar with PAC files and WPAD, you can use +:command:`pacdiscovery` and :command:`FindProxyForURL` to +troubleshoot problems with autproxy. + +.. note:: + + Learn more about WPAD, PAC files, and PAC functions at `findproxyforurl`_. + +.. _findproxyforurl: http://findproxyforurl.com/ + +Run :command:`pacdiscovery` with no arguments to indicate + +1. if there is a problem resolving the :command:`WPAD` host name resolution: + + .. code-block:: bash + + pacdiscovery + + .. code-block:: console + + failed getaddrinfo: No address associated with hostname + Unable to find wpad host + +2. or if the :command:`pacrunner` service is disabled (masked). + + .. code-block:: bash + + pacdiscovery + + .. code-block:: console + + PAC url: http://autoproxy.your.domain.com/wpad.dat + Failed to create proxy config: Unit pacrunner.service is masked. + +Unmask the :command:`pacrunner` service by running: + +.. code-block:: bash + + systemctl unmask pacrunner.service + +:command:`FindProxyForURL` with :command:`busctl` can also indicate if the +:command:`pacrunner.service` is masked. + +.. code-block:: bash + + busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client + +.. code-block:: console + + FindProxyForURL ss "http://www.google.com" "google.com" + Unit pacrunner.service is masked. + dig wpad, dig wpad. + +:command:`FindProxyForURL` returns the URL and port of the proxy server when +an external URL and host are provided as arguments. + +.. code-block:: bash + + busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client + +.. code-block:: console + + FindProxyForURL ss "http://www.google.com" "google.com" + s "PROXY proxy.your.domain.com:" + +If a proxy server is not avialable, or if :command:`pacrunner` is running +without a PAC file, :command:`FindProxyForURL` will return "DIRECT". + +.. code-block:: bash + + busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client + +.. code-block:: console + + FindProxyForURL ss "http://www.google.com" "google.com" + s "DIRECT" + +Once :command:`pacdiscovery` is able to look up :command:`WPAD`, restart the +:command:`pacrunner` service: + +.. code-block:: bash + + systemctl stop pacrunner + systemctl restart pacdiscovery + +.. note:: + + A "domain" or "search" entry in :file:`/etc/resolv.conf` is required + for short name lookups to resolve. The :file:`resolv.conf` man page has + additional details. \ No newline at end of file diff --git a/zh_CN/_sources/guides/clear/autospec.rst.txt b/zh_CN/_sources/guides/clear/autospec.rst.txt new file mode 100644 index 00000000..ed3c2c90 --- /dev/null +++ b/zh_CN/_sources/guides/clear/autospec.rst.txt @@ -0,0 +1,511 @@ +.. _autospec: + +autospec +######## + +**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. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +The autospec tool attempts to infer the requirements of the :file:`.spec` file +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 +additional information on using mock. + +For a general understanding of how an RPM works, visit +the `rpm website`_ or the `RPM Packaging Guide`_ . + +How it works +************ + +Learn the autospec tool set up and process. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +============= + +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 +the setup. + +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 + the analysis of code and existing control files. + + Any control files should be located in the same directory as the resulting + :file:`.spec` file. + + View the `autospec README`_ for more information on `control files`_. + +#. autospec creates a build root with mock config. + +#. autospec attempts to build an RPM from the generated :file:`.spec`. + +#. autospec detects any missed declarations in the :file:`.spec`. + +#. 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 restarts + the build automatically at step 1 with updated build instructions. + +#. 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 + control files. + + The user resumes the process at step 1 after errors are resolved. + + 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 +new information discovered from build failures, until it has a valid +:file:`.spec`. If no build errors occur, RPM packages are successfully built. + +Examples +******** + +Complete `Setup environment to build source`_ before using these examples. + +.. contents:: + :local: + :depth: 1 + +Example 1: Build RPM with an existing spec file +=============================================== + +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: + + .. code-block:: bash + + cd ~/clearlinux + make clone_dmidecode + + .. note:: + + You can clone all package repos at once using the following command: + + .. code-block:: bash + + make [-j NUM] clone-packages + + The optional NUM is the number of threads to use. + + For a list of available packages, view the + :file:`~/clearlinux/projects/common/packages` file. + +#. Navigate to the local copy of the ``dmidecode`` package and build it: + + .. code-block:: bash + + cd ~/clearlinux/packages/dmidecode/ + make build + +#. The resulting RPMs are in :file:`./rpms`. Build logs and additional RPMs are + in :file:`./results`. + +Example 2: Build a new RPM +========================== + +This example shows how to build a new RPM with no spec file. The example will +create a simple helloclear RPM. + +#. Navigate to the autospec workspace and build the helloclear RPM. The + :file:`Makefile` provides a :command:`make autospecnew` that can + automatically generate an RPM package using the autospec tool. You must pass + the URL to the source tarball and the NAME of the RPM you wish to create: + + .. code-block:: bash + + 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`. Build logs and + additional RPMs are in :file:`./packages/helloclear/results`. + +Example 3: Generate a new spec file with a pre-defined package +============================================================== + +This example shows how to modify an existing package to create a custom RPM. In +this example you will make a simple change to the ``dmidecode`` package and +rebuild the package. + +#. Navigate to the autospec workspace and clone the ``dmidecode`` package: + + .. code-block:: bash + + cd ~/clearlinux + make clone_dmidecode + +#. Navigate into the *dmidecode* directory: + + .. code-block:: bash + + cd packages/dmidecode + +#. Open the :file:`excludes` file with an editor and add these lines: + + .. code-block:: console + + /usr/bin/biosdecode + /usr/bin/ownership + /usr/bin/vpddecode + /usr/share/man/man8/biosdecode.8 + /usr/share/man/man8/ownership.8 + /usr/share/man/man8/vpddecode.8 + + .. note:: + + These files aren't needed by dmidecode, so we can remove them without + any issues. + +#. In the :file:`dmidecode` directory, build the modified ``dmidecode`` package: + + .. code-block:: bash + + make autospec + +#. The resulting RPMs are in :file:`./rpms`. Logs are in :file:`./results`. + +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 so autospec can complete a successful build. + +#. Navigate to the autospec workspace: + + .. code-block:: bash + + cd ~/clearlinux + +#. If you have not already, clone all upstream package repos: + + .. code-block:: bash + + make [-j NUM] clone-packages + + The optional NUM is the number of threads to use. + + .. note:: + + In a later step of this example, we will search the cloned package repos + for a missing dependency. + +#. Build the opae-sdk RPM: + + .. code-block:: bash + + make autospecnew URL="https://github.com/OPAE/opae-sdk/archive/0.13.0.tar.gz" NAME="opae-sdk" + + This results in an error for a missing license file: + + .. code-block:: console + + [FATAL] Cannot find any license or opae-sdk.license file! + +#. Navigate to the package with build failures: + + .. code-block:: bash + + cd packages/opae-sdk + +#. 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: + + .. code-block:: bash + + echo "BSD-3-Clause MIT" > opae-sdk.license + +#. Run autospec again: + + .. code-block:: bash + + make autospec + + This results in a generic error: + + .. code-block:: console + + [FATAL] Build failed, aborting + +#. Open the build log to view the error details: + + .. code-block:: bash + + cat ./results/build.log + + The build log contains details for the specific failures. In this + instance, there are missing dependencies: + + .. code-block:: console + + CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: + CJSON_LIBRARY + linked by target "opae-c++-utils" in directory /builddir/build/BUILD/opae-sdk-0.13.0/tools/c++utilslib + json-c_LIBRARIES + linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae + libuuid_LIBRARIES + 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 available. In this case, it does exist and we'll add the json-c 'dev' + package into the buildreq_add: + + .. code-block:: bash + + grep 'json-c\.so$' ~/clearlinux/packages/*/*.spec + echo "json-c-dev" >> buildreq_add + + .. note:: + + This search step works only if the user cloned all of the upstream package + repos. In this example, upstream package repos were cloned in a previous + step. + +#. Search the spec files of upstream |CL| packages to see if the libuuid library + is available. In this case, it exists in the util-linux package, so we'll add + util-linux-dev package into the buildreq_add: + + .. code-block:: bash + + grep 'libuuid\.so$' ~/clearlinux/packages/*/*.spec + echo "util-linux-dev" >> buildreq_add + +#. Run autospec again and find the successfully-generated RPMs in the :file:`rpms` + directory: + + .. code-block:: bash + + make autospec + +.. note:: + + If you need a dependency that does not exist in the |CL| repo, you must first + build it manually (see `Example 2: Build a new RPM`_), then add the repo so + that autospec knows the package exists. For example: + + .. code-block:: bash + + cd ~/clearlinux/packages/ + make repoadd + make repostatus + + You only need to add the dependency to the :file:`buildreq_add` control file + if autospec is not able to automatically find the correct dependency on its + own. + +Test packaged software +********************** + +After software has been packaged with autospec, the resulting RPMs can be +tested for functionality before being integrated and deployed into a |CL| +image with the :ref:`Mixer tool `. + +The |CL| development tooling offers two ways to quickly test autospec +generated RPMs. + +.. note:: + The methods outlined below should only be used for temporary testing on + development systems. + + +Test in a |CL| virtual machine +============================== + +The |CL| development tooling includes a method to install RPMs into a |CL| +virtual machine running on the KVM hypervisor. Using a :abbr:`VM (Virtual +Machine)` allows testing in a completely isolated environment. + +To test an autospec-created package inside a VM: + +#. Download the |CL| KVM image into the :file:`~/clearlinux` directory as + :file:`clear.img`. The location and name :file:`clear.img.xz` is important + for the tooling to work: + + .. code-block:: bash + + cd ~/clearlinux + curl -o clear.img.xz https://download.clearlinux.org/image/$(curl https://download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm) + +#. Extract the downloaded |CL| KVM image: + + .. code-block:: bash + + unxz -v clear.img.xz + +#. Copy the QEMU start script and virtual firmware needed for KVM into the + :file:`~/clearlinux` directory: + + .. code-block:: bash + + cp ~/clearlinux/projects/common/start_qemu.sh . + cp /usr/share/qemu/OVMF.fd . + +#. Run :command:`make install` from the package's autospec directory. The + :command:`make install` command mounts the downloaded |CL| KVM image and + installs the autospec-created RPM into it: + + .. code-block:: bash + + cd ~/clearlinux/packages/ + make install + + The code that makes this possible can be viewed by searching for the + *install:* target in the `Makefile.common`_ file on GitHub. + +#. Return to the :file:`~/clearlinux` directory and start the |CL| VM: + + .. code-block:: bash + + cd ~/clearlinux/ + sudo ./start_qemu.sh clear.img + +#. A new |CL| VM will launch in the console. Log into the VM as *root* and set + a new pasword for the VM. + +#. Check that the software is installed in the |CL| VM as expected and perform + any relevant tests. + +#. After testing has been completed, the |CL| VM can be powered off and + deleted: + + .. code-block:: bash + + poweroff + rm clear.img + + +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 +conflicts may occur and responsibility to remove the software after testing is +up to the developer. + +To test an autospec created package directly on the |CL| development system: + +#. Run :command:`make install-local` from the package's autospec directory. + The :command:`make install-local` command extracts the RPM directly onto + the filesystem of the running |CL| system: + + .. code-block:: bash + + cd ~/clearlinux/packages/ + make install-local + + The code that makes this possible can be viewed by searching for the + *install-local:* target in the `Makefile.common`_ file on GitHub. + +#. Check that the software is installed as expected and perform any relevant + tests. + +#. After testing has been completed, the software and any related files must + be identified and deleted. The :command:`swupd repair --picky` + command can help restore the state of the :file:`/usr` directory (see + :ref:`swupd `) however any other files must be cleaned up + manually. + + +References +********** + +Reference the `autospec README`_ for details regarding `autospec` commands and options. + +Setup environment to build source +================================= + +.. _install-tooling-after-header: + +Setup of the workspace and tooling used for building source in |CL| is mostly +automated for you with a setup script. It uses tools from the +:command:`os-clr-on-clr` bundle. + +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| :file:`autospec` and :file:`common`. + +Follow these steps to setup the workspace and tooling for building source: + +#. Install the :command:`os-clr-on-clr` bundle: + + .. code-block:: bash + + sudo swupd bundle-add os-clr-on-clr + +#. Download the :file:`user-setup.sh` script: + + .. code-block:: bash + + curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh + +#. Make :file:`user-setup.sh` executable: + + .. code-block:: bash + + chmod +x user-setup.sh + +#. Run the script as an unprivileged user: + + .. code-block:: bash + + ./user-setup.sh + +#. After the script completes, log out and log in again to complete the setup + process. + +#. Set your Git user email and username for the repos on your system: + + .. code-block:: bash + + git config --global user.email "you@example.com" + git config --global user.name "Your Name" + + This global setting is used by |CL| tools that make use of Git. + +.. _install-tooling-end: + +Related topics +************** + +* :ref:`Mixer tool ` + +.. _`Makefile.common`: https://github.com/clearlinux/common/blob/master/Makefile.common +.. _autospec README: https://github.com/clearlinux/autospec +.. _control files: https://github.com/clearlinux/autospec#control-files +.. _mock wiki: https://github.com/rpm-software-management/mock/wiki +.. _rpm website: http://rpm.org +.. _RPM Packaging Guide: https://rpm-packaging-guide.github.io/ diff --git a/zh_CN/_sources/guides/clear/compatible-kernels.rst.txt b/zh_CN/_sources/guides/clear/compatible-kernels.rst.txt new file mode 100644 index 00000000..3adaa54c --- /dev/null +++ b/zh_CN/_sources/guides/clear/compatible-kernels.rst.txt @@ -0,0 +1,83 @@ +.. _compatible-kernels: + +Kernels +####### + +The |CL-ATTR| provides the following Linux kernels with a respective bundle. +This document describes the specific use cases these `bundles`_ serve +and provides links to their source code. + +Bare metal only +*************** + +Kernel native + The *kernel-native* bundle focuses on the bare metal platforms. It is + optimized for fast booting and performs best on the Intel® architectures + described on the :ref:`supported hardware list`. The + optimization patches are found in our `Linux`_ GitHub\* repo. + +.. _vm-kernels: + +Also compatible with VMs +************************ + +Kernel LTS + The *kernel-lts* bundle focuses on the bare metal platforms but uses the + latest :abbr:`LTS (Long Term Support)` Linux kernel. It is optimized for + fast booting and performs best on the Intel® architectures described on the + :ref:`supported hardware list`. Additionally, this + kernel includes the VirtualBox\* kernel modules, see our + :ref:`instructions on using Virtualbox` for more + information. The optimization patches are found in our `Linux-LTS`_ GitHub + repo. + +VM only +******* + +Kernel KVM + The *kernel-kvm* bundle focuses on the Linux + :abbr:`KVM (Kernel-based Virtual Machine)`. It is optimized for fast + booting and performs best on Virtual Machines running on the Intel® + architectures described on the + :ref:`supported hardware list`. Use this kernel when + running |CL| as the guest OS on top of *qemu/kvm*. Use this kernel with + **cloud orchestrators** using *qemu/kvm* internally as their **hypervisor** + . This kernel can be used as a standalone |CL| VM, see our + :ref:`instructions on using KVM` for more information. The + optimization patches are found in our `Linux-KVM`_ GitHub repo. + +Kernel Hyper-V\* + The *kernel-hyperv* bundle focuses on running Linux on Microsoft\* + Hyper-V. It is optimized for fast booting and performs best on Virtual + Machines running on the Intel® architectures described on the + :ref:`supported hardware list`. + Use this kernel when running |CL| as the guest OS of **Cloud Instances** in + projects such as Microsoft `Azure`_\*. This kernel can be used in a + standalone |CL| VM, see our :ref:`instructions on using Hyper-V` + for more information. The optimization patches are found in our + `Linux-HyperV`_ GitHub repo. + +Kernel Hyper-V LTS + The *kernel-hyperv-lts* bundle focuses on running Linux on Microsoft + Hyper-V but uses the latest :abbr:`LTS (Long Term Support)` Linux kernel. + It is optimized for fast booting and performs best on Virtual + Machines running on the Intel® architectures described on the + :ref:`supported hardware list`. + Use this kernel when running |CL| as the guest OS of **Cloud Instances** in + projects such as Microsoft `Azure`_. This kernel can be used in a + standalone |CL| VM, see our :ref:`instructions on using Hyper-V` + for more information. The optimization patches are found in our + `Linux-HyperV-LTS`_ GitHub repo. + + +.. _Linux: https://github.com/clearlinux-pkgs/linux +.. _Linux-LTS: https://github.com/clearlinux-pkgs/linux-lts +.. _Linux-KVM: https://github.com/clearlinux-pkgs/linux-kvm +.. _Linux-HyperV: https://github.com/clearlinux-pkgs/linux-hyperv +.. _Linux-HyperV-LTS: https://github.com/clearlinux-pkgs/linux-hyperv-lts +.. _Linux-Container: https://github.com/clearlinux-pkgs/linux-container +.. _bundles: https://github.com/clearlinux/clr-bundles +.. _CIAO: https://github.com/01org/ciao +.. _Azure: + https://azuremarketplace.microsoft.com/en-us/marketplace/apps/clear-linux-project.clear-linux-os + diff --git a/zh_CN/_sources/guides/clear/debug.rst.txt b/zh_CN/_sources/guides/clear/debug.rst.txt new file mode 100644 index 00000000..bb984767 --- /dev/null +++ b/zh_CN/_sources/guides/clear/debug.rst.txt @@ -0,0 +1,91 @@ +.. _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, such as binaries and libraries. Extra developer data, such as 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, such as GDB. + For example, to debug *gnome-control-center* execute the following + command: + + .. code:: bash + + gdb /usr/bin/gnome-control-center + +As you step through the program and debug information is needed, the +clr_debug_daemon obtains 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 + :width: 400px + :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. You can verify its status by executing +: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 that need it. It is socket activated whenever a request to the local +FUSE filesystem occurs. You can verify its status 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/zh_CN/_sources/guides/clear/ister.rst.txt b/zh_CN/_sources/guides/clear/ister.rst.txt new file mode 100644 index 00000000..c877b700 --- /dev/null +++ b/zh_CN/_sources/guides/clear/ister.rst.txt @@ -0,0 +1,93 @@ +.. _ister: + +ister.py image builder +###################### + +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. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +|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 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 instructions on using ister to build an image for a custom mix. + +Examples +******** + +Recreate an upstream image +========================== + +The published configuration files for upstream images may be used to recreate an +image. Here are some examples: + +* Use an older version of |CL| and the image is no longer available (only after + March 2017). +* Customize the partitions of an image. +* Customize the bundles preinstalled in an image. +* Run your own post installation script. + + +Follow these steps to recreate an upstream image based on the image's JSON +configuration file: + +#. Install the :command:`os-installer` bundle. Refer to :ref:`swupd-guide` for + more information on installing bundles. + +#. Download the `ister.py`_ tool and grant it sudo privileges. + +#. Download the JSON configuration file for the desired image (located in + :file:`config/image/`): + + * `Current release`_ + * `Previous releases`_ (only after March 2017) + + For a previous release, navigate to `Previous releases`_, select the version + you want, and find the JSON configuration file under + :file:`/clear/config/image`. For example: + ``https://cdn.download.clearlinux.org/releases/15700/clear/config/image/`` + +#. 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 + process. If it does, download the script and make it executable. + +#. Edit the JSON configuration file as needed. + +#. If your configuration file has an accompanying "PostNonChroot" script, change + the default path of the script to match your path. + +#. Generate the new image with the following command: + + .. code-block:: bash + + sudo ister.py -t [JSON configuration] + +Related topics +************** + +* :ref:`mixer` +* :ref:`bulk-provision` + +.. _ister.py: https://github.com/bryteise/ister +.. _Current release: https://cdn.download.clearlinux.org/current/ +.. _Previous releases: https://cdn.download.clearlinux.org/releases/ diff --git a/zh_CN/_sources/guides/clear/mixer.rst.txt b/zh_CN/_sources/guides/clear/mixer.rst.txt new file mode 100644 index 00000000..789178c4 --- /dev/null +++ b/zh_CN/_sources/guides/clear/mixer.rst.txt @@ -0,0 +1,859 @@ +.. _mixer: + +mixer +##### + +**mixer** is the tool used by the |CL-ATTR| team to generate official update +content and releases. The update content generated by mixer is then consumed +by swupd on a downstream client. The same mixer tool is available as part of +|CL| to create your own customized update content and releases. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +mixer uses the following sources as inputs to generate update content: + +* Upstream |CL| bundles with their corresponding RPM packages +* Locally-defined bundles with their corresponding local RPM packages +* Locally-defined bundles with upstream RPM packages + +Using the mixer tool, you select which set of content from these sources +will be part of your update. You can select content from each of these sources to make a unique combination of functionality for your custom update content, known as a **mix**. + +The update content that mixer generates consists of various pieces of OS +content, update metadata, as well as a complete image. The OS content +includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via swupd. Refer to :ref:`swupd ` for additional information regarding updates and update content. + +How it works +************ + +Learn the mixer tool set up and workflow. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +============= + +* :command:`mixer` bundle + + Add the mixer tool with the :command:`mixer` bundle. Refer to + :ref:`swupd-guide` for more information on installing bundles. + +* Docker\* container + + mixer by default runs all build commands in a Docker container to ensure + the correct tool versions are used. This also allows custom mixes to + automatically perform downstream format bumps when the upstream releases a + format bump. See `Format version`_ for additional information regarding + format bumps. + + Refer to `Configure and enable Docker`_ for instruction. + +* Docker proxy (optional) + + If you use a proxy server, you must set your proxy environment variables and + create a proxy configuration file for the Docker daemon and container. + + Consult your IT department for the correct values if you are behind a + corporate proxy. + + Refer to `Configure Docker proxy info`_ for instruction. + +* Location to host the update content and images + + In order for swupd to make use of your mix, the update content for your mix + must be hosted on a web server. Your mix will be configured with an update + location URL, which swupd will use to pull down updates. + + Refer to `Set up a nginx web server for mixer`_ for an simple example of + setting up an update location. + +Mix setup +========== + +Follow these steps to create and initialize the mixer workspace. Complete +the setup before you create a mix. + +#. Create workspace. + + The mixer tool uses a simple workspace to contain all input and output in a + basic directory structure. The workspace is simply an empty folder from + which you execute the mixer commands. Each mix uses its own separate + workspace. + +#. Initialize the workspace and mix. + + Before you create a mix, you must explicitly initialize the mixer workspace. + During initialization, the mixer workspace is configured and the base for + your mix is defined. By default, your mix is based on the latest + upstream version and starts with the minimum set of bundles. Your first custom + mix version number starts at 10. Alternatively, you can select other + versions or bundle sets from which to start. + + Initialization creates the directory structure within the workspace and adds + the :file:`builder.conf` file, which is used to configure the mixer tool. + + View the `mixer.init man page`_ for more information on mixer + initialization. + + View the list of suitable `releases`_ from which to mix. + +#. Edit builder.conf. + + :file:`builder.conf` tells the mixer tool how to configure the mix. For + example, it allows you to configure where mixer output is located and where + swupd update content will be located. + + At minimum, set the URL of your update server so your custom OS knows where + to get update content. + + Refer to the `builder.conf`_ section for more information. + +Create a mix +============ + +A mix is created with the following steps: + +#. Add custom RPMs and set up local repo (optional). + + If you are adding custom RPMs to your mix, you must add the RPMs to + your mix workspace and set up a corresponding local repository. + + Go to the :ref:`autospec` guide to learn to build RPMs from + scratch. If the RPMs are not built on |CL|, make sure your + configuration and toolchain builds them correctly for |CL|. Otherwise there + is no guarantee they will be compatible. + + Refer to the :ref:`autospec` guide for more information on using autospec to + build RPMs. + +#. Update and build bundles. + + Add, edit, or remove bundles that will be part of your content and build + them. mixer automatically updates the :file:`mixbundles` file when you + update the bundles in your mix. + + View the `mixer.bundle man page`_ for more information on configuring bundles + in a mix. + + View the `mixer.build man page`_ for more information on building bundles. + + View the `Bundles`_ section for more information on how mixer manages + bundles. + +#. Create the update content. + + mixer creates update content with this step. Zero-packs are created + automatically, and delta-packs can be optionally created at the same time + (for all builds after version 0). + + A zero-pack is the full set of content needed to go from mix version 0 + (nothing) to the mix version for which you just built content. + + A delta-pack provides the content *delta* between a `PAST_VERSION` to a + `MIX_VERSION` that allows the transition from one mix version to another. + + View :ref:`swupd-guide` for more information on update content. + +#. Create image. + + mixer creates a bootable image from your updated content using + the :ref:`ister` tool. In this step you can specify which bundles you want + *preinstalled* in the image. Users can later install other bundles available + in your mix. + +#. Make update available. + + Deploy update content and images to your update server. + + View the `Example 3: Deploy updates to target`_ for a simple deployment + scenario. + +Maintain or modify mix +====================== + +Update or modify your content to a new version by following the steps to +create a mix. Increment the mix version number for the next mix. + +Examples +******** + +The following examples are designed to work together and in order. The examples +use: + +* A stock installation of |CL|. +* A web server that comes with |CL| to host the content updates. +* A simple VM that updates against the locally produced content created in + Example 2. + +Complete all `Prerequisites`_ before using these examples. + +Example 1: Mix set up +====================== + +This example shows the basic steps for the first-time setup of +mixer for a new mix. + +#. Create an empty directory to use as a workspace for mixer: + + .. code-block:: bash + + mkdir ~/mixer + +#. In your mixer workspace, generate an initial mix based on the latest upstream + |CL| version, with minimum bundles. In the initialization output, be aware + that your initial mix version is set to 10 and that the minimum bundles have + been added. + + .. code-block:: bash + + cd ~/mixer + mixer init + +#. Edit :file:`builder.conf` to set the value of CONTENTURL and VERSIONURL to + the IP address of the nginx\* server you set up in the prerequisite + `Set up a nginx web server for mixer`_. For example: + + .. code-block:: console + + CONTENTURL="http://192.168.25.52" + VERSIONURL="http://192.168.25.52" + +Example 2: Create a simple mix +============================== + +This example shows how to create a simple custom mix using upstream content. +We'll create an image for a QEMU virtual machine that we can use later to test +our mix. + +We can use the default bundles that were added during initialization, but these +include the :command:`native-kernel` bundle that is intended to be used on a +bare metal system instead of a VM. So we will modify the default bundle +set to get a smaller kernel image, which will also be faster to load. + +#. Update bundles in mix: + + .. code-block:: bash + + mixer bundle remove kernel-native + mixer bundle add kernel-kvm + +#. In this case, we will add the `editors` bundle from upstream, but we will + remove the `joe` editor. + + .. code-block:: bash + + mixer bundle add editors + mixer bundle edit editors + +#. Use an editor and manually remove `joe` from the bundle definition. + + .. code-block:: bash + + $EDITOR ./local-bundles/editors + +#. List the bundles in the mix again to confirm removal. + + .. code-block:: bash + + mixer bundle list --tree + + +#. Build bundles: + + .. code-block:: bash + + mixer build bundles + + Look in ~/mixer/update/image//full for the full chroot after the + :command:`build` command completes. + +#. Build update content. Browse to your \http://localhost site and you'll see + the web page is now up, but with no update content. Build the update content: + + .. code-block:: bash + + mixer build update + + Refresh your \http://localhost site and now you can see the update + content for mix version 10. + + Look in ~/mixer/update/www/ to see the update content in your + workspace. + +#. Configure image. Edit the ister configuration file for your image to include + all of the bundles you want preinstalled in the image. If this is the first + time creating an image, first get a copy of the + :file:`release-image-config.json` template file: + + .. code-block:: bash + + curl -O https://raw.githubusercontent.com/bryteise/ister/master/release-image-config.json + + For this example, edit :file:`release-image-config.json` so that the root + partition size is "5G" and replace the "kernel-native" bundle with + "kernel-kvm". + + .. code-block:: console + + { + "DestinationType" : "virtual", + "PartitionLayout" : [ { "disk" : "release.img", "partition" : 1, "size" : "32M", "type" : "EFI" }, + { "disk" : "release.img", "partition" : 2, "size" : "16M", "type" : "swap" }, + { "disk" : "release.img", "partition" : 3, "size" : "5G", "type" : "linux" } ], + "FilesystemTypes" : [ { "disk" : "release.img", "partition" : 1, "type" : "vfat" }, + { "disk" : "release.img", "partition" : 2, "type" : "swap" }, + { "disk" : "release.img", "partition" : 3, "type" : "ext4" } ], + "PartitionMountPoints" : [ { "disk" : "release.img", "partition" : 1, "mount" : "/boot" }, + { "disk" : "release.img", "partition" : 3, "mount" : "/" } ], + "Version": "latest", + "Bundles": ["kernel-kvm", "os-core", "os-core-update"] + } + +#. Build the image. + + .. code-block:: bash + + sudo mixer build image + + The output from this step will be :file:`release.img`, which is a live image. + +#. Make the next mix. Create a new version of your mix, for the live image to + update to. Increment your mix version by 10: + + .. code-block:: bash + + mixer versions update + + Repeat steps 1-3 to add the upstream :command:`curl` bundle to the mix: + + .. code-block:: bash + + mixer bundle add curl + mixer build bundles + mixer build update + + Build optional delta-packs, which helps reduce client update time: + + .. code-block:: bash + + mixer build delta-packs --from 10 --to 20 + + Refresh your \http://localhost site to see the update content for + mix version 20. + + Look in ~/mixer/update/www/ to see the update content in your + workspace. + +Example 3: Deploy updates to target +=================================== + +The image created in Example 2 is directly bootable in QEMU. In this example, +we'll boot the image from Example 2 to verify it, and update the image from +mix version 10 (from which the image was built), to mix version 20. + +#. Set up the QEMU environment. + + Install the :command:`kvm-host` bundle to your |CL|: + + .. code-block:: bash + + sudo swupd bundle-add kvm-host + + Get the virtual EFI firmware, download the image launch script, and make it + executable: + + .. code-block:: bash + + curl -O https://download.clearlinux.org/image/OVMF.fd + curl -O https://download.clearlinux.org/image/start_qemu.sh + chmod +x start_qemu.sh + +#. Start your VM image (created in Example 2): + + .. code-block:: bash + + sudo ./start_qemu.sh release.img + +#. Log in as root and set a password + +#. Try out your mix. + + Take a look at the default bundles installed in your mix: + + .. code-block:: bash + + swupd info + swupd bundle-list + swupd bundle-list -a + +#. Now we will add the `editors` bundle that we modified. + + .. code-block:: bash + + swupd bundle add editors + +#. Try to start the `joe` editor. It should not appear because we removed it + from the original `editors` bundle. + +#. Next we will update from version 10 to 20 to capture the newly + available bundles. Use :command:`swupd` to update your mix: + + .. code-block:: bash + + swupd check-update + swupd update + swupd bundle-list -a + +#. Now your mix should be at version 20 and curl is now available. Try using + curl. This will fail because curl is not yet installed: + + .. code-block:: console + + curl: command not found + To install curl use: swupd bundle-add curl + + Add the new bundle from your update server to your VM. Retry curl. It works! + + .. code-block:: bash + + swupd bundle-add curl + curl -O https://download.clearlinux.org/image/start_qemu.sh + + Shutdown your VM: + + .. code-block:: bash + + poweroff + + +.. Example: Create a mix with custom RPM +.. ------------------------------------- +.. TODO future example to show copy into local-rpms... + +References +********** + +Reference the `mixer man page`_ for details regarding mixer commands and options. + +.. contents:: + :local: + :depth: 1 + +.. rst-class:: content-collapse + +builder.conf +============ + +mixer initialization creates a :file:`builder.conf` that stores the basic +configuration for the mixer tool. The items of primary interest are CONTENTURL +and VERSIONURL, which will be used by systems updating against your custom +content. + +.. code-block:: console + + #builder.conf + + #VERSION 1.0 + + [Builder] + CERT = "/home/clr/mix/Swupd_Root.pem" + SERVER_STATE_DIR = "/home/clr/mix/update" + VERSIONS_PATH = "/home/clr/mix" + YUM_CONF = "/home/clr/mix/.yum-mix.conf" + + [Swupd] + BUNDLE = "os-core-update" + CONTENTURL = "" + VERSIONURL = "" + + [Server] + DEBUG_INFO_BANNED = "true" + DEBUG_INFO_LIB = "/usr/lib/debug" + DEBUG_INFO_SRC = "/usr/src/debug" + + [Mixer] + LOCAL_BUNDLE_DIR = "/home/clr/mix/local-bundles" + LOCAL_REPO_DIR = "" + LOCAL_RPM_DIR = "" + DOCKER_IMAGE_PATH = "clearlinux/mixer" + +Additional explanation of variables in :file:`builder.conf` is provided in Table +1. + ++-------------------------------+----------------------------------------------------------+ +| **Variable** | **Explanation** | ++-------------------------------+----------------------------------------------------------+ +| `CERT` | Sets the path where mixer stores the certificate file | +| | used to sign content for verification. mixer | +| | automatically generates the certificate if you do not | +| | provide the path to an existing one, and signs the | +| | :file:`Manifest.MoM` file to provide security for the | +| | updated content you create. | +| | | +| | chroot-builder uses the certificate file to sign | +| | the root :file:`Manifest.MoM` file to provide | +| | security for content verification. | +| | | +| | swupd uses this certificate to verify the | +| | :file:`Manifest.MoM` file's signature. | +| | | +| | For now, we strongly recommend that you do not modify | +| | this variable, as swupd expects a certificate with a | +| | very specific configuration to sign and verify | +| | properly. | ++-------------------------------+----------------------------------------------------------+ +| `CONTENTURL` and `VERSIONURL` | Set these variables to the IP address of the web server | +| | hosting the update content. | +| | | +| | VERSIONURL is the IP address where the swupd client | +| | looks to determine if a new version is available. | +| | | +| | CONTENTURL is the location from which swupd pulls | +| | content updates. | +| | | +| | If the web server is on the same machine as the | +| | SERVER_STATE_DIR directory, you can create a symlink to | +| | the directory in your web server's document root to | +| | easily host the content. | +| | | +| | These URLs are embedded in the images created by mixer. | ++-------------------------------+----------------------------------------------------------+ +| `DOCKER_IMAGE_PATH` | Sets the base name of the docker image that mixer pulls | +| | down to run builds in the proper container. | ++-------------------------------+----------------------------------------------------------+ +| `LOCAL_BUNDLE_DIR` | Sets the path where mixer stores the local bundle | +| | definition files. The bundle definition files include | +| | any new, original bundles you create, along with any | +| | edited versions of upstream bundles. | ++-------------------------------+----------------------------------------------------------+ +| `SERVER_STATE_DIR` | Sets the path to which mixer outputs content. By | +| | default, mixer automatically sets the path. | ++-------------------------------+----------------------------------------------------------+ +| `VERSIONS_PATH` | Sets the path for the mix version and upstream version's | +| | two state files: :file:`mixversion` and | +| | :file:`upstreamversion`. mixer creates both files for | +| | you when you set up the workspace. | ++-------------------------------+----------------------------------------------------------+ +| `YUM_CONF` | Sets the path where mixer automatically generates the | +| | :file:`.yum-mix.conf` file. | +| | | +| | The yum configuration file points the chroot-builder to | +| | where the RPMs are stored. | ++-------------------------------+----------------------------------------------------------+ +| **Table 1**: *Variables in builder.conf* | ++-------------------------------+----------------------------------------------------------+ + +Format version +-------------- + +Compatible versions of an OS are tracked with an OS *compatibility epoch*. +Versions of an OS within an epoch are fully compatible and can update to any +other version within that epoch. The compatibility epoch is set as the +`Format` variable in the :file:`mixer.state` file. Variables in the +:file:`mixer.state` are used by mixer between executions and should not be +manually changed. + +A format bump is like modifying the foundation of a house to create a new +level. If `Format` increments to a new epoch (a "format bump"), the OS has +changed in such a way that updating from build A in format X to build B in +format Y will not work. + +A format bump is required when: + +* The software updater, :command:`swupd`, or the software is no longer + compatible with the previous update scheme + +* A package is removed from the update stream and the update must ensure the + files associated with that package are removed from the system + +Using a format increment, we make sure pre- and co-requisite changes flow out +with proper ordering. The updated client will only update to the latest +release in its respective format version, unless overridden by command line +flags. In this way, we can guarantee that all clients update to the final +version in their given format. + +The given format *must* contain all the changes needed to understand the content built in the next format. Only after reaching the final release in the old format can a client continue to update to releases in the new format. + +The format version is incremented only when a compatibility breakage is +introduced. Normal updates, such as updating a software package, do not require a format increment. + +.. rst-class:: content-collapse + +Bundles +======= + +mixer stores information about the bundles included in a mix in a flat file +called :file:`mixbundles`, which is located in the path set by the VERSIONS_PATH variable in :file:`builder.conf`. :file:`mixbundles` is automatically created when the mix is initiated. mixer will refresh the file each time you change the bundles in the mix. + +Bundles can include other bundles. Nested bundles can themselves include +other bundles. If you see an unexpected bundle in your mix, it is likely a +nested bundle in one of the bundles you explicitly added. + +A bundle will fill into one of two categories: upstream or local. Upstream +bundles are those provided by |CL|. Local bundles are either modified upstream bundles or new local bundles. + +Upstream bundles +---------------- + +mixer automatically downloads and caches upstream bundle definition files. +These definition files are stored in the upstream-bundles directory in the +workspace. Do not modify the files in this directory. This directory is +simply a mirror for mixer to use. mixer will automatically delete the +contents of this directory before repopulating it on-the-fly if a new +version must be downloaded. + +The mixer tool automatically caches the bundles for the |CL| version +configured in the :file:`upstreamversion` file. mixer also cleans up old +versions once they are no longer needed. + +Local bundles +------------- + +Local bundles are bundles that you create, or are edited versions of upstream +bundles. Local bundle definition files are stored in the local-bundles +directory in the workspace. The LOCAL_BUNDLE_DIR variable sets the path of this directory in the :file:`builder.conf` file. + +*mixer always checks for local bundles first and the upstream bundles +second.* So bundles in the local-bundles directory will always take +precedence over any upstream bundles that have the same name. This +precedence enables you to copy upstream bundles locally, and edit into a +local variation. + +Bundle configuration +-------------------- + +mixer provides commands to configure the bundles for a mix, such as to add a +bundle to a mix, to create a new bundle for a mix, or to remove a bundle from a +mix. View the `mixer.bundle man page`_ for a full list of commands and more +information on configuring bundles in a mix. + +Editing an existing local bundle is as simple as opening the bundle definition +file in your favorite editor, making the desired edits, and saving your changes. + +.. note:: + + Removing bundles from a mix: By default, removing a bundle will only + remove the bundle from the mix. The local bundle definition file will + still remain. To completely remove a bundle, including its local bundle definition file, use the :command:`--local` flag. + + If you remove the bundle definition file for a local, edited version of an + upstream bundle in a mix, the mix reverts to reference the original upstream version of the bundle. + +.. rst-class:: content-collapse + +Configure and enable Docker +=========================== + +Use these steps to enable Docker for the mixer tool. Make sure to +`Configure Docker proxy info`_ first if needed. + +#. Start the Docker daemon: + + .. code-block:: bash + + sudo systemctl start docker + sudo chmod 777 /var/run/docker.sock + sudo docker info + +#. Add user to the docker group + + .. code-block:: bash + + sudo usermod -G docker -a + +Pull Docker container manually (optional) +----------------------------------------- + +By default, mixer automatically pulls a Docker container for mixing if one +does not already exist. If you need to troubleshoot the mixer container, it +may be useful to manually pull a mixer Docker container. + +Versions of the mixer Docker container are available under the tags for the +`clearlinux/mixer repo `_ +on Docker Hub. Each version of the mixer Docker container is named after the +associated |CL| upstream format version. Refer to `Format version`_ for +additional information on upstream format versions. + +Use the following steps to manually pull a mixer Docker container: + +#. Find the version of the container you need by viewing the tags for the + `clearlinux/mixer repo `_ + on Docker Hub. + +#. Pull the latest container version: + + .. code-block:: bash + + docker pull clearlinux/mixer: + +#. View local docker images: + + .. code-block:: bash + + docker images + +.. rst-class:: content-collapse + +Configure Docker proxy info +=========================== + +If needed, use these steps to configure the Docker proxy information. + +#. Create the Docker daemon proxy config directory: + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/system/docker.service.d + +#. Create :file:`/etc/systemd/system/docker.service.d/http-proxy.conf` and + add the following using your own proxy values: + + .. code-block:: console + + [Service] + Environment="HTTP_PROXY=:" + Environment="HTTPS_PROXY=:" + +#. Reload the Docker daemon: + + .. code-block:: bash + + sudo systemctl daemon-reload + +Configure the Docker container proxies, to pass proxy settings to +containers: + +#. Create a directory for your container config: + + .. code-block:: bash + + mkdir ~/.docker + +#. Create the config file :file:`~/.docker/config.json` and add the following + entries, using your own proxy values: + + .. code-block:: console + + { + "proxies": + { + "default": +   { +    "httpProxy": ":", +     "httpsProxy": ":" +   } + } + } + +#. Set ownership and permission on the docker config directory: + + .. code-block:: bash + + sudo chown "$USER":"$USER" /home/"$USER"/.docker -R + sudo chmod g+rwx "$HOME/.docker" -R + +Configure proxies to allow mixer to access upstream content from behind +a firewall. + +#. Open your :file:`$HOME/.bashrc` file and add proxy and port values for the + following: + + .. code-block:: console + + export http_proxy=":" + export https_proxy=":" + export HTTP_PROXY=":" + export HTTPS_PROXY=":" + export no_proxy="<...>" + +#. Log out and log back in for the proxies to take effect. + +.. rst-class:: content-collapse + +Set up a nginx web server for mixer +=================================== + +A web server is needed to host your update content. In this example, we use +the nginx web server, which comes with |CL|. + +Set up a nginx web server for mixer with the following steps: + +#. Install the :command:`nginx` bundle: + + .. code-block:: bash + + sudo swupd bundle-add nginx + +#. Make the directory where mixer updates will reside: + + .. code-block:: bash + + sudo mkdir -p /var/www + +#. Create a symbolic link between your workspace updates and the updates on + the local nginx web server. In this example, `$HOME/mixer` is the + workspace for the mix. + + .. code-block:: bash + + sudo ln -sf $HOME/mixer/update/www /var/www/mixer + +#. Set up ``nginx`` configuration: + + .. code-block:: bash + + sudo mkdir -p /etc/nginx/conf.d + +#. Copy the default example configuration file: + + .. code-block:: bash + + sudo cp -f /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf + +#. Configure the mixer update server. Create and add the following server + configuration content to :file:`/etc/nginx/conf.d/mixer.conf` (sudo required): + + .. code-block:: console + + server { + server_name localhost; + location / { + root /var/www/mixer; + autoindex on; + } + } + +#. Restart the daemon, enable nginx on boot, and start the service. + + .. code-block:: bash + + sudo systemctl daemon-reload + + sudo systemctl enable nginx + + sudo systemctl start nginx + +#. Verify the web server is running at \http://localhost. At this point + you should no longer see a "404 Not Found" message. + +Related topics +************** + +* :ref:`About mixer ` +* :ref:`autospec-about` +* :ref:`bundles-about` +* :ref:`swupd-about` + +.. _Docker Hub: https://hub.docker.com/r/clearlinux/mixer/tags/ +.. _mixer man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.1.rst +.. _mixer.init man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.init.1.rst +.. _mixer.bundle man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.bundle.1.rst +.. _mixer.build man page: https://github.com/clearlinux/mixer-tools/blob/master/docs/mixer.build.1.rst +.. _releases: https://github.com/clearlinux/clr-bundles/releases diff --git a/zh_CN/_sources/guides/clear/security.rst.txt b/zh_CN/_sources/guides/clear/security.rst.txt new file mode 100644 index 00000000..c78fb6d3 --- /dev/null +++ b/zh_CN/_sources/guides/clear/security.rst.txt @@ -0,0 +1,156 @@ +.. _security: + +OS Security +########### + +|CL-ATTR| aims to make systemic and layered security-conscious decisions +that are both performant and practical. This security philosophy is rooted +within the project's codebase and operating culture. + +.. contents:: :local: + :depth: 1 + +Security in updates +******************* + +The |CL| team believes in the benefits of software security through open +sourcing, incremental updates, and rapidly resolving known security advisories. + +The latest Linux\* codebase +=========================== + +|CL| uses the newest version of the Linux kernel which allows the operating +system to leverage the latest features from the upstream Linux kernel, +including security fixes. + +Automated effective updating +============================ + +|CL| is incrementally updated multiple times per day. + +This `rolling release`_ model allows |CL| to consume the latest security fixes +of software packages as soon as they become available. There is no waiting for +major or minor releases on |CL|. + +An update is not effective if it is just simply downloaded onto a system. +It needs to be obtained *AND* ensured that the new patched copy is being +used; not an older copy loaded into memory. |CL| will let you know when a +service needs to be rebooted or do it for your automatically after +a software update, if desired. + +In |CL| updates are delivered automatically, efficiently, and effectively. For +more information about software updates in |CL|, refer to the :ref:`swupd-guide` +guide. + +Automated CVE scanning and remediation +====================================== + +The sheer number of software packages and security vulnerabilities is growing +exponentially. Repositories of Common Vulnerabilities and Exposures (CVEs) +and their fixes, if known, are published by :abbr:`NIST` in a +National Vulnerability Database \ |NVD|\ and at \ |MITRE|\ . + +|CL| employs a proactive and measured approach to addressing known +and fixable :abbr:`CVEs (Common Vulnerabilities and Exposures)`. +Packages are automatically scanned against CVEs daily, and security +patches are deployed as soon as they are available. + +These combined practices minimize the amount of time |CL| systems are exposed to unnecessary security risk. + +Security in software +********************* + +Minimized attack surface +======================== + +|CL| removes legacy, unneeded, or redundant standards and components as much as +possible to enable the use of best known security standards. Below are some +examples: + +* `RC4`, `SSLv3`, `3DES`, and `SHA-1` ciphers which have had known + vulnerabilities, have been explicitly disabled within many |CL| packages to + avoid their accidental usage. + +* Services and subsystems which expose sensitive system information + have been removed such as the `finger` and `tcpwrappers`. + +* `SFTP` has been disabled by default due to security considerations. + +Verified trust +============== + +|CL| encourages the use of secure practices such as encryption +and digital signature verification throughout the system and discourages blind +trust. Below are some examples: + +* All update operations from swupd are transparently encrypted and checked + against the |CL| maintainers' public key for authenticity. + More information about swupd security can be found in the + `Security for software update in Clear Linux* OS`_ blog post. + +* Before being built, packages available from |CL| verify checksums and + signatures provided by third party project codebases and maintainers. + +* |CL| features a unified certificate store, `clrtrust`_ which comes + ready to work with well-known Certificate Authorities out of the box. + clrtrust also offers an easy to use command line interface for managing + system-wide chains of trust, instead of ignoring foreign certificates. + +Compiled with secure options +============================ + +While |CL| packages are optimized for performance on Intel® architecture, +security conscious kernel and compiler options are sensibly taken advantage of. +Below are some examples: + +* Kernels shipped with |CL| are signed and disallow the usage of + custom kernel modules to maintain verifiable system integrity. + +* `Address space layout randomization (ASLR)`_ and + `Kernel address space layout randomization (KASLR)`_ are kernel features + which defend against certain memory based attacks. + More information about PIE executables can be found in the + `Recent GNU* C library improvements`_ blog post. + +Security in system design +************************* + +Simple, yet effective, techniques are used throughout the |CL| system design to +defend against common attack vectors and enable good security hygiene. Below are +some examples: + +* Full disk encryption using :abbr:`LUKS (Linux Unified Key Setup)` is available + during installation. Refer to `cryptsetup`_ for additional information about + LUKS. + +* |CL| uses the PAM cracklib module to harden user login and password + security resulting in: + + - No default username or root password set out of the box with + |CL|, you will be asked to set your own password immediately. + + - Simple password schemes, which are known to be easily compromised, + cannot be set in |CL|. + + - A password blacklist, to avoid system passwords being set to + passwords which have been compromised in the past. + +* `Tallow`_, a lightweight service which monitors and blocks suspicious SSH + login patterns, is installed with the :command:`openssh-server` bundle. + +.. _`Security for software update in Clear Linux* OS`: https://clearlinux.org/blogs/security-software-update-clear-linux-os-intel-architecture +.. _`Recent GNU* C library improvements`: https://clearlinux.org/blogs/recent-gnu-c-library-improvements +.. _`rolling release`: https://en.wikipedia.org/wiki/Rolling_release +.. _`clrtrust`: https://github.com/clearlinux/clrtrust +.. _`Address space layout randomization (ASLR)`: https://en.wikipedia.org/wiki/Address_space_layout_randomization +.. _`Kernel address space layout randomization (KASLR)`: https://lwn.net/Articles/569635/ +.. _`cryptsetup`: https://gitlab.com/cryptsetup/cryptsetup/ +.. _`Tallow`: https://github.com/clearlinux/tallow + +.. |NVD| raw:: html + + https://nvd.nist.gov/ + +.. |MITRE| raw:: html + + https://cve.mitre.org/ diff --git a/zh_CN/_sources/guides/clear/stateless.rst.txt b/zh_CN/_sources/guides/clear/stateless.rst.txt new file mode 100644 index 00000000..7d7aa9f2 --- /dev/null +++ b/zh_CN/_sources/guides/clear/stateless.rst.txt @@ -0,0 +1,139 @@ +.. _stateless: + +Stateless +######### + +In most operating systems, user data, system data, and configuration files +can become intermingled. + +.. figure:: figures/stateless-1.png + :scale: 45% + :align: center + :alt: Stateless: User and system files mixed + + Figure 1: Without stateless, user and system files become mixed on the filesystem over time. + +|CL-ATTR| has a stateless design philosophy with the goal to provide an +:abbr:`OS (operating system)` that functions without excessive user +configuration or customization. Stateless in this context does *not* mean +ephemeral or non-persistent. + +.. contents:: :local: + :depth: 1 + +File-level separation +********************* + +To accomplish a stateless design the Linux Filesystem Hierarchy is separated +between user-owned areas and |CL|-owned areas. + +.. figure:: figures/stateless-2.png + :scale: 45% + :align: center + :alt: Stateless: User and system files separation + + Figure 2: With stateless, user and system files are separated on the filesystem. + +System areas +============ +File under the :file:`/usr` directory are managed by |CL| as system files. +Files written under the :file:`/usr` directory by users can get removed +through system updates with :ref:`swupd `. 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-block:: bash + + sudo mkdir /etc/httpd + +#. Copy the default configuration as a reference template: + + .. code-block:: bash + + sudo cp /usr/share/defaults/httpd/httpd.conf /etc/httpd/ + +#. Make any desired modifications to the configurations: + + .. code-block:: bash + + sudoedit /etc/httpd/httpd.conf + +#. Reload the service or reboot the system to pickup any changes: + + .. code-block:: 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-block:: bash + + 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`_ + +.. _`stateless man page`: https://github.com/clearlinux/clr-man-pages/blob/master/stateless.7.rst + + diff --git a/zh_CN/_sources/guides/clear/swupd-guide.rst.txt b/zh_CN/_sources/guides/clear/swupd-guide.rst.txt new file mode 100644 index 00000000..b7ae2a41 --- /dev/null +++ b/zh_CN/_sources/guides/clear/swupd-guide.rst.txt @@ -0,0 +1,351 @@ +.. _swupd-guide: + +swupd +##### + +:command:`swupd` links a |CL-ATTR| installation with upstream updates and +software. + +.. contents:: + :local: + :depth: 1 + +Description +*********** + +:command:`swupd` has two main functions: + +#. Manage software and replace APT or YUM, by installing bundles + rather than packages. +#. Check for system updates and install them. + +: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 +========== + +Using package managers to monitor software version compatibility or +compare multiple systems on many Linux distributions can be cumbersome. + +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. + +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. On a daily basis, +this matters 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 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*, 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 +than entire packages. For example, it is quite common for an OS security +patch to be as small as 15 KB. Using binary deltas, |CL| is able to +apply only what is needed. + +For details on how to generate update content for |CL|, see the +:ref:`mixer ` tool. + +How it works +************ + +Prerequisites +============= + +* The device is on a well-connected network. +* The device is able to connect to an update server. The default server is: + http://update.clearlinux.org + +Updates +======= + +|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 can correct any problems. + +Manifests +--------- + +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. +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 +--------------------------------- + +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 |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. They 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). They cannot be used without having the original file content. + +Bundle search +============= + +:command:`swupd` searches download manifest data for +bundles that match the term. Enter only one term, or hyphenated term, per +search. Use the command :command:`man swupd` to learn more. + +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 are marked **(installed)** in search +results. + +Optionally, you can review our `bundles`_ on GitHub\*. + +Examples +******** + +Example 1: Disable and enable automatic updates +=============================================== + +|CL| updates are automatic by default, but can be set to occur only +on demand. + +#. Verify your current auto-update setting. + + .. code-block:: bash + + sudo swupd autoupdate + + Output: + + .. code-block:: console + + Enabled + +#. Disable automatic updates. + + .. code-block:: bash + + sudo swupd autoupdate --disable + + Output: + + .. code-block:: console + + Warning: disabling automatic updates may take you out of compliance with your IT policy + + Running systemctl to disable updates + Created symlink /etc/systemd/system/swupd-update.service → /dev/null. + Created symlink /etc/systemd/system/swupd-update.timer → /dev/null. + +#. Check manually for updates. + + .. code-block:: bash + + sudo swupd check-update + +#. Install an update after identifying one that you need. + + .. code-block:: bash + + sudo swupd update --version + +#. Re-enable automatic installs. + + .. code-block:: bash + + sudo swupd autoupdate --enable + +.. _swupd-guide-example-install-bundle: + +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:`VM (Virtual Machine)` for +improved security. + +|CL| makes it very easy to install, since you only need to add +one bundle to use `Kata Containers`_: `containers-virt`_, despite a +number of dependencies. Also, check out our tutorial: :ref:`kata`. + +#. Find the correct bundle. + + To return all possible matches for the search string, enter + :command:`swupd search`, followed by 'kata': + + .. code-block:: bash + + sudo swupd search kata + + The output should be similar to: + + .. code-block:: console + + Bundle with the best search result: + + containers-virt - Run container applications from Dockerhub in + lightweight virtual machines + + This bundle can be installed with: + + swupd bundle-add containers-virt + + Alternative bundle options are + + cloud-native-basic - Contains ClearLinux native software for Cloud + + .. note:: + + 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. + + .. code-block:: bash + + sudo swupd bundle-add containers-virt + + .. note:: + + To add multiple bundles, add a space followed by the bundle name. + + The output of a successful installation should be similar to: + + .. code-block:: console + + Downloading packs... + + Extracting containers-virt pack for version 24430 + ...50% + Extracting kernel-container pack for version 24430 + ...100% + Starting download of remaining update content. This may take a while... + ...100% + Finishing download of update content... + Installing bundle(s) files... + ...100% + Calling post-update helper scripts. + Successfully installed 1 bundle + +Example 3: Verify and correct system file mismatch +================================================== + +:command:`swupd` can determine whether system directories and files have +been added to, overwritten, removed, or modified (e.g., permissions). + +.. code-block:: bash + + sudo swupd diagnose + +All directories that are watched by :command:`swupd` are verified according +to the manifest data. Hash mismatches are flagged as follows: + +.. code-block:: console + + Verifying version 23300 + Verifying files + ...0% + Hash mismatch for file: /usr/bin/chardetect + ... + ... + Hash mismatch for file: /usr/lib/python3.6/site-packages/urllib3/util/wait.py + ...100% + Inspected 237180 files + 423 files did not match + Verify successful + +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 to be ignored. + +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 +*************** + +swupd info + Returns the currently installed version and update servers. + +swupd update + Updates to a specific version or updates to latest version if no + arguments are used. + +swupd bundle-list [--all] + Lists installed bundles. + +swupd bundle-add [-b] + Finds a bundle that contains your search term. + +swupd bundle-add + Adds a bundle. + +swupd bundle-remove + Removes a bundle. + +swupd --help + Lists additional :command:`swupd` commands. + +man swupd + Opens the :command:`swupd` man page. + +Refer to `swupd source documentation`_ on GitHub for more details. + +Related topics +************** + +* :ref:`autospec` +* :ref:`mixer` +* :ref:`bundles` + +.. _swupd source documentation: https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst + +.. _Kata Containers: https://clearlinux.org/downloads/containers + +.. _containers-virt: https://github.com/clearlinux/clr-bundles/blob/master/bundles/containers-virt + +.. _Bundle Definition Files: https://github.com/clearlinux/clr-bundles + +.. _bundles: https://github.com/clearlinux/clr-bundles/tree/master/bundles \ No newline at end of file diff --git a/zh_CN/_sources/guides/deploy-at-scale.rst.txt b/zh_CN/_sources/guides/deploy-at-scale.rst.txt new file mode 100644 index 00000000..3c5270c8 --- /dev/null +++ b/zh_CN/_sources/guides/deploy-at-scale.rst.txt @@ -0,0 +1,255 @@ +.. _deploy-at-scale: + +Deploy at Scale +############### + +This guide describes deployment considerations and strategies when deploying +|CL-ATTR| at scale in your environment. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +In this guide the term *endpoint* refers to a system targeted for |CL| +installation, whether that is a datacenter system or unit deployed in field. + +.. note:: + + This guide is not a replacement or blueprint for designing your own IT + operating environment. + + Implementation details for a scale deployment are beyond the scope of this + guide. + + Your |CL| deployment should complement your existing environment and + available tools. It is assumed core IT dependencies of your environment, + such as your network, are healthy and scaled to suit the deployment. + +Pick a usage and update strategy +******************************** + +Different business scenarios call for different deployment methodologies. +|CL| offers the flexibility to continue consuming the upstream |CL| +distribution or the option to fork away from the |CL| distribution and +act as your own :abbr:`OSV (Operating System Vendor)`. + +Below is an overview of some considerations. + +Create your own Linux distribution (mix) +======================================== + +This approach forks away from the |CL| upstream and has you act as your own +:abbr:`OSV (Operating System Vendor)` by leveraging the :ref:`mixer` process to +create customized images based on |CL|. This is a level of responsibility +that requires having more infrastructure and processes to adopt. In return, +this approach *offers you a high degree of control and customization*. Consider: + +* Development systems that generate bundles and updates should have + sufficient performance for the task and be separate from the swupd update + webservers that serve update content to production machines. + +* swupd update webservers that serve update content to production machines + should be appropriately scaled. Specific implementation details for a scalable, + resilient web server are beyond the scope of this document. + + (See :ref:`mixer` for more information about update servers.) + +Adopt an agile methodology +========================== + +The cloud, and other scaled deployments, are all about flexibility and speed. +It only makes sense that any |CL| deployment strategy should follow suit. + +Manually rebuilding your own bundles or mix for every release is not +sustainable at a large scale. A |CL| deployment pipeline should be agile +enough to validate and produce new versions with speed. Whether or not those +updates actually make their way to your production can be separate +business decision. However this *ability to frequently roll new versions* of +software to your endpoints is an important prerequisite. + +You own the validation and lifecycle of the OS and should treat it like any +other software development lifecycle. Below are some pointers: + +* Thoroughly understand the custom software packages that you will need to + integrate with |CL| and maintain along with their dependencies. + +* Setup a path to production for building |CL| based images. At minimum this + should include: + + * A development clr-on-clr environment to test building packages and + bundles for |CL| systems. + + * A pre-production environment to deploy |CL| versions to before + production + +* Employ a continuous integration and continuous deployment (CI/CD) + philosophy in order to: + + - Automatically pull custom packages as they are updated from their + upstream projects or vendors. + + - Generate |CL| bundles and potentially bootable images with your + customizations, if any. + + - Measure against metrics and indicators which are relevant to your + business (e.g. performance, power, etc) from release to release. + + - Integrate with your organization's governance processes, such as change + control. + +Versioning infrastructure +========================= + +|CL| version numbers are very important as they apply to the whole +infrastructure stack from OS components to libraries and applications. + +Good record keeping is important, so you should keep a detailed registry and +history of previously deployed versions and their contents. + +With a glance at the |CL| version numbers deployed, you should be able to +tell if your Clear systems are patched against a particular security +vulnerability or incorporate a critical new feature. + +Pick an image distribution strategy +*********************************** + +Once you have decided on a usage and update strategy, you should understand +*how* |CL| will be deployed to your endpoints. In a large scale deployment, +interactive installers should be avoided in favor of automated installations +or prebuilt images. + +There are many well-known ways to install an operating system at scale. Each +have their own benefits, and one may lend itself easier in your environment +depending on the resources available to you. + +See the available :ref:`image-types`. + +Below are some common ways to install |CL| to systems at scale: + +Bare metal +========== + +Preboot Execution Environments (PXE) or other out-of-band booting options are +one way to distribute |CL| to physical bare metal systems on a LAN. + +This option works well if your customizations are fairly small in size +and infrastructure can be stateless. + +The |CL| `Downloads`_ page offers a live image that can be deployed as +a PXE boot server if one doesn't already exist in your environment. Also see +documentation on how to :ref:`bare-metal-install-server`. + +Cloud instances or virtual machines +=================================== + +Image templates in the form of cloneable disks are an effective way to +distribute |CL| for virtual machine environments, whether on-premises or +hosted by a Cloud Solution Provider (CSP). + +When used in concert with cloud VM migration features, this can be a good option +for allowing your applications a degree of high availability and workload +mobility; VMs can be restarted on a cluster of hypervisor host or moved between +datacenters transparently. + +The |CL| `Downloads`_ page offers example prebuilt VM images and is readily +available on popular CSPs. Also see documentation on how to +:ref:`virtual-machine-install`. + +Containers +========== + +Containerization platforms allow images to be pulled from a repository and +deployed repeatedly as isolated containers. + +Containers with a |CL| image can be a good option to blueprint and ship +your application, including all its dependencies, as an artifact while +allowing you or your customers to dynamically orchestrate and scale +applications. + +|CL| is capable of running a Docker host, has a container image which can +be pulled from DockerHub, or can be built as a customized container. +For more information visit the `Containers`_ page. + +Considerations with stateless systems +************************************* + +An important |CL| concept is statelessness and partitioning of system data +from user data. This concept can change the way you think about an at scale +deployment. + +Backup strategy +=============== + +A |CL| system and its infrastructure should be considered a commodity and +be easily reproducible. Avoid focusing on backing up the operating system +itself or default values. + +Instead, focus on backing up what's important and unique - the application +and data. In other words, only focus on backing up critical areas like +:file:`/home`, :file:`/etc`, and :file:`/var`. + +Meaningful logging & telemetry +============================== + +Offload logging and telemetry from endpoints to external servers, so it is +persistent and can be accessed on another server when an issue occurs. + +* Remote syslogging in |CL| is available through the + `systemd-journal-remote.service`_ + +* |CL| offers a :ref:`telem-guide`, which can be a powerful tool + for a large deployment to quickly crowdsource issues of interest. Take + advantage of this feature with careful consideration of the target audience + and the kind of data that would be valuable, and expose events + appropriately. + + Like any web server, the telemetry server should be appropriately scaled and + resilient. Specific implementation details for a scalable, resilient web + server are beyond the scope of this document. + +Orchestration and configuration management +========================================== + +In cloud environments, where systems can be ephemeral, being able to +configure and maintain generic instances is valuable. + +|CL| offers an efficient cloud-init style solution, `micro-config-drive`_, +through the *os-cloudguest* bundles which allow you to configure many Day 1 +tasks such as setting hostname, creating users, or placing +SSH keys in an automated way at boot. For more information on +automating configuration during deployment of |CL| endpoints see the +:ref:`bulk-provision` guide. + +A configuration management tool is useful for maintaining consistent system +and application-level configuration. Ansible\* is offered through the +*sysadmin-hostmgmt* bundle as a configuration management and automation +tool. + +Cloud-native applications +========================= + +An Infrastructure OS can design for good behavior, but it is ultimately up +to applications to make agile design choices. Applications deployed +on |CL| should aim to be host-aware but not depend on any specific host to +run. References should be relative and dynamic when possible. + +The application architecture should incorporate an appropriate tolerance for +infrastructure outages. Don't just keep stateless design as a noted feature. +Continuously test its use; Automate its use by redeploying |CL| and +application on new hosts. This naturally minimizes configuration drift, +challenges your monitoring systems, and business continuity plans. + +.. _`Downloads`: https://clearlinux.org/downloads/ +.. _`Containers`: https://clearlinux.org/downloads/containers +.. _`systemd-journal-remote.service`: https://www.freedesktop.org/software/systemd/man/systemd-journal-remote.service.html +.. _`micro-config-drive`: https://github.com/clearlinux/micro-config-drive + +.. |WEB-SERVER-SCALE| replace:: + There are many well-known ways to achieve a scalable and resilient web + server for this purpose, however implementation details are not in the + scope of this document. In general, they should be close to your + endpoints, highly available, and easy to scale with a load balancer when + necessary. \ No newline at end of file diff --git a/zh_CN/_sources/guides/guides.rst.txt b/zh_CN/_sources/guides/guides.rst.txt new file mode 100644 index 00000000..1c17266b --- /dev/null +++ b/zh_CN/_sources/guides/guides.rst.txt @@ -0,0 +1,58 @@ +.. _guides: + +Guides +###### + +The following guides provide step-by-step instructions on using |CL|. + +.. note:: + + As of 22 May 2019 :file:`mixin` is no longer supported. + +Clear Linux +=========== + +.. toctree:: + :maxdepth: 1 + :glob: + + clear/* + telemetrics/* + +Maintenance +=========== + +.. toctree:: + :maxdepth: 1 + :glob: + + maintenance/* + deploy-at-scale + +Network +======= + +.. toctree:: + :maxdepth: 1 + :glob: + + network/* + +Kernel +======= + +.. toctree:: + :maxdepth: 1 + :glob: + + kernel/* + +Stacks +======= + +.. toctree:: + :maxdepth: 1 + :glob: + + stacks/* + stacks/dlrs/* diff --git a/zh_CN/_sources/guides/kernel/kernel-development.rst.txt b/zh_CN/_sources/guides/kernel/kernel-development.rst.txt new file mode 100644 index 00000000..841eae4d --- /dev/null +++ b/zh_CN/_sources/guides/kernel/kernel-development.rst.txt @@ -0,0 +1,454 @@ +.. _kernel-development: + +Kernel development +################## + +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. + +Request changes be included with the |CL| kernel +************************************************ + +If the kernel modification you need is already open source and likely to be +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\*. + +Set up kernel development environment +************************************* + +In some cases, it may be necessary to modify the kernel to suit your specific +needs or to test new kernel code. + +You can build and install a custom kernel; however you must: + +* Disable Secure Boot +* Maintain any updates to the kernel going forward + +To create a custom kernel, start with the |CL| development environment. +Then make changes to the kernel, build it, and install it. + + +Install the |CL| development tooling framework +============================================== + +.. include:: ../clear/autospec.rst + :start-after: install-tooling-after-header: + :end-before: install-tooling-end: + +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 + :command:`make clone_` command in the + :file:`clearlinux/` directory clones the package from the + `clearlinux-pkgs`_ repo on GitHub. + + .. code-block:: bash + + cd ~/clearlinux + make clone_linux + +#. Navigate into the cloned package directory. + + .. code-block:: bash + + cd ~/clearlinux/packages/linux + + +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. + +.. 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/`. + +Change the kernel version +========================= + +|CL| tends to use the latest kernel available from `kernel.org`_, the Linux +upstream. The kernel version that will be built can be changed in the +RPM SPEC file. While most packages in Clear Linux are typically packaged +using :ref:`autospec-about`, the kernel is not. This means control files +provided by autospec are not available and changes must be made manually. + +#. Open the Linux kernel package RPM SPEC file in an editor. + + .. code-block:: bash + + $EDITOR linux.spec + +#. Modify the Version, Release, and Source0 URL entries at the top of the + file to change the version of Linux kernel that will be compiled. + + A list of current and available kernel release can be found on + `kernel.org`_. + + .. code-block:: bash + + Name: linux + Version: 4.20.8 + Release: 696 + License: GPL-2.0 + Summary: The Linux kernel + Url: http://www.kernel.org/ + Group: kernel + Source0: https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.8.tar.xz + Source1: config + Source2: cmdline + + %define ktarget native + + .. note:: + - 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. + +#. Commit and save the changes to the file. + +.. _pull-copy-kernel-source: + +Pull a copy of the Linux kernel source code +=========================================== + +Obtain a local copy of the source code to make modifications against. + +#. Run make sources to pull the kernel source code specified in the RPM + SPEC file. In the example, it downloads the :file:`linux-4.20.8.tar.xz` file. + + .. code-block:: bash + + make sources + + +#. Extract the kernel source code archive. This will create a working copy + of the Linux source that you can modify. + + .. code-block:: bash + + tar -xvf linux-4.20.8.tar.xz + +#. Navigate to the extracted directory. In this example, it has been + extracted into a :file:`linux-4.20.8` directory. + + .. code-block:: bash + + cd linux-4.20.8/ + + +Customize the Linux kernel source +********************************* + +After the kernel sources have been obtained, customizations to the kernel +configuration or source code can be made for inclusion with the kernel +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. + +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 :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 + into the working directory as :file:`.config` for comparison. + Otherwise, use the |CL| kernel configuration file as template + + .. code-block:: bash + + cp ~/clearlinux/packages/linux/config .config + + +#. Make any desired changes to the :file:`.config` using a kernel + configuration tool. Below are some popular options: + + - :command:`$EDITOR .config` - the .config file can be directly edited + for simple changes with names that are already known. + + - :command:`make config` - a text-based tool that asks questions + one-by-one to decide configuration options. + + - :command:`make menuconfig` - a terminal user interface that provides + menus to decide configuration options. + + - :command:`make xconfig` - a graphical user interface that provides + tree views to decide configuration options. + + + More configuration tools can be found by looking at the make help: + :command:`make help | grep config` + +#. Commit and save the changes to the :file:`.config` file. + +#. Copy the :file:`.config` file from the kernel source directory into + the kernel package directory as :file:`config` for inclusion in the build. + + .. code-block:: bash + + cp .config ../config + +Modify kernel source code +========================= + +Changes to kernel code are applied with patch files. Patch files are +formatted git commits that can be applied to the main source code. + +You will need to obtain a copy of the source code, +make modifications, generate patch file(s), and add them to the RPM SPEC +file for inclusion during the kernel build. + +If you have a large number of patches or a more complex workflow, +consider using a patch management tool in addition to Git such as +`Quilt`_. + + +#. 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 + commit with all the existing source files to begin tracking changes. + + .. code-block:: bash + + git init + git add -A + git commit -m "Initial commit of Linux kernel source" + + +#. Apply patches provided by the |CL| kernel package to the kernel source + in the working directory. + + .. code-block:: bash + + git am ../*.patch + + +#. Make any of your desired code changes to the Linux source code files. + + +#. Track and commit your changes to the local git repo. + + .. code-block:: bash + + git add + git commit -m "My patch for driver A" + + +#. Generate a patch file based on your git commits. + represents the number of local commits to create patch file. + See the `git-format-patch`_ documentation for detailed information + on using :command:`git format-patch` + + .. code-block:: bash + + git format-patch - + +#. Copy the patch files from the patches directory in the linux + source tree to the RPM build directory. + + .. code-block:: bash + + cp *.patch ~/clearlinux/packages/linux/ + + +#. Navigate back to the RPM build directory. + + .. code-block:: bash + + cd ~/clearlinux/packages/linux/ + +#. Open the Linux kernel package RPM SPEC file in an editor. + + .. code-block:: bash + + $EDITOR linux.spec + +#. Locate the section of the SPEC file that contains existing patch + variable definitions and append your patch file name. Ensure the + patch number does not collide with an existing patch. + In this example, the patch file is called + :file:`2001-my-patch-for-driver-A.patch` + + .. code-block:: bash + + # + # Small Clear Linux Tweaks + # + Patch0501: 0501-zero-extra-registers.patch + Patch0502: 0502-locking-rwsem-spin-faster.patch + + #Serie1.name WireGuard + #Serie1.git https://git.zx2c4.com/WireGuard + #Serie1.tag 00bf4f8c8c0ec006633a48fd9ee746b30bb9df17 + Patch1001: 1001-WireGuard-fast-modern-secure-kernel-VPN-tunnel.patch + #Serie1.end + + Patch2001: 2001-my-patch-for-driver-A.patch + + +#. Locate the section of the SPEC file further down that contains + patch application and append your patch file number used in the step above. + In this example, patch2001 is added. + + .. code-block:: bash + + # + # Small tweaks + # + %patch0501 -p1 + %patch0502 -p1 + + #Serie1.patch.start + %patch1001 -p1 + #Serie1.patch.end + + %patch2001 -p1 + + +#. Commit and save the changes to the RPM SPEC file. + +Modify kernel boot parameters +============================= +The kernel boot options are passed from the bootloader to the kernel with +command-line parameters. + +While temporary changes can be made to kernel parameters on a running +system or on a during boot, you can also modify the default parameters that +are persistent and distributed with a customized kernel. + + +#. Open the kernel :file:`cmdline` file in an editor. + + .. code-block:: bash + + $EDITOR cmdline + + +#. Make any desired change to the kernel parameters. + For example, you can remove the :command:`quiet` parameter to see more + verbose output of kernel log messages during the boot process. + +#. Commit and save the changes to the :file:`cmdline` file. + +See the `kernel parameters`_ documentation for a list of available +parameters. + +Build and install the kernel +**************************** +After changes have been made to the kernel source and RPM SPEC file, +the kernel is ready to be compiled and packaged into an RPM. + +The |CL| development tooling makes use of :command:`mock` environments to +isolate building of packages in a sanitized workspace. + +#. Start the compilation process by issuing the :command:`make build` + command. This process is typically resource intensive and will take a while. + + .. code-block:: bash + + make build + + .. note:: + The mock plugin `ccache`_ can be enabled to help speed up any future + rebuilds of the kernel package by caching compiler outputs and reusing + them. + + +#. The result will be multiple :file:`.rpm` files in the :file:`rpms` + directory as output. + + .. code-block:: bash + + ls rpms/ + + The kernel RPM will be named + :file:`linux--.x86_64.rpm` + + +#. The kernel RPM file can be input to the :ref:`mixer` to create a + custom bundle and mix of |CL|. + +Alternatively, the kernel RPM bundle can be installed manually on a local +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. + +#. Install the kernel onto the local system by extracting the RPM with the + :command:`rpm2cpio` command. + + .. code-block:: bash + + rpm2cpio linux--.x86_64.rpm | (cd /; sudo cpio -i -d -u -v); + + +#. Update the |CL| boot manager using :command:`clr-boot-manager` and reboot. + + .. code-block:: bash + + sudo clr-boot-manager list-kernels + sudo clr-boot-manager set-kernel org.clearlinux..- + + sudo reboot + + +#. After a reboot, verify the customized kernel is running. + + .. code-block:: bash + + uname -a + +Related topics +************** + +* :ref:`kernel-modules` +* :ref:`mixer` + +.. _Distribution Project: https://github.com/clearlinux/distribution/issues/new/choose + +.. _Source RPMs (SRPMS): https://cdn.download.clearlinux.org/current/source/SRPMS/ + +.. _Quilt: http://savannah.nongnu.org/projects/quilt + +.. _clearlinux-pkgs: https://github.com/clearlinux-pkgs + +.. _kernel.org: https://www.kernel.org/ + +.. _kernel parameters: https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt + +.. _ccache: https://fedoraproject.org/wiki/Mock/Plugin/CCache?rd=Subprojects/Mock/Plugin/CCache + +.. _git-format-patch: https://git-scm.com/docs/git-format-patch diff --git a/zh_CN/_sources/guides/kernel/kernel-modules-dkms.rst.txt b/zh_CN/_sources/guides/kernel/kernel-modules-dkms.rst.txt new file mode 100644 index 00000000..bda29de0 --- /dev/null +++ b/zh_CN/_sources/guides/kernel/kernel-modules-dkms.rst.txt @@ -0,0 +1,312 @@ +.. _kernel-modules-dkms: + +Add kernel modules with DKMS +############################ + +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 +*********** + +Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree). + +:abbr:`DKMS (Dynamic Kernel Module System)` is a framework that facilitates +the building and installation of kernel modules. DKMS allows |CL| to provide +hooks that automatically rebuild modules against new kernel versions. + +.. include:: kernel-modules.rst + :start-after: kernel-modules-availability-begin: + :end-before: kernel-modules-availability-end: + +Install DKMS +************ + +.. _kernel-modules-dkms-install-begin: + +The :command:`kernel-native-dkms` bundle provides the :command:`dkms` program and +Linux kernel headers, which are required for compiling kernel modules. + +The :command:`kernel-native-dkms` bundle also: + +* 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 `. + +* Disables kernel module signature verification by appending a kernel + command-line parameter (:command:`module.sig_unenforce`) from the + :file:`/usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf` file. + +* Adds a notification to the Message of the Day (MOTD) indicating kernel + module signature verification is disabled. + +.. warning:: + + We recommend that you always review the :command:`swupd update` output + to make sure kernel modules were successfully rebuilt against the new + kernel. This is especially important for systems where a successful boot + relies on a kernel module. + +Install the :command:`kernel-native-dkms` or :command:`kernel-lts-dkms` +bundle: + +#. Determine which kernel variant is running on |CL|. Only the *native* + and *lts* kernels are enabled to build and load out-of-tree kernel modules + with DKMS. + + .. code-block:: bash + + $ uname -r + 5.XX.YY-ZZZZ.native + + Ensure *.native* or *.lts* is in the kernel name. + +#. Install the DKMS bundle corresponding to the installed kernel. Use + :command:`kernel-native-dkms` for the native kernel or + :command:`kernel-lts-dkms` for the lts kernel. + + .. code-block:: bash + + sudo swupd bundle-add kernel-native-dkms + + or + + .. code-block:: bash + + sudo swupd bundle-add kernel-lts-dkms + + +#. Update the |CL| bootloader and reboot. + + .. code-block:: bash + + sudo clr-boot-manager update + reboot + +.. _kernel-modules-dkms-install-end: + +Build, install, and load an out-of-tree module +********************************************** + +Follow the steps in this section if you are an individual user or testing, +and you need an out-of-tree kernel module that is not available through +|CL|. For a more scalable and customizable approach, we recommend using +:ref:`mixer` to provide a custom kernel and updates. + +Prerequisites +============= + +Before you begin, you must: + +* Disable Secure Boot in UEFI/BIOS. The loading of new out-of-tree modules + modifies the signatures that Secure Boot relies on for trust. + +* Obtain a kernel module package in the form of source code or + pre-compiled binaries. + +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. + +Kernel modules may come packaged as: + +- Source code without a :file:`dkms.conf` file +- Source code with a premade :file:`dkms.conf` file +- Source code with a premade :file:`dkms.conf` file and precompiled module + binaries +- 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. + +#. Download the kernel module's source code. + + * Review the available download options. Some kernel modules provide + separate archives that are specifically enabled for DKMS support. + + * Review the README documentation, because it often provides required + information to build the module with DKMS support. + + .. code-block:: bash + + curl -O http://.tar.gz + tar -xvf .tar.gz + cd / + cat README + +Build kernel module with an existing dkms.conf +============================================== + +If the kernel module maintainer packaged the source archive with the +:command:`dkms mktarball` command, the entire archive can be passed to the +:command:`dkms ldtarball` which completes many steps for you. + +The archive contains the required :file:`dkms.conf` file, and may contain +a :file:`dkms_source_tree` directory and a :file:`dkms_binaries_only` +directory. + +#. Run the :command:`dkms ldtarball` command against the kernel + module archive. + + .. code-block:: bash + + dkms ldtarball .tar.gz + + + :command:`dkms ldtarball` places the kernel module source under + :file:`/usr/src/-/`, builds it if necessary, + and adds the module into the DKMS tree. + + +#. Verify the kernel module is detected by checking the output of the + :command:`dkms status` command. + + .. code-block:: bash + + dkms status + + +#. Install the kernel module. + + .. code-block:: bash + + dkms install -m -v + +Build kernel module without an existing dkms.conf +================================================= + +If the kernel module source does not contain a :file:`dkms.conf` file or the +:command:`dkms ldtarball` command encounters errors, you must manually +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. + +Here are some additional resources that can be used for reference: + +* DKMS manual page (:command:`man dkms`) shows detailed syntax in the + DKMS.CONF section. + +* Ubuntu community wiki entry for the `Kernel DKMS Package`_ shows an example + where a single package contains multiple modules. + +* 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: + +#. Create or modify the :file:`dkms.conf` file inside of the extracted source + code directory. + + .. code-block:: bash + + $EDITOR dkms.conf + + MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build" + CLEAN="make -C src/ clean" + BUILT_MODULE_NAME=custom_module + BUILT_MODULE_LOCATION=src/ + 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*. + +#. Copy the kernel module source code into the :file:`/usr/src/` directory. + + .. code-block:: bash + + sudo mkdir /usr/src/- + sudo cp -Rv . /usr/src/- + + .. note:: + + ** and ** must match the entries in the + :file:`dkms.conf` file. + +#. Add the kernel module to the DKMS tree so that it is tracked by DKMS. + + .. code-block:: bash + + sudo dkms add -m + +#. Build the kernel module using DKMS. If the build encounters errors, + you may need to edit the :file:`dkms.conf` file. + + .. code-block:: bash + + sudo dkms build -m -v + +#. Install the kernel module using DKMS. + + .. code-block:: bash + + sudo dkms install -m -v + +Load kernel module +================== + +By default, DKMS installs modules "in-tree" under :file:`/lib/modules` so the +:command:`modprobe` command can be used to load them. + +#. Load the installed module with the :command:`modprobe` command. + + .. code-block:: bash + + sudo modprobe + +#. Validate the kernel module is loaded. + + .. code-block:: bash + + lsmod | grep + +Examples +******** + +.. include:: kernel-modules.rst + :start-after: kernel-modules-autoload-begin: + :end-before: kernel-modules-autoload-end: + +Related topics +************** + +* `Dynamic Kernel Module System (DKMS)`_ + +* `Dell Linux Engineering Dynamic Kernel Module Support: From Theory to Practice `_ + +* `Linux Journal: Exploring Dynamic Kernel Module Support `_ + +.. _Dynamic Kernel Module System (DKMS): https://github.com/dell/dkms + +.. _Kernel DKMS Package: https://help.ubuntu.com/community/Kernel/DkmsDriverPackage#Configure_DKMS + +.. _dkms.conf: https://github.com/dell/dkms/blob/master/sample.conf diff --git a/zh_CN/_sources/guides/kernel/kernel-modules.rst.txt b/zh_CN/_sources/guides/kernel/kernel-modules.rst.txt new file mode 100644 index 00000000..eae7f04a --- /dev/null +++ b/zh_CN/_sources/guides/kernel/kernel-modules.rst.txt @@ -0,0 +1,223 @@ +.. _kernel-modules: + +Add kernel modules manually +########################### + +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 +*********** + +Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree). + + +.. _kernel-modules-availability-begin: + +Kernel module availability +************************** + +|CL| comes with many upstream kernel modules available for use. Using an +existing module is significantly easier to maintain and retains signature +verification of the |CL| kernel. For more information on |CL| security +practices, see the :ref:`security` page. + +Before continuing, check if the kernel module you're looking for is already +available in |CL| or submit a request to add the module. + + +Check if the module is already available +======================================== + + +You can search for kernel module file names, which end with the :file:`.ko` +file extension, using the :command:`swupd search` command, as shown in the +following example. See :ref:`swupd-guide` for more information. + +.. code-block:: bash + + sudo swupd search ${module_name}.ko + + +Submit a request to add the module +================================== + +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'_ on GitHub. + +.. _kernel-modules-availability-end: + + +Build, install, and load an out-of-tree module +********************************************** + +Follow the steps in this section if you are an individual user or testing, and +you need an out-of-tree kernel module that is not available through |CL|. For +a more scalable and customizable approach, we recommend using the +:ref:`mixer` to provide a custom kernel and updates. + + +Prerequisites +============= + +Before you begin, you must: + +* Disable Secure Boot. +* Disable kernel module integrity checking. +* Have a kernel module package in the form of source code. +* Rebuild the module against new versions of the Linux kernel. + +.. note:: + + Any time the kernel is upgraded on your Clear Linux system, you must + rebuild your out-of-tree modules. + + +Build and install kernel module +=============================== + +#. Determine which kernel variant is running on |CL|. In the example below, + the *native* kernel is in use. + + .. code-block:: bash + + $ uname -r + 5.XX.YY-ZZZZ.native + +#. Install the kernel dev bundle corresponding to the installed kernel. The + kernel dev bundle contains the kernel headers, which are required for + compiling kernel modules. For example: + + * :command:`linux-dev` for developing against the native kernel. + * :command:`linux-lts-dev` for developing against the LTS kernel. + + .. code-block:: bash + + sudo swupd bundle-add linux-dev + +#. Follow instructions from the kernel module source code to compile the + kernel module. For example: + + .. code-block:: bash + + curl -O http://.tar.gz + tar -xvf .tar.gz + cd / + cat README + + + +Load kernel module +================== + +#. Disable Secure Boot in your system's UEFI settings, if you have enabled + it. The loading of new out-of-tree modules modifies the signatures that + Secure Boot relies on for trust. + +#. Disable signature checking for the kernel by modifying the kernel boot + parameters and reboot the system. + + All kernel modules from |CL| have been signed to enforce kernel security. + However, out-of-tree modules break this chain of trust so this mechanism + needs to be disabled. + + .. code-block:: bash + + sudo mkdir -p /etc/kernel/cmdline.d + echo "module.sig_unenforce" | sudo tee /etc/kernel/cmdline.d/allow-unsigned-modules.conf + +#. Update the boot manager and reboot the system to implement the changed + kernel parameters. + + .. code-block:: bash + + sudo clr-boot-manager update + sudo reboot + + .. note:: + + If successful, the :command:`clr-boot-manager update` command does not + return any console output. + +#. After rebooting, manually load out-of-tree modules using the + :command:`insmod` command. + + .. code-block:: bash + + sudo insmod + +Examples +******** + +.. _kernel-modules-autoload-begin: + +Optional: Specify module options and aliases +============================================ + +Use the :command:`modprobe` command to load a module and set options. + +:command:`modprobe` may add or remove more than one module due to module +interdependencies. You can specify which options to use with individual modules, +by using configuration files under the :file:`/etc/modprobe.d` directory. + +.. code-block:: bash + + sudo mkdir /etc/modprobe.d + +All files underneath the :file:`/etc/modprobe.d` directory that end with the +:file:`.conf` extension specify module options to use when loading. You can use +:file:`.conf` files to create convenient aliases for modules or to override the +normal loading behavior altogether for those with special requirements. + +Learn more about :command:`modprobe` on the modprobe.d manual page: + +.. code-block:: bash + + man modprobe.d + +Optional: Configure kernel modules to load at boot +================================================== + +Use the :file:`/etc/modules-load.d` configuration directory to specify kernel +modules to load automatically at boot. + +.. code-block:: bash + + sudo mkdir /etc/modules-load.d + +All files underneath the :file:`/etc/modules-load.d` directory that end with +the :file:`.conf` extension contain a list of module names of aliases (one per +line) to load at boot. + +Learn more about module loading in the modules-load.d manual page: + +.. code-block:: bash + + man modules-load.d + + +.. _kernel-modules-autoload-end: + +Related topic +************* + +* :ref:`kernel-modules-dkms` + +.. _`Distribution Project`: https://github.com/clearlinux/distribution diff --git a/zh_CN/_sources/guides/maintenance/architect-lifecycle.rst.txt b/zh_CN/_sources/guides/maintenance/architect-lifecycle.rst.txt new file mode 100644 index 00000000..ed328711 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/architect-lifecycle.rst.txt @@ -0,0 +1,78 @@ +.. _architect-lifecycle: + +Architect the life-cycle of |CL-ATTR| +##################################### + +This guide describes the basic, recommended infrastructure and workflow for +maintaining a |CL-ATTR| derivative. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +* A repository with software RPM artifacts and a CI/CD system with a |CL| + machine for building `mixes` + +* Experience using :ref:`mixer ` to create a |CL|-based distro + +* Experience using :ref:`swupd ` for maintaining the |CL| + build environment + +* Familiarity with |CL| architecture and reuse of its content in releases + +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. + +.. figure:: figures/architect-lifecycle-1.png + :scale: 100% + :alt: Architect the life-cycle + + Figure 1: Architect the life-cycle + +Content Workflow +**************** + +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 +`Watcher Pipeline`_ checks |CL| and a content provider, such as Koji, to +determine if a new release is necessary. + +Release Workflow +**************** + +The Release Workflow (Figure 1) gathers the content of the RPMs and +ensures it can be consumed by :ref:`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 +derivatives to incorporate |CL| content into their own custom +content. The Watcher Pipeline triggers the Release Pipeline to create +new releases. + +Implementation +************** + +The |CL| Distro Factory manages the Release Workflow. For detailed information +about Distro Factory deployment, refer to the `clr-distro-factory`_ GitHub\* repo. + +.. _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 + +.. _Watcher Pipeline: https://github.com/clearlinux/clr-distro-factory/wiki/Watcher diff --git a/zh_CN/_sources/guides/maintenance/assign-static-ip.rst.txt b/zh_CN/_sources/guides/maintenance/assign-static-ip.rst.txt new file mode 100644 index 00000000..14fc8694 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/assign-static-ip.rst.txt @@ -0,0 +1,184 @@ +.. _assign-static-ip: + +Assign a static IP address +########################## + + +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: + :depth: 1 + +Identify which program is managing the 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 + network connections. + + * 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, verify which +program is managing the network interface. + +#. Check the output of :command:`nmcli device` to see if NetworkManager is + managing the device. + + .. code-block:: bash + + nmcli device status + + If the STATE column for the device shows *connected* or *disconnected*, the + network configuration is being managed by NetworkManager, then use the + instructions for :ref:`using NetworkManager `. + + 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. + + .. code-block:: bash + + networkctl list + + If the SETUP column for the device shows *configured*, the network + configuration is being managed by `systemd-networkd`, then use the + instructions for :ref:`using systemd-networkd `. + + +.. _nm-static-ip: + +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 + + 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, 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. Replace *[CONNECTION_NAME]* 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. + + +#. Restart the NetworkManager server to reload the DNS servers: + + .. code-block:: bash + + sudo systemctl restart NetworkManager + + +#. 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 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. Replace *[INTERFACE_NAME]* + with LINK from the output of the :command:`networkctl list` command that was + run 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 + diff --git a/zh_CN/_sources/guides/maintenance/bulk-provision.rst.txt b/zh_CN/_sources/guides/maintenance/bulk-provision.rst.txt new file mode 100644 index 00000000..a609fa6a --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/bulk-provision.rst.txt @@ -0,0 +1,172 @@ +.. _bulk-provision: + +Bulk provision +############## + +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)`. + +.. 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. + +.. figure:: ./figures/bulk-provision-flow.png + :alt: Bulk provision information flow + + 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 +:ref:`guide on how to perform an iPXE boot` using +:abbr:`NAT (network address translation)` for details. + +Because a bulk provision relies on a reboot, ensure the following +preparations have been made: + +* No existing disks are bootable. +* The network boot option must come immediately after the disk boot option + on any computer performing the installation. + +Configuration +************* + +#. 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 + with the steps it needs to perform an installation. The file outlines + 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: + + .. code-block:: json + + { + "DestinationType":"physical", + "PartitionLayout":[ + {"disk":"sda", "partition":1, "size":"512M", "type":"EFI"}, + {"disk":"sda", "partition":2, "size":"512M", "type":"swap"}, + {"disk":"sda", "partition":3, "size":"rest", "type":"linux"} + ], + "FilesystemTypes":[ + {"disk":"sda", "partition":1, "type":"vfat"}, + {"disk":"sda", "partition":2, "type":"swap"}, + {"disk":"sda", "partition":3, "type":"ext4"} + ], + "PartitionMountPoints":[ + {"disk":"sda", "partition":1, "mount":"/boot"}, + {"disk":"sda", "partition":3, "mount":"/"} + ], + "Version":"latest", + "Bundles":[ + "kernel-native", + "os-core", + "os-core-update", + "os-cloudguest" + ], + "IsterCloudInitSvc":"http://192.168.1.1:60000/icis/" + } + + .. important:: + + 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 + an Ister configuration file: + + .. code-block:: none + + 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 + kernel parameter value. The following example shows an iPXE boot script + with the `isterconf` parameter: + + .. code-block:: none + + #!ipxe + kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug tsc=reliable no_timer_check noreplace-smp rw initrd=initrd isterconf=http://192.168.1.1:60000/icis/static/ister/ister.conf + initrd initrd + boot + + .. note:: + + 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. + +#. Write a cloud-init document to customize the instance of the installation + according to your requirements. The `cloud-init`_ documentation provides a + guide on how to write a cloud-init document. The guide covers the + 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 + 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 :file:`static` directory within the web hosting directory of ICIS. + The following example shows an example assignment: + + .. code-block:: none + + # MAC address,role + 00:01:02:03:04:05,ciao + + If MAC addresses of PXE clients are not listed within the + :file:`config.txt` file, a default role for those MAC address may be + defined as follows: + + .. code-block:: none + + # MAC address,role + default,ciao + +#. 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/ + * \http://192.168.1.1:60000/icis/get_role/ + * \http://192.168.1.1:60000/ipxe/ipxe_boot_script.txt + +#. Power on the PXE client and watch it boot and install |CL|. + +#. Power-cycle the PXE client and watch it customize the |CL| installation. + +**Congratulations!** You have successfully performed a bulk provision of |CL|. + + +.. _ICIS: + https://github.com/clearlinux/ister-cloud-init-svc + +.. _cloud-init: + https://cloudinit.readthedocs.io diff --git a/zh_CN/_sources/guides/maintenance/cpu-performance.rst.txt b/zh_CN/_sources/guides/maintenance/cpu-performance.rst.txt new file mode 100644 index 00000000..299514e7 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/cpu-performance.rst.txt @@ -0,0 +1,208 @@ +.. _cpu-performance: + +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. + +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 *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. + +P-states can typically be limited or disabled in a system's firmware (UEFI/BIOS). + +Turbo boost +----------- + +`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. + +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`_, :command:`intel_pstate`, for modern Intel +processors from the Sandy Bridge generation or newer. Other processors may +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: + +.. 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 +:command:`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 effect. + + +.. _`Intel P-state driver`: https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt + +.. _`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 + +.. _`Intel® Turbo Boost Technology`: https://www.intel.com/content/www/us/en/architecture-and-technology/turbo-boost/turbo-boost-technology.html diff --git a/zh_CN/_sources/guides/maintenance/developer-workstation.rst.txt b/zh_CN/_sources/guides/maintenance/developer-workstation.rst.txt new file mode 100644 index 00000000..2e487536 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/developer-workstation.rst.txt @@ -0,0 +1,112 @@ +.. _developer-workstation: + +Developer Workstation +##################### + +This guide helps you find the minimum set of bundles needed to start your +|CL-ATTR| development project. + +Before continuing, review the :ref:`swupd ` 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 +***************** + +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* `. 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 +Table 1 as a starting point. + +.. list-table:: **Table 1. Developer Profiles** + :widths: 20, 20, 20, 20 + :header-rows: 1 + + * - |CL| Bundle + - *Internet of Things (IoT)* + - *System Administrator* + - *Client/Cloud/Web Developer* + + * - :command:`editors` + - ✓ + - ✓ + - ✓ + + * - :command:`network-basic` + - ✓ + - ✓ + - ✓ + + * - :command:`openssh-server` + - ✓ + - ✓ + - ✓ + + * - :command:`webserver-basic` + - + - ✓ + - ✓ + + * - :command:`application-server` + - + - ✓ + - ✓ + + * - :command:`database-basic` + - + - ✓ + - ✓ + + * - :command:`desktop-autostart` + - ✓ + - ✓ + - ✓ + + * - :command:`dev-utils` + - + - + - ✓ + +swupd search +************ + +We recommend learning about :ref:`swupd `, to learn the +commands to search for and add bundles relevant to your project. + +The guide provides an :ref:`example ` +that shows you how to: + +* Use swupd to search for bundles +* Use swupd to add bundles + +Core Concepts +************* + +We recommend that you understand these core concepts in |CL| *before* +developing your project. + +* :ref:`Software update ` +* :ref:`Mixer ` +* :ref:`Autospec ` + +Other resources for developers +----------------------------------- + +* `Developer Tooling Framework`_ for |CL| +* `Bundle Definition Files`_ + +.. _Bundle Definition Files: https://github.com/clearlinux/clr-bundles + +.. _Developer Tooling Framework: https://github.com/clearlinux/common diff --git a/zh_CN/_sources/guides/maintenance/download-verify-decompress.rst.txt b/zh_CN/_sources/guides/maintenance/download-verify-decompress.rst.txt new file mode 100644 index 00000000..1dc74083 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/download-verify-decompress.rst.txt @@ -0,0 +1,176 @@ +.. _download-verify-decompress: + +Download, verify, and decompress a |CL-ATTR| image +################################################## + +This guide describes the available types of |CL| images, where to +download them, how to verify their integrity, and how to decompress them. +Follow the steps for your OS. + +.. contents:: + :local: + :depth: 1 + + +.. include:: ../../reference/image-types.rst + :start-after: image-types-content: + :end-before: incl-image-filename-end: + +.. _download-verify-decompress-linux: + +Linux OS steps +************** + +.. _verify-linux: + +Verify the integrity of the |CL| image +====================================== + +Before you use a downloaded |CL| image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released |CL| image has a corresponding SHA512 +checksum file designated with the suffix `-SHA512SUMS`. + +#. Download the corresponding SHA512 checksum file of your |CL| `image`_. +#. Open a Terminal. +#. Go to the directory with the downloaded image and checksum files. +#. Verify the integrity of the image and compare it to its original checksum + with the command: + + .. code-block:: bash + + sha512sum -c ./clear-[version number]-[image type].[compression type]-SHA512SUMS + +If the checksum of the downloaded image is different than the original +checksum, a warning is displayed with a message indicating the computed +checksum does **not** match. Otherwise, the name of the image is printed on +the screen followed by `OK`. + +For a more in-depth discussion of image verification including checking the +certificate see :ref:`image-content-validation`. + +.. incl-decompress-image: + +Decompress the |CL| image +========================= + +Released |CL| images are compressed with either GNU zip (*.gz*) or XZ +(*.xz*). The compression type depends on the target platform or +environment. To decompress the image, follow these steps: + +#. Open a Terminal. +#. Go to the directory with the downloaded image. + + To decompress an XZ image, enter: + + .. code-block:: bash + + unxz clear-[version number]-[image type].xz + + To decompress a GZ image, enter: + + .. code-block:: bash + + gunzip clear-[version number]-[image type].gz + +.. incl-decompress-image-end: + +.. _download-verify-decompress-mac: + +macOS\* steps +************* + +.. _verify-mac: + +Verify the integrity of the |CL| image +====================================== + +Before you use a downloaded |CL| image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released |CL| image has a corresponding SHA512 +checksum file designated with the suffix `-SHA512SUMS`. + +#. Download the corresponding SHA512 checksum file of your |CL| `image`_. +#. Open a Terminal. +#. Go to the directory with the downloaded image and checksum files. +#. Verify the integrity of the image and compare it to its original checksum + with the command: + + .. code-block:: bash + + shasum -a512 clear-[version number]-[image type].[compression type] | diff clear-[version number]-[image type].[compression type]-SHA512SUMS - + +If the checksum of the downloaded image is different than the original +checksum, the differences will be displayed. Otherwise, an empty output indicates +a match and your downloaded image is good. + +Decompress the |CL| image +========================= + +We compress all released |CL| images by default with either GNU zip +(`.gz`) or xz (`.xz`). The compression type we use depends on the target +platform or environment. To decompress the image, follow these steps: + +#. Open a Terminal. +#. Go to the directory with the downloaded image. +#. Use the :command:`gunzip` command to decompress either compression type. For example: + + .. code-block:: bash + + gunzip clear-[version number]-[image type].xz + gunzip clear-[version number]-[image type].gz + +.. _download-verify-decompress-windows: + +Windows\* OS steps +****************** + +.. _verify-windows: + +Verify the integrity of the |CL| image +====================================== + +Before you use a downloaded |CL| image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released |CL| image has a corresponding SHA512 +checksum file designated with the suffix `-SHA512SUMS`. + +#. Download the corresponding SHA512 checksum file of your |CL| `image`_. +#. Start Command Prompt. +#. Go to the directory with the downloaded image and checksum files. +#. Get the SHA512 checksum of the image with the command: + + .. code-block:: bash + + CertUtil -hashfile ./clear-[version number]-[image type].[compression type] sha512 + +#. Manually compare the output with the original checksum value shown in + the downloaded checksum file and make sure they match. + +Decompress the |CL| image +========================= + +Released |CL| images are compressed with either GNU zip (*.gz*) or XZ +(*.xz*). The compression type depends on the target platform or +environment. To decompress the image, follow these steps: + +#. Download and install `7-Zip`_. +#. Go to the directory with the downloaded image and right-click it. +#. From the pop-up menu, select :guilabel:`7-Zip` and select + :guilabel:`Extract Here` as shown in Figure 1. + + .. figure:: figures/download-verify-decompress-windows-fig-1.png + :scale: 80 % + :alt: 7-Zip extract file + + Figure 1: Windows 7-Zip extract file. + +.. _7-Zip: http://www.7-zip.org/ + +Image types +*********** + +.. include:: ../../reference/image-types.rst + :start-after: incl-image-filename-end: + +.. _image: https://clearlinux.org/downloads \ No newline at end of file diff --git a/zh_CN/_sources/guides/maintenance/enable-user-space.rst.txt b/zh_CN/_sources/guides/maintenance/enable-user-space.rst.txt new file mode 100644 index 00000000..e51fa59e --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/enable-user-space.rst.txt @@ -0,0 +1,103 @@ +.. _enable-user-space: + +Create and enable a new user space +################################## + +This guide provides steps to complete the following basic setup tasks for +a newly installed |CL-ATTR| system: + +.. contents:: + :local: + :depth: 1 + +Create a new user +***************** + +To create a new user and set a password for that user, enter the following +commands as a root user: + +.. code-block:: bash + + useradd + passwd + +Replace the with the name of the user account you want to create +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 +************************************* + +Before logging off as root and logging into your new user account, +enable the :command:`sudo` command for your new . + +To be able to execute all applications with root privileges, add the + to the `wheel group`_. + +#. Add to the wheel group: + + .. code-block:: bash + + usermod -G wheel -a + +#. Log out of root and into the new . + + To log off as root, enter :command:`exit`. + +#. Enter the new and the password created earlier. + + You will now be in the home directory of . + +Install and update the OS software to its current version +********************************************************* + +The |CL| software utility :ref:`swupd ` allows you to perform +system updates while reaping the benefits of upstream development. + +To update your newly installed OS, run: + +.. code-block:: bash + + sudo swupd update + +Add a bundle +************ + +Software applications are installed as bundles using the command +:command:`swupd bundle-add`. Experienced Linux users might compare swupd +to running :command:`apt-get` or :command:`yum install` for package +management. However |CL| manages packages at the level of bundles, which +are integrated stacks of packages. + +For example, the :command:`sysadmin-basic` bundle installs the majority of +applications useful to a system administrator. To install it, enter: + +.. code-block:: bash + + swupd bundle-add sysadmin-basic + +View a full list of bundles and packages installed with the `sysadmin-basic`_ +bundle. You can also view all `bundles`_ for |CL|, active or deprecated. + +Expand your knowledge of :command:`swupd` and check out our developer resources: + +* :ref:`swupd-guide` +* :ref:`developer-workstation` + +Next steps +********** + +Check out our guides and tutorials. + +* :ref:`guides` +* :ref:`tutorials` + +.. _`sysadmin-basic`: + https://github.com/clearlinux/clr-bundles/blob/master/bundles/sysadmin-basic + +.. _`bundles`: + https://github.com/clearlinux/clr-bundles/tree/master/bundles + +.. _`wheel group`: + https://en.wikipedia.org/wiki/Wheel_(Unix_term) diff --git a/zh_CN/_sources/guides/maintenance/fix-broken-install.rst.txt b/zh_CN/_sources/guides/maintenance/fix-broken-install.rst.txt new file mode 100644 index 00000000..33765b89 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/fix-broken-install.rst.txt @@ -0,0 +1,91 @@ +.. _fix-broken-install: + +Fix a broken installation +######################### + +This guide explains how to fix a broken installation of |CL-ATTR| using a live +desktop image on a USB. + +.. 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` 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 +************* + +* 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 +********************************************** + +#. Boot the |CL| live desktop image. + +.. include:: ../../get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst + :start-after: install-on-target-start: + :end-before: install-on-target-end: + +Mount root partition, verify, and fix +************************************* + +#. Open a Terminal window. + +#. Ensure the system is connected to the network. + +#. Mount the system’s root partition. + + #. To find the root partition, run: + + .. code-block:: bash + + lsblk + + We'll use :file:`/dev/sda3/` as the root partition example. + + #. Next, mount the partition to the :file:`/mnt` folder. + + .. code-block:: bash + + sudo mount /dev/sda3 /mnt + +#. Verify that you mounted the correct root partition by checking for some + files commonly found on |CL| systems. + + .. code-block:: bash + + cat /mnt/usr/lib/os-release + ls /mnt/usr/share/clear/bundles + +#. Next, run swupd to fix any issues on the target system. + + .. code-block:: bash + + sudo swupd repair --picky --path=/mnt + + :ref:`Learn more about how swupd works `. + +#. After the process is complete, unmount the root partition: + + .. code-block:: bash + + sudo umount /mnt + +#. Reboot the system, remove the live desktop USB drive, + and boot into the repaired system. + + .. code-block:: bash + + sudo reboot + +**Congratulations!** You successfully restored |CL|. diff --git a/zh_CN/_sources/guides/maintenance/hostname.rst.txt b/zh_CN/_sources/guides/maintenance/hostname.rst.txt new file mode 100644 index 00000000..ce0c225c --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/hostname.rst.txt @@ -0,0 +1,81 @@ +.. _hostname: + +Modify hostname +############### + +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 +but is not human-friendly. Administrators and users will often want to rename +their machines with a name that is easier to remember, type, and search +for. Renaming a machine also makes it easier to identify, by including +meaningful data in the name. The following examples show human-friendly machine +names: + +* *regression-test* +* *sally-test-box1* +* *az-bldg2-lab* + +Set your hostname +***************** + +|CL| uses the :command:`hostnamectl` command to display and modify the machine +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. +Make sure to reboot after setting a new hostname. + +.. code-block:: bash + + sudo hostnamectl set-hostname telemetry-test-2-h15 + sudo reboot + +.. note:: + + There are three types of hostname: *static*, *transient*, and *pretty*. + The most common is the static hostname. Static hostnames must be between + two and 63 characters long, must start and end with a letter or number, + and may contain letters (case-insensitive), numbers, dashes, or dots. + + If the static hostname exists, it is used to generate the transient hostname, + which is maintained by the kernel. The transient hostname can be changed + by DHCP or mDNS at runtime. + + The pretty hostname is a free-form UTF8 name used for presentation to the user. + +View your hostname +****************** + +View your current hostname using the following command: + +.. code-block:: bash + + hostnamectl + +You should see output similar to: + +.. code-block:: console + + Static hostname : telemetry-test-2-h15 + Pretty hostname : telemetry-test-2-h15 + Icon name : computer-desktop + Chassis : desktop + Machine ID : 4d0d60207a904ebbab96680a51ac1339 + Boot ID : 98d3514e5a984e8cbbdf46a2f0d6b397 + Operating System : Clear Linux OS + Kernel : Linux 4.18.8-632.native + Architecture : x86-64 + + +**Congratulations!** You successfully modified the hostname of your |CL| system. diff --git a/zh_CN/_sources/guides/maintenance/increase-virtual-disk-size.rst.txt b/zh_CN/_sources/guides/maintenance/increase-virtual-disk-size.rst.txt new file mode 100644 index 00000000..e633f506 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/increase-virtual-disk-size.rst.txt @@ -0,0 +1,174 @@ +.. _increase-virtual-disk-size: + +Increase virtual disk size of an image +###################################### + +This guide describes how to increase the disk size of your prebuilt |CL-ATTR| +image if you need more capacity. + +.. 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 +: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: + +.. code-block:: bash + + sudo lsblk + +An example output of the :command:`lsblk` command: + +.. code-block:: console + + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT + sda 8:0 0 8.5G 0 disk + ├─sda1 8:1 0 512M 0 part + ├─sda2 8:2 0 32M 0 part [SWAP] + └─sda3 8:3 0 8G 0 part / + +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. +For example, to find the size of the Hyper-V\* image version number 20450, +follow these steps: + +#. Go to the `releases`_ repository. +#. Drill down into the `20450 > clear > config > image` directory. +#. Open the :file:`hyperv-config.json` file. +#. Locate the `PartitionLayout` key. + + The example shows 512 MB for the EFI partition, 32 MB for the swap + partition, and 8 GB for the root partition. + + + .. code-block:: console + + "PartitionLayout" : [ { "disk" : "hyperv.img", + "partition" : 1, + "size" : "512M", + "type" : "EFI" }, + { "disk" : "hyperv.img", + "partition" : 2, + "size" : "32M", + "type" : "swap" }, + { "disk" : "hyperv.img", + "partition" : 3, + "size" : "8G", + "type" : "linux" } ], + +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 +=========================================== + +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 + the virtual disk size of your |CL| VM. +#. Power up the VM. + + +Resize the partition of the virtual disk +======================================== + +#. Log in to an account with root privileges. +#. Open a terminal emulator. +#. Add the :command:`storage-utils` bundle to install the + :command:`parted` and :command:`resize2fs` tools. + + .. code-block:: bash + + sudo swupd bundle-add storage-utils + +#. Launch the `parted` tool. + + .. code-block:: bash + + sudo parted + +#. In the `parted` tool, perform these steps: + + #. Press :command:`p` to print the partitions table. + #. If the warning message below is displayed, enter :command:`Fix`. + + .. code-block:: console + + 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? + + Fix/Ignore? + + #. 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. + + .. 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 :guilabel:`Disk` label. + + An example of this can be seen in Figure 1. + + #. Enter :command:`q` to exit `parted` when you are finished resizing the + image. + + Figure 1 depicts the described steps to resize the partition of the virtual disk from 8.5GB to 20GB. + + .. figure:: figures/increase-virtual-disk-size-1.png + :scale: 100 % + :alt: Increase root partition size + + Figure 1: Increase root partition size. + +Resize the filesystem +===================== + +#. Enter :command:`sudo resize2fs -p /dev/[modified partition name]` where + *[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:: figures/increase-virtual-disk-size-2.png + :scale: 100 % + :alt: Increase root filesystem with resize2fs + + Figure 2: Increase root filesystem size after partition has been expanded. + +**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/ \ No newline at end of file diff --git a/zh_CN/_sources/guides/maintenance/query-upstream.rst.txt b/zh_CN/_sources/guides/maintenance/query-upstream.rst.txt new file mode 100644 index 00000000..65bd614f --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/query-upstream.rst.txt @@ -0,0 +1,226 @@ +.. _query-upstream: + +Query package info from upstream repository +########################################### + +This guide describes how to query package information from the |CL| upstream +repositories. This guide is intended for developers and advanced users. + +.. contents:: + :local: + :depth: 1 + :backlinks: top + +Overview +******** + +In |CL-ATTR|, the :ref:`swupd` tool manages software +dependencies and installs bundles instead of packages. Although a bundle is +a collection of one or more packages, |CL| does not work with packages on +the client side. However, on the upstream/factory side, |CL| does work with +packages using a process called *mixing*. + +Currently, :command:`swupd` does not report which packages are installed, +provide package version information, or return other package details. This +guide describes a method for retrieving package information from the |CL| +upstream repositories using :abbr:`DNF(Dandified Yum)` commands. + +Prerequisites +************* + +This guide 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 `. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Configure DNF +************* + +#. Install the DNF bundle with the command: + + .. code-block:: bash + + sudo swupd bundle-add dnf + +#. Create a :file:`dnf.conf` file with the commands: + + .. code-block:: bash + + sudo mkdir -p /etc/dnf + sudo curl -L https://github.com/clearlinux/common/raw/master/conf/dnf.conf --output /etc/dnf/dnf.conf + + +#. Edit the :file:`/etc/dnf/dnf.conf` file and set the **baseurl** variable + for binary and source RPMs as shown in lines 3 and 9 in the following + example. + + .. code-block:: bash + :linenos: + :emphasize-lines: 3,9 + + [clear] + name=Clear + baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/x86_64/os/ + enabled=1 + gpgcheck=0 + [clear-source] + name=Clear sources + failovermethod=priority + baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/source/SRPMS/ + enabled=1 + gpgcheck=0 + +#. Initialize the RPM database with the command: + + .. code-block:: bash + + sudo rpm --initdb + + +DNF command usage examples +************************** + +.. contents:: :local: + :depth: 1 + :backlinks: top + +List all binary and source RPMs in the current release +====================================================== + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current + +Sample output: + +.. code-block:: console + + Clear 5.1 MB/s | 13 MB 00:02 + Clear sources 1.8 MB/s | 1.7 MB 00:00 + AVB-AudioModules-0:4.1.0-1.src + AVB-AudioModules-0:4.1.0-1.x86_64 + AVB-AudioModules-data-0:4.1.0-1.x86_64 + AVB-AudioModules-dev-0:4.1.0-1.x86_64 + AVB-AudioModules-lib-0:4.1.0-1.x86_64 + AVB-AudioModules-license-0:4.1.0-1.x86_64 + AVBStreamHandler-0:1.1.0-21.src + AVBStreamHandler-0:1.1.0-21.x86_64 + AVBStreamHandler-abi-0:1.1.0-21.x86_64 + AVBStreamHandler-bin-0:1.1.0-21.x86_64 + AVBStreamHandler-data-0:1.1.0-21.x86_64 + AVBStreamHandler-dev-0:1.1.0-21.x86_64 + AVBStreamHandler-lib-0:1.1.0-21.x86_64 + AVBStreamHandler-license-0:1.1.0-21.x86_64 + ... + + +Show version information for a package in current release +========================================================= + +This example queries version information for the zstd package. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current zstd + +Sample output: + +.. code-block:: console + + Last metadata expiration check: 0:02:30 ago on Tue 16 Jul 2019 03:03:34 PM PDT. + zstd-0:1.4.0-46.src + zstd-0:1.4.0-46.x86_64 + + +Show version information for a package in a specific release +============================================================ + +This example queries version information for the zstd package in release +21000. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=21000 zstd + +Sample output: + +.. code-block:: console + + Clear + 2.7 MB/s | 3.9 MB 00:01 + Clear sources + 628 kB/s | 559 kB 00:00 + zstd-0:1.3.3-20.src + zstd-0:1.3.3-20.x86_64 + +Show only version and release information for a package in a specific release +============================================================================= + +This example queries version and release information for the zstd package in +release 15000. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=15000 --qf="%{VERSION}\n%{RELEASE}" zstd + +Sample output: + +.. code-block:: console + + Clear + 3.4 MB/s | 3.9 MB 00:01 + Clear sources + 345 kB/s | 528 kB 00:01 + 1.1.4 + 5 + +Show the binary package for a specified binary file +=================================================== + +This example returns the binary package that contains the +:file:`/usr/bin/zip` binary file. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current --whatprovides /usr/bin/zip + +Sample output: + +.. code-block:: console + + Last metadata expiration check: 0:04:47 ago on Tue 16 Jul 2019 03:03:34 PM PDT. + zip-bin-0:3.0-23.x86_64 + +Show the source package for a specified binary file +=================================================== + +This example returns the source package that contains the +:file:`/usr/bin/zip` binary file. + +Command: + +.. code-block:: bash + + dnf repoquery --releasever=current --whatprovides /usr/bin/zip --srpm + +Sample output: + +.. code-block:: console + + Last metadata expiration check: 0:05:50 ago on Tue 16 Jul 2019 03:03:34 PM PDT. + zip-0:3.0-23.src diff --git a/zh_CN/_sources/guides/maintenance/resource-limits.rst.txt b/zh_CN/_sources/guides/maintenance/resource-limits.rst.txt new file mode 100644 index 00000000..c753992f --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/resource-limits.rst.txt @@ -0,0 +1,123 @@ +.. _resource-limits: + +Resource limits +############### + +Linux systems employ limiting or quota mechanisms to provide quality of +service for system resources and contain rogue processes. + +These limits are layered at the system-level and user-level. If these limits +need to be modified, it is useful to understand the different limit +configurations. + +.. contents:: :local: + :depth: 2 + + +System-wide limits +================== + +Some global resource limits are implemented in the Linux kernel and are +controllable with kernel parameters. + +For example, a global limit for the maximum number of open files is set with +the *fs.file-max* parameter. This limit applies to all processes and users an +cannot be exceeded other limit values. + +Checking limit +************** + +You can check a current value with :command:`sysctl -n `. For +example: + +.. code:: bash + + sysctl -n fs.file-max + + +This *fs.file-max* value is set intentionally high on |CL| systems by +default. You can check the maximum value supported by the system with: + +.. code:: + + cat /proc/sys/fs/file-max + + +Overriding limit +**************** + +You can override a value with :command:`sysctl -w `. For +example: + +.. code:: bash + + sudo sysctl -w fs.file-max= + +If needed permanently, the value can be set by creating a +:file:`/etc/sysctl.d/*.conf` file (see :command:`man sysctl.d` for details). +For example: + +.. code:: bash + + sudo mkdir -p /etc/sysctl.d/ + + sudo tee /etc/sysctl.d/fs-file-max.conf > /dev/null <<'EOF' + fs.file-max= + EOF + + + + + +Per-user limits +=============== + +For processes not managed by systemd, resource limits can be set for PAM +logins on a per-user basis with upper and lower limits in the +:file:`/etc/security/limits.conf` file. + +You can set temporary values and check the current values with the +:command:`ulimit` command. For example, to change the soft limit of maximum +number of open file descriptors for the current user: + +.. code:: + + ulimit -S -n + +See :command:`man limits.conf` for details. + + +Service limits +============== + +Resource limits for services started with systemd units do not follow normal +user limits because the process is started in a seperate `Linux control group +(cgroup) `_ Linux +cgroups associate related process groups and provide resource accounting. + +Resource limits for individual systemd services can be controlled inside their +unit files or its configuration drop-in directory with the resource Limit +directives. See `process properties section of the systemd.exec man page +`_. + +Resource limits for all systemd services can be controlled with a file in the +:file:`/etc/systemd/system.conf.d/` directory. For example, to have no +restriction on the number of open files: + +.. code:: + + sudo mkdir -p /etc/systemd/system.conf.d/ + + sudo tee /etc/systemd/system.conf.d/50-nfiles.conf > /dev/null <<'EOF' + [Manager] + DefaultLimitNOFILE=infinity + EOF + + + + + + + + + diff --git a/zh_CN/_sources/guides/maintenance/restart.rst.txt b/zh_CN/_sources/guides/maintenance/restart.rst.txt new file mode 100644 index 00000000..ddd4a17c --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/restart.rst.txt @@ -0,0 +1,164 @@ +.. _restart: + +Restart system services after an OS update +########################################## + +This guide describes how to use the :command:`clr-service-restart` tool. + +.. contents:: + :local: + :depth: 1 + +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 +determine which services to restart. + + +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 :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: :command:`allow`, +:command:`disallow`, and :command:`default`. + +allow +===== + +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 +OS software update. + +.. code-block:: bash + + sudo clr-service-restart allow tallow.service + +disallow +======== + +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 +record. The example below tells :command:`clr-service-restart` not to +restart the *rngd* daemon after an OS software update. + +.. code-block:: bash + + sudo clr-service-restart disallow rngd + +default +======= + +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|. + +.. code-block:: bash + + sudo clr-service-restart default rngd + +Monitor options +*************** + +:command:`clr-service-restart` works in the background and is invoked with +:command:`swupd` automatically. Review the journal output to verify that +services are restarted after an OS software update. + +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. + + +-n option +========= + +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. +* What unit it is. +* Why it needs a restart. +* Which command is required to restart the unit. + +-a option +========= + +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 +:command:`-a` and :command:`-n` options, which displays a complete list of system +services that require a restart. + +Command: + +.. code-block:: bash + + sudo clr-service-restart -a -n + +Sample output: + +.. code-block:: console + + upower.service: needs a restart (a library dependency was updated) + /usr/bin/systemctl --no-ask-password try-restart upower.service + NetworkManager.service: needs a restart (a library dependency was + updated) + /usr/bin/systemctl --no-ask-password try-restart NetworkManager.service + .... + +Telemetry +********* + +:command:`clr-service-restart` may cause problems such as a short service +outage when a daemon is being restarted, or if a daemon fails to properly +restart. To minimize issues, :command:`clr-service-restart` creates a +telemetry record and sends it to the optional |CL| telemetry service if both +conditions below are met: + +* If a unit fails to automatically restart after an OS update. +* If that unit resides in the system location :file:`/usr/lib/systemd/system`. + +If you do not install the |CL| telemetrics bundle, the data is discarded. If +you install the telemetrics bundle and you opt to send telemetry, then the +system unit name is sent to the |CL| telemetry service. We evaluate the +report and update the whitelist to remove services that are not safe to +restart. + + +Conclusion +********** + +The |CL| team enjoys coming up with simple and efficient solutions to make +your work easier. We made a GitHub\* project of :command:`clr-service-restart` +and we invite you to look at the code, share your thoughts, and work with us +on improving the project. You can find the project at: + +https://github.com/clearlinux/clr-service-restart diff --git a/zh_CN/_sources/guides/maintenance/time.rst.txt b/zh_CN/_sources/guides/maintenance/time.rst.txt new file mode 100644 index 00000000..caa0be16 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/time.rst.txt @@ -0,0 +1,59 @@ +.. _time: + +Set the time +############ + +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. + +|CL| uses the `systemd-timesyncd.service` daemon to synchronize time. + + +#. Install the :command:`sysadmin-basic` bundle. + + .. code-block:: bash + + sudo swupd bundle-add sysadmin-basic + +#. Set your time zone. This example uses Los Angeles. + + .. code-block:: bash + + timedatectl set-timezone America/Los_Angeles + + .. note:: + + To see a list of time zones, use the command: + :command:`timedatectl list-timezones | grep ` + +#. Create a :file:`/etc/systemd/` directory. + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/ + +#. Create a new file named :file:`/etc/systemd/timesyncd.conf` and enter the + following text. + + .. code-block:: console + + [Time] + NTP= + FallbackNTP= + +#. Enable the `systemd-timesyncd` service. + + .. code-block:: bash + + timedatectl set-ntp true + +.. note:: + + To check the service status, use the :command:`timedatectl status` command. + + To restart the `timesyncd` daemon, enter :command:`systemctl restart + systemd-timesyncd` into your terminal emulator. + +**Congratulations!** You successfully set up the time in your |CL| system. + + diff --git a/zh_CN/_sources/guides/maintenance/validate-signatures.rst.txt b/zh_CN/_sources/guides/maintenance/validate-signatures.rst.txt new file mode 100644 index 00000000..f9d2fd21 --- /dev/null +++ b/zh_CN/_sources/guides/maintenance/validate-signatures.rst.txt @@ -0,0 +1,139 @@ +.. _validate-signatures: + +Validate signatures +################### + + +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 +that :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. + + +.. _image-content-validation: + +Image content validation +************************ + +In the steps below, we used the installer image of the latest release +of |CL|. You may use any image of |CL| you choose. + +#. Download the image, the signature of the SHA512 sum of the image, and the + |CL| certificate used for signing the SHA512 sum. + + .. code-block:: console + + # Image + curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz + # Signature of SHA512 sum of image + curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig + # Certificate + curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/ClearLinuxRoot.pem + +#. Generate the SHA256 sum of the |CL| certificate. + + .. code-block:: console + + sha256sum ClearLinuxRoot.pem + +#. Ensure the generated SHA256 sum of the |CL| certificate matches the + following SHA256 sum to verify the integrity of the certificate. + + .. code-block:: console + + 4b0ca67300727477913c331ff124928a98bcf2fb12c011a855f17cd73137a890 ClearLinuxRoot.pem + +#. Generate the SHA512 sum of the image and save it to a file. + + .. code-block:: console + + sha512sum clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz > sha512sum.out + +#. Ensure the signature of the SHA512 sum of the image was created using the + |CL| certificate. This confirms that the image is trusted and has not + been modified. + + .. code-block:: console + + openssl smime -verify -purpose any -in clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig -inform der -content sha512sum.out -CAfile ClearLinuxRoot.pem + + .. note:: + + The :command:`-purpose any` option is required when using OpenSSL 1.1. + If you use 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. + +Update content validation +************************* + +**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 :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. + + .. code-block:: console + + # MoM + curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM + # Signature of MoM + curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM.sig + # Swupd certificate + curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/Swupd_Root.pem + +#. Generate the SHA256 sum of the swupd certificate. + + .. code-block:: console + + sha256sum Swupd_Root.pem + +#. Confirm that the generated SHA256 sum of the swupd certificate matches the + SHA256 sum shown below to verify the integrity of the certificate. + + .. code-block:: console + + ff06fc76ec5148040acb4fcb2bc8105cc72f1963b55de0daf3a4ed664c6fe72c Swupd_Root.pem + +#. Confirm that the signature of the MoM was created using the Swupd + certificate. This signature validates the update content is trustworthy and + has not been modified. + + .. code-block:: console + + openssl smime -verify -purpose any -in Manifest.MoM.sig -inform der -content Manifest.MoM -CAfile Swupd_Root.pem + + .. note:: + + The :command:`-purpose any` option is required when using OpenSSL 1.1. + If you use 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:: + + The SHA512 sum of the MoM is not generated and then signed. Instead, the + 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. + Because the MoM contains a list of hashes for bundle manifests, if the MoM + cannot be trusted, then the bundle content cannot be trusted. diff --git a/zh_CN/_sources/guides/network/custom-clear-container.rst.txt b/zh_CN/_sources/guides/network/custom-clear-container.rst.txt new file mode 100644 index 00000000..d3657c10 --- /dev/null +++ b/zh_CN/_sources/guides/network/custom-clear-container.rst.txt @@ -0,0 +1,326 @@ +.. _custom-clear-container: + +Build a custom |CL-ATTR| based Docker container image +####################################################### + +This guide contains the steps to build a custom container image. The official +base |CL-ATTR| container image is published on Docker\* Hub and is updated on a +regular basis. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* + +* You must perform these steps on a |CL| system because the + :abbr:`swupd (software updater)` is used to manage bundles in the + container. +* You must install the :file:`containers-basic` bundle on the |CL| system + or Docker will not work. +* You have a basic understanding of Docker. + +Build the base container image +****************************** + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Verify Docker is installed and running. + + .. code-block:: bash + + docker info + + If Docker is installed and running, the output is similar to + this example: + + .. code-block:: console + + Containers: 0 + Running: 0 + Paused: 0 + Stopped: 0 + Images: 4 + Server Version: 17.05.0-ce + Storage Driver: overlay + Backing Filesystem: extfs + Supports d_type: true + Logging Driver: json-file + Cgroup Driver: cgroupfs + Plugins: + Volume: local + Network: bridge host macvlan null overlay + Swarm: inactive + Runtimes: runc + Default Runtime: runc + Init Binary: docker-init + containerd version: (expected: 9048e5e50717ea4497b757314bad98ea3763c145) + runc version: N/A (expected: 9c2d8d184e5da67c95d601382adf14862e4f2228) + init version: N/A (expected: ) + Kernel Version: 4.12.7-377.native + Operating System: Clear Linux OS for Intel Architecture + OSType: linux + Architecture: x86_64 + CPUs: 4 + Total Memory: 15.62GiB + Name: clr-os + ID: XQHJ:DYEM:3Q4D:DKLM:JOA4:RUSF:GAFR:DLPA:HOJP:W5FF:ULEE:7HZ3 + Docker Root Dir: /var/lib/docker + Debug Mode (client): false + Debug Mode (server): false + Registry: https://index.docker.io/v1/ + Experimental: false + Insecure Registries: + 127.0.0.0/8 + Live Restore Enabled: false + + If Docker is not installed, enter the commands: + + .. code-block:: bash + + swupd bundle-add containers-basic + systemctl start docker + +#. Use :command:`os-install` to download and install the bundles. + + .. code-block:: bash + + swupd os-install --url https://cdn.download.clearlinux.org/update --statedir "$PWD"/swupd-state --no-boot-update --version 29790 -B os-core-update,editors,network-basic base + + + The swupd example uses the following flags: + + * :command:`os-install` tells swupd to download and install. + * :command:`-V / --version` specifies the version of the |CL| bundles. + * :command:`--url` specifies the URL of the bundles repository. + * :command:`--statedir` specifies the state directory where downloaded bundles + and any state information are stored. + * :command:`--no-boot-update` tells swupd to skip updating boot files because + boot files are not required for a container. + + For more information on swupd flags, enter the :command:`swupd os-install -h` + command. + + Example output: + + .. code-block:: console + + swupd-client software verify 3.12.2 + Copyright (C) 2012-2017 Intel Corporation + + Verifying version 17870 + Attempting to download version string to memory + Downloading packs... + + Extracting python-basic pack for version 17820 + ...14% + Extracting perl-basic pack for version 17790 + ...28% + Extracting openssh-server pack for version 17660 + ...42% + Extracting editors pack for version 17850 + ...57% + Extracting network-basic pack for version 17650 + ...71% + Extracting os-core pack for version 17870 + ...85% + Extracting os-core-update pack for version 17870 + ...100% + Adding any missing files + ...88% + Inspected 33982 files + 33974 files were missing + 33974 of 33974 missing files were replaced + 0 of 33974 missing files were not replaced + Calling post-update helper scripts. + WARNING: boot files update skipped due to --no-boot-update argument + Fix successful + + .. note:: + + The WARNING message is expected and can be ignored. + +#. Create a tarball and compress it. + + .. code-block:: bash + + tar -C base -cf base.tar . + xz -v -T0 base.tar + +#. Create the Dockerfile to build the image. + + .. code-block:: bash + + cat > Dockerfile << EOF + FROM scratch + MAINTAINER First Last + ADD base.tar.xz / + CMD ["/bin/bash"] + EOF + +#. Build the |CL| container image. + + .. code-block:: bash + + docker build -t my-custom-clear-linux-container . + + Example output: + + .. code-block:: console + + Sending build context to Docker daemon 806.5MB + Step 1/4 : FROM scratch + ---> + Step 2/4 : MAINTAINER First Last + ---> Running in 7238f35abcd0 + ---> ec5064287c60 + Removing intermediate container 7238f35abcd0 + Step 3/4 : ADD base.tar.xz / + ---> 2723b7d20716 + Removing intermediate container 16e3ed0df8da + Step 4/4 : CMD /bin/bash + ---> Running in efa893350647 + ---> 5414c3a12993 + Removing intermediate container efa893350647 + Successfully built 5414c3a12993 + Successfully tagged my-custom-clear-linux-container:latest + +#. List the newly created |CL| container image. + + .. code-block:: bash + + docker images + + Example output: + + .. code-block:: console + + REPOSITORY TAG IMAGE ID CREATED SIZE + my-custom-clear-linux-container latest 5414c3a12993 About a minute ago 616MB + +#. Launch the built |CL| container. + + .. code-block:: bash + + docker run -it my-custom-clear-linux-container + +Manage bundles in a container +***************************** + +You can add and remove bundles from a |CL| container using the +:command:`RUN swupd` command in the Dockerfile. + +Add a bundle +============ + +This example Dockerfile adds the :file:`pxe-server` bundle to an existing |CL| +Docker image: + +.. code-block:: bash + + cat > Dockerfile << EOF + FROM my-customer-clear-linux-container + MAINTAINER First Last + RUN swupd bundle-add pxe-server + CMD ["/bin/bash/bash"] + EOF + +Example output: + +.. code-block:: console + + docker build -t my-clearlinux-with-pxe-server-bundle . + + Sending build context to Docker daemon 806.5MB + Step 1/4 : FROM my-custom-clear-linux-container + ---> 5414c3a12993 + Step 2/4 : MAINTAINER First Last + ---> Running in 19b4411cf4bd + ---> 08d400baffde + Removing intermediate container 19b4411cf4bd + Step 3/4 : RUN swupd bundle-add pxe-server + ---> Running in 3e634d6e0792 + swupd-client bundle adder 3.12.2 + Copyright (C) 2012-2017 Intel Corporation + + Attempting to download version string to memory + Downloading packs... + + Extracting pxe-server pack for version 17820 + . + Installing bundle(s) files... + .............................................................................. + .............................................................................. + .............................................................................. + .............................................................................. + .............................................................................. + .............................................................................. + Calling post-update helper scripts. + WARNING: systemctl not operable, unable to run systemd update triggers + Bundle(s) installation done. + ---> 8ead5f2c0c33 + Removing intermediate container 3e634d6e0792 + Step 4/4 : CMD /bin/bash + ---> Running in 0ceae320279b + ---> dcd9adb40611 + Removing intermediate container 0ceae320279b + Successfully built dcd9adb40611 + Successfully tagged my-clearlinux-with-pxe-server-bundle:latest + +.. note:: + + The WARNING message can be ignored because systemd does not run inside + a container. + +Remove a bundle +=============== + +This example Dockerfile removes the :file:`pxe-server` bundle from an existing +|CL| Docker image: + +.. code-block:: bash + + cat > Dockerfile << EOF + FROM my-clearlinux-with-pxe-server-bundle + MAINTAINER First Last + RUN swupd bundle-remove pxe-server + CMD ["/bin/bash/bash"] + EOF + +Example output: + +.. code-block:: console + + docker build -t my-clearlinux-remove-pxe-server-bundle . + + Sending build context to Docker daemon 806.5MB + Step 1/4 : FROM my-clearlinux-with-pxe-server-bundle + ---> dcd9adb40611 + Step 2/4 : MAINTAINER First Last + ---> Running in 71b60f15003e + ---> 742192751c1a + Removing intermediate container 71b60f15003e + Step 3/4 : RUN swupd bundle-remove pxe-server + ---> Running in ad28a3390ecc + swupd-client bundle remover 3.12.2 + Copyright (C) 2012-2017 Intel Corporation + + Removing bundle: pxe-server + Deleting bundle files... + Total deleted files: 92 + Untracking bundle from system... + Success: Bundle removed + 1 bundle(s) were removed successfully + ---> d6ee7903e14d + Removing intermediate container ad28a3390ecc + Step 4/4 : CMD /bin/bash + ---> Running in 7694989e97de + ---> ec23189ef954 + Removing intermediate container 7694989e97de + Successfully built ec23189ef954 + Successfully tagged my-clearlinux-remove-pxe-server-bundle:latest \ No newline at end of file diff --git a/zh_CN/_sources/guides/network/dpdk.rst.txt b/zh_CN/_sources/guides/network/dpdk.rst.txt new file mode 100644 index 00000000..5b1ccc65 --- /dev/null +++ b/zh_CN/_sources/guides/network/dpdk.rst.txt @@ -0,0 +1,352 @@ +.. _dpdk: + +Use DPDK to send packets between platforms +########################################## + +This guide describes how to send packets between two platforms. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +Figure 1 shows how to send packets between two platforms in a simple +configuration. The example uses the :abbr:`Data Plane Development Kit (DPDK)`, +which is a set of libraries, drivers, sample applications, and tools for fast +packet processing. + +.. figure:: ./figures/pktgen_lw3fd.png + :align: center + :alt: Platform A and B + + Figure 1: Environment for l3fwd DPDK application + +This example uses the following DPDK components: + +* pktgen: Traffic generator. See `pktgen`_ documentation for details. +* l3fwd: Layer 3 forwarding example application. See + `l3fwd`_ documentation for details. + +Prerequisites +************* + +* Two platforms using |CL-ATTR| release `13330`_ or higher. +* Both images must include the :command:`kernel-native` bundle. +* Install the :command:`network-basic-dev` bundle with the command: + + .. code-block:: bash + + sudo swupd bundle-add network-basic-dev + +* Each platform must have at least one :abbr:`NIC (Network Interface Card)`. + Check the `DPDK project`_ for the list of supported `dpdk.org NICs`_. + +* Two network cables. + +Install dpdk and build l3fwd example (Platform B) +************************************************* + +#. Change to the :file:`l3fwd` example directory. + + .. code-block:: bash + + sudo cd /usr/share/dpdk/examples/l3fwd + +#. Assign :envvar:`RTE_SDK` variable to the makefiles path. + + .. code-block:: bash + + sudo export RTE_SDK=/usr/share/dpdk/ + +#. Assign :envvar:`RTE_TARGET` variable to the location of the gcc\* config + file. + + .. code-block:: bash + + sudo export RTE_TARGET=x86_64-native-linuxapp-gcc + +#. Build the `l3fwd` application and add the configuration header to + the :makevar:`CFLAGS` variable. + + .. code-block:: bash + + sudo make CFLAGS+="-include /usr/include/rte_config.h" + + +Build pktgen (Platform A) +************************* + +#. Download the `pktgen tar package`_ v3.1.2 or newer. + +#. Decompress packages and move to uncompressed source directory. + +#. Assign :envvar:`RTE_SDK` variable to the path where makefiles are located. + + .. code-block:: bash + + sudo export RTE_SDK=/usr/share/dpdk/ + +#. Assign :envvar:`RTE_TARGET` to the location of the gcc config file. + + .. code-block:: bash + + sudo export RTE_TARGET=x86_64-native-linuxapp-gcc + +#. Build the `pktgen` project and set the :makevar:`CONFIG_RTE_BUILD_SHARED_LIB` variable + to "n". + + .. code-block:: bash + + sudo make CONFIG_RTE_BUILD_SHARED_LIB=n + +Bind NICs to DPDK kernel drivers (Platforms A and B) +**************************************************** + +The `l3fwd` application uses two NICs. The DPDK includes tools for binding +NICs to DPDK modules to run DPDK applications. + +#. Load the DPDK I/O kernel module. + + .. code-block:: bash + + sudo modprobe vfio-pci + +#. Check the NIC status to determine which network cards are not + busy. When another application is using them, the status shows "Active", + and those NICs cannot be bound. + + .. code-block:: bash + + sudo dpdk-devbind --status + +#. Bind two available NICs. The general syntax for binding is: + :command:`dpdk-devbind --bind=vfio-pci `. + A working example is shown below: + + .. code-block:: bash + + sudo dpdk-devbind --bind=vfio-pci 01:00.0 + +#. Check the NIC status to verify that the NICs are bound correctly. If + successful, `drv` displays the value `igb_uio`, which confirms + that the NICs are using the DPDK modules. + + +Set hugepages (Platforms A and B) +********************************* + +|CL| supports `hugepages` for the large memory pool allocation used for +packet buffers. + +#. Set the number of hugepages. + + .. code-block:: bash + + sudo echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages + +#. Allocate pages on NUMA machines. + + .. code-block:: bash + + sudo echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages + sudo echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages + +#. Make memory available for DPDK. + + .. code-block:: bash + + sudo mkdir -p /mnt/huge $ mount -t hugetlbfs nodev /mnt/huge + + For more information, refer to the `DPDK guide`_ System Requirements + section. + + +Set up the physical environment (Platforms A and B) +*************************************************** + +Connect the NICs on Platform A to the NICs on Platform B using the network +cables as shown in figure 2. + +.. figure:: ./figures/pyshical_net.png + + Figure 2: Physical network environment + + +Run l3fwd application (Platform B) +********************************** + +The `l3fwd` application is one of the DPDK examples available when you +install the :file:`dpdk-dev` bundle. `l3fwd` forwards packets from one +NIC to another. For details, refer to the `l3fwd`_ documentation. + +#. Open the l3fwd example directory. + + .. code-block:: bash + + sudo cd /usr/share/dpdk/examples/l3fwd + +#. **This step is very important.** + + #. DPDK needs poll mode drivers to operate. + #. Poll mode drivers are shared objects in :file:`/usr/lib64`. + #. See the full list of supported NICs at `dpdk.org NICs`_. + #. You must know which kernel module each NIC is using and choose a poll + mode driver that corresponds to your NICs. + +#. NIC binding and `pktgen` configuration depends upon network use cases and + available system resources. Use the :command:`-d` flag to set the poll mode + driver. + + The following example assumes that the NICs use the `e1000` network driver + and the `e1000` poll mode driver. The :file:`librte_pmd_e1000.so` is + located in :file:`/usr/lib64` in |CL|. + + .. code-block:: bash + + sudo ./build/l3fwd -c 0x3 -n 2 -d librte_pmd_e1000.so -- -p 0x3 --config="(0,0,0),(1,0,1)" + +#. The `l3fwd` application shows port initialization details at startup. + After port 0 initialization completes, `l3fwd` shows a MAC address and + information for port 1. + + Save the MAC address for configuring the `pktgen` project. + +Run pktgen application (Platform A) +*********************************** + +`pktgen` is a network traffic generator included in the DPDK. + +#. `pktgen` configuration depends upon the network setup and the + available system resources. The following example shows a basic + configuration. + + .. code-block:: bash + + sudo ./app/app/x86_64-native-linuxapp-gcc/pktgen -c 0xf -n 4 -- -p 0xf -P -m "1.0, 2.1" + +#. Enable active colorful output (optional). + + .. code-block:: bash + + Pktgen> theme enable + +#. Use the MAC addresses shown by the `l3fwd` application during initialization. + The command to set the MAC addresses in `pktgen` has the format: + + .. code-block:: bash + + set mac + + Here is a working example: + + .. code-block:: bash + + Pktgen> set mac 0 00:1E:67:CB:E8:C9 + Pktgen> set mac 1 00:1E:67:CB:E8:C9 + +#. Send packets. + + .. code-block:: bash + + Pktgen> start 0-1 + +For more details, see the `pktgen`_ documentation. + +Appendix A: Use pass-through for virtual machines +************************************************* + +This section explains how to set up a virtual environment where virtual +machines control the NICs on the host. + +#. Create a new directory and move to it. + +#. Download or create a :file:`start_qemu.sh` script for running a kvm virtual + machine: + + .. code-block:: bash + + sudo curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh + +#. Download a bare-metal image of |CL| and rename it as :file:`clear.img`. + +#. Look for an Ethernet\* device entry that contains vendor and device ID: + + .. code-block:: bash + + sudo lspci -nn | grep Ethernet + + An example output: + + .. code-block:: console + + 03:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] + + where `03:00.0` is the device entry and `8086:1521` is the `vendor:device + ID`. Record this information, because you need it to unbind the NICs from a + host. + + +#. Unbind the NICs from the host to do pass-through with virtual machines. |CL| + supports this action. The commands take the format: + + .. code-block:: bash + + echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/new_id + echo "entry for device" > /sys/bus/pci/drivers/igb/unbind + echo "entry for device" > /sys/bus/pci/drivers/pci-stub/bind + echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/remove_id + + Here is a working example: + + .. code-block:: bash + + sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/new_id + sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/igb/unbind + sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/pci-stub/bind + sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/remove_id + +#. Assign the unbound NICs to the KVM virtual machine (guest). + Modify the :file:`start_qemu.sh` script in `qemu-system-x86_64` arguments, and + add the lines with the host's NICs information in the format: + + .. code-block:: bash + + -device pci-assign,host="",id=passnic0,addr=03.0 + -device pci-assign,host="",id=passnic1,addr=04.0 + + Here is a working example: + + .. code-block:: bash + + -device pci-assign,host=03:00.0,id=passnic0,addr=03.0 \ + -device pci-assign,host=03:00.3,id=passnic1,addr=04.0 \ + +#. Add more NUMA machines to the virtual machine by adding lines to the + Makefile boot target in the format: + + .. code-block:: bash + + -numa node,mem=,cpus= + + Here is a working example for a virtual machine with 4096 memory and four + CPUs: + + .. code-block:: bash + + -numa node,mem=2048,cpus=0-1 \ + -numa node,mem=2048,cpus=2-3 \ + + .. note:: Each NUMA machine must use the same quantity of memory. + +#. Run the :file:`start_qemu.sh` script. + + +.. _13330: https://cdn.download.clearlinux.org/releases/13330/ +.. _DPDK project: http://dpdk.org +.. _dpdk.org NICs: http://dpdk.org/doc/nics +.. _pktgen tar package: http://dpdk.org/browse/apps/pktgen-dpdk/refs +.. _DPDK guide: http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html +.. _l3fwd: http://dpdk.org/doc/guides/sample_app_ug/l3_forward.html +.. _pktgen: http://pktgen-dpdk.readthedocs.io/en/latest/index.html diff --git a/zh_CN/_sources/guides/network/ipxe-install.rst.txt b/zh_CN/_sources/guides/network/ipxe-install.rst.txt new file mode 100644 index 00000000..70e6e7fa --- /dev/null +++ b/zh_CN/_sources/guides/network/ipxe-install.rst.txt @@ -0,0 +1,340 @@ +.. _ipxe-install: + +Install over the network with iPXE +################################## + +This guide describes how to install |CL-ATTR| using :abbr:`PXE (Pre-boot +Execution Environment)` over the network. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +PXE is an industry standard that describes client-server interaction with +network-boot software and uses the DHCP and TFTP protocols. This guide shows one +method of using the PXE environment to install |CL|. + +The PXE extension called `iPXE`_ adds support for additional protocols such as +HTTP, :abbr:`iSCSI (Internet Small Computer Systems Interface)`, :abbr:`AoE +(ATA over Ethernet\*)`, and :abbr:`FCoE (Fiber Channel over Ethernet\*)`. iPXE +enables network booting on computers with no built-in PXE support. + +To install |CL| through iPXE, you must create a PXE client. Figure 1 depicts +the flow of information between a PXE server and a PXE client. + +.. figure:: ./figures/network-boot-flow.png + :alt: PXE information flow + + Figure 1: PXE information flow. + +.. caution:: + + The |CL| image that boots through the PXE process automatically erases all + data and partitions on the PXE client system and creates 3 new partitions + to install onto. + +Prerequisites +************* + +Before booting with iPXE, make the following preparations. + +Connect the PXE server and PXE clients to a switch on a private network, as +shown in figure 2. + +.. figure:: ./figures/network-boot-setup.png + :alt: Network topology + + Figure 2: Network topology. + +Your PXE client must have a boot order where the network boot option is +prioritized before the disk boot option. + +Your PXE server must have: + +* Ethernet/LAN boot option. +* At least two network adapters. +* Connection to a public network. +* Secure boot option disabled. + +.. note:: + + You must disable the secure boot option in the BIOS because the UEFI + binaries used to boot |CL| are not signed. + + +Configuration +************* + +To set up |CL| using iPXE automatically, use the :file:`configure-ipxe.sh` +script included with :abbr:`ICIS (Ister Cloud Init Service)`. For additional +instructions on the script, refer to the guide on the `ister-cloud-init-svc`_ +GitHub\* repository. + +To set up |CL| manually, perform the steps below. + +#. Define the variables used for iPXE boot configuration. + + .. code-block:: console + + ipxe_app_name=ipxe + ipxe_port=50000 + web_root=/var/www + ipxe_root=$web_root/$ipxe_app_name + tftp_root=/srv/tftp + external_iface=eno1 + internal_iface=eno2 + pxe_subnet=192.168.1 + pxe_internal_ip=$pxe_subnet.1 + pxe_subnet_mask_ip=255.255.255.0 + pxe_subnet_bitmask=16 + +#. Log in and get root privilege. + + .. code-block:: bash + + sudo -s + +#. Add the :command:`pxe-server` bundle to your |CL| system. The bundle contains all + files needed to run a PXE server. + + .. code-block:: bash + + sudo swupd bundle-add pxe-server + +#. Download the latest network-bootable release of |CL| and extract the + files. + + .. code-block:: bash + + sudo mkdir -p $ipxe_root + sudo curl -o /tmp/clear-pxe.tar.xz \ + https://cdn.download.clearlinux.org/current/clear-$(curl \ + https://cdn.download.clearlinux.org/latest)-pxe.tar.xz + sudo tar -xJf /tmp/clear-pxe.tar.xz -C $ipxe_root + sudo ln -sf $(ls $ipxe_root | grep 'org.clearlinux.*') $ipxe_root/linux + + .. note:: + + Ensure that the initial ramdisk file is named :file:`initrd` and + the kernel file is named :file:`linux`, which is a symbolic link to the + actual kernel file. + +#. Create an iPXE boot script with the following contents. During an iPXE + boot, the iPXE boot script directs the PXE client to download the files to + boot and install |CL|. Use the names previously given to the initial + ramdisk and kernel files. + + .. code-block:: console + + sudo cat > $ipxe_root/ipxe_boot_script.ipxe << EOF + #!ipxe + kernel linux quiet init=/usr/lib/systemd/systemd-bootchart \ + initcall_debug tsc=reliable no_timer_check noreplace-smp rw \ + initrd=initrd + initrd initrd + boot + EOF + +#. The :command:`pxe-server` bundle contains a lightweight web-server known as + nginx. Create a configuration file for nginx to serve |CL| to PXE + clients with the following contents: + + .. code-block:: console + + sudo mkdir -p /etc/nginx/conf.d + sudo cat > /etc/nginx/conf.d/$ipxe_app_name.conf << EOF + server { + listen $ipxe_port; + server_name localhost; + location /$ipxe_app_name/ { + root $web_root; + autoindex on; + } + } + EOF + + sudo cp /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf + + .. note:: + + Create a separate nginx configuration file to serve network-bootable + images on a non-standard port number. This action saves existing nginx + configurations. + +#. Start nginx and enable the startup on boot option. + + .. code-block:: bash + + sudo systemctl start nginx + sudo systemctl enable nginx + +#. The :command:`pxe-server` bundle contains a lightweight DNS server which + conflicts with the DNS stub listener provided in `systemd-resolved`. + Disable the DNS stub listener and temporarily stop `systemd-resolved`. + + .. code-block:: console + + sudo mkdir -p /etc/systemd + sudo cat > /etc/systemd/resolved.conf << EOF + [Resolve] + DNSStubListener=no + EOF + + sudo systemctl stop systemd-resolved + +#. Assign a static IP address to the network adapter for the private network + and restart `systemd-networkd` with the following commands: + + .. code-block:: console + + sudo mkdir -p /etc/systemd/network + sudo cat > /etc/systemd/network/70-internal-static.network << EOF + [Match] + Name=$internal_iface + [Network] + DHCP=no + Address=$pxe_internal_ip/$pxe_subnet_bitmask + EOF + + sudo systemctl restart systemd-networkd + +#. Configure :abbr:`NAT (Network Address Translation)` to route traffic from + the private network to the public network. This action makes the PXE + server act as a router. To make these changes persistent during reboots, save the + changes to the firewall with the following commands: + + .. code-block:: bash + + sudo iptables -t nat -F POSTROUTING + sudo iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE + sudo systemctl enable iptables-save.service + sudo systemctl restart iptables-save.service + sudo systemctl enable iptables-restore.service + sudo systemctl restart iptables-restore.service + + .. note:: + + The firewall masks packets to make them appear as coming from the PXE + server and hides PXE clients from the public network. + +#. Configure the kernel to forward network packets to different + interfaces. Otherwise, NAT will not work. + + .. code-block:: bash + + sudo mkdir -p /etc/sysctl.d + sudo echo net.ipv4.ip_forward=1 > /etc/sysctl.d/80-nat-forwarding.conf + sudo echo 1 > /proc/sys/net/ipv4/ip_forward + +#. The :command:`pxe-server` bundle contains iPXE firmware images that allow computers + without an iPXE implementation to perform an iPXE boot. Create a TFTP + hosting directory and populate the directory with the iPXE firmware images + with the following commands: + + .. code-block:: bash + + sudo mkdir -p $tftp_root + sudo ln -sf /usr/share/ipxe/undionly.kpxe $tftp_root/undionly.kpxe + +#. The :command:`pxe-server` bundle contains a lightweight TFTP, DNS, and DHCP + server known as `dnsmasq`. Create a configuration file for `dnsmasq` + to listen on a dedicated IP address for those functions. PXE clients on + the private network will use this IP address. + + .. code-block:: console + + sudo cat > /etc/dnsmasq.conf << EOF + listen-address=$pxe_internal_ip + EOF + +#. Add the options to serve iPXE firmware images to PXE clients over TFTP to + the `dnsmasq` configuration file. + + .. code-block:: console + + sudo cat >> /etc/dnsmasq.conf << EOF + enable-tftp + tftp-root=$tftp_root + EOF + +#. Add the options to host a DHCP server for PXE clients to the :file:`dnsmasq` + configuration file. + + .. code-block:: console + + sudo cat >> /etc/dnsmasq.conf << EOF + dhcp-leasefile=/var/db/dnsmasq.leases + + dhcp-authoritative + dhcp-option=option:router,$pxe_internal_ip + dhcp-option=option:dns-server,$pxe_internal_ip + + dhcp-match=set:pxeclient,60,PXEClient* + dhcp-range=tag:pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,15m + dhcp-range=tag:!pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,6h + + dhcp-match=set:ipxeboot,175 + dhcp-boot=tag:ipxeboot,http://$pxe_internal_ip:$ipxe_port/$ipxe_app_name/ipxe_boot_script.ipxe + dhcp-boot=tag:!ipxeboot,undionly.kpxe,$pxe_internal_ip + EOF + + + The configuration provides the following important functions: + + * Directs PXE clients without an iPXE implementation to the TFTP server + to acquire architecture-specific iPXE firmware images that allow them + to perform an iPXE boot. + * Activates only on the network adapter that has an IP address on the + defined subnet. + * Directs PXE clients to the DNS server. + * Directs PXE clients to the PXE server for routing via NAT. + * Divides the private network into two pools of IP addresses. One pool + is for network boot and one pool is used after boot. Each pool has + their own lease times. + +#. Create a file for `dnsmasq` to record the IP addresses it provides + to PXE clients. + + .. code-block:: bash + + sudo mkdir -p /var/db + sudo touch /var/db/dnsmasq.leases + +#. Start `dnsmasq` and enable startup on boot. + + .. code-block:: bash + + sudo systemctl enable dnsmasq + sudo systemctl restart dnsmasq + +#. Start `systemd-resolved`. + + .. code-block:: bash + + sudo systemctl start systemd-resolved + + .. note:: + + `systemd-resolved` dynamically updates the list of DNS servers for the + private network if you use the `dnsmasq` DNS server. The setup creates a + pass-through DNS server that relies on the DNS servers listed in + :file:`/etc/resolv.conf`. + +#. Power on the PXE client and watch the client boot and install |CL|. + + After booting, |CL| automatically partitions the hard drive, + installs itself, updates to the latest version, and reboots. + + +**Congratulations!** You have successfully installed and configured a PXE +server that enables PXE clients to boot and install |CL| over the network. + + +.. _iPXE: + http://ipxe.org/ + +.. _ister-cloud-init-svc: + https://github.com/clearlinux/ister-cloud-init-svc diff --git a/zh_CN/_sources/guides/network/network-bonding.rst.txt b/zh_CN/_sources/guides/network/network-bonding.rst.txt new file mode 100644 index 00000000..41ba15b9 --- /dev/null +++ b/zh_CN/_sources/guides/network/network-bonding.rst.txt @@ -0,0 +1,130 @@ +.. _network-bonding: + +Combine multiple interfaces with network bonding +################################################ + +This guide describes how to configure systemd to use the :command:`bonding` +driver. + +Network bonding combines multiple network interfaces into a single logical +interface to provide redundancy and bandwidth aggregation. + +|CL-ATTR| includes the Linux `Bonding driver`_ and `Team driver`_ . + +The example demonstrates how to: + +* Bond all four ports of a quad-port NIC in 802.3ad mode. + +* Enable jumbo frames to optimize large data transfers on the local network. + +Your NICs and network switch must support 802.3ad mode and jumbo frames. The +example explains how to configure your NICs for both features. Your switch may +require additional configuration. See your switch documentation for details. + +.. note:: + + You must run all commands in this guide as root. + +#. Log in and get root privileges. + + .. code-block:: console + + sudo -s + +#. Create the :file:`/etc/systemd/network` directory. + + .. code-block:: bash + + mkdir -p /etc/systemd/network + + The :file:`/etc/systemd/network` directory contains configuration files and + network settings for the virtual device and its underlying physical + interfaces. + +#. Configure systemd to create a virtual network device called `bond1`. Use a + text editor to create a file named :file:`30-bond1.netdev`. + + .. code-block:: console + + [NetDev] + Name=bond1 + Kind=bond + + [Bond] + Mode=802.3ad + TransmitHashPolicy=layer3+4 + MIIMonitorSec=1s + LACPTransmitRate=fast + + Refer to the `systemd.netdev`_ manpage for :file:`30-bond1.netdev` file + syntax. This example is based on Example 9 on the manpage. Modify the + example for your configuration. + +#. Configure the slave interfaces. Create a text file named + :file:`30-bond1-enp1s0.network`. Assign the slave interfaces to the virtual + `bond1` device and use the syntax shown in `systemd.network`_. + + .. code-block:: console + + [Match] + Name=enp1s0f* + + [Network] + Bond=bond1 + + [Link] + MTUBytes=9000 + + The example bonds all four ports of a quad-port NIC as a slave of `bond1`. + The example uses a wildcard match because the NIC names are in the range + `enp1s0f0-enp1s0f3`. If your NIC names are not wildcard-compatible, create + a separate :file:`.network` file for each NIC. + + For best results, do not assign addresses or DHCP support to the individual + NICs. + + The `MTUBytes` setting enables jumbo frames of up to 9000 bytes. Your + switch may require additional configuration to support this setting. + +#. Configure the bonded interface in a file named :file:`30-bond1.network`. + + .. code-block:: console + + [Match] + Name=bond1 + + [Network] + BindCarrier=enp1s0f0 enp1s0f1 enp1s0f2 enp1s0f3 + Address=192.168.1.201/24 + + [Link] + MTUBytes=9000 + + `bond1` is a virtual interface with no physical link status. + + `BindCarrier` indicates that the `bond1` link status is determined by the + status of the listed slave devices. + + `Address` contains an IP address that you assign to the logical interface. + DHCP bonded interfaces are complex and outside the scope of this example. + + `MTUBytes` must be set to 9000 on all slave interfaces and on the bonded + interface for successful jumbo frames operation. If `MTUBytes` is not the + same on all interfaces, then the lowest value is used. + +#. Apply the new network configuration with the command: + + .. code-block:: bash + + systemctl restart systemd-networkd + + The `MTUBytes` settings do not take effect until you reboot or manually + apply the settings with a utility such as ifconfig. + +.. _Bonding driver: https://www.kernel.org/doc/Documentation/networking/bonding.txt + +.. _Team driver: https://www.kernel.org/doc/Documentation/networking/team.txt + +.. _systemd.netdev: https://www.freedesktop.org/software/systemd/man/systemd.netdev.html + +.. _systemd.network: https://www.freedesktop.org/software/systemd/man/systemd.network.html diff --git a/zh_CN/_sources/guides/network/vnc.rst.txt b/zh_CN/_sources/guides/network/vnc.rst.txt new file mode 100644 index 00000000..a734a782 --- /dev/null +++ b/zh_CN/_sources/guides/network/vnc.rst.txt @@ -0,0 +1,791 @@ +.. _vnc: + +Remote-desktop to a host using VNC +################################## + +This guide describes how to use :abbr:`VNC (Virtual Network Computing)` to +connect to a remote |CL-ATTR| host. + +VNC is a client-server GUI-based tool that allows you to connect via +remote-desktop to your |CL| host. + +.. contents:: + :local: + :depth: 1 + +Install the VNC server and misc. components on your host +******************************************************** + +To configure VNC to work on your |CL| host, install these bundles: + +* :command:`desktop-autostart`: Installs :abbr:`GDM (Gnome Desktop Manager)`, sets + it to start automatically on boot, and installs TigerVNC Viewer. +* :command:`vnc-server`: Installs the TigerVNC server. + +Follow these steps: + +#. Log into your |CL| host and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Install the |CL| bundles. + + .. code-block:: bash + + swupd bundle-add desktop-autostart vnc-server + +#. Reboot your |CL| host. + +Configure a VNC-server-start method on your host +************************************************ + +There are three methods you can use to configure and start the VNC server on +your |CL| host: + +.. list-table:: Table 1: VNC-server-start Configuration Methods + :widths: 10,20,20,20 + :header-rows: 1 + + * - Attribute + - Method 1: Manually start a VNC session + - Method 2: Automatically start a VNC session via a systemd service script + - Method 3: Create multi-user logins with authentication through GDM + * - Description + - This is the traditional method where you SSH into the |CL| host, manually + start a VNC session to get a display ID, and connect to it by + supplying the display ID. + - The system administrator sets up a systemd service script for you with + a pre-assigned display ID. You make a VNC connection and supply + your pre-assigned display ID. + - The system adminstrator configures GDM to accept connection requests. + When you make a VNC connection to the |CL| host, you see + the GDM login screen and authenticate as if you are local. + * - Who configures VNC settings? + - You + - System adminstrator + - System adminstrator + * - Who starts VNC session? + - You + - Set to start automatically on boot by system administrator + - Set to start automatically on boot by system administrator + * - Who ends VNC sesssion? + - You + - You + - System administrator can disable VNC service altogether + * - Requires VNC password to authenticate? + - Yes + - Yes + - No. Use |CL| account username and password through GDM + + +Although all three methods can coexist on the same |CL| host, we recommend +you pick a method that suits your needs. + +For simplicity, the rest of this guide refers to these methods as +Method 1, Method 2, and Method 3. + +Method 1: Manually start a VNC session +====================================== + +You (and each user) must perform these steps to initialize your VNC settings. + +#. Log in. +#. Open a terminal emulator. +#. Start VNC with the :command:`vncserver` command. Since this is your + first time starting VNC, it adds default configuration files and asks you + to set a VNC password. + + .. code-block:: bash + + vncserver + + Example output: + + .. code-block:: console + + You will require a password to access your desktops. + + Password: + Verify: + Would you like to enter a view-only password (y/n)? n + xauth: file /home/vnc-user-a/.Xauthority does not exist + + New 'clr-linux:2 (vnc-user-a)' desktop is clr-linux:2 + + Creating default startup script /home/vnc-user-a/.vnc/xstartup + Creating default config /home/vnc-user-a/.vnc/config + Starting applications specified in /home/vnc-user-a/.vnc/xstartup + Log file is /home/vnc-user-a/.vnc/clr-linux:2.log + + Upon completion, you can find the default configuration files and the + password file hidden in the :file:`.vnc` directory in your home directory. + + A VNC session starts and shows a unique display ID, which is the + number following the hostname and the colon ":". In the above example, the + display ID is 2. In a later step, you will supply the display ID to + your VNC viewer app for connection. + +#. Kill the active VNC session for the time being with the + :command:`vncserver -kill :[display ID]` command. Substitute [display ID] + with your active VNC session display ID. For example: + + .. code-block:: bash + + vncserver -kill :2 + + .. note:: + + If you do not recall the active session display ID, use the + :command:`vncserver -list` command to find it. + +#. Optional configurations: + + * To customize settings such as screen size, security type, etc., + modify the :file:`$HOME/.vnc/config` file. + * To customize the applications to run at startup, modify the + :file:`$HOME/.vnc/xstartup` file. + +Method 2: Automatically start a VNC session via a systemd service script +======================================================================== + +To configure VNC for this method, you must have root privileges. You will +set up a systemd service file for all intended VNC users with their own +preassigned unique display ID. + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Make sure the user accounts already exist. Use the following command to + list all users. + + + .. code-block:: bash + + cut -d: -f1 /etc/passwd + +#. Create the path :file:`/etc/systemd/system`. + + .. code-block:: bash + + mkdir -p /etc/systemd/system + +#. Create a systemd service script file :file:`vncserver@:[X].service`, + where [X] is the display ID, for each user in :file:`/etc/systemd/system` + Each user must be assigned a unique display ID. Be sure the correct + username is entered in the :guilabel:`User` field. The example below shows user + vnc-user-b who is assigned the display ID 5. + + .. code-block:: console + + # cat > /etc/systemd/system/vncserver@:5.service << EOF + + [Unit] + Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5" + After=syslog.target network.target + + [Service] + Type=simple + User=vnc-user-b + PAMName=login + PIDFile=/home/%u/.vnc/%H%i.pid + ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' + ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -alwaysshared -fg + ExecStop=/usr/bin/vncserver -kill %i + + [Install] + WantedBy=multi-user.target + + EOF + +#. Have each user log into their account and set a VNC password with + the :command:`vncpasswd` command before proceeding to the next step. + +#. Start the VNC service script and set it to start automatically on + boot for each user. Replace the [X] with the display ID. + + .. code-block:: bash + + systemctl daemon-reload + systemctl start vncserver@:[X].service + systemctl enable vncserver@:[X].service + +#. After starting the services, verify they are running. + + .. code-block:: bash + + systemctl | grep vnc + + The example below shows 2 VNC sessions that were successfully started for + users vnc-user-b with display ID 5 and vnc-user-c with display ID 6. + + .. code-block:: console + + # systemctl | grep vnc + + vncserver@:5.services loaded active running VNC Remote Desktop Service for "vnc-user-b" with display ID "5" + vncserver@:6.services loaded active running VNC Remote Desktop Service for "vnc-user-c" with display ID "6" + system-vncserver.slice loaded active active system-vncserver.slice + +Method 3: Multi-user logins with authentication through GDM +=========================================================== + +For this method, VNC is configured as a systemd service that listens on port +5900 and GDM is configured to accept access requests from VNC. When you +make a VNC connection to your |CL| host, you are presented with the GDM login +screen and you authenticate as if you are local. You must have root privileges +to perform this configuration. + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Create the path :file:`/etc/systemd/system`. + + .. code-block:: bash + + mkdir -p /etc/systemd/system + +#. Create a systemd socket file :file:`xvnc.socket` and add the following: + + .. code-block:: console + + # cat > /etc/systemd/system/xvnc.socket << EOF + + [Unit] + Description=XVNC Server on port 5900 + + [Socket] + ListenStream=5900 + Accept=yes + + [Install] + WantedBy=sockets.target + + EOF + +#. Create a systemd service file :file:`xvnc@.service` and add the following: + + .. code-block:: console + + # cat > /etc/systemd/system/xvnc@.service << EOF + + [Unit] + Description=Daemon for each XVNC connection + + [Service] + ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 2000x1200 -once -SecurityTypes=None + User=nobody + StandardInput=socket + StandardError=syslog + + EOF + +#. Create the path :file:`/etc/gdm`. + + .. code-block:: bash + + mkdir -p /etc/gdm + + +#. Create a GDM :file:`custom.conf` file and add the following: + + .. code-block:: console + + # cat > /etc/gdm/custom.conf << EOF + + [xdmcp] + Enable=true + Port=177 + + EOF + +#. Start the VNC socket script and set it to start automatically on boot. + + .. code-block:: bash + + systemctl daemon-reload + systemctl start xvnc.socket + systemctl enable xvnc.socket + +#. After starting the socket, verify it is running. + + .. code-block:: bash + + systemctl | grep vnc + + The example below shows the xvnc.socket is running. + + .. code-block:: console + + # systemctl | grep vnc + + xvnc.socket loaded active listening XVNC Server on port 5900 + system-xvnc.slice loaded active active system-xvnc.slice + +See the vncserver Man page for additional information. + +Install a VNC viewer app and an SSH client on your client system +**************************************************************** + +You need a VNC viewer app on your client system to connect to your |CL| host. +An SSH client is only needed if you chose to use Method 1 or you plan to +encrypt your VNC traffic, which is discussed later in this guide. + +Perform the steps below to add these apps to your client system. + +Install a VNC viewer app +======================== + +On |CL|: + +.. code-block:: bash + + swupd bundle-add desktop-autostart + +On Ubuntu\*, Mint\*: + +.. code-block:: bash + + apt-get install xtightvncviewer + +On Fedora\*: + +.. code-block:: bash + + dnf install tigervnc + +On Windows\*: + +* Install `RealVNC for Windows`_ + +On macOS\*: + +* Install `RealVNC for macOS`_ + +Install an SSH client +===================== + +* On most Linux distros (|CL|, Ubuntu, Mint, Fedora, etc.) and macOS, + SSH is built-in so you don't need to install it. +* On Windows, you can install `Putty`_. + +Establish a VNC connection to your host +*************************************** + +Depending on the VNC-server-configuration method chosen, use the appropriate VNC +connection: + +* If you chose Method 1, you must take a few extra steps by using SSH to connect + to your |CL| host and then manually launching VNC. + +* If you chose Method 2, get your preassigned VNC display ID from your system + administrator first and then proceed to the :ref:`connect-to-vnc-session` + section below. + +* If you chose Method 3, proceed to the :ref:`connect-to-vnc-session` below. + + +SSH into your host and launch VNC +================================= + +#. SSH into your |CL| host + + #. On Linux distros and macOS: + + .. code-block:: bash + + ssh [username]@[clear-linux-host-ip-address] + + #. On Windows: + + #. Launch Putty. + #. Under the :guilabel:`Category` section, select :guilabel:`Session`. + See Figure 1. + #. Enter the IP address of your |CL| host in the + :guilabel:`Host Name (or IP address)` field. + #. Set the :guilabel:`Connection type` option to :guilabel:`SSH`. + #. Click the :guilabel:`Open` button. + + .. figure:: figures/vnc/vnc-1.png + :scale: 90 % + :alt: Putty - configure SSH session settings + + Figure 1: Putty - configure SSH session settings + +#. Log in with your |CL| username and password. Do not use your VNC password. +#. Start a VNC session. + + .. code-block:: bash + + vncserver + + Example output: + + .. code-block:: console + + New 'clr-linux:3 (vnc-user-c)' desktop is clr-linux:3 + + Starting applications specified in /home/vnc-user-c/.vnc/xstartup + Log file is /home/vnc-user-c/.vnc/clr-linux:3.log + +#. Take note of the generated display ID because you will input it into + the VNC viewer app to establish the connection. The above example shows + the display ID is 3. + + .. note:: + + VNC automatically picks a unique display ID unless you specify one. + To specify a display ID, enter a unique number that is not already + in use after the colon. For example: + + .. code-block:: bash + + vncserver :8 + +#. You can now end the SSH connection by logging out. This does + not terminate your active VNC session. + +.. _connect-to-vnc-session: + +Connect to your VNC session +=========================== + +For Method 1 and Method 2, you must connect to a specific active session +or display ID using one of two options: + +* Use a fully-qualified VNC port number, which consists of the default VNC + server port (5900) plus the display ID +* Use the display ID + +For example, if the display ID is 3, it can be specified as 5903 or just +as 3. For Method 3, VNC does not expect a display ID. Use 5900. For simplicity, +the instructions below use the fully-qualified VNC port number. + +**On Linux distros:** + +#. Open a terminal emulator and enter: + + .. code-block:: bash + + vncviewer [clear-linux-host-ip-address]:[fully-qualified VNC port number] + +#. Enter your credentials. + + * For Method 1 and Method 2, enter your VNC password. No username is + required. + * For Method 3, enter your |CL| account username and password through + GDM. + + .. note:: + + With Method 3, you cannot remotely log into your |CL| host through + VNC if you are logged in locally and vice versa. + +**On Windows and macOS using RealVNC app:** + +#. Start the RealVNC viewer app. See Figure 2. +#. Enter the IP address of the |CL| host and the fully-qualified + VNC port number. + + The following screenshot shows connecting to |CL| host + 192.168.25.54 with a fully-qualified VNC port number 5902. + + .. figure:: figures/vnc/vnc-2.png + :scale: 90 % + :alt: RealVNC Viewer + + Figure 2: RealVNC Viewer + +#. Press the :kbd:`Enter` key. + +#. Enter your credentials. + + * For Method 1 and Method 2, enter your VNC password. No username is + required. + * For Method 3, enter your |CL| account username and password through + GDM. + + .. note:: + + With Method 3, you cannot remotely log into your |CL| host through + VNC if you are logged in locally and vice versa. + +Optional: Configure RealVNC Image Quality +----------------------------------------- + +To increase the RealVNC viewer image quality, manually change the :guilabel:`ColorLevel` +value. Follow these steps: + +#. Right-click a connection node and select :guilabel:`Properties...`. + See Figure 3. + + .. figure:: figures/vnc/vnc-3.png + :scale: 90 % + :alt: RealVNC Viewer - change connection node properties + + Figure 3: RealVNC Viewer - change connection node properties + +#. Select the :guilabel:`Expert` tab. See Figure 4. + +#. Select the :guilabel:`ColorLevel` setting and change it to your + preferred setting. + + .. figure:: figures/vnc/vnc-4.png + :scale: 90 % + :alt: RealVNC Viewer - change ColorLevel + + Figure 4: RealVNC Viewer - change :guilabel:`ColorLevel` + +Terminate a VNC connection to your host +*************************************** + +For Method 1 and Method 2, once started, a VNC session remains active +on your |CL| host even if you close your VNC viewer app. If you want to +truly terminate an active VNC session, follow these steps: + +#. SSH into your |CL| host. +#. Open a terminal emulator. +#. Find the active VNC session display ID with the command + :command:`vncserver -list`. + + .. code-block:: bash + + vncserver -list + +#. Terminate it with the :command:`vncserver -kill` command followed by a + colon and the display ID. + + .. code-block:: bash + + vncserver -kill :[display ID] + +#. For Method 3, only the system administrator can stop and disable the + VNC service by using these commands: + + .. code-block:: bash + + systemctl stop xvnc.socket + systemctl disable xnvc.socket + + +Encrypt VNC traffic through an SSH tunnel +***************************************** + +By default, VNC traffic is not encrypted. Figure 6 shows an example warning +from RealVNC Viewer. + +.. figure:: figures/vnc/vnc-6.png + :scale: 90 % + :alt: RealVNC Viewer - Connection not encrypted warning + + Figure 6: RealVNC Viewer - Connection not encrypted warning + +To add security, VNC traffic can be routed through an SSH tunnel. This is +accomplished by following these steps: + +#. Configure the VNC server to only accept connection from localhost by + adding the :command:`-localhost` option. +#. Set up an SSH tunnel between your client system and your |CL| host. + Your client system will forward traffic from the localhost (the client) + destined for a specified fully-qualified VNC port number (on the client) + to your |CL| host with the same port number. +#. The VNC viewer app on your client system will now connect to localhost, + instead of the IP address of your |CL| host. + +Configure VNC to only accept connection from localhost +====================================================== + +For Method 1: + +#. Edit the :file:`config` file located in :file:`$HOME/.vnc` and uncomment + the `# localhost` line. It should look like this: + + .. code-block:: console + + ## Supported server options to pass to vncserver upon invocation can be listed + ## in this file. See the following manpages for more: vncserver(1) + Xvnc(1). + ## Several common ones are shown below. Uncomment and modify to your liking. + ## + # securitytypes=vncauth,tlsvnc + # desktop=sandbox + # geometry=2000x1200 + localhost + # alwaysshared + +#. If an active session exists, kill it, and then restart it. + +For Method 2: + +#. Edit the systemd service script :file:`vncserver@:[X].service` located in + :file:`/etc/systemd/system` and add :command:`-localhost` to the `ExecStart` + line. The example below uses vncserver@:5.service: + + .. code-block:: console + + [Unit] + Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5" + After=syslog.target network.target + + [Service] + Type=simple + User=vnc-user-b + PAMName=login + PIDFile=/home/%u/.vnc/%H%i.pid + ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' + ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -localhost -alwaysshared -fg + ExecStop=/usr/bin/vncserver -kill %i + + [Install] + WantedBy=multi-user.target + +#. Restart the service script: + + .. code-block:: bash + + systemctl daemon-load + systemctl restart vncserver@:5.service + +For Method 3: + +#. No change is needed to the :file:`xvnc@service` script. + + After you have restarted your VNC session, you can verify that it only + accepts connections from localhost by using the :command:`netstat` + command like this: + + .. code-block:: bash + + netstat -plant + + .. note:: + + Add the |CL| :command:`network-basic` bundle to get the :command:`netstat` + command. + +Figure 7 shows two VNC sessions (5901 and 5905) accepting connections from +any host as specified by the `0.0.0.0`'s. This is before the +:command:`-localhost` option was used. + +.. figure:: figures/vnc/vnc-7.png + :scale: 100 % + :alt: VNC session accepting connection from any host + + Figure 7: VNC sessions (5901 and 5905) accepting connections from any host + +Figure 8 shows two VNC sessions (5901 and 5905) only accepting connections from +localhost as specified by `127.0.0.1`'s. This is after the +:command:`-localhost` option was used. + +.. figure:: figures/vnc/vnc-8.png + :scale: 100 % + :alt: VNC session only accepting connection from localhost + + Figure 8: VNC sessions (5901 and 5905) only accepting connections from localhost + +Set up an SSH tunnel from your client system to your |CL| host +============================================================== + +**On Linux distros and macOS:** + +#. Open terminal emulator and enter: + + .. code-block:: bash + + ssh -L [client port number]:localhost:[fully-qualified VNC port number] \ + -N -f -l [username] [clear-linux-host-ip-address] + +#. Enter your |CL| account password (not your VNC password). + + .. note:: + + * `-L` specifies that [client port number] on the localhost (on the + client side) is forwarded to [fully-qualified VNC port number] + (on the server side). + * Replace `[client port number]` with an available client port number + (for example: 1234). For simplicity, you can make the + `[client port number]` the same as the `[fully-qualified VNC port number]`. + * Replace `[fully-qualified VNC port number]` with 5900 (default VNC + port) plus the display ID. For example, if the display ID is 2, + the fully-qualified VNC port number is is 5902. + * `-N` tells SSH to only forward ports and not execute a remote + command. + * `-f` tells SSH to go into the background before command execution. + * `-l` specifies the username to log in as. + +**On Windows:** + +#. Launch Putty. +#. Specify the |CL| VNC host to connect to. + + #. Under the :guilabel:`Category` section, select :guilabel:`Session`. + See Figure 1. + #. Enter the IP address of your |CL| host in the + :guilabel:`Host Name (or IP address)` field. + #. Set the :guilabel:`Connection type` option to :guilabel:`SSH`. + +#. Configure the SSH tunnel. See Figure 9 for an example. + + #. Under the :guilabel:`Category` section, go to + :guilabel:`Connection` > :guilabel:`SSH` > :guilabel:`Tunnels`. + + #. In the :guilabel:`Source port` field, enter an available client + port number (for example: 1234). For simplicity, you can make the + `Source port` the same as the fully-qualified VNC port number. + + #. In the :guilabel:`Destination` field, enter + `localhost:` plus the fully-qualified VNC port number. + + #. Click the :guilabel:`Add` button. + + .. figure:: figures/vnc/vnc-9.png + :scale: 100 % + :alt: Putty - configure SSH tunnel + + Figure 9: Putty - configure SSH tunnel + +#. Click the :guilabel:`Open` button. +#. Enter your |CL| account password (not your VNC password). + +Connect to a VNC session through an SSH tunnel +============================================== + +After you have set up an SSH tunnel, follow these instructions to connect to +your VNC session. + +**On Linux distros:** + +#. Open terminal emulator and enter: + + .. code-block:: bash + + vncviewer localhost:[client port number] + +**On Windows and macOS using `RealVNC`:** + +#. Start the RealVNC viewer app. +#. Enter `localhost` and the fully-qualified VNC port number. See Figure 10 + for an example. + + .. figure:: figures/vnc/vnc-10.png + :scale: 100 % + :alt: RealVNC viewer app connecting to localhost:1234 + + Figure 10: RealVNC viewer app connecting to `localhost:1234` + + .. note:: + + RealVNC will still warn that the connection is not encrypted even + though its traffic is going through the SSH tunnel. You can ignore + this warning. + +.. _RealVNC for Windows: https://www.realvnc.com/en/connect/download/viewer/windows/ +.. _RealVNC for macOS: https://www.realvnc.com/en/connect/download/viewer/macos/ +.. _Putty: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html diff --git a/zh_CN/_sources/guides/stacks/dars.rst.txt b/zh_CN/_sources/guides/stacks/dars.rst.txt new file mode 100644 index 00000000..396dbefe --- /dev/null +++ b/zh_CN/_sources/guides/stacks/dars.rst.txt @@ -0,0 +1,133 @@ +.. _dars: + +Data Analytics Reference Stack +############################## + +This guide explains how to use the :abbr:`DARS (Data Analytics Reference Stack)`, +and to optionally build your own DARS container image. + +Any system that supports Docker\* containers can be used with DARS. This steps +in this guide use |CL-ATTR| as the host system. + +.. contents:: + :local: + :depth: 1 + +The Data Analytics Reference Stack release +****************************************** + +The Data Analytics Reference Stack (DARS) provides developers and enterprises a straightforward, highly optimized software stack for storing and processing large +amounts of data. More detail is available on the +`DARS architecture and performance benchmarks`_. + +The Data Analytics Reference Stack provides two pre-built Docker images, +available on `Docker Hub`_: + +* A |CL|-derived `DARS with OpenBlas`_ stack optimized for `OpenBLAS`_ +* A |CL|-derived `DARS with Intel® MKL`_ stack optimized for `MKL`_ + +We recommend you view the latest component versions for each image in the +:file:`README` found in the `Data Analytics Reference Stack`_ GitHub\* +repository. Because |CL| is a rolling distribution, the package version numbers +in the |CL|-based containers may not be the latest released by |CL|. + +.. note:: + + The Data Analytics Reference Stack is a collective work, and each piece + of software within the work has its own license. Please see the + `DARS Terms of Use`_ for more details about licensing and usage of the Data + Analytics Reference Stack. + +Using the Docker images +*********************** + +#. To immediately start using the latest stable DARS images, pull an image + directly from `Docker Hub`_. This example uses the + `DARS with Intel® MKL`_ Docker image. + +#. Once you have downloaded the image, you can run it with + + .. code-block:: bash + + docker run -it --ulimit nofile=1000000:1000000 --name mkl + + This will launch the image and drop you into a bash shell inside the + container. You will see output similar to the following: + + .. code-block:: console + + root@fd5155b89857 /root # spark-shell + spark-shell + Config directory: /usr/share/defaults/spark/ + Welcome to + ____ __ + / __/__ ___ _____/ /__ + _\ \/ _ \/ _ `/ __/ '_/ + /___/ .__/\_,_/_/ /_/\_\ version 2.4.0 + /_/ + + Using Scala version 2.12.7 (OpenJDK 64-Bit Server VM, Java 1.8.0-internal) + Type in expressions to have them evaluated. + Type :help for more information. + + scala> + + The :command:`--ulimit nofile` parameter is currently required in order to + increase the number of open files opened at certain point by the spark + engine. + +Building DARS images +******************** + +If you choose to build your own DARS container images, you can customize +them as needed. Use the provided Dockerfile as a baseline. + +To construct images with |CL|, start with a |CL| development platform that +has the :command:`containers-basic-dev` bundle installed. Learn more about +bundles and installing them by using :ref:`swupd-guide`. + +#. Clone the `Data Analytics Reference Stack`_ GitHub\* repository. + + .. code-block:: bash + + git clone https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars -b master + +#. Inside the DARS directory, run :command:`make` to build OpenBLAS and MKL images. + + .. code-block:: bash + + make + + Run :command:`make baseline` to build the baseline CentOS image. Depending on + the system, it may take a while to finish building. + + .. code-block:: bash + + make baseline + +#. Once completed, check the resulting images with :command:`Docker` + + .. code-block:: bash + + docker images | grep dars + +#. You can use any of the resulting images to launch fully functional containers. + If you need to customize the containers, you can edit the provided :file:`Dockerfile`. + +.. _Data Analytics Reference Stack: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars + +.. _Docker Hub: https://hub.docker.com/ + +.. _OpenBLAS: http://www.openblas.net/ + +.. _MKL: https://software.intel.com/en-us/mkl + +.. _CentOS: https://www.centos.org/ + +.. _DARS with OpenBLAS: https://hub.docker.com/r/clearlinux/stacks-dars-openblas/ + +.. _DARS with Intel® MKL: https://hub.docker.com/r/clearlinux/stacks-dars-mkl/ + +.. _DARS architecture and performance benchmarks: https://clearlinux.org/stacks/data-analytics-stack-v1 + +.. _DARS Terms of Use: https://clearlinux.org/stacks/data-analytics/terms-of-use diff --git a/zh_CN/_sources/guides/stacks/dlrs/dlrs.rst.txt b/zh_CN/_sources/guides/stacks/dlrs/dlrs.rst.txt new file mode 100644 index 00000000..b61bde10 --- /dev/null +++ b/zh_CN/_sources/guides/stacks/dlrs/dlrs.rst.txt @@ -0,0 +1,592 @@ +.. _dlrs: + +Deep Learning Reference Stack +############################# + +This guide describes how to run benchmarking workloads for TensorFlow\*, +PyTorch\*, and Kubeflow in |CL-ATTR| using the Deep Learning Reference Stack. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +We created the Deep Learning Reference Stack to help AI developers deliver +the best experience on Intel® Architecture. This stack reduces complexity +common with deep learning software components, provides flexibility for +customized solutions, and enables you to quickly prototype and deploy Deep +Learning workloads. Use this guide to run benchmarking workloads on your +solution. + +The Deep Learning Reference Stack is available in the following versions: + +* `Intel MKL-DNN-VNNI`_, which is optimized using Intel® Math Kernel Library + 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. +* `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. + +.. important:: + + To take advantage of the Intel® AVX-512 and VNNI functionality with the Deep + Learning Reference Stack, you must use the following hardware: + + * Intel® AVX-512 images require an Intel® Xeon® Scalable Platform + * VNNI requires a 2nd generation Intel® Xeon® Scalable Platform + +Stack features +============== + +* `DLRS V3.0`_ release announcement. +* Deep Learning Reference Stack v2.0 including current + `PyTorch benchmark`_. +* Deep Learning Reference Stack v1.0 including current + `TensorFlow benchmark`_ results. +* `DLRS Release notes`_ on Github\* for the latest release of Deep Learning + Reference Stack. + +.. note:: + + The Deep Learning Reference Stack is a collective work, and each piece of + software within the work has its own license. Please see the `DLRS Terms of Use`_ + for more details about licensing and usage of the Deep Learning Reference Stack. + +Prerequisites +============= + +* :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: + +.. code-block:: bash + + sudo swupd bundle-list + +To install the :command:`containers-basic` or :command:`cloud-native-basic` +bundles, enter: + +.. code-block:: bash + + sudo swupd bundle-add containers-basic cloud-native-basic + +Docker is not started upon installation of the :command:`containers-basic` +bundle. To start Docker, enter: + +.. code-block:: bash + + sudo systemctl start docker + +To ensure that Kubernetes is correctly installed and configured, follow the +instructions in :ref:`kubernetes`. + +Version compatibility +===================== + +We validated these steps against the following software package versions: + +* |CL| 26240 (Minimum supported version) +* Docker 18.06.1 +* Kubernetes 1.11.3 +* Go 1.11.12 + + +.. note:: + + The Deep Learning Reference Stack was developed to provide the best user + experience when executed on a |CL| host. However, as the stack runs in a + container environment, you should be able to complete the following sections of this guide on other Linux* distributions, provided they comply with the Docker*, Kubernetes* and Go* package versions listed above. Look for your distribution documentation on how to update packages and manage Docker services. + +TensorFlow single and multi-node benchmarks +******************************************* + +This section describes running the `TensorFlow Benchmarks`_ in single node. +For multi-node testing, replicate these steps for each node. These steps +provide a template to run other benchmarks, provided that they can invoke +TensorFlow. + +.. note:: + + Performance test results for the Deep Learning Reference Stack and for this + guide were obtained using `runc` as the runtime. + +#. Download either the `Eigen`_ or the `Intel MKL-DNN`_ Docker image + from `Docker Hub`_. + +#. Run the image with Docker: + + .. code-block:: bash + + docker run --name --rm -i -t bash + + .. note:: + + Launching the Docker image with the :command:`-i` argument starts + interactive mode within the container. Enter the following commands in + the running container. + +#. Clone the benchmark repository in the container: + + .. code-block:: bash + + git clone http://github.com/tensorflow/benchmarks -b cnn_tf_v1.12_compatible + +#. Execute the benchmark script: + + .. code-block:: bash + + python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --device=cpu --model=resnet50 --data_format=NHWC + +.. note:: + + 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`_. + +PyTorch single and multi-node benchmarks +**************************************** + +This section describes running the `PyTorch benchmarks`_ for Caffe2 in +single node. + +#. Download either the `PyTorch with OpenBLAS`_ or the `PyTorch with Intel + MKL-DNN`_ Docker image from `Docker Hub`_. + +#. Run the image with Docker: + + .. code-block:: bash + + docker run --name --rm -i -t bash + + .. note:: + + Launching the Docker image with the :command:`-i` argument starts + interactive mode within the container. Enter the following commands in + the running container. + +#. Clone the benchmark repository: + + .. code-block:: bash + + git clone https://github.com/pytorch/pytorch.git + +#. Execute the benchmark script: + + .. code-block:: bash + + cd pytorch/caffe2/python + python convnet_benchmarks.py --batch_size 32 \ + --cpu \ + --model AlexNet + +Kubeflow multi-node benchmarks +****************************** + +The benchmark workload runs in a Kubernetes cluster. The guide 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 guide. + + +Kubernetes setup +================ + +Follow the instructions in the :ref:`kubernetes` tutorial to get set up on +|CL|. The Kubernetes community also has instructions for creating a cluster, +described in `Creating a single control-plane cluster with kubeadm`_. + +Kubernetes networking +===================== + +We used `flannel`_ as the network provider for these tests. If you +prefer a different network layer, refer to the Kubernetes network documentation +described in `Creating a single control-plane cluster with kubeadm`_ for setup. + +Kubectl +======= + +You can use kubectl to run commands against your Kubernetes cluster. Refer to +the `Overview of kubectl`_ 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 +====== + +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. Note that this guide 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 + + mkdir -p /opt + git clone https://github.com/tensorflow/benchmarks.git /opt/tf-benchmarks + cp launcher.py /opt + chmod u+x /opt/* + +Your entry point becomes: :file:`/opt/launcher.py`. + +This builds an image that can be consumed directly by TFJob from Kubeflow. + +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. + +On |CL|, follow these steps: + +.. code-block:: bash + + swupd bundle-add go-basic-dev + export GOPATH=$HOME/go + export PATH=$PATH:$GOPATH/bin + go get github.com/ksonnet/ksonnet + cd $GOPATH/src/github.com/ksonnet/ksonnet + make install + +After the ksonnet installation is complete, ensure that binary `ks` is +accessible across the environment. + +Kubeflow +======== + +Once you have Kubernetes running on your nodes, set up `Kubeflow`_ by +following these instructions from the `Getting Started with Kubeflow`_ guide. + +.. code-block:: bash + + export KUBEFLOW_SRC=$HOME/kflow + export KUBEFLOW_TAG="v0.4.1" + export KFAPP="kflow_app" + export K8S_NAMESPACE="kubeflow" + + mkdir ${KUBEFLOW_SRC} + cd ${KUBEFLOW_SRC} + ks init ${KFAPP} + cd ${KFAPP} + ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${KUBEFLOW_TAG}/kubeflow + ks pkg install kubeflow/common + ks pkg install kubeflow/tf-training + +Next, deploy the primary package for our purposes: tf-job-operator. + +.. code-block:: bash + + ks env rm default + kubectl create namespace ${K8S_NAMESPACE} + ks env add default --namespace "${K8S_NAMESPACE}" + ks generate tf-job-operator tf-job-operator + ks apply default -c tf-job-operator + +This creates the CustomResourceDefinition (CRD) endpoint to launch a TFJob. + +Run a TFJob +=========== + +#. Get the ksonnet registries for deploying TFJobs from `dlrs-tfjob`_. + +#. Install the TFJob components as follows: + + .. code-block:: bash + + ks registry add dlrs-tfjob github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob + + ks pkg install dlrs-tfjob/dlrs-bench + +#. Export the image name to use for the deployment: + + .. code-block:: bash + + export DLRS_IMAGE= + + .. note:: + + Replace with the image name you specified in previous steps. + +#. Generate Kubernetes manifests for the workloads and apply them using these + commands: + + .. code-block:: bash + + ks generate dlrs-resnet50 dlrsresnet50 --name=dlrsresnet50 --image=${DLRS_IMAGE} + ks generate dlrs-alexnet dlrsalexnet --name=dlrsalexnet --image=${DLRS_IMAGE} + ks apply default -c dlrsresnet50 + ks apply default -c dlrsalexnet + +This replicates and deploys three test setups in your Kubernetes cluster. + +Results of running this guide +============================= + +You must parse the logs of the Kubernetes pod to retrieve performance +data. The pods will still exist post-completion and will be in +‘Completed’ state. You can get the logs from any of the pods to inspect the +benchmark results. More information about Kubernetes logging is available +in the Kubernetes `Logging Architecture`_ documentation. + +Use Jupyter Notebook +******************** + +This example uses the `PyTorch with OpenBLAS`_ container image. After it is +downloaded, run the Docker image with :command:`-p` to specify the shared port +between the container and the host. This example uses port 8888. + +.. code-block:: bash + + docker run --name pytorchtest --rm -i -t -p 8888:8888 clearlinux/stacks-pytorch-oss bash + +After you start the container, launch the Jupyter Notebook. This +command is executed inside the container image. + +.. code-block:: bash + + jupyter notebook --ip 0.0.0.0 --no-browser --allow-root + +After the notebook has loaded, you will see output similar to the following: + +.. code-block:: console + + To access the notebook, open this file in a browser: file:///.local/share/jupyter/runtime/nbserver-16-open.html + Or copy and paste one of these URLs: + http://(846e526765e3 or 127.0.0.1):8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09 + +From your host system, or any system that can access the host's IP address, +start a web browser with the following. If you are not running the browser on +the host system, replace :command:`127.0.0.1` with the IP address of the host. + +.. code-block:: bash + + http://127.0.0.1:8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09 + +Your browser displays the following: + +.. figure:: figures/dlrs-fig-1.png + :scale: 50 % + :alt: Jupyter Notebook + +Figure 1: :guilabel:`Jupyter Notebook` + + +To create a new notebook, click :guilabel:`New` and select :guilabel:`Python 3`. + +.. figure:: figures/dlrs-fig-2.png + :scale: 50% + :alt: Create a new notebook + +Figure 2: Create a new notebook + +A new, blank notebook is displayed, with a cell ready for input. + +.. figure:: figures/dlrs-fig-3.png + :scale: 50% + :alt: New blank notebook + + +To verify that PyTorch is working, copy the following snippet into the blank +cell, and run the cell. + +.. code-block:: console + + from __future__ import print_function + import torch + x = torch.rand(5, 3) + print(x) + +.. figure:: figures/dlrs-fig-4.png + :scale: 50% + :alt: Sample code snippet + +When you run the cell, your output will look something like this: + +.. figure:: figures/dlrs-fig-5.png + :scale: 50% + :alt: code output + +You can continue working in this notebook, or you can download existing +notebooks to take advantage of the Deep Learning Reference Stack's optimized +deep learning frameworks. Refer to `Jupyter Notebook`_ for details. + +Uninstallation +************** + +To uninstall the Deep Learning Reference Stack, you can choose to stop the +container so that it is not using system resources, or you can stop the +container and delete it to free storage space. + +To stop the container, execute the following from your host system: + +#. Find the container's ID + + .. code-block:: bash + + docker container ls + + This will result in output similar to the following: + + .. code-block:: console + + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + e131dc71d339 clearlinux/stacks-dlrs-oss "/bin/sh -c 'bash'" 23 seconds ago Up 21 seconds oss + +#. You can then use the ID or container name to stop the container. This example + uses the name "oss": + + .. code-block:: bash + + docker container stop oss + + +#. Verify that the container is not running + + .. code-block:: bash + + docker container ls + + +#. To delete the container from your system you need to know the Image ID: + + .. code-block:: bash + + docker images + + This command results in output similar to the following: + + .. code-block:: console + + REPOSITORY TAG IMAGE ID CREATED SIZE + clearlinux/stacks-dlrs-oss latest 82757ec1648a 4 weeks ago 3.43GB + clearlinux/stacks-dlrs-mkl latest 61c178102228 4 weeks ago 2.76GB + +#. To remove an image use the image ID: + + .. code-block:: bash + + docker rmi 82757ec1648a + + .. code-block:: console + + # docker rmi 827 + Untagged: clearlinux/stacks-dlrs-oss:latest + Untagged: clearlinux/stacks-dlrs-oss@sha256:381f4b604537b2cb7fb5b583a8a847a50c4ed776f8e677e2354932eb82f18898 + Deleted: sha256:82757ec1648a906c504e50e43df74ad5fc333deee043dbfe6559c86908fac15e + Deleted: sha256:e47ecc039d48409b1c62e5ba874921d7f640243a4c3115bb41b3e1009ecb48e4 + Deleted: sha256:50c212235d3c33a3c035e586ff14359d03895c7bc701bb5dfd62dbe0e91fb486 + + + Note that you can execute the :command:`docker rmi` command using only the first few characters of the image ID, provided they are unique on the system. + +#. Once you have removed the image, you can verify it has been deleted with: + + .. code-block:: bash + + docker images + + +Related topics +************** + +* `DLRS V3.0`_ release announcement +* `TensorFlow Benchmarks`_ +* `PyTorch benchmarks`_ +* `Kubeflow`_ +* :ref:`kubernetes` tutorial +* `Jupyter Notebook`_ + +.. _TensorFlow: https://www.tensorflow.org/ + +.. _Kubeflow: https://www.kubeflow.org/ + +.. _Docker Hub: https://hub.docker.com/ + +.. _TensorFlow Benchmarks: https://www.tensorflow.org/guide/performance/benchmarks + +.. _PyTorch benchmarks: https://github.com/pytorch/pytorch/blob/master/caffe2/python/convnet_benchmarks.py + +.. _Creating a single control-plane cluster with kubeadm: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ + +.. _flannel: https://github.com/coreos/flannel + +.. _Getting Started with Kubeflow: https://www.kubeflow.org/docs/started/getting-started/ + +.. _Eigen: https://hub.docker.com/r/clearlinux/stacks-dlrs-oss/ + +.. _Intel MKL-DNN: https://hub.docker.com/r/clearlinux/stacks-dlrs-mkl/ + +.. _PyTorch with OpenBLAS: https://hub.docker.com/r/clearlinux/stacks-pytorch-oss + +.. _PyTorch with Intel MKL-DNN: https://hub.docker.com/r/clearlinux/stacks-pytorch-mkl + +.. _Intel MKL-DNN-VNNI: https://hub.docker.com/r/clearlinux/stacks-dlrs-mkl-vnni + +.. _DLRS V3.0: https://clearlinux.org/stacks/deep-learning-reference-stack-v3 + +.. _dlrs-tfjob: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob + +.. _Logging Architecture: https://kubernetes.io/docs/concepts/cluster-administration/logging/ + +.. _TensorFlow benchmark: https://clearlinux.org/stacks/deep-learning-reference-stack + +.. _PyTorch benchmark: https://clearlinux.org/stacks/deep-learning-reference-stack-pytorch + +.. _Jupyter Notebook: https://jupyter.org/ + +.. _Overview of kubectl: https://kubernetes.io/docs/reference/kubectl/overview/ + +.. _launcher.py: https://github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow + +.. _DLRS Terms of Use: https://clearlinux.org/stacks/deep-learning/terms-of-use + +.. _DLRS Release notes: 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 diff --git a/zh_CN/_sources/guides/stacks/greengrass.rst.txt b/zh_CN/_sources/guides/stacks/greengrass.rst.txt new file mode 100644 index 00000000..d2b3f416 --- /dev/null +++ b/zh_CN/_sources/guides/stacks/greengrass.rst.txt @@ -0,0 +1,423 @@ +.. _greengrass: + +Enable AWS Greengrass\* and OpenVINO™ toolkit +############################################# + +This guide explains how to enable AWS Greengrass\* and OpenVINO™ toolkit. +Specifically, the guide demonstrates how to: + +* Set up the Intel® edge device with |CL-ATTR| +* Install the OpenVINO™ toolkit and Amazon Web Services\* (AWS\*) + Greengrass\* software stacks +* Use AWS Greengrass\* and AWS Lambda\* to deploy the FaaS samples from + the cloud + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +Hardware accelerated Function-as-a-Service (FaaS) enables cloud developers to +deploy inference functionalities [1] on Intel® IoT edge devices with +accelerators (CPU, Integrated GPU, Intel® FPGA, and Intel® Movidius™ +technology). These functions provide a great developer experience and +seamless migration of visual analytics from cloud to edge in a secure manner +using a containerized environment. Hardware-accelerated FaaS provides the +best-in-class performance by accessing optimized deep learning libraries on +Intel® IoT edge devices with accelerators. + +Supported platforms +******************* + +* Operating System: |CL| latest release +* Hardware: Intel® core platforms (that support inference on CPU only) + +Sample description +================== + +The AWS Greengrass samples are located at `Edge-Analytics-FaaS`_. This +guide uses the 1.0 version of the source code. + +|CL| provides the following AWS Greengrass samples: + +* `greengrass_classification_sample.py`_ + + This AWS Greengrass sample classifies a video stream using classification + networks such as AlexNet and GoogLeNet and publishes top-10 results on AWS\* + IoT Cloud every second. + +* `greengrass_object_detection_sample_ssd.py`_ + + This AWS Greengrass sample detects objects in a video stream and + classifies them using single-shot multi-box detection (SSD) networks such + as SSD Squeezenet, SSD Mobilenet, and SSD300. This sample publishes + detection outputs such as class label, class confidence, and bounding box + coordinates on AWS IoT Cloud every second. + + +Install the OS on the edge device +********************************* + +Start with a clean installation of |CL| on a new system, using the +:ref:`bare-metal-install-desktop`, found in :ref:`get-started`. + +Create user accounts +==================== + +After |CL| is installed, create two user accounts. Create an administrative +user in |CL| and create a user account for the Greengrass services to use ( +see Greengrass user below). + +#. Create a new user and set a password for that user. Enter the following + commands as ``root``: + + .. code-block:: bash + + useradd + passwd + +#. Next, enable the :command:`sudo` command for your new . Add + to the `wheel` group: + + .. code-block:: bash + + usermod -G wheel -a + +#. Create a :file:`/etc/fstab` file. + + .. code-block:: bash + + touch /etc/fstab + + .. note:: + + By default, |CL| does not create an :file:`/etc/fstab` file. + You must create this file before the Greengrass service runs. + +Add required bundles +==================== + +Use the :command:`swupd` software updater utility to add the prerequisite bundles +for the OpenVINO software stack: + +.. code-block:: bash + + swupd bundle-add os-clr-on-clr desktop-autostart computer-vision-basic + +.. note:: + + Learn more about how to :ref:`swupd-guide`. + +The :command:`computer-vision-basic` bundle installs the OpenVINO™ toolkit, +and the sample models optimized for Intel® edge platforms. + +Convert deep learning models +============================ + +Locate sample models +-------------------- + +There are two types of provided models that can be used in conjunction with +AWS Greengrass for this guide: classification or object detection. + +To complete this guide using an image classification model, +download the BVLC AlexNet model files `bvlc_alexnet.caffemodel`_ and +`deploy.prototxt`_ to the default model_location at +:file:`/usr/share/openvino/models`. Any custom pre-trained classification models +can be used with the classification sample. + +For object detection, the sample models optimized for Intel® edge platforms +are included with the computer-vision-basic bundle installation at +:file:`/usr/share/openvino/models`. These models are provided as an example; +you may also use a custom SSD model with the Greengrass object detection sample. + +Run model optimizer +------------------- + +Follow the instructions in the `Model Optimizer Developer Guide`_ for converting +deep learning models to Intermediate Representation using Model Optimizer. To +optimize either of the sample models described above, run one of the following commands. + +For classification using BVLC AlexNet model: + +.. code-block:: bash + + python3 mo.py --framework caffe --input_model + /bvlc_alexnet.caffemodel --input_proto + /deploy.prototxt --data_type --output_dir + --input_shape [1,3,227,227] + +For object detection using SqueezeNetSSD-5Class model: + +.. code-block:: bash + + python3 mo.py --framework caffe --input_model + /'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.caffemodel + --input_proto /'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.prototxt + --data_type --output_dir + +In these examples: + +* `` is :file:`/usr/share/openvino/models`. + +* `` is FP32 or FP16, depending on target device. + +* `` is the directory where the Intermediate Representation + (IR) is stored. IR contains .xml format corresponding to the network + structure and .bin format corresponding to weights. This .xml file should be + passed to :command:``. + +* In the BVLC AlexNet model, the prototxt defines the input shape with + batch size 10 by default. In order to use any other batch size, the + entire input shape must be provided as an argument to the model + optimizer. For example, to use batch size 1, you must provide: + `--input_shape [1,3,227,227]` + + +Configure AWS Greengrass group +****************************** + +For each Intel® edge platform, you must create a new AWS Greengrass group +and install AWS Greengrass core software to establish the connection between +cloud and edge. + +#. To create an AWS Greengrass group, follow the instructions in + `Configure AWS IoT Greengrass on AWS IoT`_. + +#. To install and configure AWS Greengrass core on edge platform, follow + the instructions in `Start AWS Greengrass on the Core Device`_. In + step 8(b), download the x86_64 Ubuntu\* configuration of the AWS Greengrass + core software. + + .. note:: + + You do not need to run the :file:`cgroupfs-mount.sh` script in step #6 + of Module 1 of the `AWS Greengrass Developer Guide`_ because this is + enabled already in |CL|. + +#. Be sure to download both the security resources and the AWS Greengrass + core software. + + .. note:: + + Security certificates are linked to your AWS account. + + +Create and package Lambda function +********************************** + +#. Complete steps 1-4 of the AWS Greengrass guide at + `Create and Package a Lambda Function`_. + + .. note:: + + This creates the tarball needed to create the AWS Greengrass + environment on the edge device. + + +#. In step 5, replace :file:`greengrassHelloWorld.py` with the classification or + object detection Greengrass sample from `Edge-Analytics-Faas`_: + + * Classification: `greengrass_classification_sample.py`_ + + * Object Detection: `greengrass_object_detection_sample_ssd.py`_ + +#. Zip the selected Greengrass sample with the extracted Greengrass SDK folders + from the previous step into :file:`greengrass_sample_python_lambda.zip`. + + The zip should contain: + + * greengrasssdk + + * greengrass classification or object detection sample + + For example: + + .. code-block:: bash + + zip -r greengrass_lambda.zip greengrasssdk + greengrass_object_detection_sample_ssd.py + +#. Return to the AWS documentation section called + `Create and Package a Lambda Function`_ and complete the procedure. + + .. note:: + + In step 9(a) of the AWS documentation, while uploading the zip file, + make sure to name the handler to one of the following, depending on the + AWS Greengrass sample you are using: + + * greengrass_object_detection_sample_ssd.function_handler + * greengrass_classification_sample.function_handler + + +Configure Lambda function +************************* + +After creating the Greengrass group and the Lambda function, start +configuring the Lambda function for AWS Greengrass. + +#. Follow steps 1-8 in `Configure the Lambda Function for AWS IoT Greengrass`_ + in the AWS documentation. + +#. In addition to the details mentioned in step 8, change the Memory limit + to 2048 MB to accommodate large input video streams. + +#. Add the following environment variables as key-value pairs when editing + the Lambda configuration and click on update: + + .. list-table:: **Table 1. Environment variables: Lambda configuration** + :widths: 20 80 + :header-rows: 1 + + * - Key + - Value + * - PARAM_MODEL_XML + - /, where is user specified and + contains IR.xml, the Intermediate Representation file from Intel® Model Optimizer. + For this guide, should be set to '/usr/share/openvino/models' + or one of its subdirectories. + * - PARAM_INPUT_SOURCE + - /input.webm to be specified by user. Holds both input and + output data. For webcam, set PARAM_INPUT_SOURCE to ‘/dev/video0’ + * - PARAM_DEVICE + - "CPU" + * - PARAM_CPU_EXTENSION_PATH + - /usr/lib64/libcpu_extension.so + * - PARAM_OUTPUT_DIRECTORY + - to be specified by user. Holds both input and output + data + * - PARAM_NUM_TOP_RESULTS + - User specified for classification sample. + (e.g. 1 for top-1 result, 5 for top-5 results) + +#. Add subscription to subscribe, or publish messages from AWS Greengrass + Lambda function by completing the procedure in `Configure the Lambda Function for AWS IoT Greengrass`_. + + .. note:: + + The optional topic filter field is the topic mentioned inside the Lambda function. In this guide, sample topics include the following: + :command:`openvino/ssd` or :command:`openvino/classification` + +Add local resources +=================== + +Refer to the AWS documentation `Access Local Resources with Lambda Functions and Connectors`_ +for details about local resources and access privileges. + +The following table describes the local resources needed for the CPU: + +.. list-table:: **Local resources** + :widths: 20, 20, 20, 20 + :header-rows: 1 + + * - Name + - Resource type + - Local path + - Access + + * - ModelDir + - Volume + - to be specified by user + - Read-Only + + * - Webcam + - Device + - /dev/video0 + - Read-Only + + * - DataDir + - Volume + - to be specified by user. Holds both input and output + data. + - Read and Write + +Deploy Lambda function +********************** + +Refer to the AWS documentation `Deploy Cloud Configurations to an AWS IoT Greengrass Core Device`_ for instructions on how to deploy the lambda function to AWS +Greengrass core device. Select *Deployments* on the group page and follow the instructions. + +Output consumption +================== + +There are four options available for output consumption. These options are +used to report, stream, upload, or store inference output at an interval +defined by the variable :command:`reporting_interval` in the AWS Greengrass samples. + +#. IoT cloud output: + + This option is enabled by default in the AWS Greengrass samples using the + :command:`enable_iot_cloud_output` variable. You can use it to verify the lambda + running on the edge device. It enables publishing messages to IoT cloud + using the subscription topic specified in the lambda. (For example, topics + may include :command:`openvino/classification` for classification and :command:`openvino/ssd` + for object detection samples.) For classification, top-1 result with class + label are published to IoT cloud. For SSD object detection, detection + results such as bounding box coordinates of objects, class label, and + class confidence are published. + + Refer to the AWS documentation + `Verify the Lambda Function Is Running on the Device`_ for instructions on + how to view the output on IoT cloud. + +#. Kinesis streaming: + + This option enables inference output to be streamed from the edge device + to cloud using Kinesis [3] streams when :command:`enable_kinesis_output` is set + to True. The edge devices act as data producers and continually push + processed data to the cloud. You must set up and specify + Kinesis stream name, Kinesis shard, and AWS region in the AWS Greengrass + samples. + +#. Cloud storage using AWS S3 bucket: + + When the :command:`enable_s3_jpeg_output` variable is set to True, it enables + uploading and storing processed frames (in jpeg format) in an AWS S3 + bucket. You must set up and specify the S3 bucket name in the AWS + Greengrass samples to store the JPEG images. The images are named using the + timestamp and uploaded to S3. + +#. Local storage: + + When the :command:`enable_s3_jpeg_output` variable is set to True, it enables + storing processed frames (in jpeg format) on the edge device. The images + are named using the timestamp and stored in a directory specified by + :command:`PARAM_OUTPUT_DIRECTORY`. + +References +********** + +#. AWS Greengrass: https://aws.amazon.com/greengrass/ +#. AWS Lambda: https://aws.amazon.com/lambda/ +#. AWS Kinesis: https://aws.amazon.com/kinesis/ + +.. _Edge-Analytics-FaaS: https://github.com/intel/Edge-Analytics-FaaS/tree/v1.0/AWS%20Greengrass + +.. _bvlc_alexnet.caffemodel: http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel + +.. _deploy.prototxt: https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/deploy.prototxt + +.. _greengrass_classification_sample.py: https://github.com/intel/Edge-Analytics-FaaS/blob/v1.0/AWS%20Greengrass/greengrass_classification_sample.py + +.. _greengrass_object_detection_sample_ssd.py: https://github.com/intel/Edge-Analytics-FaaS/blob/v1.0/AWS%20Greengrass/greengrass_object_detection_sample_ssd.py + +.. _Model Optimizer Developer Guide: https://software.intel.com/en-us/articles/OpenVINO-ModelOptimizer + +.. _AWS Greengrass Developer Guide: https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html + +.. _Configure AWS IoT Greengrass on AWS IoT: https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-config.html + +.. _Start AWS Greengrass on the Core Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-device-start.html + +.. _Configure the Lambda Function for AWS IoT Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/config-lambda.html + +.. _Access Local Resources with Lambda Functions and Connectors: https://docs.aws.amazon.com/greengrass/latest/developerguide/access-local-resources.html + +.. _Deploy Cloud Configurations to an AWS IoT Greengrass Core Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/configs-core.html + +.. _Verify the Lambda Function Is Running on the Device: https://docs.aws.amazon.com/greengrass/latest/developerguide/lambda-check.html + +.. _Create and Package a Lambda Function: https://docs.aws.amazon.com/greengrass/latest/developerguide/create-lambda.html diff --git a/zh_CN/_sources/guides/telemetrics/telem-guide.rst.txt b/zh_CN/_sources/guides/telemetrics/telem-guide.rst.txt new file mode 100644 index 00000000..aa68b3aa --- /dev/null +++ b/zh_CN/_sources/guides/telemetrics/telem-guide.rst.txt @@ -0,0 +1,862 @@ +.. _telem-guide: + +Telemetrics +########### + +This guide describes the |CL-ATTR| telemetry solution. + +.. important:: + + Telemetry in |CL| is **opt-in**. The telemetry client is **not** active + and sends **no** data until you explicitly enable it. + +.. note:: + + The telemetry functionality adheres to `Intel privacy policies`_ regarding + the collection and use of :abbr:`PII (Personally Identifiable Information)` + and is open source. + + No intentionally identifiable information about the user or system owner is + collected. + +.. contents:: + :local: + :depth: 1 + +Overview +******** + +Telemetrics in |CL| is a client and server solution used to collect +data from running |CL| systems to help quickly identify and fix bugs in the +OS. Both client and server are customizable, and an API is available on the +client side for instrumenting your code for debug and analysis. + +Telemetry, one of the key features of |CL|, enables developers to observe and +proactively address issues in the OS before end users are impacted. + +Telemetrics is a combination word made from: + +* Telemetry, which is sensing and reporting data. +* Analytics, which is using visualization and statistical inferencing to make + sense of the reported data. + +|CL| telemetry reports system-level debug/crash information using specialized +probes. The probes monitor system tasks such as swupd, kernel oops, machine +error checks, and the BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to focus quickly on an issue and monitor corrective actions. + +|CL| telemetry is fully customizable and can be used during software +development for debugging purposes. You can use the libtelemetry library in +your code to create custom telemetry records. You can also use the +telem-record-gen utility in script files for light-touch record creation +where instrumenting code files doesn't make sense. + +The |CL| telemetrics solution is an **opt-in** choice on the client side. +By default, the telemetry client is disabled until you choose to enable it. +Enabling the client is covered in this guide. + +Architecture +============ + +|CL| telemetry has two fundamental components, which are shown in Figure 1: + +* Client: generates and delivers records to the backend server via the network. + +* Backend: receives records sent from the client and displays the cumulative + content through a specialized web interface. + +.. figure:: figures/telemetry-e2e.png + :alt: Figure 1, Telemetry Architecture + + Figure 1: :guilabel:`|CL| Telemetry Architecture` + +The telemetry client provides the front end of the telemetrics solution and +includes the following components: + +* telemprobd, which is a daemon that receives and prepares telemetry records + from probes and spools them to disk. +* telempostd, which is a daemon that manages spooled telemetry records and + delivers these records according to configurable settings. +* probes, which collect specific types of data from the operating system. +* libtelemetry, which is the API that telemetrics probes use to create records. + +The telemetry backend provides the server-side component of the telemetrics +solution and consists of: + +* Nginx web server. +* Two Flask apps: + + * Collector, which is an ingestion web app for records received from client + probes. + * TelemetryUI, which is a web app that exposes different views to visualize + the telemetry data. +* PostgreSQL as the underlying database server. + +.. note:: + + The default telemetry backend server is hosted by the Intel |CL| development + team and is not viewable outside the Intel firewall. To collect your own + records, you must set up your own telemetry backend server. + +How to use +********** + +From a workflow perspective, the |CL| telemetrics system is straightforward. +On the client side, the main decisions after installation and enabling +telemetry involve what to do with the record data generated by the probes. +You can send the data to the default or a custom backend server, keep the data +local to the system, or both. The backend server has a more complex setup, but +once it's running, it is simple to use and configure. + +This section describes some of the possible scenarios for configuring +the |CL| telemetrics system, and suggests which ones make sense according to +your needs. + +Scenarios +========= + +#. Enable telemetry: + + Before probes can generate records, the telemetry client daemons must be + enabled. You can configure the client before enabling by creating a custom + :file:`telemetrics.conf` file that you place in the :file:`/etc/telemetrics` + directory. If you choose to use the default settings, records will be sent + to the telemetrics backend server managed by the |CL| development team at + Intel. + +#. Save record data locally: + + You can configure the telemetry client to save records locally. This is + convenient when you want instant feedback during a development cycle, or to + track system issues if you believe there is a machine specific problem. The + client can be set not to send records at all, or to both keep the records + locally and send to the backend server. + +#. Set up a server to collect data: + + Whether you are managing a network of |CL| systems or you don't want to + send records to the default telemetry server, you can set up a backend + server to collect your records. The backend server can be installed on any + Linux system and provides the same dashboard as the default server. + + +#. Instrument your code with the libtelemetry API: + + The :command:`telemetrics` bundle includes the libtelemetry C library, which + exposes an API used by the telemprobd and telempostd daemons. You can use + these in your applications as well. The API documentation is found in the + :file:`telemetry.h` file in `Telemetrics client`_ repository. + + +Examples +******** + +.. contents:: + :local: + :depth: 1 + +Enable or disable telemetry +=========================== + +#. Enabling during installation: + + During the initial installation of |CL|, you are requested to join the + stability enhancement program and allow |CL| to collect anonymous reports to + improve system stability. If you choose not to join this program, then the + telemetry software bundle is not added to your system. Choosing to join will + automatically enable telemetry on your system after installation is + complete. + +#. Enabling after install: + + To start telemetry on your system, run the following command: + + .. code-block:: bash + + sudo telemctl start + + This enables and starts the :command:`telemprobd` and :command:`telempostd` + daemons. Your system will begin to send telemetry data to the server defined + in the file :file:`/etc/telemetrics/telemetrics.conf`. If this file does not + exist, the :command:`telemprobd` and :command:`telempostd` daemons will use + the file :file:`/usr/share/defaults/telemetrics/telemetrics.conf`. + +#. Disabling after install: + + To disable both of the telemetry daemons, run the following command: + + .. code-block:: bash + + sudo telemctl stop + +#. Opt in to telemetry: + + To opt-in to the telemetry services, simply enter the opt-in command, which + also starts the service: + + .. code-block:: bash + + sudo telemctl opt-in + + This removes the :file:`/etc/telemetrics/opt-out` file, if it exists, and + starts the telemetry services. + + .. note:: + + To opt-in but not immediately start telemetry services, you must + run the command :command:`sudo telemctl stop` after the :command:`opt-in` + command is entered. Once you are ready to start the service, enter the + command :command:`sudo telemctl start`. + +#. Opt out of telemetry: + + To stop sending telemetrics data from your system, opt out of the telemetry + service: + + .. code-block:: bash + + sudo telemctl opt-out + + This creates the file :file:`/etc/telemetrics/opt-out` and stops the + telemetry services. + + +Saving data locally +=================== + +This example requires |CL| to be installed and telemetry to be enabled on the +system. + +To change how records are managed, copy the default +:file:`/usr/share/defaults/telemetrics/telemetrics.conf` file to +:file:`/etc/telemetrics/telemetrics.conf` and edit it. The changes in the +:file:`/etc/telemetrics/telemetrics.conf` file will override the defaults in +the :file:`/usr/share/defaults/telemetrics/telemetrics.conf` file. You may need +root permissions to create and edit files in :file:`/etc`. For each +example, and for any time you make changes to the configuration file, you must +restart the client daemons to pick up the changes: + +.. code-block:: bash + + sudo telemctl restart + + +The :command:`telemctl journal` command gives you access to features and +options of the telemetry journal to assist with system analytics and debug. +:command:`telemctl journal` has a number of options to help filter records. +Use :command:`-h` or :command:`--help` to view usage options. + + +#. Keep a local copy and send records to backend server: + + To keep a local copy of the telemetry record and also send it on to the + backend server, we will need to change the + :guilabel:`record_retention_enabled` configuration key value to + :guilabel:`true`. + +#. Keep all records -- don't send to backend server: + + To keep records on the system without sending them to a backend server, set + the :guilabel:`record_server_delivery_enabled` key value to + :guilabel:`false`. Note that you will also need to ensure the + :guilabel:`record_retention_enabled` configuration key value is set to + :guilabel:`true` or the system will not keep local copies. + +#. Keep and send records to custom server: + + This assumes you have set up a custom server according to the next example. + + The server is identified by the :guilabel:`server` setting, and by default + records are sent to the |CL| server + :guilabel:`server=https://clr.telemetry.intel.com/v2/collector`. To change + this, you can use an IP address or fully qualified domain name. + + +Set up a back-end server to collect telemetry records +===================================================== + +For this example, start with a clean installation of |CL| on a new system +using the :ref:`bare-metal-install-server` getting started guide and: + +#. Join the :guilabel:`Stability Enhancement Program` to install and + enable the telemetrics components. + +#. Select the manual installation method with the following settings: + + * Set the hostname to :guilabel:`clr-telem-server`, + * Create an administrative user named :guilabel:`clear` and add this user + to sudoers + +#. Log in with your administrative user, from your :file:`$HOME` directory, + run :command:`git` to clone the :guilabel:`telemetrics-backend` repository + into the :file:`$HOME/telemetrics-backend` directory: + + .. code-block:: console + + git clone https://github.com/clearlinux/telemetrics-backend + + .. note:: + + You may need to set up the :envvar:`https_proxy` environment variable if + you have issues reaching github.com. + +#. Change your current working directory to :file:`telemetrics-backend/scripts`. +#. Before you install the telemetrics backend with the :file:`deploy.sh` script + file in the next step, here is an explanation of the options to be specified: + + * :command:`-a install` to perform an install + * :command:`-d clr` to install to a |CL| distro + * :command:`-H localhost` to set the domain to localhost + + .. caution:: + The :file:`deploy.sh` shell script has minimal error checking and makes + several changes to your system. Be sure that the options you define on + the cmdline are correct before proceeding. + +#. Run the shell script from the :file:`$HOME/telemetrics-backend/scripts` + directory: + + .. code-block:: console + + ./deploy.sh -H localhost -a install -d clr + + + + The script starts and lists all the defined options and prompts you for + the :guilabel:`PostgreSQL` database password. + + .. code-block:: console + + Options: + host: localhost + distro: clr + action: install + repo: https://github.com/clearlinux/telemetrics-backend + source: master + type: git + DB password: (default: postgres): + +#. For the :guilabel:`DB password:`, press the :kbd:`Enter` key to accept the + default password `postgres`. + + .. note:: + + The :file:`deploy.sh` script uses :command:`sudo` to run commands and you + may be prompted to enter your user password at any time while the script + is executing. If this occurs, enter your user password to execute the + :command:`sudo` command. + + +#. After all the server components have been installed, you are prompted to + enter the :guilabel:`PostgreSQL` database password to change it as + illustrated below: + + .. code-block:: console + + Enter password for 'postgres' user: + New password: + Retype new password: + passwd: password updated successfully + + Enter `postgres` for the current value of the password and then enter a new + password, retype it to verify the new password and the :guilabel:`PostgreSQL` + database password will be updated. + +#. After the installation is complete, you can use your web browser to view the + new server by opening the browser on the system and typing in localhost + in the address bar. You should see a web page similar to the one shown in + Figure 2 below. + + .. figure:: figures/telemetry-backend-1.png + :alt: Telemetry UI + + Figure 2: :guilabel:`Telemetry UI` + +Create records with telem-record-gen +==================================== + +The telemetrics bundle provides a record generator tool called +`telem-record-gen`. This tool can be used to create records from shell +scripts or the command line when writing a probe in C is not desirable. +Records are sent to the backend server, and can also be echoed to stdout. + +There are three ways to supply the payload to the record. + +#. On the command line, use the :command:`-p ` option: + + .. code-block:: bash + + telem-record-gen -c a/b/c -n -o -p 'payload goes here' + + .. code-block:: console + + record_format_version: 4 + classification: a/b/c + severity: 1 + machine_id: FFFFFFFF + creation_timestamp: 1539023189 + arch: x86_64 + host_type: innotek GmbH|VirtualBox|1.2 + build: 25180 + kernel_version: 4.14.71-404.lts + payload_format_version: 1 + system_name: clear-linux-os + board_name: VirtualBox|Oracle Corporation + cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz + bios_version: VirtualBox + event_id: 2236710e4fc11e4a646ce956c7802788 + + payload goes here + +#. Specify a file that contains the payload with the option + :command:`-P path/to/file`. + + .. code-block:: bash + + telem-record-gen -c a/b/c -n -o -P ./payload_file.txt + + .. code-block:: console + + record_format_version: 4 + classification: a/b/c + severity: 1 + machine_id: FFFFFFFF + creation_timestamp: 1539023621 + arch: x86_64 + host_type: innotek GmbH|VirtualBox|1.2 + build: 25180 + kernel_version: 4.14.71-404.lts + payload_format_version: 1 + system_name: clear-linux-os + board_name: VirtualBox|Oracle Corporation + cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz + bios_version: VirtualBox + event_id: d73d6040afd7693cccdfece479df9795 + + payload read from file + +#. If the :command:`-p` or :command:`-P` options are absent, the tool reads + from stdin so you can use it in a :file:`heredoc` in scripts. + + .. code-block:: bash + + #telem-record-gen -c a/b/c -n -o << HEOF + payload read from stdin + HEOF + + .. code-block:: console + + record_format_version: 4 + classification: a/b/c + severity: 1 + machine_id: FFFFFFFF + creation_timestamp: 1539023621 + arch: x86_64 + host_type: innotek GmbH|VirtualBox|1.2 + build: 25180 + kernel_version: 4.14.71-404.lts + payload_format_version: 1 + system_name: clear-linux-os + board_name: VirtualBox|Oracle Corporation + cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz + bios_version: VirtualBox + event_id: 2f070e8e71679f2b1f28794e3a6c42ee + + payload read from stdin + +Set a static machine id +======================= + +The machine id reported by the telemetry client is rotated every three days +for privacy reasons. If you wish to have a static machine id for testing +purposes, you can opt in by creating a file named `opt-in-static-machine-id` +in the directory :file:`/etc/telemetrics/`. + +#. Create a directory `telemetrics`. + + .. code-block:: bash + + sudo mkdir -p /etc/telemetrics + + +#. Create the file and replace the "unique machine ID" with your desired + static machine ID. + + .. code-block:: bash + + echo "unique machine ID" | sudo tee /etc/telemetrics/opt-in-static-machine-id + +.. note:: + + The machine ID is different than the system hostname. + +Instrument your code with the libtelemetry API +============================================== + +Prerequisites +------------- + +Confirm that the telemetrics header file is located on the system at +:file:`usr/include/telemetry.h` The `latest version`_ of the file can also be +found on github for reference, but installing the :command:`telemetry` bundle +will install the header file that matches your |CL| version. + +#. Includes and variables: + + You must include the following headers in your code to use the API: + + .. code-block:: console + + #define _GNU_SOURCE + #include + #include + #include + #include + + + Use the following code to create the variables needed to hold the data for + the record to be created: + + .. code-block:: console + + uint32_t severity = 1; + uint32_t payload_version = 1; + char classification[30] = "org.clearlinux/hello/world"; + struct telem_ref *tm_handle = NULL; + char *payload; + int ret = 0; + + + + Severity: + Type: uint32_t + Value: Severity field value. Accepted values are in the range 1-4, with + 1 being the lowest severity, and 4 being the highest severity. Values + provided outside of this range are clamped to 1 or 4. [low, med, high, + crit] + + Payload_version: + Type: uint32_t + Value: Payload format version. The only supported value right now is 1, + which indicates that the payload is a freely-formatted (unstructured) + string. Values greater than 1 are reserved for future use. + + Classification: + Type: char array + Value: It should have the form, DOMAIN/PROBENAME/REST: DOMAIN is the + reverse domain to use as a namespace for the probe (e.g. org.clearlinux); + PROBENAME is the name of the probe; and REST is an arbitrary value that + the probe should use to classify the record. The maximum length for the + classification string is 122 bytes. Each sub-category may be no longer + than 40 bytes long. Two / delimiters are required. + + Tm_handle: + Type: Telem_ref struct pointer + Value: Struct pointer declared by the caller, The struct is initialized + if the function returns success. + + Payload: + Type: char pointer + Value: The payload to set + +#. For this example, we'll set the payload to “hello” by using + :command:`asprintf()`: + + .. code-block:: console + + if (asprintf(&payload, "hello\n") < 0) { + exit(EXIT_FAILURE); + } + + The functions :command:`asprintf()` and :command:`vasprintf()` are analogs of + :command:`sprintf(3)` and :command:`vsprintf(3)`, except that they allocate a + string large enough to hold the output including the terminating null byte + ('\0'), and return a pointer to it via the first argument. This pointer + should be passed to :command:`free(3)` to release the allocated storage when + it is no longer needed. + +#. Create the new telemetry record: + + The function :command:`tm_create_record()` initializes a telemetry record and + sets the severity and classification of that record, as well as the payload + version number. The memory needed to store the telemetry record is allocated + and should be freed with :command:`tm_free_record()` when no longer needed. + + .. code-block:: console + + if ((ret = tm_create_record(&tm_handle, severity, classification, payload_version)) < 0) { + printf("Failed to create record: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + +#. Set the payload field of a telemetrics record: + + The function :command:`tm_set_payload()` attaches the provided telemetry record + data to the telemetry record. The current maximum payload size is 8192b. + + .. code-block:: console + + if ((ret = tm_set_payload(tm_handle, payload)) < 0) { + printf("Failed to set record payload: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + free(payload); + + The :command:`free()` function frees the memory space pointed to by `ptr`, which + must have been returned by a previous call to :command:`malloc()`, + :command:`calloc()`, or :command:`realloc()`. Otherwise, or if + :command:`free(ptr)` has already been called before, undefined behavior + occurs. If `ptr` is NULL, no operation is performed. + +#. Send a record to the telemetrics daemon: + + The function :command:`tm_send_record()` delivers the record to the local + :command:`telemprobd(1)` service. Since the telemetry record was allocated by + the program it should be freed with :command:`tm_free_record()` when it is no + longer needed. + + .. code-block:: console + + if ((ret = tm_send_record(tm_handle)) < 0) { + printf("Failed to send record to daemon: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } else { + printf("Successfully sent record to daemon.\n"); + ret = 0; + } + fail: + tm_free_record(tm_handle); + tm_handle = NULL; + + return ret; + + +#. A full sample application with compiling flags: + + Create a new file :file:`test.c` and add the following code: + + .. code-block:: console + + #define _GNU_SOURCE + #include + #include + #include + #include + + int main(int argc, char **argv) + { + uint32_t severity = 1; + uint32_t payload_version = 1; + char classification[30] = "org.clearlinux/hello/world"; + struct telem_ref *tm_handle = NULL; + char *payload; + + int ret = 0; + + if (asprintf(&payload, "hello\n") < 0) { + exit(EXIT_FAILURE); + } + + if ((ret = tm_create_record(&tm_handle, severity, classification, payload_version)) < 0) { + printf("Failed to create record: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + + if ((ret = tm_set_payload(tm_handle, payload)) < 0) { + printf("Failed to set record payload: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } + + free(payload); + + if ((ret = tm_send_record(tm_handle)) < 0) { + printf("Failed to send record to daemon: %s\n", strerror(-ret)); + ret = 1; + goto fail; + } else { + printf("Successfully sent record to daemon.\n"); + ret = 0; + } + fail: + tm_free_record(tm_handle); + tm_handle = NULL; + + return ret; + } + + + + Compile with the gcc compiler, using this command: + + .. code-block:: bash + + gcc test.c -ltelemetry -o test_telem + + + Test to ensure the program is working: + + .. code-block:: bash + + ./test_telem + Successfully sent record to daemon. + + .. note:: + + A full example of the `heartbeat probe`_ in C is documented in the + source code. + +Reference +********* + +.. contents:: + :local: + :depth: 1 + +The telemetry API +================= + +Installing the :command:`telemetrics` bundle includes the libtelemetry C library, +which exposes an API used by the telemprobd and telempostd daemons. You can +use these in your applications as well. The API documentation is found in the +:file:`telemetry.h` file in `Telemetrics client`_ repository. + +Client configuration +==================== + +The telemetry client will look for the configuration file located at +:file:`/etc/telemetrics/telemetrics.conf` and use it if it exists. If the +file does not exist, the client will use the default configuration located +at :file:`/usr/share/defaults telemetrics/telemetrics.conf`. To modify or +customize the configuration, copy the file from +:file:`/usr/share/defaults/telemetrics` to :file:`/etc/telemetrics` and edit it. + +Configuration options +--------------------- + +The client uses the following configuration options from the config file: + +server + This specifies the web server to which telempostd sends the telemetry records. +socket_path + This specifies the path of the unix domain socket on which the telemprobd + listens for connections from the probes. +spool_dir + This configuration option is related to spooling. If the daemon is not able + to send the telemetry records to the backend server due to reasons such as + the network availability, then it stores the records in a spool directory. + This option specifies the path of the spool directory. This directory should + be owned by the same user as the daemon. +record_expiry + This is the time, in minutes, after which the records in the spool directory + are deleted by the daemon. +spool_process_time + This specifies the time interval, in seconds, that the daemon waits for + before checking the spool directory for records. The daemon picks up the + records in the order of modification date and tries to send the record to the + server. It sends a maximum of 10 records at a time. If it was able to send a + record successfully, it deletes the record from the spool. If the daemon + finds a record older than the "record_expiry" time, then it deletes that + record. The daemon looks at a maximum of 20 records in a single spool run loop. +rate_limit_enabled + This determines whether rate-limiting is enabled or disabled. When enabled, + there is a threshold on both records sent within a window of time, and record + bytes sent within a window a time. +record_burst_limit + This is the maximum amount of records allowed to be passed by the daemon + within the record_window_length of time. If set to -1, the rate-limiting for + record bursts is disabled. +record_window_length + The time, in minutes (0-59), that establishes the window length for the + record_burst_limit. For example, if record_burst_window=1000 and + record_window_length=15, then no more than 1000 records can be passed within + any given fifteen-minute window. +byte_burst_limit + This is the maximum amount of bytes that can be passed by the daemon within + the byte_window_length of time. If set to -1, the rate-limiting for byte + bursts is disabled. +byte_window_length + This is the time, in minutes (0-59), that establishes the window length for + the byte_burst_limit. +rate_limit_strategy + This is the strategy chosen once the rate-limiting threshold has been + reached. Currently the options are 'drop' or 'spool', with spool being the + default. If spool is chosen, records will be spooled and sent at a later time. +record_retention_enabled + When this key is enabled (true) the daemon saves a copy of the payload on + disk from all valid records. To avoid the excessive use of disk space only + the latest 100 records are kept. The default value for this configuration key + is false. +record_server_delivery_enabled + This key controls the delivery of records to server; when enabled (default + value), the record will be posted to the address in the configuration file. + If this configuration key is disabled (false), records will not be spooled or + posted to backend. This configuration key can be used in combination with + record_retention_enabled to keep copies of telemetry records locally only. + + .. note:: + + Configuration options may change as the telemetry client evolves. + Please use the comments in the file itself as the most accurate + reference for configuration. + + +Client run-time options +======================= + +The |CL| telemetry client provides an admin tool called :guilabel:`telemctl` +for managing the telemetry services and probes. The tool is located in +:file:`/usr/bin`. Running it with no argument results in the following: + +.. code-block:: bash + + sudo telemctl + +.. code-block:: console + + /usr/bin/telemctl - Control actions for telemetry services + stop Stops all running telemetry services + start Starts all telemetry services + restart Restarts all telemetry services + is-active Checks if telemprobd and telempostd are active + opt-in Opts in to telemetry, and starts telemetry services + opt-out Opts out of telemetry, and stops telemetry services + journal Prints telemetry journal contents. Use -h argument for more + options + +start/stop/restart +------------------ + +The commands to start, stop and restart the telemetry services manage all +required services and probes on the system. There is no need to separately +start/stop/restart the two client daemons telemprobd and telempostd. +The :command:`restart` command option will call :command:`telemctl stop` +followed by :command:`telemctl start` . + +is-active +--------- + +The :command:`is-active` option reports whether the two client daemons are +active. This is useful to verify that the :command:`opt-in` and +:command:`opt-out` options have taken effect, or to ensure that telemetry is +functioning on the system. Note that both daemons are verified. + +.. code-block:: bash + + sudo telemctl is-active + +.. code-block:: console + + telemprobd : active + telempostd : active + + +.. _Telemetrics client: https://github.com/clearlinux/telemetrics-client/ +.. _latest version: https://github.com/clearlinux/telemetrics-client/tree/master/src +.. _heartbeat probe: https://github.com/clearlinux/telemetrics-client/tree/master/src/probes/hello.c +.. _Intel privacy policies: https://www.intel.com/content/www/us/en/privacy/intel-privacy-notice.html diff --git a/zh_CN/_sources/index.rst.txt b/zh_CN/_sources/index.rst.txt new file mode 100644 index 00000000..d8df5d08 --- /dev/null +++ b/zh_CN/_sources/index.rst.txt @@ -0,0 +1,47 @@ +.. _clear-linux: + +|CL-PRJ| +############################################# + +Welcome to the |CL-ATTR| documentation pages, the source for |CL| documentation. + +.. raw:: html + + + +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. + +:ref:`about` + Clear Linux is a little different from other distros. Here are some + important tools and concepts for managing your install. + +:ref:`guides` + Guides show how to complete common tasks that help you leverage |CL| native + features effectively. From basic system configuration to advanced + management of a cloud installation, there is a guide for you. + +:ref:`tutorials` + |CL| tutorials provide step-by-step instructions on how |CL| features can + be used and extended, frequently with third-party tools. + +:ref:`reference` + 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: + + get-started/get-started + about + guides/guides + tutorials/tutorials + reference/reference + FAQ/faq \ No newline at end of file diff --git a/zh_CN/_sources/reference/bundle-commands.rst.txt b/zh_CN/_sources/reference/bundle-commands.rst.txt new file mode 100644 index 00000000..4b5593d2 --- /dev/null +++ b/zh_CN/_sources/reference/bundle-commands.rst.txt @@ -0,0 +1,47 @@ +.. _bundle-commands: + +Useful bundle commands +###################### + +To see a list of currently installed bundles, enter: + +.. code-block:: bash + + sudo swupd bundle-list + +To see the list of all available bundles, enter: + +.. code-block:: bash + + sudo swupd bundle-list --all + +Alternatively, you can view our :ref:`available bundles ` +webpage. + +To search for bundles and their contents, enter: + +.. code-block:: bash + + sudo swupd search [bundle name] + +To add a bundle, enter: + +.. code-block:: bash + + sudo swupd bundle-add [bundle name] + +Additional information +====================== + +For additional :command:`swupd` commands, enter: + +.. code-block:: bash + + swupd --help + +To reference the :command:`swupd` man page, enter: + +.. code-block:: bash + + man swupd + diff --git a/zh_CN/_sources/reference/bundles/bundles.rst.txt b/zh_CN/_sources/reference/bundles/bundles.rst.txt new file mode 100644 index 00000000..a6423e9c --- /dev/null +++ b/zh_CN/_sources/reference/bundles/bundles.rst.txt @@ -0,0 +1,18 @@ +.. _bundles: + +Available bundles +################# + +This document provides a current list of available bundles. View the `clr-bundles repo`_ on GitHub\*, or select the bundle +:file:`Name` for more details. + +To learn more about how |CL-ATTR| uses bundles for software deployment, visit +:ref:`bundles-about`. + +Bundle list +=========== + +.. raw:: html + :file: bundles.html.txt + +.. _clr-bundles repo: https://github.com/clearlinux/clr-bundles/tree/master/bundles diff --git a/zh_CN/_sources/reference/bundles/openssh-server.rst.txt b/zh_CN/_sources/reference/bundles/openssh-server.rst.txt new file mode 100644 index 00000000..02e65cb4 --- /dev/null +++ b/zh_CN/_sources/reference/bundles/openssh-server.rst.txt @@ -0,0 +1,169 @@ +.. _openssh-server: + +openssh-server +############## + +The **openssh-server** bundle provides the OpenSSH\* package needed to enable +an SSH service in |CL-ATTR|. Remote users require an SSH service to be able +to use an encrypted login shell. + +|CL| enables the `sshd.socket` unit, which will listen on port 22 by default +and start the OpenSSH service as required. The first time OpenSSH starts, it +generates the server SSH keys needed for the service. + +Prerequisites +************* + +Assure the bundle :file:`openssh-server` is installed. + +To check it it's on your host, enter: + +.. code-block:: bash + + sudo swupd bundle-list + +To add it, enter: + +.. code-block:: bash + + sudo swupd bundle-add openssh-server + +Change default port +******************* + +Perform the following steps to change the default listening port for the +OpenSSH service: + +#. Open the sshd.socket file: + + .. code-block:: bash + + sudo systemctl edit sshd.socket + +#. Add the `[Socket]` section and `ListenStream` option to the sshd.socket + file as shown below. The first `ListenStream` entry removes the |CL| + default listen port value. The second `ListenStream` entry sets the new + default listen port value. In this example, we set the new default port + to 4200: + + .. code-block:: console + + [Socket] + ListenStream= + ListenStream=4200 + + + Make sure to include a new line after the last line of text in the sshd.socket file. + +#. Verify your changes: + + .. code-block:: bash + + cat /etc/systemd/system/sshd.socket.d/override.conf + + You should see the following output: + + .. code-block:: console + + [Socket] + ListenStream= + ListenStream=4200 + +#. Reload the systemd daemon configurations: + + .. code-block:: bash + + sudo systemctl daemon-reload + +#. Restart the sshd.socket unit: + + .. code-block:: bash + + sudo systemctl restart sshd.socket + +#. Confirm the the sshd.socket unit is listening on your new port: + + .. code-block:: bash + + sudo systemctl status sshd.socket + + .. note:: + + Output should show :guilabel:`Active:` as `active(listening)`. + +Enable SFTP +*********** + +|CL| *disables* the :abbr:`SFTP (SSH File Transfer Protocol)` subsystem by +default due to security considerations. To enable the SFTP subsystem, perform +the following configuration of the :abbr:`SSHD (SSH Daemon)` service file: + +#. Create a systemd drop-in directory for the SSHD service: + + .. code-block:: bash + + sudo mkdir -p /etc/systemd/system/sshd@.service.d + +#. Create the following file: + :file:`/etc/systemd/system/sshd@.service.d/sftp.conf` + +#. Add the OPTIONS environment variable to the sftp.conf file. + + .. code-block:: console + + [Service] + Environment="OPTIONS=-o Subsystem=\"sftp /usr/libexec/sftp-server\"" + +#. Reload systemd configuration: + + .. code-block:: bash + + sudo systemctl daemon-reload + +Congratulations! The SFTP subsystem is enabled. + +Enable root login +***************** + +To enable root login via SSH, perform the following steps: + +#. Create a *ssh* directory in :file:`/etc`, if it does not already exist. + + .. code-block:: bash + + mkdir /etc/ssh + +#. Create the following file, if it does not already exist: + :file:`/etc/ssh/sshd_config` + +#. Set the configuration variable in /etc/ssh/sshd_config + + .. code-block:: console + + PermitRootLogin yes + +Enable X11-forwarding +********************* + +X11 forwarding allows you to securely run graphical applications +(i.e., X clients) over the ssh conection. This will alow for remote gui apps +without the need for full VNC/remotedesktop. To enable X11-forwarding via +SSH, perform the following steps: + +#. Create a *ssh* directory in :file:`/etc`, if it does not already exist. + + .. code-block:: bash + + mkdir /etc/ssh + +#. Create the following file, if it does not already exist: + :file:`/etc/ssh/sshd_config` + +#. Set the configuration variables. + + .. code-block:: bash + + AllowTcpForwarding yes + X11UseLocalhost yes + X11DisplayOffset 10 + X11Forwarding yes \ No newline at end of file diff --git a/zh_CN/_sources/reference/collaboration/collaboration.rst.txt b/zh_CN/_sources/reference/collaboration/collaboration.rst.txt new file mode 100644 index 00000000..fb7b5369 --- /dev/null +++ b/zh_CN/_sources/reference/collaboration/collaboration.rst.txt @@ -0,0 +1,83 @@ +.. _collaboration: + +Documentation guidelines +######################## + +See a missing topic in the documentation? Find an existing document that could +be improved? Help us out by contributing! If you haven't contributed before, +take a moment to review our `Contribution guidelines`_. + +Do you have questions about the documentation that were not answered by these +guidelines? Send your question to the `mailing list`_. + +Contribution guidelines +*********************** + +The |CL| documentation is hosted in GitHub and is written using +reStructuredText. Use our guidelines and best practices to write consistent, +readable documentation. + +.. toctree:: + :maxdepth: 1 + + Writing guide: Describes the style we use to keep our documents clear and concise. + Structure and formatting guide: Explains how we organize and format content, using reStructuredText and Sphinx. + +How to contribute +***************** + +There are multiple ways to contribute and help improve our documentation: + +* **Make a suggestion**: Have a documentation suggestion but no time to write it + yourself? Send your suggestion to the `mailing list`_. +* **Log an issue**: If you find a problem in our documentation (such as typos or + out-of-date information), log an issue in the `documentation repository`_. +* **Contribute directly via GitHub**: Whether you've found a typo, have better + instructions or examples, or have a new page to add, submit your improvement + or addition as a pull request on the `documentation repository`_. +* **Test documentation**: Step through our instructional guides and tutorials to + verify the instructions. Log or correct any out-of-date information. + +All contributions must follow our `code of conduct`_. + +Contribute via GitHub +********************* + +Our documentation is hosted in GitHub and we follow the standard `GitHub flow`_: + +#. Clone the `documentation repository`_. + +#. Create your own fork of the repository. + +#. Create a branch for your contribution. + +#. Add your commits. + +#. Open a pull request. + +#. Discuss, review, and update your contributions. + +#. Once the maintainer approves, your contribution is merged and published as + part of the documentation. + +.. _references: + +References +********** + +We use the following references to guide the grammar, style, and formatting of +our documentation: + +* `Microsoft Writing Style Guide`_ +* `Merriam-Webster Dictionary`_ +* The Chicago Manual of Style (15th edition), The University of Chicago Press +* Microsoft Press Computer Dictionary, Microsoft Press +* Read Me First!, Oracle Technical Publications + + +.. _`code of conduct`: https://clearlinux.org/community/code-of-conduct +.. _mailing list: https://lists.clearlinux.org/mailman/listinfo/dev +.. _GitHub flow: https://guides.github.com/introduction/flow/ +.. _documentation repository: https://github.com/clearlinux/clear-linux-documentation +.. _Microsoft Writing Style Guide: https://docs.microsoft.com/en-us/style-guide/welcome/ +.. _Merriam-Webster Dictionary: https://www.merriam-webster.com/ \ No newline at end of file diff --git a/zh_CN/_sources/reference/collaboration/structure-formatting.rst.txt b/zh_CN/_sources/reference/collaboration/structure-formatting.rst.txt new file mode 100644 index 00000000..6391dccb --- /dev/null +++ b/zh_CN/_sources/reference/collaboration/structure-formatting.rst.txt @@ -0,0 +1,482 @@ +.. _structure-formatting: + +Structure and formatting +######################## + +Content should be organized to support scanning. Consistent organization, +formatting, and writing style helps readers quickly find what they need and to +understand the content more effectively. This document describes our +organization and formatting guidelines. + +Refer to :ref:`writing-guide` to learn how we keep our documents clear and +concise. + +.. contents:: :local: + :depth: 1 + +Markup +****** + +Our documentation is written in the reStructuredText markup language, using +Sphinx roles and directives. We use Sphinx to generate the final documentation. +You can read more about reStructuredText and Sphinx on their respective +websites: + +* `Sphinx documentation`_ +* `reStructuredText Primer`_ + +You can view the content directly in the .rst markup files, or generate the HTML +content by installing and building the documentation locally. To run the +documentation locally, follow the instructions found in the +`documentation repository`_ README. + +New pages +========= + +There are a few additional steps to consider when adding a new page to the +documentation. First, identify where your new page should be located within the +existing `Documentation organization`_. Second, make sure the new page is picked +up in the Sphinx build and easily linkable from other content. + +Each page must be included in a `Sphinx toctree`_ in order to be included in the +documentation content tree. Typically, pages are added to the section landing +page toctree. + +For example, the :ref:`collaboration` page toctree looks like: + +.. code-block:: rest + + .. toctree:: + :maxdepth: 1 + + writing-guide + structure-formatting + +Additionally, each page must include a uniquely named reST label directly before +the page title, to enable the `Sphinx ref role`_ for linking to a page. + +For example, this page "Structure and formating" has the label +``.. _structure-formatting``: + +.. code-block:: rest + + .. _structure-formatting: + + Structure and formatting + ######################## + +This page can then be referenced from other pages in the documentation using the +`:ref:` role: + +.. code-block:: rest + + :ref:`structure-formatting` + +Documentation organization +************************** + +The documentation is organized into five general sections: + +#. **Concepts**: Introduction and overview of |CL| specific concepts or + features. +#. **Get started**: Information about getting started with |CL|. +#. **Guides**: Detailed information and instruction on using |CL| features. +#. **Tutorials**: Step-by-step instruction for using |CL| in specific use cases. +#. **Reference**: Supplementary and reference information for |CL|. + +Page structure +============== + +Each page in the documentation should follow the basic format of: + +* Overview: 1-2 sentences describing what this page shows and why it matters +* Prerequisites: Describe any pre-work necessary to the content (if appropriate) +* Content +* Next steps: List links to next steps (if appropriate) +* Related topics: List links to related content (if appropriate) + +Headings +======== + +Use headings to section and organize your content for better readability and +clarity. + +* All files must have a top level heading, which is the title for the page. +* Up to three additional levels of headings are allowed under the title heading. +* Each heading should be followed by at least one paragraph of content. Avoid + two or more consecutive headings. + +Refer to the :ref:`writing-guide` for tips on using headings to create +:ref:`scannable content `. + +To mark up headings in the .rst file: + +* Use hash-tags to underline the file's main title: + + .. code-block:: rest + + Main title + ########## + +* Use asterisks to underline the file's first level headings: + + .. code-block:: rest + + First level heading + ******************* + +* Use equal signs to underline the file's second level of headings: + + .. code-block:: rest + + Second level heading + ==================== + +* Use dashes to underline the file's third level of headings: + + .. code-block:: rest + + Third level heading + ------------------- + +In-page navigation +================== + +If a page has three or more sections, provide quick links to each section. Place +the quick links after the overview section. + +Use the standard `reST contents directive`_ with depth: 1 for quick links. + +Inline text formatting +********************** + +We use the `Microsoft Writing Style Guide`_ as our starting point for text +formatting. We apply the formatting using reST and Sphinx markup. + +Use our quick reference for the most commonly used inline text elements: + ++--------------------------------+---------------------------------------+-----------------------------+ +| **Element** | **Convention** | **reST/Sphinx** | ++--------------------------------+---------------------------------------+-----------------------------+ +| Acronyms | Define acronym when first used. After | Use the ``:abbr:`` role, in | +| | first use and definition, use the | the following format: | +| | acronym only. | | +| | | ``:abbr:`Acronym (Def)``` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Bundle names | Bold | Use the ``:command:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Callouts | | Use ``.. note::`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Code/command examples | Monospace, visually distinct | Use ``.. code-block::`` | +| | from rest of text. Use an | with the correct language | +| | indented call-out box. | setting. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Commands | Bold | Use the ``:command:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Command flags | Bold | Use the ``:command:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Console output | Monospace, visual distinction | Use ``.. code-block::`` | +| | from rest of text. Use an | with console as the | +| | indented call-out box. | language setting. | ++--------------------------------+---------------------------------------+-----------------------------+ +| Emphasis | Italic | ``*strong*`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Environment variables | Use the case format of the | Use ``:envvar:`` | +| | environment variable. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Example commands with | Use angle brackets for swapping | | +| optional or replaceable | in the specific name, | | +| parts | e.g. . | | +| | | | +| | Use square brackets for optional | | +| | parts, | | +| | e.g. [--build]. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Example URLs (not linked) | Plain text | | ++--------------------------------+---------------------------------------+-----------------------------+ +| File extensions | Lowercase | | ++--------------------------------+---------------------------------------+-----------------------------+ +| File names, directories, paths | Title style capitalization | Use the ``:file:`` role. | ++--------------------------------+---------------------------------------+-----------------------------+ +| GUI labels | | Use ``:guilabel:`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Inline comments | | Use ``..`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Keystrokes | | Use ``:kbd:`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| Local navigation | | ``.. contents:: :local:`` | +| | | with a depth of 1 | ++--------------------------------+---------------------------------------+-----------------------------+ +| Menu selection | | Use ``:menuselection:`` | ++--------------------------------+---------------------------------------+-----------------------------+ +| New terms | Italic for first use, normal for all | ``*term*`` | +| | subsequent uses. | | +| | | | +| | If it is used outside of the source | | +| | of definition, link the term. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Product name | Follow correct trademark and | | +| | attribution guidelines. | | ++--------------------------------+---------------------------------------+-----------------------------+ +| Tool names | Correctly capitalized, no quotes, | | +| | bold, or italics as the basic rule. | | +| | | | +| | If the tool name is the command, like | | +| | most Linux tools, treat it like a | | +| | command. | | +| | | | +| | If the tool name is lowercase and | | +| | used at the start of a sentence, use | | +| | bold. | | ++--------------------------------+---------------------------------------+-----------------------------+ + +White space and line length +=========================== + +Limit line length to 78 characters. The GitHub web interface forces this +limitation for readability. + +Remove trailing whitespace from your documents. + +Code blocks and examples +************************ + +When providing example code or commands use the `Sphinx code-block directive`_. +Select the appropriate syntax highlighting for the example command or code. + +For example, if showing console output, use console highlighting: + +.. code-block:: rest + + .. code-block:: console + +Sphinx provides other ways of `marking up example code`_ if needed. + +Lists and instructions +********************** + +Use a numbered list when the order or priority of the items is important, such +as step-by-step instructions. + +Use a bulleted list when the order of the items is not important. + +For both list types, keep all items in the list parallel. See +:ref:`parallelism`. + +Use standard `reST list markup`_. + +Numbered lists +============== + +Numbered lists are most frequently used for procedures. Use numbered lists to +show sequence for the items. Follow our guidelines for numbered lists: + +* Make sure the list is sequential and not just a collection of items. +* Introduce a numbered list with a sentence. End the setup text with a + colon. Example: "To configure the unit, perform the following steps:" +* Each item in the list should be parallel. +* Treat numbered list items as full sentences with correct ending + punctuation. +* You may interrupt numbered lists with other content, if relevant, + e.g. explanatory text, commands, or code. +* Second-level steps are acceptable; avoid third-level steps. +* Avoid single-step procedures; the minimum number of steps in a procedure + is two. +* Do not create numbered lists that emulate flowcharts. The reader should be + able to execute the list of steps from first to last without branching or + looping. +* Avoid over-using numbered lists, except in procedural documents such as + tutorials and step-by-step guides. + +Bulleted lists +============== + +Use bulleted lists to reduce wordiness and paragraph density, especially when +a sequence is not required. Here are some guidelines for bulleted lists: + +* Introduce a bulleted list with a sentence. End the setup text with a + colon. Example: "To repair the unit, you will need the following items:" +* Each item in the list should be parallel. +* Avoid interrupting bulleted lists with other paragraph styles. +* Second-level bullets are acceptable; avoid third-level bullets. + +Use the correct ending punctuation for sentence style bullet lists. For example: + +**Use this:** + +:: + + When setting the user code, remember: + + * Use a number that has a meaning for you. + * Change the code once a month. + * Do not disclose the user code to anyone, including the security company. + +**Not this:** + +:: + + When setting the user code remember: + + * make the user code easy to remember. Use a number that has a meaning for you + * change the code once a month + * do not disclose the user code to anyone else. This includes the security + company + +Instructions +============ + +When presenting instructions, such as in a tutorial, present them in a numbered +list according to these guidelines: + +* Each step (list item) should describe one action. + +* If the same steps are repeated, refer to the earlier steps rather than + repeating them. + +* When a step includes a command or code block as an example, put the command + or code block after the step that includes them. + +* Use supporting images where appropriate. If the series of steps is supported + by one figure, refer to the figure in the introductory text. + + For example: "See Figure 15 and do the following:" + + When a series of steps is supported by two or more figures, refer to the + specific figure in the relevant step and show the figure immediately after + the reference. **Do not write**: "See figures 15 through 22 and do the + following:" + +Notices +******* + +We use four special types of notices: notes, cautions, warnings, and dangers. +Here are some specific rules and tips regarding use of these notices: + +* Do not use a notice directly after a heading. Notices must follow a variant of + body text. +* Do not include more than one notice in a single notice block. +* Avoid back-to-back notices. +* If back-to-back notices are not avoidable, make sure each distinct notice in + the notice block is clearly defined. + +Use the standard `reST admonition directive`_. + +Notes, cautions, and warnings +============================= + +Use notes sparingly. Avoid having more than one note per section. If you exceed +this number consistently, consider rewriting the notes as main body text. + +Use cautions and warnings to alert readers of potential problems or pitfalls. +Use conditional phrases in cautions and warnings, such as "If you do X, then Y +will occur." + +These are examples of typical notices and the conditions for their usage: + +.. note:: + Notes are extra bits of information that supplement the main content. Notes + should be relatively short. + +.. caution:: + Cautions are low-level hazard messages that alert the user of possible + equipment, product, and software damage, including loss of data. + +.. warning:: + Warnings are mid-level hazards that are likely to cause product damage. + +Links +***** + +Use the standard `reST markup for links`_. + +To add a cross-reference to another documentation page, use the `:ref:` role: + +.. code-block:: rest + + :ref:`structure-formatting` + +To add an external link, we use named references that refer to a defined +link/label at the bottom of the page. + +For example, an external link is defined at the bottom of the page like this: + +.. code-block:: rest + + .. _wiki about dogs: https://en.wikipedia.org/wiki/Dog + +The defined link is then used in the content like this: + +.. code-block:: rest + + Check out the great `wiki about dogs`_. + +Images +****** + +Use images or figures to convey information that may be difficult to explain +using words alone. Well-planned graphics reduce the amount of text required to +explain a topic or example. + +Follow these guidelines when using graphics in support of your documentation: + +* Keep it simple. Use images that serve a specific purpose in your document, + and contain only the information the reader needs. + +* Avoid graphics that will need frequent updating. Don't include information in + a graphic that might change with each release, such as product versions. + +* Use either PNG or JPEG bitmap files for screenshots and SVG files for vector + graphics. + +* Place the image immediately after the text it helps clarify, or as close as + possible. + +* Use the `Sphinx figure directive`_ to insert images and figures into the + document. Include both alt text, a figure name, and caption. + + For example: + + .. code-block:: rest + + .. figure:: figures/topic-1.png + :alt: An image supporting the topic. + + Figure 1: This is the figure 1 caption. + +* Include at least one direct reference to an image from the main text, using + the figure number. For example: + + **Use this:** :: + + Figure 1 + + **Not this:** :: + + The figure above or below + +Images should follow these naming and location conventions: + +* Save the image files in a :file:`figures` folder at the same level as the file + that will reference the image. +* Name image files according to the following rules: + + * Use only lower case letters. + * Separate multiple words in filenames using dashes. + * Name images using the filename of the file they appear on and add a number + to indicate their place in the file. For example, the third figure added to + the :file:`welcome.rst` file must be named :file:`welcome-3.png`. + +.. _Sphinx documentation: http://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html +.. _reStructuredText Primer: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html +.. _documentation repository: https://github.com/clearlinux/clear-linux-documentation +.. _Sphinx toctree: https://www.sphinx-doc.org/en/master/usage/quickstart.html?highlight=toctree#defining-document-structure +.. _Sphinx ref role: https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref +.. _reST contents directive: http://docutils.sourceforge.net/docs/ref/rst/directives.html#table-of-contents +.. _Microsoft Writing Style Guide: https://docs.microsoft.com/en-us/style-guide/welcome/ +.. _Sphinx code-block directive: http://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block +.. _marking up example code: http://www.sphinx-doc.org/en/1.6/markup/code.html +.. _reST list markup: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#lists-and-quote-like-blocks +.. _reST admonition directive: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#directives +.. _reST markup for links: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#hyperlinks +.. _Sphinx figure directive: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#directives diff --git a/zh_CN/_sources/reference/collaboration/writing-guide.rst.txt b/zh_CN/_sources/reference/collaboration/writing-guide.rst.txt new file mode 100644 index 00000000..f69a0344 --- /dev/null +++ b/zh_CN/_sources/reference/collaboration/writing-guide.rst.txt @@ -0,0 +1,410 @@ +.. _writing-guide: + +Writing guide +############# + +We want our documentation to be easy to read and understand. This document +describes guidelines for writing documentation that is clear, concise, +confident, and courteous. + +Refer to :ref:`structure-formatting` for details on organizing content and how +we use reStructuredText and Sphinx. + +.. contents:: :local: + :depth: 1 + +Use simple English +****************** + +Write using simple English: Be brief and communicate only the information that +is needed. Be friendly and informative. Emphasize clarity and avoid +unecessary complicated or technical terms. Make the content accessible to +non-native speakers. + +Be brief +======== + +Use short sentences and paragraphs. Stick to the principle of one main +idea per sentence, plus one additional point if needed. Each paragraph +should address one main idea. Remember the basic structure of a paragraph: +Introduction, body, and conclusion. + +Be friendly +=========== + +We write for our peers and want to be familiar. Take a personal tone as if you +were speaking directly to the reader. Use "you" to address the reader and "we" +to refer to our view. Be professional, respectful, and cooperative. + +Assume your audience has the same level of technical understanding and expertise +as you did when you first started collaborating. Do not talk down to our +readers, but also do not assume they know everything about the subject. Offer +brief explanations or summaries of common knowledge if a significant portion of +readers might benefit. + +Use simple words +================ + +Use simple words to increase reader comprehension and reduce ambiguity. Follow +our tips for making good word choices: + +* **Avoid jargon**: Write for your audience, using everyday language where + possible, and technical terms where appropriate. Avoid clichés, idioms, and + metaphors. +* **Be consistent**: Use one term for each concept or action and use it + consistently. +* **Avoid "fancy" words and phrases**: If there is a simpler word or phrase, + use it. + + For example: + + =================== =================== + Use this Not this + =================== =================== + start, begin commence + so consequently + more than in excess of + if in the event of + before prior to + if you want should one wish + use utilize + example instance + =================== =================== + +Avoid overuse of product name +============================= + +Use product names only when necessary. Typically, you can rewrite sentences to +remove the product name with no change in meaning, which keeps the content +concise and scannable. + +Avoid using the product name in page titles and headings. + +.. _scannable-content: + +Make content scannable +********************** + +Organize your content to make it scannable for the reader, which helps them find +what they need quickly, and to understand the information more efficiently. + +* **Put the most important content first.** Make sure your introduction clearly + communicates what the reader can find on the page. Present the point of the + document first, and organize supporting information towards the end of the + page. +* **Write scannable headings.** Expect readers of documentation to skim and scan + the content, and to leave if they dont find what they need quickly. Good + headings add organization to your content and help the reader to find and + understand content more effectively. Follow our guidelines for writing + effective `Headings`_. +* **Write great link text.** Great link text tells the reader what they can + expect when they click on a link. It also helps make the page more scannable. + Follow our guidelines for writing `Link text`_. + +Headings +======== + +Use these guidelines to write effective headings: + +* **Be concise and descriptive.** Use only the words necessary to describe the + section. +* **Use sentence case.** Capitalize only the first word and proper nouns in a + heading. +* **Avoid punctuation.** Unless your heading is a question, don't use sentence + punctuation in headings. +* **Use parallel structure.** Headings at the same level should use the same + grammatical pattern. This provides structure to the document and helps users + find information more easily. See :ref:`parallelism`. +* **Use strong verbs.** Strong, active verbs get to the point. Avoid -ing verbs, + such as *Running*, *Testing*, etc. + +For example, two headings at the same level: + +**Use this:** :: + + Install software + + Configure software + +**Not this:** :: + + Installing the Software on the Platform + + Software Configuration. + +Link text +========= + +All links in content should follow these guidelines: + +* **Write descriptive link text**: Link text should describe where the link + goes, without having to read the surrounding text. +* **Keep link text concise**: Use only the words needed to accurately describe + the destination. +* **Use unique link text**: Each link on a page should be unique. If users see + the same link text twice on a page, they'll assume it goes to the same place. +* **Start link text with keywords**: Frontload the link text with the most + important words to help users scan the text. +* **Avoid generic text**: Don't use generic, uninformative link text such as + "click here" or "read more". + +For example: + +**Use this:** :: + + For more information about dogs, read the `dog wiki article`_. + +**Not this:** :: + + For more information about dogs, `click here`_. + +Use strong verbs +**************** + +Passive verbs make writing stuffy and formal. Use strong verbs to get to the +point and avoid unnecessary words and phrases. + +Use imperatives +=============== + +Commands, also called imperatives, are the fastest and most direct way of giving +someone instructions. For example: + +**Use this:** :: + + Send it to me. + +**Not this:** :: + + I would appreciate it if you would send it to me. + +Use present tense +================= + +Use simple present tense instead of future tense for most text. Search for the +words "will" or "shall" to find future tense instances. Future tense is +acceptable for conditional statements, such as in a caution or a warning. For +example: + +**Use this:** :: + + The system operates at a nominal temperature of 180 degrees Fahrenheit. + +**Not this:** :: + + The system will operate at a nominal temperature of 180 degrees Fahrenheit. + +Avoid nominalizations +===================== + +Avoid nominalizations, which are nouns formed from verbs. + +For example: + +===================== ===================== + Verb Nominalization +===================== ===================== + complete completion + provide provision + fail failure + install installation +===================== ===================== + +For example: + +**Use this:** :: + + We discussed the matter. + +**Not this:** :: + + We had a discussion about the matter. + +Or: + +**Use this:** :: + + IT has installed the software. + +**Not this:** :: + + IT has completed the installation of the software. + +Avoid words ending in -ing +========================== + +Avoid using words ending in -ing unless they are part of a technical name. For +example: + +**Use this:** :: + + There is no way to verify this. + +**Not this:** :: + + There is no way of verifying this. + +Use the active voice +==================== + +Use active voice whenever possible to show who or what is performing an +action. + +* Active voice follows standard English word order: SUBJECT–VERB–OBJECT + (where the OBJECT is optional). +* Passive voice reverses the order and weakens the verb: OBJECT–be VERB–by + SUBJECT (where the OBJECT is optional). + +For example: + +**Use this:** :: + + I made a mistake. + +**Not this:** :: + + A mistake was made. *(By whom?)* + +Or: + +**Use this:** :: + + We released version 2.0 in June. + +**Not this:** :: + + Version 2.0 was released in June. + +Avoid long noun phrases +*********************** + +Noun phrases (a noun and other words that describe or modify it) can be +difficult to understand. Try to limit the number of modifiers in a noun phrase +to two. For example: + +**Use this:** :: + + Integration policies for power management mechanisms. + +**Not this:** :: + + Power management mechanism integration policies. + +.. _parallelism: + +Parallelism +*********** + +Parallelism refers to the practice of using similar patterns of grammar, and +sometimes length, to coordinate words, phrases, and clauses. + +Use parallel construction in lists. The table below shows some unparallel +structures and how they can be made parallel with a little rewording. + ++----------------------------------+----------------------------------+ +| Parallel (do) | Unparallel (don't) | ++==================================+==================================+ +| 1. Mount the panel. | 1. Mount the panel. | +| 2. Install the battery. | 2. Battery installation. | +| 3. Wire the keypad. | 3. Wiring the keypad. | ++----------------------------------+----------------------------------+ +| I like practicing my accordion, | I like practicing my accordion, | +| reading sci-fi, and eating | reading sci-fi, and to eat | +| peanut butter and pickle | peanut butter and pickle | +| sandwiches. | sandwiches. | ++----------------------------------+----------------------------------+ +| For breakfast he likes coffee | For breakfast he likes coffee | +| and bacon. | and to fry bacon. | ++----------------------------------+----------------------------------+ +| Apples or bananas are a good | Apples or a banana are a good | +| snack. | snack. | ++----------------------------------+----------------------------------+ + +Grammar and punctuation +*********************** + +This section covers common grammatical topics relevant to our +documentation. For detailed explanations of correct grammar and punctuation, +use one of our :ref:`preferred references `. + +Capitalization +============== + +The capitalization style for all documentation is sentence case. Words should +only be capitalized when they are proper nouns or refer to trademarked product +names. + +.. note:: + Do not capitalize a word to indicate it is more important than other + words. Never change the case of variable, function or file names - always + keep the original case. + +Menu capitalization +------------------- + +When referring to software menu items by name, use the same capitalization as +seen in the actual menu. + +A few other tips when referring to menu items: + +* Reference the specific menu item using "Select :menuselection:`File --> New`." + +* Put the option to be selected last. "Select + :menuselection:`View --> Side Bar --> Hide Side Bar`" + +* Do not include more than 3 navigation steps in a menu selection. If + more than three steps are needed, divide the steps using + ``:guilabel:`` or ``:menuselection:``. + + For example: "Go to :guilabel:`File` and select + :menuselection:`Print --> Print Preview --> Set Up`." + +Software version capitalization +------------------------------- + +When listing software or hardware version numbers, the word “version” or letter +"v" are lowercase. The v is closed with the number (no period). + +For example: + +* Widget Pro version 5.0 +* Widget Master v2.1.12 + +Contractions +============ + +Avoid using contractions, such as it's, they're, and you're, because they may be +unclear to non-native English-speaking audiences. + +Quotation marks +=============== + +Follow these guidelines for quotation marks: + +* Restrict use of quotation marks to terms as terms. +* Do not use quotation marks for emphasis; use *italics* for emphasis. +* Avoid using single-quote marks. + +Commas and colons +================= + +This section addresses common use of commas, semicolons, and colons in our +documentation. Refer to one of our :ref:`preferred references ` +for further details. + +Use the serial comma +-------------------- + +When writing a series of items, use the serial comma before the final *and* and +*or* to avoid confusion and ambiguity. For example: + +**Use this:** :: + + Mom, Dad, and I are going to the game. + +**Not this:** :: + + Mom, Dad and I are going to the game. + +.. _click here: https://en.wikipedia.org/wiki/Dog +.. _dog wiki article: https://en.wikipedia.org/wiki/Dog diff --git a/zh_CN/_sources/reference/compatible-hardware.rst.txt b/zh_CN/_sources/reference/compatible-hardware.rst.txt new file mode 100644 index 00000000..3f8b23a3 --- /dev/null +++ b/zh_CN/_sources/reference/compatible-hardware.rst.txt @@ -0,0 +1,113 @@ +.. _compatible-hardware: + +Compatible Hardware +################### + +This document describes hardware that has been tested and confirmed as +compatible with |CL-ATTR|. This list is not comprehensive and will continue to +grow. + +.. list-table:: **Table 1. Compatible Hardware** + :widths: 20, 20 + :header-rows: 1 + + * - Processor SKU + - Platform + + * - Intel® Core™ i5-6260U + - + + * - Intel® Core™ i5-6560U + - Dell XPS\* 13 9350 + + * - Intel® Celeron® J3455 + - NUC6CAYS + + * - Intel® Core™ i5-4250U + - + + * - Intel® Core™ i7-5557U + - + + * - Intel® Core™ i9-7900X + - Gigabyte\* X299 + + * - Intel® Core™ i3-4130 + - Lenovo Thinkserver\* TS140 + + * - Intel® Core™ i7-7567U + - NUC7i7BNH + + * - Intel® Core™ i7-8809G + - NUC8i7HVK + + * - Intel® Core™ i5-7260U + - NUC7i5BNH + + * - Intel® Core™ i7-8650U + - NUC7i7DNKE + + * - Intel® Core™ i5-7300U + - NUC7i5DNHE + + * - Intel® Xeon® Gold 6138 + - + + * - Intel® Xeon® E5-2699A v4 + - Dell PowerEdge\* R630 + + * - Intel® Xeon® E5-2620 v3 + - + + * - Intel® Core™ i5-6600 + - Gigabyte\* Z170X-UD5 + + * - Intel® Core™ i5-4250U + - D54250WYK + + * - Intel® Xeon® E5-2699 v3 + - S2600WT2 + + * - Intel® Atom™ J3455 + - NUC6CAYB + + * - Intel® Xeon® Bronze 3104 + - 0W23H8 + + * - Intel® Atom™ C2750 + - SuperMicro\* A1SAi + + * - Intel® Atom™ E3825 + - CircuitCo MinnowBoard MAX\* + + * - Intel® Core™ i7-8700 + - Gigabyte\* H370 WIFI + + * - Intel® Core™ i7-3667U + - Lenovo ThinkPad\* X1 Carbon laptop + + * - Intel® Core™ i5-4210U + - Dell XPS\* 13 laptop + + * - Intel® Celeron® J3455 + - NUC6CAYB + + * - Intel® Core™ i7-4790 + - Gigabyte\* desktop + + * - Intel® Core™ i5-6260U + - NUC6I6SYH + + * - Intel® Core™ i7-5557U + - NUC5I7RYH + + * - Intel® Core™ i7-4700MQ + - Lenovo ThinkPad\* T540p + + * - Intel® Core™ i7-5557U + - NUC5I7RYB + + * - Intel® Core™ i5-6260U + - NUC6I5SYH + +\* Other names and brands may be claimed as the property of others. \ No newline at end of file diff --git a/zh_CN/_sources/reference/image-types.rst.txt b/zh_CN/_sources/reference/image-types.rst.txt new file mode 100644 index 00000000..cc5d1325 --- /dev/null +++ b/zh_CN/_sources/reference/image-types.rst.txt @@ -0,0 +1,87 @@ +.. _image-types: + +|CL-ATTR| image types +######################### + +.. _image-types-content: + +|CL-ATTR| offers many types of `images`_ for different platforms and environments. + +.. _incl-image-filename: + +The naming convention of a |CL| image filename is: + +.. code-block:: console + + clear-[version number]-[image type].[compression type] + +* The *[version number]* field specifies the version number. + +* The *[image type]* field specifies the type of image and its corresponding + file format. + +* The *[compression type]* field specifies the compression type. Two types of + compressions are used: GNU\* zip (*.gz*) and XZ (*.xz*). + +.. _incl-image-filename-end: + +Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific. + +.. list-table:: Table 1: Types of platform-independent |CL| images + :widths: 15, 85 + :header-rows: 1 + + * - Image Type + - Description + + * - live-desktop.img or live-desktop.iso + - Image for booting to GNOME\* desktop to preview or install the OS. + + * - 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 + :header-rows: 1 + + * - Image Type + - Description + + * - aws.img + - Image suitable for use with Amazon\* AWS\*. + + * - azure.vhd + - 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. + + * - azure-machine-learning.vhd + - Virtual Hard Disk for use on Microsoft Azure cloud platform with the `machine-learning-basic` bundle installed. + + * - cloudguest.img + - Image with generic cloud guest virtual machine (VM) requirements installed. + + * - 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. + + * - kvm.img + - 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://clearlinux.org/downloads +.. _`optimized kernel`: https://clearlinux.org/documentation/clear-linux/reference/compatible-kernels + diff --git a/zh_CN/_sources/reference/reference.rst.txt b/zh_CN/_sources/reference/reference.rst.txt new file mode 100644 index 00000000..3578753e --- /dev/null +++ b/zh_CN/_sources/reference/reference.rst.txt @@ -0,0 +1,31 @@ +.. _reference: + +Reference +######### + +This section provides additional information on the |CL| project and +features. + +.. toctree:: + :maxdepth: 1 + + compatible-hardware + bundle-commands + bundles/bundles + bundles/openssh-server + collaboration/collaboration + system-requirements + image-types + +.. _concepts: + +Clear Linux concepts +******************** + +.. toctree:: + :maxdepth: 1 + :glob: + + ../concepts/* + ../guides/clear/stateless + ../guides/clear/security \ No newline at end of file diff --git a/zh_CN/_sources/reference/system-requirements.rst.txt b/zh_CN/_sources/reference/system-requirements.rst.txt new file mode 100644 index 00000000..c0974923 --- /dev/null +++ b/zh_CN/_sources/reference/system-requirements.rst.txt @@ -0,0 +1,79 @@ +.. _system-requirements: + +Recommended minimum system requirements +####################################### + +|CL-ATTR| can run on most modern hardware and is capable of running with +modest hardware resources. Out of the box, |CL| can run on a single CPU core, 1 +GB RAM, and 2 GB of disk space. + +For use cases requiring minimal resources, |CL| :ref:`about ` can +be used to create a highly customized installation that can even run on a +system with a 128MB of memory and 600MB of disk space, for example. + + +Installer requirements +********************** + +The *live desktop* installer requires at least 1 GB of RAM because more +resources are required to run in live mode than after |CL| is installed onto +persistent storage. + +For hardware with less resources, use the *live server* installer because it +has a smaller memory footprint. + +See https://clearlinux.org/downloads for more download options. + + +System requirements +******************* + +|CL| requires an x86 64-bit processor which supports Intel® Streaming SIMD +Extensions 4.1 (Intel® SSE 4.1), and it requires a system that supports UEFI. + +The |CL| installer performs a system compatibility check upon booting. To +manually verify system compatibility with |CL|, run the :ref:`compatibility +check tool` or go to http://ark.intel.com and check for +these features: + +* Instruction Set: + + - 64-bit + +* Instruction Set Extensions: + + - Supplemental Streaming SIMD Extension 3 (Intel® SSSE3) + - Intel® Streaming SIMD Extensions 4.1 (Intel® SSE 4.1) + - Intel® Streaming SIMD Extensions 4.2 (Intel® SSE 4.2) + - Intel® Advanced Encryption Standard New Instructions (Intel® AES-NI) + - Carry-less Multiplication (PCLMUL) + +The following processor families have been verified to run |CL|: + +* Intel® Core™ Processor Family (2nd generation or greater) +* Intel® Xeon® E3-xxxx processor +* Intel® Xeon® E5-xxxx processor +* Intel® Xeon® E7-xxxx processor +* Intel® Atom® processor C Series +* Intel® Atom® processor E Series + + +Recommended configurations +************************** + +For general |CL| desktop use the recommended minimum requirements include: + +========= =============================== +Component Configuration +--------- ------------------------------- +Processor Compatible x86 64-bit processor +--------- ------------------------------- +Memory 4GB RAM +--------- ------------------------------- +Disk 20 GB +--------- ------------------------------- +Graphics Device with openGL support (e.g. Intel HD/UHD Graphics) +--------- ------------------------------- +Network Active Internet connection +========= =============================== + diff --git a/zh_CN/_sources/tutorials/aws-web/aws-web.rst.txt b/zh_CN/_sources/tutorials/aws-web/aws-web.rst.txt new file mode 100644 index 00000000..4dea6423 --- /dev/null +++ b/zh_CN/_sources/tutorials/aws-web/aws-web.rst.txt @@ -0,0 +1,276 @@ +.. _aws-web: + +Create and launch |CL-ATTR| from Amazon Web Services +###################################################### + +This tutorial walks you through creating and launching a |CL| +:abbr:`AMI (Amazon Machine Image)` instance from the +:abbr:`AWS (Amazon Web Services)` console and complete the following tasks: + +#. Locate and select the |CL| OS Basic AMI in the AWS Marketplace. +#. Create a new public and private key pair to allow you to connect to your + |CL| instance securely. +#. Launch the new |CL| instance and connect to it. +#. Update your instance of |CL| using the :command:`swupd` command. +#. Stop the |CL| instance. + +Prerequisites +************* + +This tutorial assumes the following statements are true: + +* You are using a linux-based system to access AWS and can run :command:`SSH` + to access the remote |CL| AWS image. +* Your browser puts downloaded files in the :file:`$HOME/Downloads` + directory. +* You have already set up an AWS user account and logged into the AWS + console. + +.. note:: + This tutorial uses a |CL| AMI t2.micro instance that is eligible for the + AWS free tier. To learn more about AWS and setting up an account, visit the + AWS website at http://aws.amazon.com. + +Locate, select, and launch the |CL| Basic AMI +********************************************* + +#. Start from your main AWS services console menu in your browser and select the + :guilabel:`EC2` text as shown in figure 1: + + .. figure:: figures/aws-web-1.png + :scale: 50 % + :alt: AWS Console + + Figure 1: :guilabel:`AWS Console` + + This selection brings up your :guilabel:`EC2 Dashboard` menu. + +#. To create a new |CL| instance from the :guilabel:`EC2 Dashboard` menu, + select the :guilabel:`Launch Instance` button as shown in figure 2: + + .. figure:: figures/aws-web-2.png + :scale: 50 % + :alt: EC2 Dashboard + + Figure 2: :guilabel:`EC2 Dashboard` + + This selection takes you to the + :guilabel:`Step 1: Choose an Amazon Machine Image (AMI)` menu. + +#. To find the :guilabel:`Clear Linux OS Basic` AMI in the + :guilabel:`Step 1: Choose an Amazon Machine Image (AMI)` menu, do the + following: + + #. In the lefthand navigation window, select the + :guilabel:`AWS Marketplace` menu item to bring up the search bar to + :guilabel:`Search AWS Marketplace Products`. + + #. In the search bar, type "clear linux os" and hit the :kbd:`Enter` key to + search for and locate the :guilabel:`Clear Linux OS Basic` AMI. + + #. Select the :guilabel:`Clear Linux OS Basic` AMI by clicking on the + :guilabel:`Select` button as shown in figure 3: + + .. figure:: figures/aws-web-3.png + :scale: 50 % + :alt: Step 1: Choose AMI + + Figure 3: :guilabel:`Step 1: Choose AMI` + + #. A pop-up dialog box appears showing you more information about the + :guilabel:`Clear Linux OS Basic` AMI along with the pricing details for running + |CL| on different platform configurations as shown in figure 4. Select + the :guilabel:`Continue` button. + + .. figure:: figures/aws-web-4.png + :scale: 50 % + :alt: Clear Linux OS Basic + + Figure 4: :guilabel:`Clear Linux OS Basic` + +#. The :guilabel:`Choose Instance Type` menu appears as shown in figure 5. + + .. figure:: figures/aws-web-5.png + :scale: 50 % + :alt: Choose an Instance Type + + Figure 5: :guilabel:`Choose an Instance Type` + + Select the :guilabel:`t2.micro` type by clicking the box on the left side + of the instance and then select the :guilabel:`Review and Launch` button to + move to the :guilabel:`Step 7: Review the Instance Launch` menu. + + .. note:: + + You can configure the instance details, add additional storage, add + tags, and configure the security group before selecting the + :guilabel:`Review and Launch` button if you want to further customize + this |CL| instance. + +#. The :guilabel:`Step 7: Review the Instance Launch` menu, shown in figure 6, + allows you to + :guilabel:`Cancel` the process, return to the :guilabel:`Previous` screen + to change the configuration or :guilabel:`Launch` the instance defined. + + .. figure:: figures/aws-web-6.png + :scale: 50 % + :alt: Step 7: Review the Instance Launch + + Figure 6: :guilabel:`Step 7: Review the Instance Launch` + + #. Select the :guilabel:`Launch` button. A dialog box appears, as shown in + figure 7, asking you to + :guilabel:`Select an existing key pair or create a new pair`. + + .. figure:: figures/aws-web-7.png + :scale: 50 % + :alt: Select an existing key pair or create a new pair + + Figure 7: :guilabel:`Select an existing key pair or create a new pair` + + #. Select the :guilabel:`Create a new key pair` option. + + #. For the :guilabel:`Key pair name` field, enter `AWSClearTestKey`. + + #. Select the :guilabel:`Download Key Pair` button to download the + :file:`AWSClearTestKey.pem` to your browser's defined + :file:`Downloads` directory. + + #. When the file finishes downloading, select the + :guilabel:`Launch Instances` button to proceed to the + :guilabel:`Launch Status` menu shown in figure 8. + + .. figure:: figures/aws-web-8.png + :scale: 50 % + :alt: Launch Status + + Figure 8: :guilabel:`Launch Status` + + #. Once the :guilabel:`Launch Status` page changes to what is shown in + figure 9, select the :guilabel:`View Instances` button to view your + :guilabel:`Instances` dashboard. + + .. figure:: figures/aws-web-9.png + :scale: 50 % + :alt: View Instance + + Figure 9: :guilabel:`View Instance` + +Connect to your Clear Linux OS Basic instance +********************************************* + +Your :guilabel:`Instances` Dashboard is shown in figure 10 with the new |CL| +OS basic instance already selected and in the running state. If there are +other instances available, they are also listed but not selected. + +.. figure:: figures/aws-web-10.png + :scale: 50 % + :alt: Instance Dashboard + + Figure 10: :guilabel:`Instance Dashboard` + +#. To connect to your running instance, click the :guilabel:`Connect` button + located at the top of your dashboard. AWS brings up the pop-up dialog + box shown in figure 11 describing how to connect to your running instance. + +.. _fig-aws-web-11: + +.. figure:: figures/aws-web-11.png + :scale: 50 % + :alt: Connect to Your Instance + + Figure 11: :guilabel:`Connect to Your Instance` + +#. Open a terminal on your system. You should be in your :file:`$HOME` + directory. + +#. Copy the previously downloaded keyfile from the :file:`Downloads` + directory to the current directory. + + .. code-block:: console + + cp Downloads/AWSClearTestKey.pem . + +#. Change the attributes of the :file:`AWSClearTestKey.pem` using the + :command:`chmod` command as instructed in the dialog box shown in figure + 11. + + .. code-block:: console + + chmod 400 AWSClearTestKey.pem + +#. Copy the text highlighted in the :guilabel:`Example:` section that is + shown in :ref:`figure 11`. Paste the copied text into your + terminal, change the text before the `@` sign to the username `clear`, and + press the :kbd:`Enter` key to execute the command. + + .. code-block:: console + + ssh -i "AWSClearTestKey.pem" clear@ec2-34-209-39-184.us-west-2.compute.amazonaws.com + +#. A message appears on the terminal stating the authenticity of the host can't + be established and prompts you with the message: + + .. code-block:: console + + The authenticity of host 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com (34.209.39.184)' can't be established. + ECDSA key fingerprint is SHA256:LrziT5Ar66iBTfia8qmiIsrfBUm/UGam76U8bDR6yJc. + Are you sure you want to continue connecting (yes/no)? + +#. Type `yes` and hit the :kbd:`Enter` key. Another warning is printed to the + terminal and you are now at the command prompt of your new |CL| instance. + + .. code-block:: console + + Warning: Permanently added 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com,34.209.39.184' (ECDSA) to the list of known hosts. + clear@clr-96a8565d0ca54b0c80364a1e5e7b0f88 ~ $ + +Update the |CL| instance +************************ + +Run the :command:`sudo swupd update` command to update the operating +system as shown in figure 12: + +.. figure:: figures/aws-web-12.png + :scale: 50 % + :alt: sudo swupd update + + Figure 12: :guilabel:`sudo swupd update` + +In this example we updated from version 18940 to 19100. + +Stop the |CL| instance +********************** + +When you are finished using your AWS |CL| instance you need to stop it using +the :guilabel:`Instances` dashboard to stop accruing charges. Complete the +following steps from the :guilabel:`Instances` dashboard to stop your AWS |CL| +instance from running. + +#. Select the :guilabel:`Actions` button to bring up a pull-down menu. + +#. Select the :guilabel:`Instance State` menu item to expand the options. + +#. Select :guilabel:`Stop` menu item to shut down the running instance. + + Figure 13 illustrates these steps. + + .. figure:: figures/aws-web-13.png + :scale: 50 % + :alt: Stop Instance + + Figure 13: :guilabel:`Stop Instance` + +#. A pop-up dialog box appears warning you that any ephemeral storage of + your instance will be lost. Select the :guilabel:`Yes, Stop` button to stop + your |CL| instance. + +.. figure:: figures/aws-web-14.png + :scale: 50 % + :alt: Stop Instances + + Figure 14: :guilabel:`Stop Instances` + +Congratulations! You are up and running with |CL| on AWS. To see what you +can do with your |CL| instance, visit our :ref:`tutorials ` +section for examples on using your |CL| system. diff --git a/zh_CN/_sources/tutorials/azure.rst.txt b/zh_CN/_sources/tutorials/azure.rst.txt new file mode 100644 index 00000000..82f3f319 --- /dev/null +++ b/zh_CN/_sources/tutorials/azure.rst.txt @@ -0,0 +1,544 @@ +.. _azure: + +Run |CL-ATTR| using Microsoft Azure CLI 2.0 +########################################### + +|CL-ATTR| is available for you to use in the Microsoft* Azure* marketplace and +is offered with three different images, also known as a +:abbr:`SKU (Stock Keeping Unit)`. + +* |CL| Basic - This SKU consists of a bare-bones system which can be used as a + starting point for those wanting to explore and build out a system with + additional software bundles of their choosing. + +* |CL| Containers - This SKU comes with the containers-basic software bundle + already installed. + +* |CL| Machine-learning - This SKU comes pre-loaded with popular open source + tools for developing machine learning applications. + +You can access these images directly from your MS Azure dashboard through the +`Azure portal`_ or by using the MS Azure :abbr:`CLI (Command Line Interface)` +2.0. If you do not already have an account set up with MS Azure, you can sign +up for a `MS Azure free account`_ to access the |CL| +:abbr:`VM(Virtual Machine)` images. + +The Azure CLI offers the ability to create and manage resources in MS Azure +from the command line. In this tutorial you learn to: + +#. Install the latest MS Azure CLI on your |CL| machine. + +#. Log into MS Azure using the CLI 2.0 interface. + +#. Create a MS Azure resource group. + +#. Locate the |CL| images. + +#. Create and log into the |CL| virtual machine. + +#. Stop and deallocate the |CL| VM and resources. + +To use the MS Azure CLI 2.0 on your |CL| system, your system must have the +following packages installed: + +* Python 2.7 or later + +* libffi + +* OpenSSL 1.0.2 + +You can check to see what versions you have installed on your system by +running the individual commands as follows: + +.. code-block:: bash + + python --version + +.. code-block:: console + + python 2.7.12 + +.. code-block:: bash + + openssl version + +.. code-block:: console + + OpenSSL 1.0.2n 7 Dec 2017 + +.. code-block:: bash + + ls -l /usr/lib64/libffi* + +.. code-block:: console + + lrwxrwxrwx 1 root root 15 Jan 12 2017 /usr/lib64/libffi.so.6 -> libffi.so.6.0.4 + -rwxr-xr-x 1 root root 38792 Jan 12 2017 /usr/lib64/libffi.so.6.0.4 + +If you do not have these packages installed on your |CL| system, install the +sysadmin-basic software bundle using the :command:`swupd` command: + +.. code-block:: bash + + sudo swupd bundle-add sysadmin-basic + +.. note:: + + These instructions are for installing the MS Azure CLI 2.0 tools on a |CL| + system. If you are installing the CLI on another platform, follow the + instructions in the `MS Azure Install Azure CLI tutorial`_ for your + specific operating system. + +Install MS Azure CLI 2.0 on |CL| +******************************** + +#. To install the MS Azure CLI 2.0 on |CL|, use the :command:`curl` command as + follows: + + .. code-block:: bash + + curl -L https://aka.ms/InstallAzureCli | bash + + If you get an error message from :command:`curl` related to the -L + parameter or an error message is generated that includes the text "Object + Moved", use the full URL instead of the aka.ms redirect address: + + .. code-block:: bash + + curl https://azurecliprod.blob.core.windows.net/install | bash + +#. The installation script begins and prompts you several times during + execution for information. + + .. note:: + + The console output from the script displays your username instead of the + **[user]** variable shown on this tutorial. + + .. code-block:: console + + ===> In what directory would you like to place the install? (leave blank to use '/home/[user]/lib/azure-cli'): + + Press the :kbd:`Enter` key to accept the default or you can chose another + directory to install the MS Azure CLI 2.0 tools into. + + .. code-block:: console + + ===> In what directory would you like to place the 'az' executable? (leave blank to use '/home/[user]/bin'): + + Press the :kbd:`Enter` key to accept the default or you can chose another + directory to install the :command:`az` executable in. + +#. The installation downloads and builds all required tools and when complete + prompts you with: + + .. code-block:: console + + ===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): Y + + Type :kbd:`Y` and press the :kbd:`Enter` key to allow this modification. + + .. code-block:: console + + ===> Enter a path to an rc file to update (leave blank to use '/home/[user]/.bashrc'): + + Press the :kbd:`Enter` key to accept the default or enter the pathname to + your :file:`.bashrc` file. The installation completes with the final output + shown below: + + .. code-block:: console + + -- Backed up '/home/[user].bashrc' to '/home/[user]/.bashrc.backup' + -- Tab completion set up complete. + -- If tab completion is not activated, verify that '/home/[user]/.bashrc' is sourced by your shell. + -- + -- ** Run `exec -l $SHELL` to restart your shell. ** + -- + -- Installation successful. + -- Run the CLI with /home/[user]/bin/az --help + +#. The installation program finishes and you must restart your shell for + the changes to take effect. When the installation is successful, run the + following command to restart your shell. + + .. code-block:: bash + + exec -l $SHELL + +With the MS Azure CLI 2.0 executable successfully built and installed, run +the :command:`az` command. + +.. code-block:: bash + + az + +The output from the :command:`az` command is shown below: + +.. code-block:: console + + + /\ + / \ _____ _ _ __ ___ + / /\ \ |_ / | | | \'__/ _ \ + / ____ \ / /| |_| | | | __/ + /_/ \_\/___|\__,_|_| \___| + + + Welcome to the cool new Azure CLI! + + Here are the base commands: + + account : Manage Azure subscription information. + acr : Manage Azure Container Registries. + acs : Manage Azure Container Services. + ad : Synchronize on-premises directories and manage Azure Active Directory + resources. + advisor : (PREVIEW) Manage Azure Advisor. + aks : Manage Kubernetes clusters. + appservice : Manage App Service plans. + backup : Commands to manage Azure Backups. + batch : Manage Azure Batch. + batchai : Batch AI. + billing : Manage Azure Billing. + cdn : Manage Azure Content Delivery Networks (CDNs). + cloud : Manage registered Azure clouds. + cognitiveservices: Manage Azure Cognitive Services accounts. + configure : Display and manage the Azure CLI 2.0 configuration. This command is + interactive. + consumption : Manage consumption of Azure resources. + container : (PREVIEW) Manage Azure Container Instances. + cosmosdb : Manage Azure Cosmos DB database accounts. + disk : Manage Azure Managed Disks. + dla : (PREVIEW) Manage Data Lake Analytics accounts, jobs, and catalogs. + dls : (PREVIEW) Manage Data Lake Store accounts and filesystems. + eventgrid : Manage Azure Event Grid topics and subscriptions. + extension : Manage and update CLI extensions. + feature : Manage resource provider features. + feedback : Loving or hating the CLI? Let us know! + find : Find Azure CLI commands. + functionapp : Manage function apps. + group : Manage resource groups and template deployments. + image : Manage custom virtual machine images. + interactive : Start interactive mode. + iot : (PREVIEW) Manage Internet of Things (IoT) assets. + keyvault : Safeguard and maintain control of keys, secrets, and certificates. + lab : Manage Azure DevTest Labs. + lock : Manage Azure locks. + login : Log in to Azure. + logout : Log out to remove access to Azure subscriptions. + managedapp : Manage template solutions provided and maintained by Independent Software + Vendors (ISVs). + monitor : Manage the Azure Monitor Service. + mysql : Manage Azure Database for MySQL servers. + network : Manage Azure Network resources. + policy : Manage resource policies. + postgres : Manage Azure Database for PostgreSQL servers. + provider : Manage resource providers. + redis : Access to a secure, dedicated Redis cache for your Azure applications. + reservations : Manage Azure Reservations. + resource : Manage Azure resources. + role : Manage user roles for access control with Azure Active Directory and service + principals. + sf : Manage and administer Azure Service Fabric clusters. + snapshot : Manage point-in-time copies of managed disks, native blobs, or other + snapshots. + sql : Manage Azure SQL Databases and Data Warehouses. + storage : Manage Azure Cloud Storage resources. + tag : Manage resource tags. + vm : Provision Linux or Windows virtual machines. + vmss : Manage groupings of virtual machines in an Azure Virtual Machine Scale Set + (VMSS). + webapp : Manage web apps. + +Log into your Microsoft Azure account +************************************* + +#. With the :command:`az` command properly installed and functional, login to + your MS Azure account using the :command:`az login` command shown below: + + .. code-block:: bash + + az login + + The output from this command is: + + .. code-block:: console + + To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code BQ9MG442B to authenticate. + +#. Open your browser and enter the page `https://aka.ms/devicelogin` as shown + in figure 1: + + .. figure:: azure/figures/azure-1.png + :scale: 50 % + :alt: Microsoft Device Login + + Figure 1: :guilabel:`Microsoft Device Login` + +#. Enter the code `BQ9MG442B` to authenticate your device as shown in figure + 2. The code `BQ9MG442B` is a random authentication code generated for each + session login and will be different each time you log into MS Azure using + the :command:`az login` command. + + .. figure:: azure/figures/azure-2.png + :scale: 50 % + :alt: Microsoft Device Login - Azure CLI + + Figure 2: :guilabel:`Microsoft Device Login - Azure CLI` + +#. Once you enter the authentication code, the website changes to a screen to + enter your existing Microsoft Azure credentials. + +#. Log in with your existing MS Azure account credentials. Once complete, the + browser screen changes again as shown in figure 3. The screen shows you + have signed into the Microsoft Cross-platform Command Line Interface + application on your device and you can close the window. + + .. figure:: azure/figures/azure-3.png + :scale: 50 % + :alt: Microsoft Azure Cross-platform CLI + + Figure 3: :guilabel:`Microsoft Azure Cross-platform CLI` + +The MS Azure CLI 2.0 interface is now active using your existing MS Azure +account credentials. + +Create a MS Azure resource group +******************************** + +To learn more about MS Azure resource groups, visit the +`Azure Resource Manager overview`_ for an overview and detailed description +of resources within MS Azure. + +#. To create our new resource group, run the :command:`az group create ...` + command shown below to create a resource group named `ClearResourceGroup` + using the `-n` parameter and locate it in the `westus` region using the + `-l` parameter. + + .. code-block:: bash + + az group create -n ClearResourceGroup -l westus + +#. When the command has completed, the output from this command is similar to + the following: + + .. code-block:: console + + { + "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup", + "location": "westus", + "managedBy": null, + "name": "ClearResourceGroup", + "properties": { + "provisioningState": "Succeeded" + }, + "tags": null + } + +Create and log into the |CL| virtual machine +******************************************** + +For this tutorial, we are using the |CL| Basic SKU for our VM. + +#. To locate the available |CL| Basic VM SKU images in the MS Azure + marketplace, run the :command:`az vm image ...` command: + + .. code-block:: bash + + az vm image list --offer clear-linux --sku basic --all --output table + + This command may take some time to finish. The output lists all available + |CL| Basic images available in the Microsoft Azure marketplace as shown + below: + + .. code-block:: console + + Offer Publisher Sku Urn Version + -------------- ------------------- ---------------- ------------------------------------------------------------- --------- + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:15780.0.0 15780.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:15960.0.0 15960.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16050.0.0 16050.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16150.0.0 16150.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16500.0.0 16500.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:16810.0.0 16810.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:18080.0.0 18080.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:18620.0.0 18620.0.0 + clear-linux-os clear-linux-project basic clear-linux-project:clear-linux-os:basic:18860.0.0 18860.0.0 + + .. note:: + + The output list shows current offerings. New versions are added to the + MS Azure marketplace all the time. To reference the latest version of an + image, you can use the version label `latest` when specifying an image. + +#. The information shown in the `Urn` column lists the + `Publisher:Offer:Sku:Version` for each image available and this is the + information we want to create the |CL| Basic VM. Since we are creating a + |CL| Basic VM, highlight the `clear-linux-project:clear-linux-os:basic:` + string and copy it to your clipboard. Use the label + `latest` instead of referencing a specific version. + +#. Create the new |CL| Basic VM. Run the :command:`az vm create ...` + command using the URN `:clear-linux-project:clear-linux-os:basic:latest` + that we copied to the clipboard on the previous step. + + .. code-block:: bash + + az vm create --resource-group ClearResourceGroup --name ClearVM --image clear-linux-project:clear-linux-os:basic:latest --generate-ssh-keys + + .. note:: + + If you have already defined your public/private SSH key pair and they + are stored in your :file:`$HOME/.ssh` directory, you do not need to + include the *--generate-ssh-keys* option. + + Your output from this command will look similar to this output, where + [user] is your user name: + + .. code-block:: console + + SSH key files '/home/[user]/.ssh/id_rsa' and '/home/[user]/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage, back up your keys to a safe location. + + running... + + { + "fqdns": "", + "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup/providers/Microsoft.Compute/virtualMachines/ClearVM", + "location": "westus", + "macAddress": "00-0D-3A-37-C7-59", + "powerState": "VM running", + "privateIpAddress": "10.0.0.4", + "publicIpAddress": "13.91.4.245", + "resourceGroup": "ClearResourceGroup", + "zones": "" + } + + Take note of the public IP address from the output. + +#. Login into the new |CL| Basic VM, run the :command:`ssh` command with the + public IP address obtained from the previous step as shown: + + .. code-block:: bash + + ssh [user]@13.91.4.245 + + You may see the following message about the authenticity of the host. If + this appears, type `yes` to proceed connecting to your new |CL| VM. + + .. code-block:: console + + The authenticity of host '13.91.4.245 (13.91.4.245)' can't be established. + RSA key fingerprint is SHA256:{unique-number}. + Are you sure you want to continue connecting (yes/no)? yes + Warning: Permanently added '13.91.4.245' (RSA) to the list of known hosts. + + [user]@ClearVM ~ $ + + You are now logged into your new |CL| VM as [user], where [user] is your + user name. To check which software bundles are included with + this VM image, run the :command:`sudo swupd bundle-list` command inside the VM: + + .. code-block:: bash + + sudo swupd bundle-list + + The output shown should be similar to: + + .. code-block:: console + + swupd-client bundle list 3.14.1 + Copyright (C) 2012-2017 Intel Corporation + + bootloader + editors + kernel-hyperv + network-basic + openssh-server + os-cloudguest-azure + os-core + os-core-update + perl-basic + python-basic + python3-basic + storage-utils + sysadmin-basic + Current OS version: 19600 + + When you are finished using your new |CL| VM, type :command:`exit` to close + the :command:`SSH` terminal and logout. + +Stop and deallocate the |CL| VM and resources +********************************************* + +When you finish using your new |CL| instance, you must stop the VM and +deallocate the resources in your resource group. If you only stop a VM, the OS +image shuts down but the resources associated with it in your resource group +remain allocated and incurring charges. For instance, if you stop and then +later start the VM using the :command:`az vm start...` without deallocating +the resources, the IP address is retained and you can access the VM using that +same IP address. To release the resources associated with the VM and stop +incurring charges for them, you must deallocate the resources as well. + +#. At the command prompt, enter the :command:`az vm stop...` command as + follows: + + .. code-block:: bash + + az vm stop --resource-group ClearResourceGroup --name ClearVM + + This will stop the VM and then output text similar to: + + .. code-block:: console + + { + "endTime": "2017-12-13T23:04:02.346676+00:00", + "error": null, + "name": "{unique-name}", + "startTime": "2017-12-13T23:03:59.018536+00:00", + "status": "Succeeded" + } + +#. Once the VM stops, deallocate the VM resources to stop incurring + charges for the |CL| instance. Enter the following command: + + .. code-block:: console + + az vm deallocate --resource-group ClearResourceGroup --name ClearVM + +**Congratulations!** + +You are up and running with |CL| on MS Azure using the Azure +CLI 2.0 command line tools. + +Next steps +********** + +To see use cases you can fulfill with your |CL| instance, visit our +:ref:`tutorials ` section. + +For additional information visit the |CL| +`Azure Partner Mini Case Study`_ and the `Azure Partner Datasheet`_. + +To learn more about the MS Azure CLI 2.0 tool and options that are available, +visit the `MS Azure documentation and tutorials`_ website. + +.. _`Azure Portal`: + https://portal.azure.com + +.. _`MS Azure free account`: + https://azure.microsoft.com/en-us/free/ + +.. _`MS Azure documentation and tutorials`: + https://docs.microsoft.com/en-us/cli/azure/overview?view=azure-cli-latest + +.. _`MS Azure Install Azure CLI tutorial`: + https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest + +.. _`Azure Resource Manager overview`: + https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview + +.. _Azure Partner Datasheet: + http://download.microsoft.com/download/D/9/E/D9E22342-96D9-4455-BB15-99A1AF514DDD/Microsoft%20Azure%20Partner%20Datasheet%20-%20Intel%20Clear%20Linux.pdf + +.. _Azure Partner Mini Case Study: + http://download.microsoft.com/download/D/9/E/D9E22342-96D9-4455-BB15-99A1AF514DDD/Microsoft%20Azure%20Partner%20Mini%20Case%20Study%20-%20Intel%20Clear%20Linux.pdf diff --git a/zh_CN/_sources/tutorials/docker/docker.rst.txt b/zh_CN/_sources/tutorials/docker/docker.rst.txt new file mode 100644 index 00000000..2c885f77 --- /dev/null +++ b/zh_CN/_sources/tutorials/docker/docker.rst.txt @@ -0,0 +1,244 @@ +.. _docker: + +Run Docker\* on |CL-ATTR| +######################### + +|CL-ATTR| supports multiple containerization platforms, including a Docker +solution. |CL| has many unique features including a minimal default +installation, which makes it compelling to use as a host for container +workloads, management, and orchestration. + +This tutorial covers: + +.. contents:: :local: + :depth: 1 + +.. note:: + + This tutorial focuses on the installaton of the Docker ecosystem. + If you want to use |CL| as a Docker container image, refer to the + official |CL| container image + `published on Docker* Hub `_ + and our guide to :ref:`custom-clear-container`. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, follow +the :ref:`bare metal installation instructions`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Additionally, you should have: + +* A basic understanding of Linux\* and Docker. + +* |CL| environment that has transparent network access to the Internet. + If you are behind a HTTP proxy server, in a corporate setting for example, + please refer to the `Docker proxy instructions`_ . + +Install the containers-basic bundle +*********************************** + +Software in |CL| is offered in the form of `bundles`_ to provide a +complete function. The *containers-basic* provides all the required software +packages to run Docker images as containers. + +#. First, install the *containers-basic* bundle by running this + :command:`swupd` command: + + .. code-block:: bash + + sudo swupd bundle-add containers-basic + +#. Start the Docker daemon through systemd manager by running this command: + + .. code-block:: bash + + sudo systemctl start docker + + If you want Docker to start automatically on boot, enable the + systemd service by running this command: + + .. code-block:: bash + + sudo systemctl enable docker + +#. Finally, verify :command:`docker` has been installed by running this + command and checking the version output for both *client* and *server*: + + .. code-block:: bash + + sudo docker version + +Congratulations! At this point, you have a working installation of Docker +on |CL|. You are ready to start using container images on your system. + +Integration with Kata Containers\* (optional) +********************************************* + +`Kata Containers`_, is an open source project aiming to increase security +of containers by using a hardware-backed virtual machine container runtime +rather than software namespace containers that are provided by the standard +Docker *runc* runtime. + +|CL| provides easy integration of the *kata-runtime* with Docker. +More information on installing and using the *kata-runtime* may be found at :ref:`kata`. + + +.. note:: + + The remaining sections of this tutorial are standard to Docker setup + and configuration. If you are familiar with Docker basics, you do not + need to continue reading. The following sections are provided here for + sake of completeness. + +.. _additional-docker-configuration: + +Additional Docker configuration +******************************* + +Perform additional Docker daemon configuration via a configuration file +typically located at :file:`/etc/docker/daemon.json`. |CL| features a +:ref:`stateless` system so the configuration file :file:`daemon.json` does +*NOT* exist by default. + +#. Create the :file:`daemon.json` by running this command: + + .. code-block:: bash + + sudo touch /etc/docker/daemon.json + + .. note:: + + Refer to the `Docker documentation on daemon configuration`_ for the + full list of available configuration options and examples. + +#. For production systems, we follow Docker's recommendation to use the + `OverlayFS storage driver`_ `overlay2`, shown below: + + .. code-block:: json + + { + "storage-driver": "overlay2" + } + + .. note:: + + A testing version is found in `Docker Device Mapper storage driver`_. + If using this storage driver, a warning message may appear: "usage of + loopback devices is strongly discouraged for production use". + +#. Save and close :file:`daemon.json`. + +#. Once you've made any required changes, be sure to restart the + Docker daemon through systemd manager by running this command: + + .. code-block:: bash + + sudo systemctl restart docker + +Pulling and running an image from Docker Hub +******************************************** + +`Docker Hub`_ is a publically available container image repository which +comes preconfigured with Docker. In the example below we will pull and run +an the official Docker image for nginx\*, an open source reverse proxy server. + +#. First, pull a container image from Docker Hub using the + :command:`docker pull` command. Download the latest nginx\* Docker + container image by running this command: + + .. code-block:: bash + + sudo docker pull nginx + +#. Create and launch a new container using the :command:`docker run` + command. Launch a nginx container by running this command: + + .. code-block:: bash + + sudo docker run --name test-nginx -d -p 8080:80 nginx + + .. note:: + + Below is an explanation of switches used in the command above. For + detailed :command:`docker run` switches and syntax, refer to the + `Docker Documentation`_ . + + * The *--name* switch lets you provide a friendly name to + target the container for future operations + + * The *-d* switch launches the container in the background + + * The *-p* switch allows the container's HTTP port (80) to be + accessible from the |CL| host on port 8080 + +#. You can access the Welcome to Nginx! splash page running in the container + by browsing to \http://127.0.0.1:8080 or by running this :command:`curl` + command from your |CL| machine: + + .. code-block:: bash + + curl 127.0.0.1:8080 + +#. Finally, stop and delete the nginx container by running the + :command:`docker stop` and :command:`docker rm` commands. + + .. code-block:: bash + + sudo docker stop test-nginx + sudo docker rm test-nginx + +Congratulations! At this point, you have successfully pulled a nginx +container image from `Docker Hub`_ and have run an example container. + +Creating a Docker swarm cluster +******************************* + +Clusters of Docker hosts are referred to as *swarms*. + +The process in this tutorial can be repeated to install Docker on multiple +|CL| hosts with the intent to form a Docker swarm cluster. + +The `Docker documentation on swarm key concepts`_ and +`Docker documentation on creating a swarm`_ can be referenced +for further instructions on setting up a swarm. + +Related topics +************** + +* `Docker Home`_ +* `Docker Documentation`_ +* `Docker Hub`_ +* `Kata Containers`_ + + +.. _Docker proxy instructions: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy + +.. _bundles: https://clearlinux.org/documentation/clear-linux/concepts/bundles-about#related-concepts + +.. _Docker documentation on daemon configuration: https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file + +.. _Kata Containers: https://katacontainers.io/ + +.. _Docker Home: https://www.docker.com/ + +.. _Docker Documentation: https://docs.docker.com/ + +.. _Docker Hub: https://hub.docker.com/ + +.. _Docker documentation on swarm key concepts: https://docs.docker.com/engine/swarm/key-concepts/ + +.. _Docker documentation on creating a swarm: https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/ + +.. _Configure direct lvm mode for production: https://docs.docker.com/storage/storagedriver/device-mapper-driver/ + +.. _OverlayFS storage driver: https://docs.docker.com/storage/storagedriver/overlayfs-driver/ + +.. _Docker Device Mapper storage driver: https://docs.docker.com/storage/storagedriver/device-mapper-driver/ \ No newline at end of file diff --git a/zh_CN/_sources/tutorials/flatpak/flatpak.rst.txt b/zh_CN/_sources/tutorials/flatpak/flatpak.rst.txt new file mode 100644 index 00000000..1ca74e39 --- /dev/null +++ b/zh_CN/_sources/tutorials/flatpak/flatpak.rst.txt @@ -0,0 +1,103 @@ +.. _flatpak: + +Use Flatpak\* to install applications on |CL-ATTR| +################################################## + +This tutorial provides all the required steps to install Flatpak as well as +downloading, installing, and running LibreOffice\* on |CL-ATTR|. + +Please visit the `Flatpak website`_ for more information about Flatpak and +how to use it. You can also `download it here`_. + +Before you begin +**************** + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, visit +our :ref:`bare metal installation guide `. + +Install Flatpak on your host system +=================================== + +Flatpak is included as part of the bundle `desktop`. To install the +application, log in to your user account and enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add desktop + +Install and run the LibreOffice Flatpak image +============================================= + +Application developers have the option to bundle their applications using +Flatpak to allow the installation of a single distribution of their +application on different distributions of Linux, including |CL|. +Flatpak provides a `list of applications`_ available through Flathub. + +|CL| enables the Flathub repository by default. + + +Installing using gnome software +------------------------------- + +All you need to do is to launch `gnome software`, search for the LibreOffice +app, and click the install button. + +.. figure:: figures/01-install-libreoffice.gif + :alt: install libreoffice step by step + + Figure 1: Installing LibreOffice using gnome-software + + + +Installing using the command line +--------------------------------- + +Open the `gnome-terminal` and type the following command to install the +LibreOffice app. + +.. code-block:: bash + + flatpak install --user flathub org.libreoffice.LibreOffice + Installing in user: + org.libreoffice.LibreOffice/x86_64/stable flathub 2aff77bd5cf1 + permissions: ipc, network, pulseaudio, wayland, x11, dri + file access: host, xdg-run/dconf + dbus access: ca.desrt.dconf, org.gtk.vfs.* + dbus ownership: org.libreoffice.LibreOfficeIpc0 + org.libreoffice.LibreOffice.Locale/x86_64/stable flathub 924157b3b009 + Is this ok [y/n]: y + Installing for user: org.libreoffice.LibreOffice/x86_64/stable from flathub + [####################] 403 metadata, 4661 content objects fetched; 222574 KiB transferred in 99 seconds + Now at 2aff77bd5cf1. + Installing for user: org.libreoffice.LibreOffice.Locale/x86_64/stable from flathub + [####################] 10 metadata, 71 content objects fetched; 1013 KiB transferred in 3 seconds + Now at 924157b3b009. + + +Launch LibreOffice +================== +A new set of icons will appear in your Gnome applications list titled :guilabel:`LibreOffice.` To +execute the application, highlight the application and click on the :guilabel:`LibreOffice` icon. +LibreOffice will start normally. + +.. figure:: figures/02-openlibreoffice.gif + :alt: Opening LibreOffice app + + Figure 2: Select :guilabel:`LibreOffice` app + +Using the command line +---------------------- + +.. code-block:: bash + + flatpak run org.libreoffice.LibreOffice + + +.. _Flatpak website: http://flatpak.org + +.. _list of applications: http://flatpak.org/apps.html + +.. _download it here: + http://download.documentfoundation.org/libreoffice/flatpak/latest/LibreOffice.flatpak + diff --git a/zh_CN/_sources/tutorials/fmv.rst.txt b/zh_CN/_sources/tutorials/fmv.rst.txt new file mode 100644 index 00000000..2b31bde1 --- /dev/null +++ b/zh_CN/_sources/tutorials/fmv.rst.txt @@ -0,0 +1,273 @@ +.. _fmv: + +Use the function multi-version patch generator +############################################## + +CPU architectures often gain interesting new instructions as they evolve but +application developers find it difficult to take advantage of those +instructions. The reluctance to lose backward-compatibility is one of the +main roadblocks slowing developers from using advancements in newer computing +architectures. :abbr:`FMV (Function Multi-Versioning)`, which first appeared +in `GCC`_ 4.8, is a way to have multiple implementations of a function, each +using a different architecture specialized instruction-set extensions. GCC +6 introduces changes to FMV to make it even easier to bring architecture- +based optimizations to the application code. + +In this tutorial we will use FMV on general code and on +:abbr:`FFT (Fast Fourier Transform)` library code (FFTW). Upon completing the +tutorial, you will be able to use this technology on your code and use the +libraries to deploy architecture-based optimizations to your application code. + +Install and configure a |CL| host on bare metal +*********************************************** +First, follow our guide to :ref:`bare-metal-install-desktop`. Once the bare +metal installation and initial configuration are complete, add the +`desktop-dev` bundle to the system. `desktop-dev`: contains the necessary +development tools like GCC and Perl\*. + +To install the bundles, run the following command in the :file:`$HOME` +directory: + +.. code-block:: bash + + sudo swupd bundle-add desktop-dev + +Detect loop vectorization candidates +************************************ + +Now, we need to detect the loop vectorization candidates to be cloned for +multiple platforms with FMV. As an example, we will use the following +simple C code: + +.. code-block:: c + :linenos: + + #include + #include + #include + #define MAX 1000000 + + int a[256], b[256], c[256]; + + void foo(){ + int i,x; + for (x=0; x log + +To generate the patch files, execute: + +.. code-block:: bash + + perl ./make-fmv-patch/make-fmv-patch.pl log . + +The :file:`make-fmv-patch.pl` script takes two arguments: `` and +``. Replace `` and `` with the proper +values and execute: + +.. code-block:: bash + + perl make-fmv-patch.pl + +The command generates the following :file:`example.c.patch` patch: + +.. code-block:: console + + --- ./example.c 2017-09-27 16:05:42.279505430 +0000 + +++ ./example.c~ 2017-09-27 16:19:11.691544026 +0000 + @@ -5,6 +5,7 @@ + + int a[256], b[256], c[256]; + + +__attribute__((target_clones("avx2","arch=atom","default"))) + void foo(){ + int i,x; + for (x=0; x + #include + #include + #define MAX 1000000 + + int a[256], b[256], c[256]; + + __attribute__((target_clones("avx2","arch=atom","default"))) + void foo(){ + int i,x; + for (x=0; x y) ? x : y; } + + +__attribute__((target_clones("avx2","arch=atom","default"))) + static double aerror(C *a, C *b, int n) + { + if (n > 0) { + @@ -111,6 +112,7 @@ + } + + /* make array hermitian */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void mkhermitian(C *A, int rank, const bench_iodim *dim, int stride) + { + if (rank == 0) + @@ -148,6 +150,7 @@ + } + + /* C = A + B */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void aadd(C *c, C *a, C *b, int n) + { + int i; + @@ -159,6 +162,7 @@ + } + + /* C = A - B */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void asub(C *c, C *a, C *b, int n) + { + int i; + @@ -170,6 +174,7 @@ + } + + /* B = rotate left A (complex) */ + +__attribute__((target_clones("avx2","arch=atom","default"))) + void arol(C *b, C *a, int n, int nb, int na) + { + int i, ib, ia; + @@ -192,6 +197,7 @@ + } + } + +With these patches, we can select where to apply the FMV technology making +bringing architecture-based optimizations to application code even easier. + +**Congratulations!** + +You have successfully installed an FMV development environment on |CL|. +Furthermore, you used cutting edge compiler technology to improve the +performance of your application based on Intel Architecture technology and +profiling of the specific execution of your application. + +.. _GCC: https://gcc.gnu.org +.. _make-fmv-patch: https://github.com/clearlinux/make-fmv-patch diff --git a/zh_CN/_sources/tutorials/hadoop.rst.txt b/zh_CN/_sources/tutorials/hadoop.rst.txt new file mode 100644 index 00000000..633c84d5 --- /dev/null +++ b/zh_CN/_sources/tutorials/hadoop.rst.txt @@ -0,0 +1,256 @@ +.. _hadoop: + +Set up a single node cluster with Hadoop\* +########################################## + +This tutorial walks you through the process of installing, configuring, and +running Apache\* Hadoop on |CL-ATTR|. The Apache Hadoop software library is a +framework for distributed processing of large data sets across clusters of +computers using simple programming models. It is designed to scale up from +single servers to thousands of machines, with each machine offering local +computation and storage. + +Prerequisites +************* + +Before following this tutorial, you should follow the +:ref:`bare-metal-install-desktop` to ensure you have installed |CL|. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +For the purposes of this tutorial, we will install Hadoop in a single machine +running both the master and slave daemons. + +Install Apache Hadoop +********************* + +Apache Hadoop is included in the `big-data-basic` bundle. To install the +framework, enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add big-data-basic + +Configure Apache Hadoop +*********************** + +#. To create the configuration directory, enter the following command: + + .. code-block:: bash + + sudo mkdir /etc/hadoop + +#. Copy the defaults from :file:`/usr/share/defaults/hadoop` to + :file:`/etc/hadoop` with the following command: + + .. code-block:: bash + + $ sudo cp /usr/share/defaults/hadoop/* /etc/hadoop + + .. note:: Since |CL| is a stateless system, you should never modify the + files under the :file:`/usr/share/defaults` directory. The software + updater will overwrite those files. + +Once all the configuration files are in :file:`/etc/hadoop`, we must edit +them to fit our needs. The `NameNode` server is the master server. It manages +the namespace of the files system and regulates the clients' access to files. +The first file we edit, :file:`/etc/hadoop/core-site.xml`, informs the Hadoop +daemon where `NameNode` is running. + +In this tutorial, our `NameNode` runs in our `localhost`. Follow these steps +to set it up correctly: + +#. Open the :file:`/etc/hadoop/core-site.xml` file using the editor of your + choice and modify the file as follows: + + .. code-block:: xml + + + + + + fs.default.name + hdfs://localhost:9000 + + + +#. Edit the :file:`/etc/hadoop/hdfs-site.xml` file. This file configures the + :abbr:`HDFS (Hadoop Distributed File System)` daemons. This configuration + includes the list of permitted and excluded data nodes and the size of + said blocks. In this example, we are setting the number of block + replication to 1 from the default of 3 as follows: + + .. code-block:: xml + :emphasize-lines: 6 + + + + + + dfs.replication + 1 + + + dfs.permission + false + + + +#. Edit the :file:`/etc/hadoop/mapred-site.xml` file. This file configures + all daemons related to `MapReduce`: `JobTracker` and `TaskTrackers`. With + `MapReduce`, Hadoop can process big amounts of data in multiple systems. In + our example, we set :abbr:`YARN (Yet Another Resource Manager)` as our + runtime framework for executing `MapReduce` jobs as follows: + + .. code-block:: xml + :emphasize-lines: 5,6 + + + + + + mapreduce.framework.name + yarn + + + +#. Edit the :file:`/etc/hadoop/yarn-site.xml` file. This file configures all + daemons related to `YARN`: `ResourceManager` and `NodeManager`. In our + example, we implement the `mapreduce_shuffle` service, which is the + default as follows: + + .. code-block:: xml + :emphasize-lines: 4,5,8,9 + + + + + yarn.nodemanager.aux-services + mapreduce_shuffle + + + yarn.nodemanager.auxservices.mapreduce.shuffle.class + org.apache.hadoop.mapred.ShuffleHandler + + + +Configure your SSH key +********************** + +#. Create a SSH key. If you already have one, skip this step. + + .. code-block:: bash + + sudo ssh-keygen -t rsa + + +#. Copy the key to your authorized keys. + + .. code-block:: bash + + sudo cat /root/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys + +#. Log into the localhost. If no password prompt appears, you are ready to + run the Hadoop daemons. + + .. code-block:: bash + + sudo ssh localhost + +Run the Hadoop daemons +********************** + +With all the configuration files properly edited, we are ready to start the +daemons. + +When we format the `NameNode` server, it formats the meta-data related to +data nodes. Thus, all the information on the data nodes is lost and the nodes +can be reused for new data. + +#. Format the `NameNode` server with the following command: + + .. code-block:: bash + + sudo hdfs namenode -format + +#. Start the DFS in `NameNode` and `DataNodes` with the following command: + + .. code-block:: bash + + sudo start-dfs.sh + +#. The console output should be similar to: + + .. code-block:: console + + Starting namenodes on [localhost] + The authenticity of host 'localhost (::1)' can't be established. + ECDSA key fingerprint is + SHA256:97e+7TnomsS9W7GjFPjzY75HGBp+f1y6sA+ZFcOPIPU. + Are you sure you want to continue connecting (yes/no)? + + Enter `yes` to continue. + +#. Start the `YARN` daemons `ResourceManager` and `NodeManager` with the + following command: + + .. code-block:: bash + + sudo start-yarn.sh + +#. Ensure everything is running as expected with the following command: + + .. code-block:: bash + + sudo jps + +#. The console output should be similar to: + + .. code-block:: console + + 22674 DataNode + 26228 Jps + 22533 NameNode + 23046 ResourceManager + 22854 SecondaryNameNode + 23150 NodeManager + +Run the MapReduce wordcount example +*********************************** + +#. Create the input directory. + + .. code-block:: bash + + sudo hdfs dfs -mkdir -p /user/root/input + +#. Copy a file from the local file system to the HDFS. + + .. code-block:: bash + + sudo hdfs dfs -copyFromLocal local-file /user/root/input + +#. Run the `wordcount` example. + + .. code-block:: bash + + sudo hadoop jar /usr/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount input output + +#. Read output file "part-r-00000". This file contains the number of times + each word appears in the file. + + .. code-block:: bash + + sudo hdfs dfs -cat /user/root/output/part-r-00000 + +**Congratulations!** + +You successfully installed and setup a single node Hadoop cluster. +Additionally, you ran a simple wordcount example. + +Your single node Hadoop cluster is up and running! + diff --git a/zh_CN/_sources/tutorials/kata.rst.txt b/zh_CN/_sources/tutorials/kata.rst.txt new file mode 100644 index 00000000..cecd365e --- /dev/null +++ b/zh_CN/_sources/tutorials/kata.rst.txt @@ -0,0 +1,116 @@ + .. _kata: + +Install Kata Containers\* +######################### + +This tutorial describes how to install, configure, and run `Kata Containers`_ +on |CL-ATTR|. Kata Containers is an open source project developing a +lightweight implementation of :abbr:`VMs (Virtual Machines)` that offer the +speed of containers and the security of VMs. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. +For detailed instructions on installing |CL| on a bare metal system, follow +the :ref:`bare metal installation tutorial`. + +If you have Clear Containers installed on your |CL| system, then follow the +:ref:`migrate Clear Containers to Kata Containers tutorial`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Install Kata Containers +*********************** + +Kata Containers is included in the :file:`containers-virt` bundle. +To install the framework, enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add containers-virt + +Restart the Docker\* and Kata Containers systemd services. + +.. code-block:: bash + + sudo systemctl daemon-reload + sudo systemctl restart docker + +Run Kata Containers +******************* + +.. code-block:: bash + + sudo docker run -ti busybox sh + +.. note:: + + If you use a proxy server and your proxy environment variables are already + set, run the following commands as a shell script to configure Docker: + + .. code-block:: bash + + docker_service_dir="/etc/systemd/system/docker.service.d/" + sudo mkdir -p "$docker_service_dir" + cat <`. +Learn about the benefits of having an up-to-date system for cloud +orchestration on the :ref:`swupd-about` page. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Install Kubernetes and CRI runtimes +*********************************** + +Kubernetes, a set of supported :abbr:`CRI (Container Runtime Interface)` +runtimes, and networking plugins, are included in the `cloud-native-basic`_ +bundle. + +To install this framework, enter the following command: + +.. code-block:: bash + + sudo swupd bundle-add cloud-native-basic + +.. note:: + + For more on networking plugins, see `Install pod network add-on`_. + +Configure Kubernetes +******************** + +This tutorial uses the basic default Kubernetes configuration for simplicity. +You must define your Kubernetes configuration according to your specific +deployment and your security needs. + +#. Enable IP forwarding to avoid kubeadm `preflight check`_ errors: + + Create (or edit if it exists) the file :file:`/etc/sysctl.d/60-k8s.conf` + and include the following line: + + .. code-block:: bash + + net.ipv4.ip_forward = 1 + + Apply the change: + + .. code-block:: bash + + sudo systemctl restart systemd-sysctl + +#. Enable the kubelet service: + + .. code-block:: bash + + sudo systemctl enable kubelet.service + +#. Disable swap using one of the following methods, either: + + a) Temporarily: + + .. code-block:: bash + + sudo swapoff -a + + .. note:: + + Swap will be enabled at next reboot, causing failures in + your cluster. + + or: + + b) Permanently: + + Mask the swap partition: + + .. code-block:: bash + + sudo systemctl mask $(sed -n -e 's#^/dev/\([0-9a-z]*\).*#dev-\1.swap#p' /proc/swaps) 2>/dev/null + sudo swapoff -a + + .. note:: + + On systems with limited resources, some performance degradation may + be observed while swap is disabled. + +#. Switch to root to modify the `hosts` file: + + .. code-block:: bash + + sudo -s + +#. Create (or edit if it exists) the hosts file that Kubernetes will read to + locate the master's host: + + .. code-block:: bash + + echo "127.0.0.1 localhost `hostname`" >> /etc/hosts + +#. Exit root: + + .. code-block:: bash + + exit + +Configure and run Kubernetes +**************************** + +This section describes how to configure and run Kubernetes with CRI-O and +kata-runtime. + +Configure and run CRI-O + kata-runtime +====================================== + +#. Enable the CRI-O service: + + .. code-block:: bash + + sudo systemctl enable crio.service + +#. Enter the commands: + + .. code-block:: bash + + sudo systemctl daemon-reload + sudo systemctl restart crio + +#. Initialize the master control plane with the command below and follow the + displayed instructions to set up `kubectl`: + + .. code-block:: bash + + sudo kubeadm init --cri-socket=/run/crio/crio.sock + +#. Register kata-runtime as a RuntimeClass handler: + + .. code-block:: bash + + cat << EOF | kubectl apply -f - + kind: RuntimeClass + apiVersion: node.k8s.io/v1beta1 + metadata: + name: native + handler: runc + --- + kind: RuntimeClass + apiVersion: node.k8s.io/v1beta1 + metadata: + name: kata-containers + handler: kata + EOF + +Install pod network add-on +************************** + +You must choose and install a `pod network add-on`_ to allow your pods to +communicate. Check whether or not your add-on requires special flags when you +initialize the master control plane. + +**Notes about flannel add-on** + +If you choose the `flannel` add-on, then you must add the following to the +`kubeadm init` command: + +.. code-block:: bash + + --pod-network-cidr 10.244.0.0/16 + +Furthermore, if you are using CRI-O and `flannel` and you want to use +Kata Containers, edit the :file:`/etc/crio/crio.conf` file to add: + +.. code-block:: bash + + [crio.runtime] + manage_network_ns_lifecycle = true + +Use your cluster +**************** + +Once your master control plane is successfully initialized, instructions on +how to use your cluster and its *IP*, *token*, and *hash* values are +displayed. It is important that you record the cluster values because they +are needed when joining worker nodes to the cluster. Some values have a valid +period. The values are presented in a format similar to: + +.. code-block:: bash + + kubeadm join : --token --discovery-token-ca-cert-hash + +**Congratulations!** + +You've successfully installed and set up Kubernetes in |CL| using CRI-O and +kata-runtime. You are now ready to follow on-screen instructions to deploy a +pod network to the cluster and join worker nodes with the displayed token +and IP information. + +Related topics +************** + +Read the Kubernetes documentation to learn more about: + +* `Understanding basic Kubernetes architecture`_ + +* `Deploying an application to your cluster`_ + +* Installing a `pod network add-on`_ + +* `Joining your nodes`_ + +Cloud native setup automation (optional) +**************************************** + +Clone the `cloud-native-setup`_ repository on your system and follow the +instructions. This repository includes helper scripts to automate configuration. + +Package configuration customization (optional) +********************************************** + +|CL| is a stateless system that looks for user-defined package configuration +files in the :file:`/etc/` directory to be used as default. If +user-defined files are not found, |CL| uses the distribution-provided +configuration files for each package. + +If you customize any of the default package configuration files, you **must** +store the customized files in the :file:`/etc/` directory. If you edit any of +the distribution-provided default files, your changes will be lost in the +next system update. + +For example, to customize CRI-O configuration in your system, run the +following commands: + +.. code-block:: bash + + sudo mkdir /etc/crio + sudo cp /usr/share/defaults/crio/crio.conf /etc/crio/ + sudo $EDITOR /etc/crio/crio.conf + +Learn more about :ref:`stateless` in |CL| and view the |CL| `documentation`_. + +Proxy configuration (optional) +****************************** + +If you use a proxy server, you must set your proxy environment variables and +create an appropriate proxy configuration file for both CRI-O services. Consult your IT department if you are behind a corporate proxy for +the appropriate values. Ensure that your local IP is **explicitly included** +in the environment variable *NO_PROXY*. (Setting *localhost* is not enough.) + +If you have already set your proxy environment variables, run the following +commands as a shell script to configure all of these services in one step: + +.. code-block:: bash + + services=('crio') + for s in "${services[@]}"; do + sudo mkdir -p "/etc/systemd/system/${s}.service.d/" + cat << EOF | sudo tee "/etc/systemd/system/${s}.service.d/proxy.conf" + [Service] + Environment="HTTP_PROXY=${http_proxy}" + Environment="HTTPS_PROXY=${https_proxy}" + Environment="SOCKS_PROXY=${socks_proxy}" + Environment="NO_PROXY=${no_proxy}" + EOF + done + +Next steps +********** + +:ref:`kubernetes-bp` + + +Troubleshooting +*************** + +* not found in message. + + Your DNS server may not be appropriately configured. Try adding an + entry to the :file:`/etc/hosts` file with your host's IP and Name. + + For example: 100.200.50.20 myhost + + Use the commands :command:`hostname` and :command:`hostname -I` to retrieve them. + +* Images cannot be pulled. + + You may be behind a proxy server. Try configuring your proxy settings, + using the environment variables *HTTP_PROXY*, *HTTPS_PROXY*, and *NO_PROXY* + as required in your environment. + +* Connection refused error. + + If you are behind a proxy server, you may need to add the master's IP to + the environment variable *NO_PROXY*. + +* Connection timed-out or Access Refused errors. + + You must ensure that the appropriate proxy settings are available from the + same terminal where you will initialize the control plane. To verify the + proxy settings that Kubernetes will actually use, run the commands: + + .. code-block:: bash + + echo $HTTP_PROXY + echo $HTTPS_PROXY + echo $NO_PROXY + + If the displayed proxy values are different from your assigned values, the + cluster initialization will fail. Contact your IT support team to learn how + to set the proxy variables permanently, and how to make them available for + all the types of access that you will use, such as remote SSH access. + + If the result of the above commands is blank, you may need to add a + ``profile`` to the :file:`/etc` directory. To do so, follow these steps. + + #. Create a `profile` in :file:`/etc` + + .. code-block:: bash + + sudo touch profile + + #. With a preferred editor, open `profile`, and enter your proxy settings. + Example shown below. + + .. code-block:: bash + + export "HTTP_PROXY=http://proxy.example.com:443" + export "HTTPS_PROXY=http://proxy.example.com:445" + export "SOCKS_PROXY=http://proxy.example.com:1080" + export "NO_PROXY= site.com,.site.com,localhost,127.0.0.1, + + .. note:: + + can be obtained by running :command:`ifconfig`. + + #. Save and exit the `profile`. + + #. Run: + + .. code-block:: bash + + sudo source profile + + #. To ensure your system isn't running previous session variables, run: + + .. code-block:: bash + + sudo kubeadm reset --cri-socket=/run/crio/crio.sock + + #. Continue below while passing `-E` in the command as shown. + +* Missing environment variables. + + If you are behind a proxy server, pass environment variables by adding *-E* + to the command that initializes the master control plane. + + .. code-block:: bash + + /* Kubernetes with CRI-O + kata-runtime */ + sudo -E kubeadm init --cri-socket=/run/crio/crio.sock + +.. _Kubernetes container orchestration system: https://kubernetes.io/ + +.. _Kata Containers: https://katacontainers.io/ + +.. _Software Update documentation: https://clearlinux.org/documentation/clear-linux/concepts/swupd-about#updating + +.. _cloud-native-basic: https://github.com/clearlinux/clr-bundles/blob/master/bundles/cloud-native-basic + +.. _preflight check: https://kubernetes.io/docs/reference/setup-tools/kubeadm/implementation-details/#preflight-checks + +.. _Understanding basic Kubernetes architecture: https://kubernetes.io/docs/user-journeys/users/application-developer/foundational/#section-3 + +.. _Deploying an application to your cluster: https://kubernetes.io/docs/user-journeys/users/application-developer/foundational/#section-2 + +.. _pod network add-on: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network + +.. _Joining your nodes: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#join-nodes + +.. _documentation: https://clearlinux.org/documentation/clear-linux + +.. _cloud-native-setup: https://github.com/clearlinux/cloud-native-setup diff --git a/zh_CN/_sources/tutorials/machine-learning/machine-learning.rst.txt b/zh_CN/_sources/tutorials/machine-learning/machine-learning.rst.txt new file mode 100644 index 00000000..d07e0243 --- /dev/null +++ b/zh_CN/_sources/tutorials/machine-learning/machine-learning.rst.txt @@ -0,0 +1,242 @@ +.. _machine-learning: + +TensorFlow\* machine learning on |CL-ATTR| +########################################## + +This tutorial will demonstrate the installation and execusion of a TensorFlow\* +machine learning example on |CL-ATTR|. It uses a Jupyter\* Notebook and MNIST +data for handwriting recognition.  + +The initial steps will have you set up a Jupyter kernel and run a Notebook +on a bare-metal |CL| system. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. For +detailed instructions on installing |CL| on a bare metal system, follow the +:ref:`bare metal installation tutorial`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Once your system is updated, add the following bundles to your system: + +* `machine-learning-web-ui`: This bundle contains the Jupyter application. + +* `machine-learning-basic`: This bundle contains TensorFlow and other useful + tools. + +To install the bundles, run the following commands in your :file:`$HOME` +directory: + +.. code-block:: bash + + sudo swupd bundle-add machine-learning-web-ui + + sudo swupd bundle-add machine-learning-basic + +Set up a Jupyter notebook +************************* + +With all required packages and libraries installed, set up the file structure +for the Jupyter Notebook. + +#. In the :file:`$HOME` directory, create a directory for the Jupyter + Notebooks named :file:`Notebooks`. + + .. code-block:: bash + + mkdir Notebooks + +#. Within :file:`Notebooks`, create a directory named :file:`Handwriting`. + + .. code-block:: bash + + mkdir Notebooks/Handwriting + +#. Change to the new directory. + + .. code-block:: bash + + cd Notebooks/Handwriting + +#. Copy the :file:`MNIST_example.ipynb` file into the :file:`Handwriting` + directory. + + .. note:: + After installing the `machine-learning basic` bundle, you can find the + example code under + :file:`/usr/share/doc/tensorflow/MNIST_example.ipynb`. + + +The example code downloads and decompresses the MNIST data directly into the +:file:`./mnist` directory. Alternatively, download the four files directly +from the Yann LeCun’s `MNIST Database website`_ and save them into a +:file:`mnist` directory within the :file:`Handwriting` directory. + +The files needed are: + +* `train-images-idx3-ubyte.gz`_: Training set images (9912422 bytes) + +* `train-labels-idx1-ubyte.gz`_: Training set labels (28881 bytes) + +* `t10k-images-idx3-ubyte.gz`_: Test set images (1648877 bytes) + +* `t10k-labels-idx1-ubyte.gz`_: Test set labels (4542 bytes) + +Run the Jupyter machine learning example code +********************************************* + +With |CL|, Jupyter, and TensorFlow installed and configured, we can +run the example code. + +#. Go to the :file:`($HOME)/Notebooks` directory and start Jupyter with the + following commands: + + .. code-block:: bash + + cd ~/Notebooks + + jupyter notebook + + The Jupyter server starts and opens a web browser showing the Jupyter file + manager with a list of files in the current directory, see figure 1. + + .. figure:: figures/machine-learning-1.png + :alt: Jupyter file manager + + Figure 1: The Jupyter file manager shows the list of available files. + +#. Click on the :file:`Handwriting` directory. The :file:`MNIST_example.ipynb` + file created earlier should be listed there, see figure 2. + + .. figure:: figures/machine-learning-2.png + :alt: Example file within the Jupyter file manager + + Figure 2: The example file within the Jupyter file manager. + +#. To run the hand writing example, click on the :file:`MNIST_example.ipynb` + file to load the notebook, see figure 3. + + .. figure:: figures/machine-learning-3.png + :alt: The loaded MNIST_example notebook + + Figure 3: The loaded MNIST_example notebook within the Jupyter file + manager. + +#. Click the |run-cell| button to execute the code in the current cell and + move to the next. + +#. Select the :guilabel:`In [2]` cell and click the |run-cell| button to load + the MNIST data. The successful output is shown on figure 4. + + .. figure:: figures/machine-learning-4.png + :alt: Successful import of MNIST data + + Figure 4: Output after successfully importing the MNIST data. + + + After the MNIST data was successfully downloaded and extracted into the + :file:`mnist` directory within the :file:`($HOME)/Notebooks/Handwriting` + directory, four .gz files are present and the four data sets were created: + `trainX`, `trainY`, `testX` and `testY`. + +#. To inspect the imported data, the function in :guilabel:`In [3]` first + instructs Jupyter to reshape the data into an array of 28 x 28 images and to + plot the area in a 28 x 28 grid. Click the |run-cell| button twice to show + the first two digits in the `trainX` dataset, see figure 5. + + .. figure:: figures/machine-learning-5.png + :alt: Function to reshape data. + + Figure 5: A function reshapes the data and displays the first two + digits in the `trainX` dataset. + +#. The :guilabel:`In [4]` cell defines the neural network. It provides the + inputs, defines the hidden layers, runs the training model, and sets up + the output layer, see figure 6. Click the |run-cell| button four times to + perform these operations. + + .. figure:: figures/machine-learning-6.png + :alt: Defining, building and training the neural network model + + Figure 6: Defining, building and training the neural network model. + +#. To test the accuracy of the prediction the system makes, select the + :guilabel:`In [8]` cell and click the |run-cell| button. In this example, + the number 6 was predicted with a 99% accuracy, see figure 7. + + .. figure:: figures/machine-learning-7.png + :alt: Prediction example + + Figure 7: The system predicts a number providing the accuracy of the + prediction. + + .. note:: + + To retest the accuracy of a random data point's prediction, run the + cell :guilabel:`In [8]` again. It will take another random data point + and predict its value. + +#. To check the accuracy for the whole dataset, select the :guilabel:`In [10]` + cell and click the |run-cell| button. Our example's accuracy is + calculated as 97.17%, see figure 8. + + .. figure:: figures/machine-learning-8.png + :alt: System's accuracy + + Figure 8: The system's accuracy for the entire data set. + +For more in-depth information on the model used and the mathematics it entails, +visit the TensorFlow tutorials +`TensorFlow MNIST beginners demo`_ and `TensorFlow MNIST pros demo`_. + +**Congratulations!** + +You have successfully installed a Jupyter kernel on |CL|. In addition, you +trained a neural network to successfully predict the values contained in a +data set of hand-written number images. + +Related topics +************** + +* `MNIST Database website`_ +* `TensorFlow MNIST beginners demo`_ +* `TensorFlow MNIST pros demo`_ +* `Jupyter main website`_ +* `Jupyter documentation`_ +* `MNIST at Wikipedia`_ + +.. _MNIST Database website: + http://yann.lecun.com/exdb/mnist/ + +.. _train-images-idx3-ubyte.gz: + http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz + +.. _train-labels-idx1-ubyte.gz: + http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz + +.. _t10k-images-idx3-ubyte.gz: + http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz + +.. _t10k-labels-idx1-ubyte.gz: + http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz + +.. _Jupyter main website: http://jupyter.org/ + +.. _Jupyter documentation:  https://jupyter.readthedocs.io/en/latest/index.html + +.. _TensorFlow MNIST beginners demo: + https://www.tensorflow.org/get_started/mnist/beginners + +.. _TensorFlow MNIST pros demo: + https://www.tensorflow.org/get_started/mnist/pros + +.. _MNIST at Wikipedia: + https://en.wikipedia.org/wiki/MNIST_database + +.. |run-cell| image:: ./figures/run-cell-button.png diff --git a/zh_CN/_sources/tutorials/nvidia.rst.txt b/zh_CN/_sources/tutorials/nvidia.rst.txt new file mode 100644 index 00000000..5473bed9 --- /dev/null +++ b/zh_CN/_sources/tutorials/nvidia.rst.txt @@ -0,0 +1,324 @@ +.. _nvidia: + +Install NVIDIA\* Drivers +######################## + +NVIDIA manufactures graphics processing units (GPU), also known as +graphics cards. + +NVIDIA devices on Linux\* have two popular device driver options: the +opensource drivers from the `nouveau project`_ or the proprietary drivers +published by NVIDIA. The nouveau drivers are built into the |CL-ATTR| +kernel and are loaded automatically at system boot if a compatible card +is detected. + +These instructions show how to use the proprietary NVIDIA drivers, which +require a manual installation. + +.. warning:: + + Software installed outside of :ref:`swupd ` is not updated + with |CL| updates and must be updated and maintained manually. + + For example, the file :file:`/usr/lib/libGL.so` conflicts with the file + provided by the mesa package in |CL| and the file NVIDIA provides. If a |CL| + update overwrites these files, a reinstallation of the NVIDIA driver might + be required. + + + +.. contents:: :local: + :depth: 2 + + + +Prerequisites +************* + +* A |CL| system with a desktop installed +* An NVIDIA device installed + + +Install DKMS +************ + +The :ref:`Dynamic Kernel Module System (DKMS) +` allows the NVIDIA kernel modules to be automatically +integrated when kernel updates occur in |CL|. + +Install the appropriate DKMS bundle using the instructions below: + +.. note:: + The Long Term Support (LTS) kernel variant is more likely to remain + compatible between updates with NVIDIA drivers. + + +.. include:: /guides/kernel/kernel-modules-dkms.rst + :start-after: kernel-modules-dkms-install-begin: + :end-before: kernel-modules-dkms-install-end: + + +Download and install the NVIDIA drivers +*************************************** + + +Download the NVIDIA drivers for Linux +===================================== + +#. Identify the NVIDIA GPU model that is installed. + + .. code-block:: bash + + sudo lshw -C display + + +#. Go to the `NVIDIA Driver Downloads website`_ . Search for and download the + appropriate driver based on the NVIDIA GPU model you have with *Linux + 64-bit* selected as the Operating System . + + +#. Open a terminal and navigate to where the + :file:`NVIDIA-Linux-x86_64-.run` file was saved. In this + example, it was saved in the Downloads folder. + + .. code-block:: bash + + cd ~/Downloads/ + +#. Make the :file:`NVIDIA-Linux-x86_64-.run` file executable. + + .. code-block:: bash + + chmod +x :file:`NVIDIA-Linux-x86_64-.run` + + +Disable the nouveau driver +========================== + +The proprietary NVIDIA driver is incompatible with the nouveau driver and +must be disabled before installation can continue. + +#. Disable the nouveau driver by creating a blacklist file under + :file:`/etc/modprobe.d` and reboot. + + .. code-block:: bash + + sudo mkdir /etc/modprobe.d + + printf "blacklist nouveau \noptions nouveau modeset=0 \n" | sudo tee --append /etc/modprobe.d/disable-nouveau.conf + + +#. Reboot the system and log back in. It is normal for the graphical + environment not to start without the NVIDIA driver loaded. + + + + +Configure alternative software paths +==================================== + +The NVIDIA installer is directed to install files under +:file:`/opt/nvidia` as much as possible to keep its contents isolated from the +rest of the |CL| system files under :file:`/usr`. The dynamic linker and X +server must be configured to use the content under +:file:`/opt/nvidia`. + + +#. Configure the dynamic linker to look for and to cache shared libraries under + :file:`/opt/nvidia/lib` and :file:`/opt/nvidia/lib32` in addition to the + default paths. + + .. code-block:: bash + + echo "include /etc/ld.so.conf.d/*.conf" | sudo tee --append /etc/ld.so.conf + + sudo mkdir /etc/ld.so.conf.d + printf "/opt/nvidia/lib \n/opt/nvidia/lib32 \n" | sudo tee --append /etc/ld.so.conf.d/nvidia.conf + +#. Reload the dynamic linker run-time bindings and library cache. + + .. code-block:: bash + + sudo ldconfig + +#. Create a Xorg configuration file to search for modules under + :file:`/opt/nvidia` in addition to the default path. + + .. code-block:: bash + + sudo mkdir -p /etc/X11/xorg.conf.d/ + + sudo tee /etc/X11/xorg.conf.d/nvidia-files-opt.conf > /dev/null <<'EOF' + Section "Files" + ModulePath "/usr/lib64/xorg/modules" + ModulePath "/opt/nvidia/lib64/xorg/modules" + EndSection + EOF + + +Install the NVIDIA drivers +========================== + + +#. A terminal not running on */dev/tty1* is useful to view uninterrupted + installation progress. Switch to a secondary virtual terminal by pushing + :command:`CTRL + ALT + F2` or remotely login over SSH. + + +#. Navigate to the directory where the NVIDIA installer was downloaded. + + .. code-block:: bash + + cd ~/Downloads/ + + +#. Run the installer with the advanced options below. + + .. code-block:: bash + + sudo ./NVIDIA-Linux-x86_64-.run \ + --utility-prefix=/opt/nvidia \ + --opengl-prefix=/opt/nvidia \ + --compat32-prefix=/opt/nvidia \ + --compat32-libdir=lib32 \ + --x-prefix=/opt/nvidia \ + --x-module-path=/opt/nvidia/lib64/xorg/modules \ + --x-library-path=/opt/nvidia/lib64 \ + --x-sysconfig-path=/etc/X11/xorg.conf.d \ + --documentation-prefix=/opt/nvidia \ + --application-profile-path=/etc/nvidia \ + --no-precompiled-interface \ + --no-nvidia-modprobe \ + --no-distro-scripts \ + --force-libglx-indirect \ + --glvnd-egl-config-path=/etc/glvnd/egl_vendor.d \ + --egl-external-platform-config-path=/etc/egl/egl_external_platform.d \ + --dkms \ + --silent + +#. The graphical interface may automatically start after the NVIDIA driver + is loaded. Return to the working terminal and log back in if necessary. + + +#. Confirm that the NVIDIA kernel modules are loaded. + + .. code-block:: bash + + lsmod | grep ^nvidia + + +#. Run a |CL| system verification to restore files that the NVIDIA installer + likely deleted. + + .. code-block:: bash + + sudo swupd repair --quick --bundles=lib-opengl + +.. note:: + + The NVIDIA software places some files under the :file:`/usr` subdirectory + that are not managed by |CL| and conflict with the |CL| stateless design. + + Although a limited version of :command:`swupd repair` is run above, + other uses of the :command:`swupd repair` command should be avoided + with the proprietary NVIDIA drivers installed. + + +Updating the NVIDIA drivers +*************************** + +The proprietary NVIDIA drivers are installed manually outside of :ref:`swupd +` and must be updated manually when needed. + +Updating the NVIDIA drivers follows the same steps as initial installation, +however the desktop environment must first be stopped so that the drivers are +not in use. + +#. Follow the steps in the `Download the NVIDIA Drivers for Linux`_ section + to get the latest NVIDIA drivers. + +#. Temporarily set the default boot target to the *multi-user*, which is + a non-graphical runtime. + + .. code-block:: bash + + sudo systemctl set-default multi-user.target + + +#. Reboot the system and log back in. It is normal for the graphical + environment not to start. + +#. Follow the steps in the `Install the NVIDIA Drivers`_ section to update + the NVIDIA drivers. This installation will overwrite the previous NVIDIA + drivers and files. + +#. Set the default boot target back to the *graphical* target. + + .. code-block:: bash + + sudo systemctl set-default graphical.target + + +#. Reboot the system and log back in. + +#. Trigger a flatpak update that will download the runtime corresponding + with the new NVIDIA drivers for the flatpak apps that require it. + + .. code-block:: bash + + flatpak update + + +Uninstalling the NVIDIA drivers +******************************* + +The NVIDIA drivers and associated software can be uninstalled and nouveau +driver restored with the instructions in this section. + +#. Remove the :file:`modprobe.d` file that prevents nouveau from loading. + + .. code-block:: bash + + sudo rm /etc/modprobe.d/disable-nouveau.conf + + +#. Remove the :file:`xorg.conf.d` file that adds a search path for X modules. + + .. code:: bash + + sudo rm /etc/X11/xorg.conf.d/nvidia-files-opt.conf + +#. Run the :command:`sudo /opt/nvidia/bin/nvidia-uninstall` + +#. Follow the prompts on the screen and reboot the system. + + +Debugging installation of NVIDIA drivers +**************************************** + +* The NVIDIA driver places installer and uninstaller logs under + :file:`/var/log/nvidia-install` and :file:`/var/log/nvidia-uninstall`. + +* :file:`NVIDIA-Linux-x86_64-.run --advanced-options` shows many + parameters to control installation behavior. + +* :file:`NVIDIA-Linux-x86_64-.run --extract-only` extracts + installation files into a directory named + :file:`NVIDIA-Linux-x86_64-`. + + + +Additional resources +******************** + +* `Why aren't the NVIDIA Linux drivers open source? `_ + +* `Where can I get support for NVIDIA Linux drivers? `_ + +* `NVIDIA Accelerated Linux Graphics Driver Installation Guides `_ + +.. _`nouveau project`: https://nouveau.freedesktop.org/wiki/ + +.. _`NVIDIA Driver Downloads website`: https://www.nvidia.com/download/index.aspx + + diff --git a/zh_CN/_sources/tutorials/redis.rst.txt b/zh_CN/_sources/tutorials/redis.rst.txt new file mode 100644 index 00000000..1d86e4c9 --- /dev/null +++ b/zh_CN/_sources/tutorials/redis.rst.txt @@ -0,0 +1,215 @@ +.. _redis: + +Run Redis on |CL-ATTR| +###################### + +Redis is an in-memory key:value store designed for quick lookups, accessible +over the network. In this tutorial, you'll install redis and launch a +redis-server on |CL|, plus learn a few basic redis commands. We also invite +you to pull our `Clear Linux Redis instance`_ on dockerhub\* for application +or infrastructure development. + +While the `redis data structure store`_ can serve as a NoSQL database for a Web application, it's also easy to integrate in an existing stack. For example, you could use the Redis caching layer for real-time responses on a leaderboard in a gaming app. Redis offers many client libraries with language-specific bindings for Python, Perl, Ruby, and more. + +.. contents:: + :local: + :depth: 1 + +Prerequisites +************* +* Install the `redis-native` bundle in |CL| +* Install the `containers-basic` bundle in |CL| (only required in Example 2) + +Install the redis bundle +************************ + +In |CL|, find redis in the `redis-native` bundle. + +#. Open a Terminal and login as an administrative user. + +#. Add :file:`redis-native`. + +.. code-block:: bash + + sudo swupd bundle-add redis-native + +.. note:: + + If the bundle already exists, no action is required. + +Start the redis-server +********************** + +A `systemd` service unit is available to control the redis server. +By default, redis runs on port 6379. + +#. Start the service. + + .. code-block:: bash + + systemctl start redis + + .. note:: + + To stop redis run :command:`systemctl stop redis`. + +#. Assure the service is running. + + .. code-block:: bash + + systemctl status redis + +#. Verify the redis-server sends a reply. + + .. code-block:: bash + + redis-cli ping + + .. note:: + + Expected output: `PONG`. + +#. Optional: If you wish to apply advanced configuration, copy the + `redis.conf` into /etc/ directory. + + .. code-block:: bash + + sudo cp /usr/share/defaults/etc/redis.conf /etc/ + +The redis-server is now ready to use on |CL|. Try some examples below. + +Example 1: Use the redis-cli and try commands +********************************************* + +One advantage of redis over other NoSQL databases is that developers can +easily access data structures like lists, sets, sorted sets, strings, and +hashes using collection operations commands similar to those found in many +programming languages. These exercises are inspired by `try redis io`_. + +After your `redis-server` is running, try some basic commands. + +#. Enter the `redis-cli`. It provides syntax suggestions as you type. + + .. code-block:: bash + + redis-cli + +#. SET key to hold string value. In the set create connections and increment. + + .. code-block:: bash + + SET server:name "clearlinux" + + .. code-block:: bash + + MGET server:name + + .. note:: + If the key does not exist or hold a key value, `nil` is returned. + + .. code-block:: bash + + SET connections 100 + + .. code-block:: bash + + INCR connections + + .. code-block:: bash + + INCR connections + + .. code-block:: bash + + DEL connections + +#. Create a `friends` list and insert new values at the end of the list. + + .. code-block:: bash + + RPUSH friends "Deb" + + .. code-block:: bash + + RPUSH friends "David" + + .. code-block:: bash + + RPUSH friends "Mary" + +#. Modify `friends` list, using a common slice method with a 0-index. + + .. code-block:: bash + + LRANGE friends 0 1 + + .. code-block:: bash + + LLEN friends + + .. code-block:: bash + + LPOP friends + + .. code-block:: bash + + RPOP friends + + .. code-block:: bash + + LLEN friends + +#. Consider using a hash, a very useful data type, which maps string fields + and string values, offering multiple lookup methods. + + Enter many user key:values with `HMSET`. Then try `HGET` and `HGETALL`. + + .. code-block:: bash + + HMSET user:1000 name "Robert Noyce" password "SuperEngi9eer" email "robert.noyce@intel.com" + + .. code-block:: bash + + HGET user:1000 name + + .. code-block:: bash + + HGET user:1000 email + + .. code-block:: bash + + HGETALL user:1000 + + +Example 2: Run the |CL| redis docker image +****************************************** + +We also provide a `Clear Linux Redis instance`_, which is +updated continuously and maintained by |CL| development. + +.. code-block:: bash + + sudo swupd bundle-add containers-basic + +.. code-block:: bash + + sudo systemctl start docker + +.. code-block:: bash + + sudo -E docker pull clearlinux/redis + +Next Steps +********** + +* Follow the `redis quickstart tutorial`_ to expand potential uses. + +* Learn to :ref:`docker`. + +.. _try redis io: https://try.redis.io/ + +.. _Clear Linux Redis instance: https://hub.docker.com/r/clearlinux/redis + +.. _redis data structure store: https://redis.io/ + +.. _redis quickstart tutorial: https://redis.io/topics/quickstart diff --git a/zh_CN/_sources/tutorials/smb/smb-desktop.rst.txt b/zh_CN/_sources/tutorials/smb/smb-desktop.rst.txt new file mode 100644 index 00000000..efa4c260 --- /dev/null +++ b/zh_CN/_sources/tutorials/smb/smb-desktop.rst.txt @@ -0,0 +1,80 @@ +.. _smb-desktop: + +Connect to Windows\* shared location from |CL-ATTR| desktop +########################################################### + +This tutorial explains how to access an existing shared drive on +Windows\* via Server Message Block (SMB) / Common Internet File System (CIFS) +from the |CL| GNOME desktop. CIFS filesystem is generally used to access +shared storage locations, or share files. + +Prerequisites +************* + +* You have already `set up a shared location on Windows`_ + +Connect to Windows shared location with Nautilus +************************************************ + +#. From the desktop, select :guilabel:`Files` from the application menu. + + .. note:: + + GNOME Files is also known as `Nautilus`. + +#. In :guilabel:`Files`, select :guilabel:`Other Locations`. + + .. figure:: figures/smb-desktop-1.png + :scale: 100% + :alt: Files, Other Locations + + Figure 1: Files, Other Locations + +#. In the lower taskbar, beside :guilabel:`Connect to Server`, + enter the file-sharing address using the Windows sharing schema: + + .. code-block:: bash + + smb://servername/Share + + .. figure:: figures/smb-desktop-2.png + :scale: 100% + :alt: Connect to Server + + Figure 2: Connect to Server + +#. Optional: If there are issues with DNS, you can use an IP address in + place of the `servername` above. You must still specify the share. + +#. Optional: On the Windows machine, in a CLI, retrieve the IP address by + entering the command: + + .. code-block:: bash + + ifconfig + + .. note:: + + If using the IP address, assure that it is accessible and secure. + +#. Select :guilabel:`Connect`. + +#. The server will request authentication, as shown in Figure 3. + + .. figure:: figures/smb-desktop-3.png + :scale: 100% + :alt: Authentication + + Figure 3: Authentication + +#. Log in with the same Windows system credentials for which you granted + access to the share. + +#. Select the appropriate checkbox to save your credentials. Consider + carefully the security risks as a result of your selection. + + +.. _set up a shared location on Windows: https://www.howtogeek.com/176471/how-to-share-files-between-windows-and-linux/ + + + diff --git a/zh_CN/_sources/tutorials/smb/smb.rst.txt b/zh_CN/_sources/tutorials/smb/smb.rst.txt new file mode 100644 index 00000000..a2892d22 --- /dev/null +++ b/zh_CN/_sources/tutorials/smb/smb.rst.txt @@ -0,0 +1,131 @@ +.. _clear-samba-share-to-Windows: + +Enable simple file sharing with a Windows\* machine using Samba\* +################################################################# + +This tutorial describes how to enable simple file sharing from a system +running |CL-ATTR| to a Windows machine using Samba. For more advanced sharing, +refer to the `Samba guide`_. + +Prerequisites +************* + +This tutorial assumes you have installed |CL| on your host system. For +detailed instructions, follow the steps in :ref:`bare-metal-install-desktop`. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + + +Set up file sharing +******************* + +#. Log in and get root privileges. + + .. code-block:: bash + + sudo -s + +#. Add the storage-utils bundle, which includes the Samba binaries. + + .. code-block:: bash + + swupd bundle-add storage-utils + + .. note:: + + The os-clr-on-clr bundle also includes the Samba binaries. + +#. Create a configuration file called :file:`/etc/samba/smb.conf`. In this + example, `[Downloads]` enables a folder share with a specific user. + `[Documents]` enables a folder share with any user. The example assumes that a + user account `clearlinuxuser` already exists. + + If `valid users` is not specified, then anyone with a user account on the + machine and with their Samba password already set can access the folder. + However, the account is only able to access files and folders for which + they have appropriate permissions. + + Use :command:`chown` or :command:`chmod` to change either the owner of the + file or the permissions to allow other users to access the file. + + .. code-block:: console + + [Global] + map to guest = bad user + + [Downloads] + path=/home/clearlinuxuser/Downloads + read only = no + guest ok = no + valid users = clearlinuxuser + + [Documents] + path=/home/clearlinuxuser/Documents + read only = no + browsable = yes + guest ok = yes + +#. Enable the Samba daemon to start every time. + + .. code-block:: bash + + systemctl enable smb + systemctl start smb + +#. Use :command:`smbpasswd` to add the initial password for the user + account to access the share. Be aware that Samba maintains its own list of + passwords for user accounts. The Samba password list can be different than + the password used to log in. + + .. code-block:: bash + + smbpasswd -a clearlinuxuser + +Setup is complete and a Windows machine on the same network can access the +shares. Windows uses the format :file:`\\\\[server IP or hostname]\\folder` to +access shares. Access the shares directly with Windows Explorer or by +mapping a network drive. + +Use the IP address of the |CL| machine for an easy access method. If the +|CL| machine is behind an Active Directory domain controller or a DNS server, +use the hostname of the |CL| machine. For other ways to access shares using a +hostname instead of an IP address, see `Chapter 7 of the Samba guide`_. + + +Map |CL| drive in Windows +************************* + +#. Open Windows Explorer and click on the left sidebar on :guilabel:`This PC` + to change the options available at the top. + +#. Click the :guilabel:`Map Network Drive` icon and enter the path in the + format: :file:`\\\\[server IP or hostname]\\[shared folder]` + +#. Check the box :guilabel:`Connect using different credentials`. Enter + the Samba user `clearlinuxuser` and the password created with + :command:`smbpasswd`. See Figure 1 for details. + + .. figure:: figures/smb-1.png + :scale: 70% + :alt: Map a network drive in Windows Explorer + + Figure 1: Map a network drive in Windows Explorer. + +When complete, Windows Explorer displays the share drive as shown in Figure 2. + +.. figure:: figures/smb-2.png + :scale: 70% + :alt: View a share drive in Windows Explorer + + Figure 2: View a share drive in Windows Explorer. + + + + + +.. _Samba guide: https://www.samba.org/samba/docs/using_samba/ch00.html +.. _Chapter 7 of the Samba guide: https://www.samba.org/samba/docs/using_samba/ch07.html diff --git a/zh_CN/_sources/tutorials/spark.rst.txt b/zh_CN/_sources/tutorials/spark.rst.txt new file mode 100644 index 00000000..2f0d22ab --- /dev/null +++ b/zh_CN/_sources/tutorials/spark.rst.txt @@ -0,0 +1,134 @@ + .. _spark: + +Set up a standalone cluster system using Apache\* Spark\* +######################################################### + +This tutorial describes how to install, configure, and run Apache Spark on +|CL-ATTR|. Apache Spark is a fast general-purpose cluster computing system with +the following features: + +* Provides high-level APIs in Java\*, Scala\*, Python\*, and R\*. +* Includes an optimized engine that supports general execution graphs. +* Supports high-level tools including Spark SQL, MLlib, GraphX, and Spark + Streaming. + +In this tutorial, you will install Spark on a single machine running the +master daemon and a worker daemon. + +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 `. + +Before you install any new packages, update |CL| with the following command: + +.. code-block:: bash + + sudo swupd update + +Install Apache Spark +******************** + +Apache Spark is included in the :file:`big-data-basic` bundle. To install the +framework, enter: + +.. code-block:: bash + + sudo swupd bundle-add big-data-basic + +Configure Apache Spark +********************** + +#. Create the configuration directory with the command: + + .. code-block:: bash + + sudo mkdir /etc/spark + +#. Copy the default templates from :file:`/usr/share/defaults/spark` to + :file:`/etc/spark` with the command: + + .. code-block:: bash + + sudo cp /usr/share/defaults/spark/* /etc/spark + + .. note:: Since |CL| is a stateless system, you should never modify the + files under the :file:`/usr/share/defaults` directory. The software + updater overwrites those files. + + +#. Copy the template files below to create custom configuration files: + + .. code-block:: bash + + sudo cp /etc/spark/spark-defaults.conf.template /etc/spark/spark-defaults.conf + sudo cp /etc/spark/spark-env.sh.template /etc/spark/spark-env.sh + sudo cp /etc/spark/log4j.properties.template /etc/spark/log4j.properties + +#. Edit the :file:`/etc/spark/spark-env.sh` file and add the + :envvar:`SPARK_MASTER_HOST` variable. Replace the example address below + with your localhost IP address. View your IP address using the + :command:`hostname -I` command. + + .. code-block:: bash + + SPARK_MASTER_HOST="10.300.200.100" + + .. note:: This optional step enables the master's web user interface to + view information needed later in this tutorial. + +#. Edit the :file:`/etc/spark/spark-defaults.conf` file and update the + `spark.master` variable with the `SPARK_MASTER_HOST` address and port `7077`. + + .. code-block:: bash + + spark.master spark://10.300.200.100:7077 + +Start the master server and a worker daemon +******************************************* + +#. Start the master server using: + + .. code-block:: bash + + sudo /usr/share/apache-spark/sbin/./start-master.sh + +#. Start one worker daemon and connect it to the master using the + `spark.master` variable defined earlier: + + .. code-block:: bash + + sudo /usr/share/apache-spark/sbin/./start-slave.sh spark://10.300.200.100:7077 + +#. Open an internet browser and view the worker daemon information using + the master's IP address and port `8080`: + + .. code-block:: bash + + http://10.300.200.100:8080 + +Run the Spark wordcount example +******************************* + +#. Run the wordcount example using a file on your local host and output the + results to a new file with the following command: + + .. code-block:: bash + + sudo spark-submit /usr/share/apache-spark/examples/src/main/python/wordcount.py ~/Documents/example_file > ~/Documents/results + +#. Open an internet browser and view the application information using + the master's IP address and port `8080`: + + .. code-block:: bash + + http://10.300.200.100:8080 + +#. View the results of the wordcount application in the :file:`~/Documents/results` file. + +**Congratulations!** + +You successfully installed and set up a standalone Apache Spark cluster. +Additionally, you ran a simple wordcount example. diff --git a/zh_CN/_sources/tutorials/tutorial-proxy.rst.txt b/zh_CN/_sources/tutorials/tutorial-proxy.rst.txt new file mode 100644 index 00000000..b538dd66 --- /dev/null +++ b/zh_CN/_sources/tutorials/tutorial-proxy.rst.txt @@ -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| 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 < + AllowOverride none + Require all granted + + +#. Create a new ``DocumentRoot`` directory structure and copy the + :file:`index.html` file from :file:`/var/www/html` directory to + :file:`/var/www/tutorial`. + + .. code-block:: bash + + sudo mkdir –p /var/www/tutorial + cd /var/www/tutorial + sudo cp /var/www/html/index.html . + +#. To ensure a successful setup, edit the new :file:`index.html` file with an + obvious change. + + .. code-block:: bash + + sudo nano index.html + + For example, we changed the default message + + "It works!" + + to + + "It works from its new location!" + +#. Stop and then restart ``httpd.service``. + + .. code-block:: bash + + sudo systemctl stop httpd.service + sudo systemctl start httpd.service + +#. Go to \http://localhost to view the new screen. You should see your updated + default message from step 5. + +#. Change the configuration back to the default :file:`/var/www/html` + location. To do this, edit the :file:`/etc/httpd/conf.d/httpd.conf` file + again and replace any instance of /var/www/tutorial with /var/www/html. + + .. code-block:: bash + + sudo nano /etc/httpd/conf.d/httpd.conf + +#. Stop and then restart ``httpd.service``. + + .. code-block:: bash + + sudo systemctl stop httpd.service + sudo systemctl start httpd.service + +#. Go to \http://localhost and verify that you can see the default screen + again. + +#. Optionally, remove the /var/www/tutorial directory you previously created. + + .. code-block:: bash + + sudo rm /var/www/tutorial/index.html + sudo rmdir /var/www/tutorial + +Install PHP +*********** + +An Apache installation allows you to display static web pages. Enabling PHP +allows you to generate and display dynamic web pages. To add this +functionality to your web server, install PHP on your system. + +#. To get the php components, enter the following command: + + .. code-block:: bash + + sudo swupd bundle-add php-basic + +#. To enable PHP, enter the following commands: + + .. code-block:: bash + + sudo systemctl enable php-fpm.service + sudo systemctl start php-fpm.service + sudo systemctl restart httpd.service + + After restarting the Apache service, test your PHP installation. + +#. Create and open a file named :file:`phpinfo.php` in the :file:`/var/www/html/` + directory using a text editor. + + .. code-block:: bash + + sudo nano /var/www/html/phpinfo.php + +#. Add the following line to the file: + + .. code-block:: php + + + +#. Go to \http://localhost/phpinfo.php. + +#. Verify that the PHP information screen appears, similar to figure 2: + + .. figure:: figures/web-server-install-2.png + :alt: PHP information screen + :width: 600 + + `Figure 2: The PHP information screen.` + +If the PHP information screen is displayed, you have successfully installed +the PHP components and are now ready to add your database application to +complete your LAMP server implementation. + +Install MariaDB +*************** + +Install MariaDB to store content. MariaDB is a drop-in replacement for MySQL +and is available in the database-basic |CL| bundle. + +#. To install the database-basic bundle, enter the following command: + + .. code-block:: bash + + sudo swupd bundle-add database-basic + +#. To start MariaDB after it is installed, enter the following commands: + + .. code-block:: bash + + sudo systemctl enable mariadb + sudo systemctl start mariadb + +#. To check the status of MariaDB, enter the following command: + + .. code-block:: bash + + sudo systemctl status mariadb + + Press :kbd:`Ctrl` + :kbd:`c` or :kbd:`q` to exit. + +Security hardening +================== + +With the MariaDB service running, we can perform some basic security +hardening. + +#. To add a basic layer of security, enter the following command: + + .. code-block:: bash + + sudo mysql_secure_installation + +#. Respond to the questions that appear in the script below. + + .. note:: + + Our suggested responses follow each question. + + .. code-block:: bash + + Enter current password for root (enter for none): + + In order to secure MariaDB, we need the current password for the root + user. For a newly installed MariaDB without a set root password, the + password is blank. Thus, press enter to continue. + + .. code-block:: bash + + OK, successfully used password, moving on... + + Set root password? [Y/n] + + .. _set-password: + + Set the root password to prevent unauthorized MariaDB root user logins. + To set a root password, type 'y'. + + .. code-block:: bash + + New password: + + Type the desired password for the root user. + + .. code-block:: bash + + Re-enter new password: + + Re-type the desired password for the root user. + + .. code-block:: bash + + Password updated successfully! + Reloading privilege tables.. + ... Success! + + Remove anonymous users? [Y/n] + + By default, a MariaDB installation includes an anonymous user that allows + anyone to log in to MariaDB without a user account. This anonymous user + is intended only for testing and for a smoother installation. To remove + the anonymous user and make your database more secure, type 'y'. + + .. code-block:: bash + + ... Success! + Disallow root login remotely? [Y/n] + + Normally, root should only be allowed to connect from the 'localhost'. This + ensures that someone cannot guess the root password from the network. To + block any remote root login, type 'y'. + + .. code-block:: bash + + ... Success! + Remove test database and access to it? [Y/n] + + By default, MariaDB includes a database named 'test' which anyone can access. + This database is also intended only for testing and should be removed. To + remove the test database, type 'y'. + + .. code-block:: bash + + - Dropping test database... + ... Success! + - Removing privileges on test database... + ... Success! + Reload privilege tables now? [Y/n] + + Reloading the privilege tables ensures all changes made so far take + effect immediately. To reload the privilege tables, type 'y'. + + .. code-block:: bash + + ... Success! + + Cleaning up... + + All done! If you've completed all of the above steps, your MariaDB + installation should now be secure. + + Thanks for using MariaDB! + +The MariaDB installation is complete, and we can now install phpMyAdmin to +manage the databases. + +Install phpMyAdmin +****************** + +The web-based tool phpMyAdmin is a straightforward way to manage MySQL or +MariaDB databases. Visit the `phpMyAdmin`_ website for the complete +discussion regarding phpMyAdmin, its documentation, the latest downloads, +and other useful information. + +In this tutorial, we use the latest English version of phpMyAdmin. + +#. Download the :file:`phpMyAdmin--english.tar.gz` file to your + :file:`~/Downloads` directory. Here, refers to the current + version available at https://www.phpmyadmin.net/downloads. + + .. note:: + + This example downloads and uses version 4.6.4. + +#. Once the file has been successfully downloaded and verified, decompress + the file and directories into the Apache web server document root + directory. Use the following commands: + + .. code-block:: bash + + cd /var/www/html + sudo tar –xzvf ~/Downloads/phpMyAdmin-4.6.4-english.tar.gz + +#. To keep things simple, rename the newly created + :file:`phpMyAdmin-4.6.4-english` directory to :file:`phpMyAdmin` with the + following command: + + .. code-block:: bash + + sudo mv phpMyAdmin-4.6.4-english phpMyAdmin + +Use phpMyAdmin to manage a database +*********************************** + +You can use the phpMyAdmin web-based tool to manage your databases. Follow the +steps below for setting up a database called "WordPress". + +#. Verify that a successful installation of all LAMP server components by + going to \http://localhost/phpMyAdmin. See figure 3. + +#. Log in with your root userid and the password you set up when you ran the + :ref:`mysql_secure_installation command `. Enter your + credentials and select :guilabel:`Go` to log in: + + .. figure:: figures/web-server-install-3.png + :alt: phpMyAdmin login page + :width: 600 + + `Figure 3: The phpMyAdmin login page.` + +#. Verify a successful login by confirming that the main phpMyAdmin page + displays, as shown in figure 4: + + .. figure:: figures/web-server-install-4.png + :alt: phpMyAdmin dashboard + :width: 600 + + `Figure 4: The phpMyAdmin dashboard.` + +#. Set up a database by selecting the :guilabel:`Databases` tab, as shown in + figure 5. + +#. Enter `WordPress` in the text field below the :guilabel:`Create database` + label. + +#. Select the :guilabel:`utf8_unicode_ci` option from the + :guilabel:`Collation` drop-down menu beside the text field. + +#. Click :guilabel:`Create`. + + .. figure:: figures/web-server-install-5.png + :alt: Databases tab + :width: 600 + + `Figure 5: The Databases tab.` + +#. Set up user permissions by selecting the :guilabel:`WordPress` database + located in the left panel. See figure 6. + +#. Select the :guilabel:`Privileges` tab. Figure 6 shows its contents. + + .. figure:: figures/web-server-install-6.png + :alt: Privileges tab + :width: 600 + + `Figure 6: The Privileges tab.` + +#. Click :guilabel:`Add user account` located at the bottom of the + :guilabel:`Privileges` tab. The `Add user account` page appears, as shown + in figure 7. + + .. figure:: figures/web-server-install-7.png + :alt: User accounts tab + :width: 600 + + `Figure 7: The User accounts tab.` + +#. Enter the following information in the corresponding fields that appear + in figure 7 above: + + * User name: wordpressuser + + * Password: wp-example + + * Re-type: wp-example + +#. In the `Database for user account` section, select + :guilabel:`Grant all privileges on database “WordPress”.` + +#. At the bottom of the page, click :guilabel:`Go`. + +If successful, you should see the screen shown in figure 8: + +.. figure:: figures/web-server-install-8.png + :alt: User added successfully + :width: 600 + + `Figure 8: The user wordpressuser is successfully added.` + +**Congratulations!** + +You have now created a fully functional LAMP server along with a +WordPress\*-ready database using |CL|. + +Next steps +********** + +Next, add the WordPress components needed to host a WordPress website with :ref:`wp-install`. + +.. _Apache HTTP Server Project: https://httpd.apache.org/ +.. _phpMyAdmin: https://www.phpmyadmin.net/ diff --git a/zh_CN/_sources/tutorials/wordpress/wordpress.rst.txt b/zh_CN/_sources/tutorials/wordpress/wordpress.rst.txt new file mode 100644 index 00000000..6eecac79 --- /dev/null +++ b/zh_CN/_sources/tutorials/wordpress/wordpress.rst.txt @@ -0,0 +1,27 @@ +.. _wordpress: + +WordPress\* on |CL-ATTR| +######################## + +This tutorial describes how to setup a web server to host a WordPress\* site on a +|CL-ATTR| system. The tutorial is split into two sections: + +#. :ref:`web-server-install` + +#. :ref:`wp-install` + +If you already have a |CL| based :abbr:`LAMP (Linux, Apache, MySQL, PHP)` web server, +you can skip ahead to the second section of this tutorial. + +.. note:: + + This tutorial is for development and testing purposes only. Additional steps + are required to secure production systems. Those steps are beyond the scope + of this tutorial. + +.. toctree:: + :maxdepth: 1 + :hidden: + + web-server-install.rst + wp-install.rst diff --git a/zh_CN/_sources/tutorials/wordpress/wp-install.rst.txt b/zh_CN/_sources/tutorials/wordpress/wp-install.rst.txt new file mode 100644 index 00000000..9a0a2d0f --- /dev/null +++ b/zh_CN/_sources/tutorials/wordpress/wp-install.rst.txt @@ -0,0 +1,198 @@ +.. _wp-install: + +Set up WordPress\* on a LAMP web server +####################################### + +This tutorial shows you how to install the WordPress\* components on your |CL| +:abbr:`LAMP (Linux, Apache, MySQL, PHP)` server. At the end of +:ref:`web-server-install`, you created a WordPress-ready database using +phpMyAdmin\* and MariaDB\*. Now that the LAMP server is up and running, you +can add the WordPress components needed to host a WordPress website on your system. + +Before you begin +**************** + +This tutorial assumes that you have successfully completed +:ref:`bare-metal-install-desktop` and you have :ref:`web-server-install`. + +Create a WordPress server +************************* + +WordPress can be installed in a variety of ways. These instructions are +written for users who have followed our instructions for installing phpMyAdmin +when they :ref:`set up a LAMP web server `. Note that +all steps in this tutorial have been tested using a NUC6i5SYH Intel® NUC. +Visit the `NUC6i5SYH product page`_ for detailed information. + +Numerous online articles are available to help you name your website and +acquire the necessary certificates. Those tasks are beyond the scope of this tutorial. + +You can take several actions to harden your website from attacks. The security +of your website and the data it contains are complex and ever-evolving tasks. +Prioritize security if you plan to expose your website to the outside world. +This tutorial does not address security measures that you can take to harden +your site but we strongly encourage you to take action. + +.. note:: + + Throughout this tutorial, we reference your website name as . + + +Download WordPress and manage directories +========================================= + +For this tutorial, you will create a WordPress blog that can be accessed at: +\http:///blog. + +To accomplish this setup, you must add WordPress components to the :file:`/var/www/html/blog` +directory. + +Follow these steps: + + +#. Navigate to the top level of the website’s root directory: + + .. code-block:: bash + + cd /var/www/html + +#. Download the latest version of WordPress: + + .. code-block:: bash + + sudo curl -O https://wordpress.org/latest.tar.gz + +#. Extract all files and directories from the downloaded file: + + .. code-block:: bash + + sudo tar –xzvf latest.tar.gz + +#. Rename the top-level WordPress directory to “blog”: + + .. code-block:: bash + + sudo mv wordpress blog + +#. Remove the downloaded tar file: + + .. code-block:: bash + + sudo rm latest.tar.gz + +Set up WordPress with web-based GUI +=================================== + +Recall that you created a database and user when you installed phpMyAdmin when you +set up a |CL| based :ref:`web server `. Next, you must +connect WordPress to the database and install WordPress. + +To continue with the setup, go to: \http:///blog/wp-admin/install.php. +The WordPress language option screen appears, as shown in figure 1. + +#. Select :guilabel:`English` and click :guilabel:`Continue`. + + .. figure:: figures/wp-install-1.png + :alt: WordPress language selection + :width: 600 + + `Figure 1: WordPress language selection screen.` + + + The WordPress installation continues until the Welcome screen appears, as shown in + figure 2: + + .. figure:: figures/wp-install-2.png + :alt: WordPress welcome screen + :width: 600 + + `Figure 2: WordPress Welcome screen.` + +#. Click :guilabel:`Let’s go!`. + +#. Enter database connection specifics in the screen that appears, as shown in figure 3 + below. + + * Database name: WordPress + * Database username: wordpressuser + * Database password: wp-example (asterisks will not appear in the text box) + * Database host: localhost + * Table prefix: wp\_ + + .. figure:: figures/wp-install-3.png + :alt: Database connection details + :width: 600 + + `Figure 3: Information necessary for WordPress to connect to the database.` + +#. Click :guilabel:`Submit` to complete the setup. + + Figure 4 shows the confirmation screen that verifies a successful setup. WordPress + is connected to the MariaDB database. + + .. figure:: figures/wp-install-4.png + :alt: Successful database connection. + :width: 600 + + `Figure 4: Successful WordPress connection.` + +#. Click :guilabel:`Run the install`. + The installer runs until WordPress is fully installed on your system. + +Complete successful login +========================= + +Once the installation is complete, you can name your blog and create a WordPress username +and password. See figure 5. + +.. figure:: figures/wp-install-5.png + :alt: WordPress user creation + :width: 600 + + `Figure 5: WordPress site information screen.` + + +#. Enter all required information. +#. Click :guilabel:`Install WordPress`. +#. Verify that the initial login screen appears once the installation is complete. See figure 6: + + .. figure:: figures/wp-install-6.png + :alt: WordPress login + :width: 600 + + `Figure 6: The WordPress login screen.` + +#. Enter your WordPress username and password. +#. Check :guilabel:`Remember me` to save your credentials. +#. Click :guilabel:`Log in`. + +Figure 7 shows the WordPress dashboard after a successful login: + +.. figure:: figures/wp-install-7.png + :alt: WordPress Dashboard + :width: 600 + + `Figure 7: The WordPress dashboard.` + +You are ready to go! + +To check out your blog as it is seen by the outside world, enter: +\http:///blog on your browser. Figure 8 shows the result: + +.. figure:: figures/wp-install-8.png + :alt: WordPress blog + :width: 600 + + `Figure 8: Your WordPress blog.` + +**Congratulations, your WordPress blog is up and running!** + +You have successfully installed WordPress on a host system. + +Add new entries to your blog and share them with the world using |CL|! + +.. _`step-by-step guide`: + https://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install + +.. _`NUC6i5SYH product page`: + http://www.intel.com/content/www/us/en/nuc/nuc-kit-nuc6i5syh.html diff --git a/zh_CN/_sources/tutorials/yubikey-u2f.rst.txt b/zh_CN/_sources/tutorials/yubikey-u2f.rst.txt new file mode 100644 index 00000000..59401efe --- /dev/null +++ b/zh_CN/_sources/tutorials/yubikey-u2f.rst.txt @@ -0,0 +1,126 @@ +.. _yubikey-u2f: + +Enable YubiKey U2F Support +########################## + +YubiKey\* is a USB security token manufactured by `Yubico`_. Depending on the +model, a YubiKey can support different authentication protocols including: +One-Time Password (OTP), Smart card, FIDO2, and Universal 2nd Factor (U2F). + +These instructions will go over configuring a YubiKey for U2F authentication +through a web browser on a |CL-ATTR| system. + +A list of `websites +accepting U2F authentication with the YubiKey`_ is available on the Yubico +website. See the Yubico website to learn more about the Yubikey: +https://www.yubico.com/getstarted/meet-the-yubikey/ + + + +.. contents:: :local: + :depth: 1 + + + +Prerequisites +************* + +This tutorial assumes you have: + +#. |CL| installed and running. + +#. Mozilla Firefox installed on |CL|. + +#. A YubiKey. + + + +Enable Linux udev rules for YubiKey +*********************************** + +:command:`udev` is the Linux device manager which handles events when USB +devices are added and removed. Custom rules needs to be created to properly +identify the YubiKey and provide applications access. + +These instructions are derived from: `Yubico support article Using Your U2F +YubiKey with Linux +`_ + + +#. Create the udev rules folder under :file:`/etc` + + .. code:: bash + + sudo mkdir -p /etc/udev/rules.d/ + + +#. Download the u2f rules from the Yubico GitHub: + + .. code:: bash + + curl -O https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules + + +#. Move the downloaded :file:`70-u2f.rules` file into the :file:`/etc/udev` + folder + + .. code:: bash + + sudo mv 70-u2f.rules /etc/udev/rules.d/ + + +#. The udev rules should automatically be reloaded. However, they can be + manually reloaded or reboot the system: + + .. code:: bash + + sudo udevadm control --reload-rules && sudo udevadm trigger + + +#. Plugin and validate the YubiKey appears as a USB device: + + .. code:: bash + + lsusb + + + +Enable U2F in Mozilla Firefox +***************************** + +Firefox comes with U2F web authentication support disabled by default. U2F +needs to be enabled in the advanced settings. + +These instructions are derived from: `Yubico support article Enabling U2F +support in Mozilla Firefox +`_ + + +#. Launch Mozilla Firefox + +#. In the URL bar, type :command:`about:config` to access the advanced + settings. + + .. code:: bash + + about:config + +#. Click the *I accept the risk!* button to continue to the advanced settings + +#. Search for the :command:`security.webauth.u2f` and double-click it + so *Value* becomes **true**. + + +Your YubiKey is now usable on |CL| with Mozilla Firefox with websites that +support U2F authentication. + + +Related topics +************** + +- |CL| :ref:`security` + + +.. _`Yubico`: https://www.yubico.com/ + +.. _`websites accepting U2F authentication with the YubiKey`: https://www.yubico.com/works-with-yubikey/catalog/#protocol=universal-2nd-factor-(u2f)&usecase=all&key=all diff --git a/zh_CN/_static/ajax-loader.gif b/zh_CN/_static/ajax-loader.gif new file mode 100644 index 00000000..61faf8ca Binary files /dev/null and b/zh_CN/_static/ajax-loader.gif differ diff --git a/zh_CN/_static/basic.css b/zh_CN/_static/basic.css new file mode 100644 index 00000000..104f076a --- /dev/null +++ b/zh_CN/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/zh_CN/_static/clearlinux.png b/zh_CN/_static/clearlinux.png new file mode 100644 index 00000000..af518c0e Binary files /dev/null and b/zh_CN/_static/clearlinux.png differ diff --git a/zh_CN/_static/comment-bright.png b/zh_CN/_static/comment-bright.png new file mode 100644 index 00000000..15e27edb Binary files /dev/null and b/zh_CN/_static/comment-bright.png differ diff --git a/zh_CN/_static/comment-close.png b/zh_CN/_static/comment-close.png new file mode 100644 index 00000000..4d91bcf5 Binary files /dev/null and b/zh_CN/_static/comment-close.png differ diff --git a/zh_CN/_static/comment.png b/zh_CN/_static/comment.png new file mode 100644 index 00000000..dfbc0cbd Binary files /dev/null and b/zh_CN/_static/comment.png differ diff --git a/zh_CN/_static/css/badge_only.css b/zh_CN/_static/css/badge_only.css new file mode 100644 index 00000000..3c33cef5 --- /dev/null +++ b/zh_CN/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} diff --git a/zh_CN/_static/css/theme.css b/zh_CN/_static/css/theme.css new file mode 100644 index 00000000..aed8cef0 --- /dev/null +++ b/zh_CN/_static/css/theme.css @@ -0,0 +1,6 @@ +/* sphinx_rtd_theme version 0.4.3 | MIT license */ +/* Built 20190212 16:02 */ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content .code-block-caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content .code-block-caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#3a7ca8;height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin:12px 0 0 0;display:block;font-weight:bold;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/zh_CN/_static/doctools.js b/zh_CN/_static/doctools.js new file mode 100644 index 00000000..d8928926 --- /dev/null +++ b/zh_CN/_static/doctools.js @@ -0,0 +1,313 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/zh_CN/_static/documentation_options.js b/zh_CN/_static/documentation_options.js new file mode 100644 index 00000000..64b43f2c --- /dev/null +++ b/zh_CN/_static/documentation_options.js @@ -0,0 +1,296 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'zh_CN', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SEARCH_LANGUAGE_STOP_WORDS: ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"] +}; + + + +/* Non-minified version JS is _stemmer.js if file is provided */ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + diff --git a/zh_CN/_static/down-pressed.png b/zh_CN/_static/down-pressed.png new file mode 100644 index 00000000..5756c8ca Binary files /dev/null and b/zh_CN/_static/down-pressed.png differ diff --git a/zh_CN/_static/down.png b/zh_CN/_static/down.png new file mode 100644 index 00000000..1b3bdad2 Binary files /dev/null and b/zh_CN/_static/down.png differ diff --git a/zh_CN/_static/file.png b/zh_CN/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/zh_CN/_static/file.png differ diff --git a/zh_CN/_static/fonts/Inconsolata-Bold.ttf b/zh_CN/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 00000000..809c1f58 Binary files /dev/null and b/zh_CN/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/zh_CN/_static/fonts/Inconsolata-Regular.ttf b/zh_CN/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 00000000..fc981ce7 Binary files /dev/null and b/zh_CN/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/zh_CN/_static/fonts/Inconsolata.ttf b/zh_CN/_static/fonts/Inconsolata.ttf new file mode 100644 index 00000000..4b8a36d2 Binary files /dev/null and b/zh_CN/_static/fonts/Inconsolata.ttf differ diff --git a/zh_CN/_static/fonts/Lato-Bold.ttf b/zh_CN/_static/fonts/Lato-Bold.ttf new file mode 100644 index 00000000..1d23c706 Binary files /dev/null and b/zh_CN/_static/fonts/Lato-Bold.ttf differ diff --git a/zh_CN/_static/fonts/Lato-Regular.ttf b/zh_CN/_static/fonts/Lato-Regular.ttf new file mode 100644 index 00000000..0f3d0f83 Binary files /dev/null and b/zh_CN/_static/fonts/Lato-Regular.ttf differ diff --git a/zh_CN/_static/fonts/Lato/lato-bold.eot b/zh_CN/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bold.eot differ diff --git a/zh_CN/_static/fonts/Lato/lato-bold.ttf b/zh_CN/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bold.ttf differ diff --git a/zh_CN/_static/fonts/Lato/lato-bold.woff b/zh_CN/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bold.woff differ diff --git a/zh_CN/_static/fonts/Lato/lato-bold.woff2 b/zh_CN/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/zh_CN/_static/fonts/Lato/lato-bolditalic.eot b/zh_CN/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/zh_CN/_static/fonts/Lato/lato-bolditalic.ttf b/zh_CN/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/zh_CN/_static/fonts/Lato/lato-bolditalic.woff b/zh_CN/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/zh_CN/_static/fonts/Lato/lato-bolditalic.woff2 b/zh_CN/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/zh_CN/_static/fonts/Lato/lato-italic.eot b/zh_CN/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-italic.eot differ diff --git a/zh_CN/_static/fonts/Lato/lato-italic.ttf b/zh_CN/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-italic.ttf differ diff --git a/zh_CN/_static/fonts/Lato/lato-italic.woff b/zh_CN/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-italic.woff differ diff --git a/zh_CN/_static/fonts/Lato/lato-italic.woff2 b/zh_CN/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/zh_CN/_static/fonts/Lato/lato-regular.eot b/zh_CN/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-regular.eot differ diff --git a/zh_CN/_static/fonts/Lato/lato-regular.ttf b/zh_CN/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-regular.ttf differ diff --git a/zh_CN/_static/fonts/Lato/lato-regular.woff b/zh_CN/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-regular.woff differ diff --git a/zh_CN/_static/fonts/Lato/lato-regular.woff2 b/zh_CN/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/zh_CN/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/zh_CN/_static/fonts/RobotoSlab-Bold.ttf b/zh_CN/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/zh_CN/_static/fonts/RobotoSlab-Regular.ttf b/zh_CN/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/zh_CN/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/zh_CN/_static/fonts/fontawesome-webfont.eot b/zh_CN/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/zh_CN/_static/fonts/fontawesome-webfont.eot differ diff --git a/zh_CN/_static/fonts/fontawesome-webfont.svg b/zh_CN/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/zh_CN/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zh_CN/_static/fonts/fontawesome-webfont.ttf b/zh_CN/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/zh_CN/_static/fonts/fontawesome-webfont.ttf differ diff --git a/zh_CN/_static/fonts/fontawesome-webfont.woff b/zh_CN/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/zh_CN/_static/fonts/fontawesome-webfont.woff differ diff --git a/zh_CN/_static/fonts/fontawesome-webfont.woff2 b/zh_CN/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/zh_CN/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/zh_CN/_static/jquery-3.2.1.js b/zh_CN/_static/jquery-3.2.1.js new file mode 100644 index 00000000..d2d8ca47 --- /dev/null +++ b/zh_CN/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

About

+

Clear Linux is a little different from other distros. Here are some important +tools and concepts for managing your install.

+
+

Training

+

Additional training materials are available in the how-to-clear GitHub* +project to help you get started with Clear Linux OS tools.

+

The training helps you create a customized OS that is based on Clear Linux OS and provides +complete details on the methods and tools used to create updates and how to +deploy updates to targets.

+

To complete the training, you will need a clean Clear Linux OS installation and a network connection. The project includes all files needed to complete the exercises.

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/concepts/autospec-about.html b/zh_CN/concepts/autospec-about.html new file mode 100644 index 00000000..08e0ea55 --- /dev/null +++ b/zh_CN/concepts/autospec-about.html @@ -0,0 +1,1093 @@ + + + + + + + + + + + Autospec — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Autospec

+

autospec is a tool to assist in the automated creation and maintenance of +RPM packaging in Clear Linux* OS. Where a standard RPM build process using rpmbuild +requires a tarball and .spec file to start, autospec requires only a tarball +and package name to start.

+
+

How autospec works

+

autospec attempts to infer the requirements of the .spec file by analyzing +the source code and Makefile information. It will continuously run +updated builds based on new information discovered from build failures until it +has a complete and valid .spec file. Although not required, you can influence +the behavior of autospec by providing control files.

+

The basic process is described in the following steps:

+
    +
  1. The make autospec command generates a .spec based on +analysis of code and control files, if present.
  2. +
  3. autospec creates a build root with mock config.
  4. +
  5. autospec attempts to build an RPM from the generated .spec.
  6. +
  7. autospec detects any missed declarations in the .spec.
  8. +
  9. If build errors occur, autospec will scan the build log to try and detect +the root cause.
  10. +
  11. If autospec detects the root cause and knows how to continue, it will restart the build +automatically at step 1 with updated build instructions.
  12. +
  13. Otherwise, autospec will stop the build for user inspection and editing of control files +to resolve the errors. The user resumes the process at step 1 after errors are resolved.
  14. +
+

Following these steps, autospec continues to rebuild the package, based on +new information discovered from build failures, until it has a valid .spec. If +no build errors occur, RPM packages are successfully built.

+
+
+

Control files

+

It is possible to influence the behavior of autospec by providing control +files. These files may be used to alter the default behavior of the configure +routine, to blacklist build dependencies, etc. Control files must be located +in the same directory as the resulting .spec.

+

Table 1 shows control files used to control dependencies, for example.

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Control files to control dependencies
FilenameDescription
buildreq_addEach line in the file provides the name of a package to add as a +build dependency to the .spec.
buildreq_banEach line in the file is a build dependency that under no +circumstance should be automatically added to the build dependencies. +This is useful to block automatic configuration routines adding +undesired functionality, or to omit any automatically discovered +dependencies during tarball scanning.
pkgconfig_addEach line in the file is assumed to be a pkgconfig() build +dependency. Add the pkg-config names here, as autospec will +automatically transform the names into their pkgconfig($name) +style when generating the .spec.
pkgconfig_banEach line in this file is a pkgconfig() build dependency that should +not be added automatically to the build, much the same as +`` buildreq_ban``. As with pkgconfig_add, these names are +automatically transformed by autospec into their correct +pkgconfig($name)) style.
requires_addEach line in the file provides the name of a package to add as a +runtime dependency to the .spec.
requires_banEach line in the file is a runtime dependency that under no +circumstance should be automatically added to the runtime +dependencies. This is useful to block automatic configuration +routines adding undesired functionality, or to omit any automatically +discovered dependencies during tarball scanning.
+

Further control of the build can be achieved through the use of the +options.conf file. If this file does not exist, it is created by +autospec with default values. If certain deprecated configuration +files exists autospec will use the value indicated by those files and +remove them.

+

For a comprehensive list of control files, view the autospec readme.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/concepts/bundles-about.html b/zh_CN/concepts/bundles-about.html new file mode 100644 index 00000000..a7259fc3 --- /dev/null +++ b/zh_CN/concepts/bundles-about.html @@ -0,0 +1,1017 @@ + + + + + + + + + + + Bundles — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Bundles

+

Linux-based operating systems contain the code of several hundred, if +not thousands, of open source projects. To make this manageable, +distributions use a concept called “packages” to configure and compile +the source code of these projects into binaries.

+

Many distributions then split the content of these compiled packages +into so-called sub-packages, which are the granularity at which these +distributions deploy their software. With those kinds of distributions, +system administrators can then install and update sub-packages +individually or as a set, using tools such as “yum” and “apt-get.”

+

The Clear Linux* OS takes a slightly different approach. While we also use the +concept of packages to manage compiling source code into binaries, we do not +use the package concept to deploy software. Instead, we provide software +“bundles” that are installed and managed using swupd. +Each bundle contains as many or as few open source projects needed to provide a complete functionality.

+
+

Next steps

+

To put this concept into practice, see the following resources:

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/concepts/mixer-about.html b/zh_CN/concepts/mixer-about.html new file mode 100644 index 00000000..7ffeb1cc --- /dev/null +++ b/zh_CN/concepts/mixer-about.html @@ -0,0 +1,1040 @@ + + + + + + + + + + + Mixer — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Mixer

+

Clear Linux* OS is a powerful, modular, and customizable OS. Upstream Clear Linux OS offers +many images to support different environments and use-cases. There are +hundreds of bundles that will meet most, if not all, of your OS and software +needs.

+

However, if you need additional customization or content, Clear Linux OS provides the +mixer tool. Depending on your needs, the mixer tool allows you to:

+
    +
  • +
    Create a mix to create a distinct derivative of the Clear Linux OS that
    +
    contains your custom software.
    +
    +
  • +
+
+

Create a mix

+

When creating a mix, you can

+
    +
  • Use any existing upstream bundles with no modification.
  • +
  • Redefine what goes into existing bundles.
  • +
  • Create completely new, custom bundles with your own custom packages.
  • +
+

With mixer you are not required to incorporate every upstream release into +your mix. You decide which upstream versions to update your derivative to, as +illustrated in Figure 1.

+
+Creating a custom mix. +

Figure 1: With a custom mix, you add your custom bundle and decide which +upstream versions to update your mix to, on your own release cycle.

+
+

Creating your own mix forks away from the Clear Linux OS upstream and requires that you +act as your own OSV. There is a greater level of responsibility, requiring +more infrastructure and processes to adopt. However, with this approach, you +have a higher degree of control and customization of your custom Clear Linux OS.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/concepts/swupd-about.html b/zh_CN/concepts/swupd-about.html new file mode 100644 index 00000000..36e40f72 --- /dev/null +++ b/zh_CN/concepts/swupd-about.html @@ -0,0 +1,1071 @@ + + + + + + + + + + + swupd: software updater — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

swupd: software updater

+

swupd is an operating system software manager and update program +that operates at a file-level to enable verifiable integrity and update +efficiency.

+

Visit the swupd man page for more details.

+
+

Versioning

+

Using package managers to keep track of software version compatibility or compare multiple systems on many Linux distributions can be cumbersome.

+

With Clear Linux OS swupd, versioning happens at the individual +file-level. This means Clear Linux OS 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 +git internal version tracking, where any of the individual file +commits are tracked and move the pointer forward when changed.

+

While administrators can pick and choose which bundles a system has +installed, a single Clear Linux OS version number strictly represents one combination +of all software versions that can be installed onto a system of that Clear Linux OS +version. This method of whole OS versioning offers unique advantages. +Namely, system administrators can quickly compare multiple Clear Linux OS systems that share the same version for important software and security fixes.

+
+
+

Updating

+

Clear Linux OS promotes regular and automated updating of software to ensure +integration of new enhancements and security fixes. Refer to OS Security +documentation for more information.

+

Learn how to update your system using swupd.

+
+

Update efficiency

+

Because swupd operates at the individual file-level instead of a +package-level, Clear Linux OS updates are small and fast.

+

On many Linux* distributions, updates to a particular software package +require the whole software package to be downloaded and replaced +–even for one line of code.

+

In Clear Linux OS, updates are generated using the mixer tool. Mixer calculates the difference between two Clear Linux OS versions and makes available +binary deltas, which contain only the changed portion of files. This +binary delta technology [1] means swupd on Clear Linux OS systems only +needs to download and apply a small fraction of a package in order to +receive an update.

+

The mixer tool additionally computes updates files in +multiple compression formats, allowing swupd to utilize the most +efficiently compressed format for a Clear Linux OS system to minimize the cost +to update.

+
+
+

Update integrity

+

This is the basis of the swupd diagnose subcommand, which allows a Clear Linux OS system to check for any discrepancies to system files. As necessary, +swupd repair provides a useful way for software developers to remediate these discrepancies and return to a known filesystem state.

+
+
+
+

Bundles

+

Clear Linux* OS approaches software management differently than many other +Linux-based operating systems.

+

Instead of deploying granular software packages, Clear Linux OS uses the concept of +bundles with pre-associated software. Each bundle encapsulates a particular +use-case, which is enabled by composing all the required upstream open-source +projects and packages into one logical unit.

+

This bundle-based approach offers some unique advantages:

+
    +
  • Bundles provide a particular functionality, or stack, which +include all associated runtime dependencies.
  • +
  • Software package dependencies are resolved on the server, so file-level +conflicts do not occur on the target system after an update.
  • +
  • All combinations of bundles are able to co-exist on a Clear Linux OS system.
  • +
+

For more information on bundles, visit:

+ + + + + + +
[1]The software update technology for Clear Linux* OS was first presented at the Linux Plumbers conference in 2012.
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/concepts/telemetry-about.html b/zh_CN/concepts/telemetry-about.html new file mode 100644 index 00000000..22461bb4 --- /dev/null +++ b/zh_CN/concepts/telemetry-about.html @@ -0,0 +1,1064 @@ + + + + + + + + + + + Telemetrics — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Telemetrics

+

One of the key features of Clear Linux* OS is telemetry, which is used to +monitor system health. Telemetry enables developers to observe and proactively +address issues before end users are impacted.

+

Telemetrics is a combination word made from:

+
    +
  • Telemetry which is sensing and reporting data.
  • +
  • Analytics which is using visualization and statistical inferencing to make +sense of the reported data.
  • +
+

Clear Linux OS telemetry reports system-level debug/crash information using specialized probes. The +probes monitor system tasks such as swupd, kernel +oops, machine error checks, and BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to quickly focus on an issue and monitor corrective actions.

+

Clear Linux OS telemetry is fully customizable and can be used during software development +for debugging purposes. You can use libtelemetry in your code to create custom +telemetry records. You can also use telem-record-gen in script files or call +it from another program.

+
+

注解

+

The Clear Linux OS telemetry client is disabled by default until you decide to enable it. Telemetry is an opt-in solution and can be easily enabled or disabled.

+
+
+

Architecture

+

Clear Linux OS telemetry has two fundamental components, which are shown in figure 1:

+
    +
  • Client: generates and delivers records to the backend server via the network.

    +
  • +
  • Backend: captures records sent from the client and displays the cumulative +content through a specialized interface.

    +
    +

    注解

    +

    If you want to capture your own records for analysis, you must set up +your own backend server.

    +
    +
  • +
+
+Clear Linux Telemetry Architecture. +

Figure 1: Clear Linux Telemetry Architecture.

+
+

The telemetry client provides the front end of a complete telemetrics solution +and includes the following components:

+
    +
  • telemprobd, a daemon that prepares the telemetry records and spools them on disk prior to delivery
  • +
  • telempostd, a daemon that sends the records to the telemetry backend server or leaves them on disk until deleting after the record expires.
  • +
  • probes, that collect specific types of data from the operating system.
  • +
  • libtelemetry, that telemetrics probes use to create telemetrics records and +send them to the telemprobd daemon for further processing.
  • +
+

The telemetry backend provides the server-side component of a complete telemetrics solution and +consists of:

+
    +
  • Nginx web server.
  • +
  • Two Flask apps:
      +
    • Collector, an ingestion web app for records received from telemetrics-client probes.
    • +
    • TelemetryUI, a web app that exposes several views to visualize the telemetry data +and also provides a REST API to perform queries.
    • +
    +
  • +
  • PostgreSQL as the underlying database server.
  • +
+

The default telemetry backend server reports back to the Clear Linux OS development team +and is not viewable outside the Intel firewall. If you want to collect your +own records, then you must set up your own telemetry backend server.

+
+
+

Next steps

+

To put this concept into practice, refer to Telemetrics.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/disclaimers.html b/zh_CN/disclaimers.html new file mode 100644 index 00000000..a5dcadc8 --- /dev/null +++ b/zh_CN/disclaimers.html @@ -0,0 +1,986 @@ + + + + + + + + + + + <no title> — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +

Disclaimer

+
+

重要

+

This documentation is a work in progress and is being provided for +informative purposes only. Because it is a work in progress, there are +parts that are either missing or will be revised as code development +continues.

+
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/documentation_license.html b/zh_CN/documentation_license.html new file mode 100644 index 00000000..45a89350 --- /dev/null +++ b/zh_CN/documentation_license.html @@ -0,0 +1,984 @@ + + + + + + + + + + + <no title> — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
This work is licensed under a Creative Commons +Attribution 4.0 International License + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/genindex-H.html b/zh_CN/genindex-H.html new file mode 100644 index 00000000..c34a3014 --- /dev/null +++ b/zh_CN/genindex-H.html @@ -0,0 +1,982 @@ + + + + + + + + + + + + 索引 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • 索引
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

索引 – H

+ + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/genindex-R.html b/zh_CN/genindex-R.html new file mode 100644 index 00000000..7dd5ead9 --- /dev/null +++ b/zh_CN/genindex-R.html @@ -0,0 +1,986 @@ + + + + + + + + + + + + 索引 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • 索引
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

索引 – R

+ + + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/genindex-S.html b/zh_CN/genindex-S.html new file mode 100644 index 00000000..0cb56d5b --- /dev/null +++ b/zh_CN/genindex-S.html @@ -0,0 +1,982 @@ + + + + + + + + + + + + 索引 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • 索引
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

索引 – S

+ + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/genindex-all.html b/zh_CN/genindex-all.html new file mode 100644 index 00000000..fe8e9d0c --- /dev/null +++ b/zh_CN/genindex-all.html @@ -0,0 +1,1030 @@ + + + + + + + + + + + + 索引 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • 索引
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

索引

+ +
+ H + | R + | S + | + +
+

H

+ + +
+ +

R

+ + + +
+ +

S

+ + +
+ +

+ + +
+ + + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/genindex-环.html b/zh_CN/genindex-环.html new file mode 100644 index 00000000..6ffb8db2 --- /dev/null +++ b/zh_CN/genindex-环.html @@ -0,0 +1,993 @@ + + + + + + + + + + + + 索引 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • 索引
  • + + +
  • + +
  • + +
+ + +
+
+
+
+ + +

索引 – 环

+ + + +
+ + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/genindex.html b/zh_CN/genindex.html new file mode 100644 index 00000000..488c4510 --- /dev/null +++ b/zh_CN/genindex.html @@ -0,0 +1,993 @@ + + + + + + + + + + + 索引 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + +

索引

+ +

按照字母的索引页:

+ + + + +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/bare-metal-install-desktop/bare-metal-install-desktop.html b/zh_CN/get-started/bare-metal-install-desktop/bare-metal-install-desktop.html new file mode 100644 index 00000000..13a32ed2 --- /dev/null +++ b/zh_CN/get-started/bare-metal-install-desktop/bare-metal-install-desktop.html @@ -0,0 +1,1506 @@ + + + + + + + + + + + Install Clear Linux* OS from the live desktop — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install Clear Linux* OS from the live desktop

+

This page explains how to boot the Clear Linux* OS live desktop image, from which +you can install Clear Linux OS or explore without modifying the host system.

+ +
+

System requirements

+

Before installing Clear Linux OS, verify that the host system supports the +installation:

+ +
+
+

Preliminary steps

+
    +
  1. Visit our Downloads page.

    +
  2. +
  3. Download the file clear-<release number>-live-desktop.iso, +also called the Clear Linux OS Desktop.

    +
    +

    注解

    +

    <release-number> is the latest Clear Linux OS auto-numbered release.

    +
    +
  4. +
  5. Verify and decompress the file per your OS.

    + +
  6. +
  7. Follow your OS instructions to create a bootable USB drive.

    + +
  8. +
+
+
+

Install from live image

+

After you download and burn the live desktop image on a USB drive, follow +these steps.

+
    +
  1. Insert the USB drive into an available USB slot.

    +
  2. +
  3. Power on the system.

    +
  4. +
  5. Open the system BIOS setup menu by pressing the F2 key. +Your BIOS setup menu entry point may vary.

    +
  6. +
  7. In the setup menu, enable the UEFI boot and set the USB drive as the +first option in the device boot order.

    +
  8. +
  9. Save these settings, e.g. F10, and exit.

    +
  10. +
  11. Reboot the target system.

    +
  12. +
  13. Select Clear Linux OS in the boot menu, shown in Figure 1.

    +
    +Clear Linux OS in boot menu +

    Figure 1: Clear Linux OS in boot menu

    +
    +
  14. +
+
+

Software (optional)

+

Explore Clear Linux OS bundles and other software. Double-click the +Software icon from the Activities menu, shown in Figure 2. +Ensure a network connection exists before launching the Software application.

+
+

注解

+

While running the Clear Linux OS live desktop image, the Software application is +intended only for exploration. Do not attempt to install applications during +exploration.

+
+
+
+

Launch the Clear Linux OS installer

+
    +
  1. After the live desktop image boots, scroll over the vertical +Activities menu at left.

    +
  2. +
  3. Click the Clear Linux OS penguin icon to launch the installer, shown in Figure 2.

    +
    +Install Clear Linux OS icon +

    Figure 2: Clear Linux OS installer icon

    +
    +
  4. +
  5. After the installer is launched, it will appear as shown in Figure 3.

    +
    +|CL| Desktop Installer +

    Figure 3: Clear Linux OS OS Desktop Installer

    +
    +
  6. +
  7. In Select Language, select a language from the options, or +type your preferred language in the search bar.

    +
  8. +
  9. Select Next.

    +
  10. +
+
+
+

Checking prerequisites

+

The installer automatically launches Checking Prerequisites, +which checks your target system for compatibility and network connectivity.

+

After the installer shows Prerequisites passed, select Next to +proceed with installation.

+
+Checking Prerequisites +

Figure 4: Checking Prerequisites

+
+
+

Network Proxy (optional)

+
    +
  1. Configure Network Proxy settings.
  2. +
  3. In the top right menu bar, select the Power button.
  4. +
  5. Select Wired Connected and then Wired Settings.
      +
    1. In Network Proxy, select the Gear icon to view +options.
    2. +
    3. Select an option from Automatic, Manual or Disabled.
    4. +
    5. Close Network Proxy.
    6. +
    +
  6. +
  7. Close Settings.
  8. +
+
+
+
+
+

Minimum installation requirements

+

To fulfill minimum installation requirements, complete the +Required options. We also recommend completing Advanced options.

+
+

注解

+
    +
  • The Install button is only highlighted after you complete +Required options.
  • +
  • Check marks indicate a selection has been made.
  • +
  • An Internet connection is required. You may want to launch a browser +prior to installation to verify your Internet connection.
  • +
+
+
+
+

Clear Linux OS Desktop Installer

+

The Clear Linux OS Desktop Installer Main Menu appears as shown in Figure 5. To meet +the minimum requirements, enter values in all submenus for the +Required options. After you complete them, your selections appear +below submenus and a check mark appears at right.

+
+Clear Linux OS Desktop Installer - Main Menu +

Figure 5: Clear Linux OS Desktop Installer - Main Menu

+
+
+ +
+

Required options

+
+

Select Time Zone

+
    +
  1. From the Main Menu, select Select Time Zone. UTC is selected +by default.

    +
  2. +
  3. In Select Time Zone, navigate to the desired time zone. +Or start typing the region and then the city. +(.e.g., America/Los_Angeles).

    +
  4. +
  5. Select Confirm.

    +
    +Select System Timezone +

    Figure 6: Select System Time Zone

    +
    +
  6. +
+
+
+

Select Keyboard

+
    +
  1. From the Main Menu, select Select Keyboard.

    +
  2. +
  3. Navigate to your desired keyboard layout. We select “us” for the +United States.

    +
  4. +
  5. Select Confirm.

    +
    +Select Keyboard menu +

    Figure 7: Select Keyboard menu

    +
    +
  6. +
+
+
+

Select Installation Media

+
    +
  1. From the Main Menu, select Select Installation Media.

    +
  2. +
  3. Choose an installation method: Safe Installation or +Destructive Installation.

    +
    +Select Installation Media +

    Figure 8: Select Installation Media

    +
    +
  4. +
+
+

Safe Installation

+

Use this method to safely install Clear Linux OS on media with available space, or +alongside existing partitions, and accept the Default partition schema. +If enough free space exists, safe installation is allowed.

+
+

注解

+

Clear Linux OS allows installation alongside another OS. Typically, when you boot +your system, you can press an F key to view and select a bootable +device or partition during the BIOS POST stage. Some BIOSes present the +Clear Linux OS partition, and you can select and boot it. However, other +BIOSes may only show the primary partition, in which case you will not be +able boot Clear Linux OS. Be aware of this possible limitation.

+
+
+
+

Destructive Installation

+

Use this method to destroy the contents of the target device, install Clear Linux OS +on it, and accept the Default partition schema.

+
+
+
+

Disk encryption

+

For greater security, disk encryption is supported using LUKS. Encryption is +optional.

+
    +
  1. To encrypt the root partition, select Enable Encryption, +as shown in Figure 9.

    +
    +Enable Encryption +

    Figure 9: Enable Encryption

    +
    +
  2. +
  3. When Encryption Passphrase appears, enter a passphrase.

    +
    +Encryption Passphrase +

    Figure 10: Encryption Passphrase

    +
    +
    +

    注解

    +

    Minimum length is 8 characters. Maximum length is 94 characters.

    +
    +
  4. +
  5. Enter the same passphrase in the second field.

    +
  6. +
  7. Select Confirm in the dialogue box.

    +
    +

    注解

    +

    Confirm is only highlighted if passphrases match.

    +
    +
  8. +
  9. Select Confirm in submenu.

    +
  10. +
+
+
+

Manage User

+
    +
  1. In Required Options, select Manage User.

    +
  2. +
  3. In User Name, enter a user name.

    +
    +Manage User +

    Figure 11: Manage User

    +
    +
  4. +
  5. In Login, create a login name. It must start with a letter +and can use numbers, hyphens, and underscores. Maximum length is 31 +characters.

    +
  6. +
  7. In Password, enter a password. Minimum length is +8 characters. Maximum length is 255 characters.

    +
  8. +
  9. In Confirm, enter the same password.

    +
    +

    注解

    +

    Administrator rights are selected by default. +For security purposes, the default user must be assigned as an +Administrator.

    +
    +
  10. +
  11. Select Confirm.

    +
    +

    注解

    +

    Select Cancel to return to the Main Menu.

    +
    +
  12. +
+
+

Modify User

+
    +
  1. In Manager User, select Manage User.

    +
  2. +
  3. Modify user details as desired.

    +
  4. +
  5. Select Confirm to save the changes you made.

    +
    +

    注解

    +

    Optional: Select Cancel to return to the Main Menu to +revert changes.

    +
    +
  6. +
+

Optional: Skip to Finish installation.

+
+
+
+

Telemetry

+

Choose whether to participate in telemetry. Telemetrics is a Clear Linux OS +feature that reports failures and crashes to the Clear Linux OS development +team for improvements. For more information, see Telemetrics.

+
    +
  1. From Required Options, select Telemetry.

    +
  2. +
  3. Select Yes.

    +
    +Enable Telemetry +

    Figure 12: Enable Telemetry

    +
    +
  4. +
  5. If you don’t wish to participate, select No.

    +
  6. +
+
+
+
+

Advanced options

+

After you complete the Required options, we recommend completing +Advanced options–though they’re not required. Doing so +customizes your development environment, so you’re ready to go immediately +after reboot.

+
+

注解

+

You can always add more bundles later with swupd.

+
+
+

Bundle Selection

+
    +
  1. On the Advanced menu, select Bundle Selection

    +
  2. +
  3. Select your desired bundles.

    +
    +Bundle Selection +

    Figure 13: Bundle Selection

    +
    +
  4. +
  5. Select Confirm.

    +
  6. +
  7. View the bundles that you selected.

    +
    +Bundle Selections - Advanced Options +

    Figure 14: Bundle Selections - Advanced Options

    +
    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Assign Hostname

+
    +
  1. In Advanced Options, select Assign Hostname.

    +
  2. +
  3. In Hostname, enter the hostname only (excluding the domain).

    +
    +Assign Hostname +

    Figure 15: Assign Hostname

    +
    +
    +

    注解

    +

    Hostname does not allow empty spaces. Hostname must start with an +alphanumeric character but may also contain hyphens. Maximum length of +63 characters.

    +
    +
  4. +
  5. Select Confirm.

    +
  6. +
+

Optional: Skip to Finish installation.

+
+
+

Kernel Configuration

+
    +
  1. In Kernel Configuration, navigate to select your desired +kernel. Native is selected by default.

    +
    +Kernel Configuration +

    Figure 16: Kernel Configuration

    +
    +
  2. +
  3. To add arguments, enter the argument in Add Extra Arguments.

    +
  4. +
  5. To remove an argument, enter the argument in Remove Arguments.

    +
  6. +
  7. Select Confirm.

    +
  8. +
+
+
+

Software Updater Configuration

+
    +
  1. In Advanced Options, select Software Updater Configuration.

    +
  2. +
  3. In Mirror URL, follow the instructions if you wish to +specify a different installation source.

    +
  4. +
  5. Enable Auto Updates is selected by default. If you do not +wish to enable automatic software updates, uncheck the box.

    +
    +Software Updater Configuration +

    Figure 17: Software Updater Configuration

    +
    +
  6. +
  7. Select Confirm.

    +
  8. +
+
+
+
+

Finish installation

+
    +
  1. When you are satisfied with your installation configuration, select +Install.

    +
    +Assign Hostname +

    Figure 18: Finish installation

    +
    +
  2. +
  3. If you do not enter a selection for all Required Options, +the Install button remains disabled, as shown +in Figure 19. Return to Required Options and make selections.

    +
    +Required Options - Incomplete +

    Figure 19: Required Options - Incomplete

    +
    +
  4. +
  5. After installation is complete, select Exit.

    +
  6. +
  7. Shut down the target system.

    +
  8. +
  9. Remove the USB or any installation media.

    +
  10. +
  11. Power on your system.

    +
    +

    注解

    +

    Allow time for the graphical login to appear. A login prompt shows the administrative user that you created.

    +
    +
  12. +
  13. Log in as the administrative user.

    +
  14. +
+

Congratulations. You successfully installed Clear Linux OS.

+
+

Default partition schema

+

Create partitions per requirements in Table 1.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Default partition schema
FileSystemLabelMount PointDefault size
VFAT(FAT32)boot/boot150MB
linux-swapswap 256MB
ext[234] or XFSroot/Size depends upon use case/desired bundles.
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/bare-metal-install-server/bare-metal-install-server.html b/zh_CN/get-started/bare-metal-install-server/bare-metal-install-server.html new file mode 100644 index 00000000..55f63939 --- /dev/null +++ b/zh_CN/get-started/bare-metal-install-server/bare-metal-install-server.html @@ -0,0 +1,1817 @@ + + + + + + + + + + + Install Clear Linux* OS on bare metal with live server — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install Clear Linux* OS on bare metal with live server

+

This page explains how to install Clear Linux* OS on bare metal from a bootable USB +drive using a live server image.

+ +
+

System requirements

+

Before installing Clear Linux OS, verify that the host system supports the +installation:

+ +
+
+

Download the latest Clear Linux OS live server image

+

Get the latest Clear Linux OS installer image from the Downloads page. Look for the +clear-[version number]-live-server.iso file.

+
    +
  1. Verify and decompress the file per your OS. +
  2. +
  3. Follow your OS instructions to create a bootable USB drive. +
  4. +
+
+
+

Install Clear Linux OS on your target system

+

Ensure that your system is configured to boot UEFI. The installation method +described below requires a wired Internet connection with DHCP.

+
+

注解

+

Alternatively, you can install Clear Linux OS over a wireless connection by first +using nmtui. Follow the nmtui instructions shown in Figure 2.

+
+

Follow these steps to install Clear Linux OS on the target system:

+
    +
  1. Insert the USB drive into an available USB slot.

    +
  2. +
  3. Power on the system.

    +
  4. +
  5. Open the system BIOS setup menu by pressing the F2 key. +Your BIOS setup menu entry point may vary.

    +
    +

    注解

    +

    Clear Linux OS supports UEFI boot. Some hardware may list UEFI and non-UEFI USB +boot entries. In this case, you should select the UEFI boot +option.

    +
    +
  6. +
  7. In the setup menu, enable the UEFI boot and set the USB drive as the first +option in the device boot order.

    +
  8. +
  9. Save these settings and exit.

    +
  10. +
  11. Reboot the target system.

    +
  12. +
  13. This action launches the Clear Linux OS installer boot menu, shown in figure 1.

    +
    +Clear Linux OS Installer boot menu +

    Figure 1: Clear Linux OS Installer boot menu

    +
    +
  14. +
  15. With Clear Linux OS highlighted, select Enter.

    +
  16. +
+
+
+

Launch the Clear Linux OS Installer

+
    +
  1. At the login prompt, enter root.

    +
  2. +
  3. Follow the onscreen instructions, shown in Figure 2, and +enter a temporary password.

    +
    +root login +

    Figure 2: root login

    +
    +
  4. +
  5. At the root prompt, enter clr-installer and +press Enter.

    +
    +clr-installer command +

    Figure 3: clr-installer command

    +
    +
  6. +
+
+
+

Minimum installation requirements

+

To fulfill minimum installation requirements, complete the +Required options. While not required, we encourage you to apply the +Recommended options. Advanced options are optional.

+
+

注解

+
    +
  • The Install button is only highlighted after you complete +Required options.
  • +
+
+
+ + +
+

Required options

+
+

Choose Timezone

+
    +
  1. From the Main Menu, navigate to Choose Timezone. +UTC is the default.
  2. +
  3. Select Enter.
  4. +
  5. In Select System Timezone, use Up/Down arrows +navigate to the desired timezone.
  6. +
+
    +
  1. Press Enter to confirm.

    +
    +Select System Timezone +

    Figure 5: Select System Timezone

    +
    +
  2. +
+
+
+

Choose Language

+
    +
  1. From the Main Menu, navigate to Choose Language.

    +
  2. +
  3. Select Enter.

    +
  4. +
  5. In Select System Language, navigate to your desired language.

    +
  6. +
  7. Press Enter to confirm.

    +
    +Select System Language +

    Figure 6: Select System Language

    +
    +
  8. +
+
+
+

Configure the Keyboard

+
    +
  1. From the Main Menu, select Configure the Keyboard.

    +
  2. +
  3. Select Enter.

    +
  4. +
  5. In Select Keyboard, navigate to the desired option.

    +
  6. +
  7. Select Enter to Confirm.

    +
  8. +
  9. Optional: In Test keyboard, type text to assure +that the keys map to your keyboard.

    +
    +Select Keyboard menu +

    Figure 7: Select Keyboard menu

    +
    +
  10. +
+
+
+

Configure Installation Media

+
    +
  1. From the Main Menu, select Configure Installation Media.

    +
  2. +
  3. Choose an installation method: +* Safe Installation +* Destructive Installation +* Advanced Configuration

    +
    +Select Installation Media +

    Figure 8: Select Installation Media

    +
    +
  4. +
  5. Select Rescan Media to show available installation targets.

    +
  6. +
+
+

Safe Installation

+

Use this method to safely install Clear Linux OS on media with available space, or +alongside existing partitions, and accept the Default partition schema. +If enough free space exists, safe installation is allowed. See also +Troubleshooting below.

+
+
+

Destructive Installation

+

Use this method to destroy the contents of the target device, install Clear Linux OS +on it, and accept the Default partition schema.

+
+

注解

+

From the Select Installation Media menu, select +Enable Encryption to encrypt the root filesystem for either +option above. See also Disk encryption for more information.

+
+
+
+

Advanced Configuration

+

Use this method to manually configure partitions. These must meet +Default partition schema. You may also choose Disk encryption during +configuration of each partition.

+
+

注解

+

Advanced Configuration is available in the installer versions 1.2.0 and +above.

+
+
    +
  1. From Select Installation Media, shown in Figure 8 above, +select Advanced Configuration.

    +
  2. +
  3. In Advanced Configuration, navigate to /dev/sda +and then press Enter.

    +
    +Advanced configuration menu +

    Figure 9: Advanced configuration menu

    +
    +
  4. +
  5. Choose a partition method:

    + +
  6. +
+
+
+

Manual Partition

+

We provide a simple example below.

+
    +
  1. Navigate to the unallocated media (e.g.,`/dev/sda`) until highlighted, as +shown in Figure 9.

    +
  2. +
  3. Press Enter to edit the partition.

    +
  4. +
  5. The Partition Setup menu appears, shown in Figure 10.

    +
    +

    注解

    +

    After adding the first partition, select Free Space to add another partition.

    +
    +
  6. +
+
+
+

root partition

+
    +
  1. We configure the root partition as shown in Figure 10. +Configuration of the root partition varies.

    +
    +root partition +

    Figure 10: root partition

    +
    +
  2. +
  3. Navigate to Add and press Enter.

    +
  4. +
+
+
+

boot partition

+
    +
  1. We configure the boot partition as shown in Figure 11.

    +
    +boot partition +

    Figure 11: boot partition

    +
    +
  2. +
  3. Navigate to Add and press Enter.

    +
  4. +
+
+
+

swap partition

+
    +
  1. In the File System pulldown menu, select swap, and +enter a label. We enter the minimum required size (e.g., 256M).

    +
    +swap partition +

    Figure 12: swap partition

    +
    +
  2. +
  3. Navigate to Add and press Enter.

    +
  4. +
  5. Next, navigate to Confirm and press Enter, +shown in Figure 13.

    +

    Manual partitioning is complete.

    +
    +Final configuration of disk partitions +

    Figure 13: Final configuration of disk partitions

    +
    +
  6. +
  7. You may skip to the Telemetry section below.

    +
  8. +
+
+
+
+

Disk encryption

+

For greater security, disk encryption is supported using LUKS for the +any partition except /boot on Clear Linux OS. To encrypt the root partition, see the +example below. Encryption is optional.

+
+

Encryption Passphrase

+

Clear Linux OS uses a single passphrase for encrypted partitions. Additional keys may +be configured post-installation using the cryptsetup tool.

+
    +
  1. Optional: Select [X] Encrypt to encrypt the root partition, +as shown in Figure 14.

    +
    +Encrypt partition +

    Figure 14: Encrypt partition

    +
    +
  2. +
  3. The Encryption Passphrase dialogue appears.

    +
    +

    注解

    +

    Minimum length is 8 characters. Maximum length is 94 characters.

    +
    +
    +Encryption Passphrase +

    Figure 15: Encryption Passphrase

    +
    +
  4. +
  5. Enter the same passphrase in the first and second field.

    +
  6. +
  7. Navigate to Confirm and press Enter.

    +
    +

    注解

    +

    Confirm is only highlighted if passphrases match.

    +
    +
  8. +
+
+
+
+

Telemetry

+

Telemetrics is a Clear Linux OS feature that reports failures and crashes to +the Clear Linux OS development team for improvements. For more detailed information, +visit our Telemetrics page.

+

Select your desired option on whether to participate in telemetry.

+
    +
  1. In the Main Menu, navigate to Telemetry and select +Enter.

    +
  2. +
  3. Select Tab to highlight your choice.

    +
  4. +
  5. Select Enter to confirm.

    +
    +Enable Telemetry +

    Figure 16: Enable Telemetry

    +
    +
  6. +
+
+
+ +
+

Advanced options

+
+

Configure Network Interfaces

+

By default, Clear Linux OS is configured to automatically detect the host network +interface using DHCP. However, if you want to use a static IP address or if +you do not have a DHCP server on your network, follow these instructions to +manually configure the network interface. Otherwise, default network +interface settings are automatically applied.

+
+

注解

+

If DHCP is available, no user selection may be required.

+
+
    +
  1. Navigate to Configure Network Interfaces and +select Enter.

    +
  2. +
  3. Navigate to the network interface you wish to change.

    +
  4. +
  5. When the desired interface is highlighted, select +Enter to edit.

    +
    +

    注解

    +

    Multiple network interfaces may appear.

    +
    +
    +Configure Network Interfaces +

    Figure 17: Configure Network Interfaces

    +
    +
  6. +
  7. Notice Automatic / dhcp is selected by default (at bottom).

    +

    Optional: Navigate to the checkbox Automatic / dhcp and select +Spacebar to deselect.

    +
    +Network interface configuration +

    Figure 18: Network interface configuration

    +
    +
  8. +
  9. Navigate to the appropriate fields and assign the desired +network configuration.

    +
  10. +
  11. To save settings, navigate to Confirm and select +Enter.

    +
    +

    注解

    +

    To revert to previous settings, navigate to the Cancel +and select Enter.

    +
    +
  12. +
  13. Upon confirming network configuration, the Testing Networking +dialogue appears. Assure the result shows success. If a failure occurs, +your changes will not be saved.

    +
  14. +
  15. Upon confirmation, you are returned to Network interface +settings.

    +
  16. +
  17. Navigate to and select Main Menu.

    +
  18. +
+

Optional: Skip to Finish installation.

+
+
+

Proxy

+

Clear Linux OS automatically attempts to detect proxy settings, as described in +Autoproxy. If you need to manually assign proxy settings, follow this +instruction.

+
    +
  1. From the Advanced options menu, navigate to Proxy, and +select Enter.

    +
  2. +
  3. Navigate to the field HTTPS Proxy.

    +
    +Configure the network proxy +

    Figure 19: Configure the network proxy

    +
    +
  4. +
  5. Enter the desired proxy address and port using conventional syntax, +such as: http://address:port.

    +
  6. +
  7. Navigate to Confirm and select Enter.

    +
  8. +
  9. To revert to previous settings, navigate to Cancel +and select Cancel.

    +
  10. +
+

Optional: Skip to Finish installation.

+
+
+

Test Network Settings

+

To manually assure network connectivity before installing Clear Linux OS, +select Test Network Settings and select Enter.

+

A progress bar appears as shown in Figure 20.

+
+Testing Networking dialogue +

Figure 20: Testing Networking dialogue

+
+
+

注解

+

Any changes made to network settings are automatically tested +during configuration.

+
+

Optional: Skip to Finish installation.

+
+
+

Bundle Selection

+
    +
  1. On the Advanced menu, select Bundle Selection

    +
  2. +
  3. Navigate to the desired bundle using Tab or Up/Down arrows.

    +
  4. +
  5. Select Spacebar to select the checkbox for each desired bundle.

    +
    +Bundle Selection +

    Figure 21: Bundle Selection

    +
    +
  6. +
  7. Optional: To start developing with Clear Linux OS, we recommend +adding os-clr-on-clr.

    +
  8. +
  9. Navigate to and select Confirm.

    +

    You are returned to the Advanced options menu.

    +
  10. +
+

Optional: Skip to Finish installation.

+
+
+

Manage User

+
+

Add New User

+
    +
  1. In Advanced Options, select Manage User.

    +
  2. +
  3. Select Add New User as shown in Figure 22.

    +
    +Add New User, User Name +

    Figure 22: Add New User

    +
    +
  4. +
  5. Optional: Enter a User Name.

    +
    +User Name +

    Figure 23: User Name

    +
    +
  6. +
  7. Enter a Login.

    +
    +

    注解

    +

    The User Login must be alphanumeric and can include hyphens and underscores. Maximum length is 31 characters.

    +
    +
  8. +
  9. Enter a Password.

    +
  10. +
  11. In Confirm, enter the same password.

    +
  12. +
  13. Optional: Navigate to the Administrative checkbox and select +Spacebar to assign administrative rights to the user.

    +
    +

    注解

    +

    Selecting this option enables sudo privileges for the user.

    +
    +
  14. +
  15. Select Confirm.

    +
    +

    注解

    +

    If desired, select Reset to reset the form.

    +
    +
  16. +
  17. In Manage User, navigate to Confirm.

    +
  18. +
  19. With Confirm highlighted, select Enter.

    +
  20. +
+
+
+

Modify / Delete User

+
    +
  1. In Manage User, navigate to the user you wish +to modify until highlighted, as shown in Figure 24.

    +
  2. +
  3. Select Enter to modify the user.

    +
    +Modify User +

    Figure 24: Modify User

    +
    +
  4. +
  5. Modify user details as desired.

    +
  6. +
  7. Navigate to Confirm until highlighted.

    +
    +

    注解

    +

    Optional: Select Reset to rest the form.

    +
    +
  8. +
  9. Select Confirm to save the changes you made.

    +
  10. +
  11. Optional: In Modify User, to delete the user, navigate to +the Delete button and select Enter.

    +
    +Delete User +

    Figure 25: Delete User

    +
    +
  12. +
+

You are returned to Manage User.

+
    +
  1. Navigate to Confirm until highlighted.
  2. +
  3. Select Enter to complete Manage User options.
  4. +
+

Optional: Skip to Finish installation.

+
+
+
+

Kernel Command Line

+

For advanced users, Clear Linux OS provides the ability to add or remove kernel +arguments. If you want to append a new argument, enter the argument here. +This argument will be used every time you install or update a +new kernel.

+
    +
  1. In Advanced Options, select Tab to highlight +Kernel Command Line.

    +
  2. +
  3. Select Enter.

    +
    +kernel command line +

    Figure 26: kernel command line

    +
    +
  4. +
  5. Choose from the following options.

    +
      +
    • To add arguments, enter the argument in Add Extra Arguments.
    • +
    • To remove an argument, enter the argument in +Remove Arguments.
    • +
    +
  6. +
  7. Select Confirm.

    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Kernel Selection

+
    +
  1. Select a kernel option. By default, the latest kernel release is +selected. Native kernel is shown in Figure 27.

    +
  2. +
  3. To select a different kernel, navigate to it using Tab.

    +
    +Kernel selection +

    Figure 27: Kernel selection

    +
    +
  4. +
  5. Select Spacebar to select the desired option.

    +
  6. +
  7. Navigate to Confirm and select Enter.

    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Swupd Mirror

+

If you have your own custom mirror of Clear Linux OS, you can add its URL.

+
    +
  1. In Advanced Options, select Swupd Mirror.

    +
  2. +
  3. To add a local swupd mirror, enter a valid URL in Mirror URL:

    +
  4. +
  5. Select Confirm.

    +
    +Swupd Mirror +

    Figure 28: Swupd Mirror

    +
    +
  6. +
+

Optional: Skip to Finish installation.

+
+
+

Assign Hostname

+
    +
  1. In Advanced Options, select Assign Hostname.

    +
  2. +
  3. In Hostname, enter the hostname only (excluding the domain).

    +
    +

    注解

    +

    Hostname does not allow empty spaces. Hostname must start with an +alphanumeric character but may also contain hyphens. Maximum length of +63 characters.

    +
    +
    +Assign Hostname +

    Figure 29: Assign Hostname

    +
    +
  4. +
  5. Navigate to Confirm until highlighted.

    +
  6. +
  7. Select Confirm.

    +
  8. +
+

Optional: Skip to Finish installation.

+
+
+

Automatic OS Updates

+

Automatical OS updates are enabled by default. In the rare case that you +need to disable automatic software updates, follow the onscreen instructions, +shown in Figure 30.

+
    +
  1. In Advanced Options, select Automatic OS Updates.

    +
  2. +
  3. Select the desired option.

    +
    +Automatic OS Updates +

    Figure 30: Automatic OS Updates

    +
    +
  4. +
+

You are returned to the Main Menu.

+
+
+

Save Configuration Settings

+
    +
  1. In Advanced Options, select Save Configuration Settings.

    +
  2. +
  3. A dialogue box shows the installation configuration was saved to +clr-installer.yaml

    +
    +Automatic OS Updates +

    Figure 31: Automatic OS Updates

    +
    +
  4. +
  5. Use the clr-installer.yaml file to install Clear Linux OS, with the same +configuration, on multiple targets.

    +
  6. +
+
+
+
+

Finish installation

+
    +
  1. When you are satisfied with your installation configuration, navigate to +Install and select Enter.

    +
    +Select Install +

    Figure 32: Select Install

    +
    +
  2. +
  3. Select reboot.

    +
    +

    注解

    +

    If you do not assign an administrative user, upon rebooting, +enter root and set the root password immediately.

    +
    +
  4. +
  5. When the system reboots, remove any installation media present.

    +
  6. +
+
+

Default partition schema

+

Create partitions per requirements in Table 1.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Default partition schema
FileSystemLabelMount PointDefault size
VFAT(FAT32)boot/boot150MB
linux-swapswap 256MB
ext[234] or XFSroot/Size depends upon use case/desired bundles.
+
+
+
+

Troubleshooting

+
+

For Configure Installation Media

+

If a warning message appears that no media or space is available after +entering Configure Installation Media:

+
    +
  • Verify that target media has enough free space.
  • +
  • Confirm the USB is properly connected to and mounted on target media.
  • +
  • Review the size of existing partitions on the target media:
      +
    • Linux* OS: lsblk -a
    • +
    • Windows* OS: diskpart, then list disk
    • +
    • macOS* platform: diskutil list
    • +
    +
  • +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/bootable-usb/bootable-usb.html b/zh_CN/get-started/bootable-usb/bootable-usb.html new file mode 100644 index 00000000..77b3c978 --- /dev/null +++ b/zh_CN/get-started/bootable-usb/bootable-usb.html @@ -0,0 +1,1157 @@ + + + + + + + + + + + 创建可引导 U 盘 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

创建可引导 U 盘

+

按照适用于您的系统的说明创建可引导的 Clear Linux* OS U 盘:

+ +
+

必备条件

+
    +
  • 使用 8GB 或更大 U 盘。
  • +
  • Downloads 页下载 Clear Linux OS 实时引导映像或交互式安装程序映像。
  • +
+
+
+

在 Linux* 上创建可引导 U 盘

+

Make sure you have have completed all Prerequisites.

+

将映像烧录至 U 盘之前,verify and decompress your image

+
+

将 Clear Linux OS 映像烧录至 U 盘

+
+

警告

+

Burning an image formats the USB drive, and will destroy all pre-existing +content. Back up your data before proceeding.

+
+
    +
  1. 打开终端模拟器,获取 root 权限。

    +
    sudo -s
    +
    +
    +
  2. +
  3. 转到解压缩映像所在的目录。

    +
  4. +
  5. 插入 U 盘。

    +
  6. +
  7. 利用 lsblk 命令识别 U 盘。此操作会显示所有连接到系统的驱动器,包括主硬盘。在下面的示例输出中,连接了 4 个驱动器(/dev/sda/dev/sdb/dev/sdc/dev/sdd),而 /dev/sda 为主驱动器。其余三个是 U 盘。输出中还显示了为每个驱动器挂载的分区(在 MOUNTPOINT 栏)。

    +
    lsblk
    +
    +
    +

    示例输出:

    +
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    +sdd      8:48   1    15G  0 disk
    +├─sdd2   8:50   1     5G  0 part /run/media/user1/960c184f-3bb7-42b7-bcaf-0c1282
    +├─sdd3   8:51   1     8G  0 part /run/media/user1/704f3382-b26d-4f34-af1b-cb9aab
    +└─sdd1   8:49   1     2G  0 part
    +sdb      8:16   1  14.8G  0 disk
    +└─sdb1   8:17   1  14.8G  0 part /run/media/user1/PATRIOT_USB
    +sdc      8:32   1   7.3G  0 disk
    +└─sdc1   8:33   1   7.3G  0 part /run/media/user1/LINUX MINT
    +sda      8:0    0 335.4G  0 disk
    +├─sda4   8:4    0    28G  0 part
    +├─sda2   8:2    0   3.7G  0 part [SWAP]
    +├─sda7   8:7    0     6G  0 part /home
    +├─sda5   8:5    0     1G  0 part /boot
    +├─sda3   8:3    0   954M  0 part /boot/efi
    +├─sda1   8:1    0    28G  0 part
    +├─sda8   8:8    0    30G  0 part /
    +└─sda6   8:6    0   7.9G  0 part [SWAP]
    +
    +
    +
  8. +
  9. 在烧录映像之前,必须卸载 U 盘。请注意,某些 Linux 操作系统会在 U 盘插入时自动挂载 U 盘。利用 umount 命令卸载 U 盘,命令后面为设备标识符/分区。例如:

    +
    umount /dev/sdd2
    +umount /dev/sdd3
    +
    +
    +
  10. +
  11. 将映像烧录至 U 盘。下例将未压缩的映像烧录至 <your USB device>

    +
    dd if=./clear-[version number]-[image type] of=<your USB device> oflag=sync bs=4M status=progress
    +
    +
    +
  12. +
+
+

警告

+

Not fully unmounting the USB drive before burning an image could cause +file system checksum errors in it. If this happens, burn the image again +ensuring all the USB drive partitions are unmounted first.

+
+
+
+
+

在 macOS* 上创建可引导 U 盘

+

Make sure you have have completed all Prerequisites.

+

将映像烧录至 U 盘之前,verify and decompress your image

+
+

将 Clear Linux OS 映像烧录至 U 盘

+
+

警告

+

Burning an image formats the USB drive, and will destroy all pre-existing +content. Back up your data before proceeding.

+
+
    +
  1. 启动终端应用。

    +
  2. +
  3. 转到解压缩映像所在的目录。

    +
  4. +
  5. 插入 U 盘,获取盘符:

    +
    diskutil list
    +
    +
    +

    此操作会列出可用磁盘及其分区,如图 1 所示。

    +
    +Get USB drive identifier +

    图 1:macOS - 获取 U 盘盘符

    +
    +
  6. +
  7. 卸载上一步中识别的 U 盘。例如:

    +
    diskutil umountDisk /dev/disk2
    +
    +
    +
  8. +
  9. 利用 dd 命令将映像烧录至驱动器。下例将未压缩的映像烧录至 <your USB device>

    +
    sudo dd if=./clear-[version number]-[image type] of=<your USB device> bs=4m
    +
    +
    +

    为加速映像烧录过程,在盘符前面添加一个 ‘r’。例如 /dev/rdisk2

    +

    按下 <CTL>-T 查看映像烧录过程。

    +
  10. +
  11. 弹出 U 盘。

    +
    diskutil eject /dev/disk2
    +
    +
    +
  12. +
+
+
+
+

在 Windows* 上创建可引导 U 盘

+

Make sure you have have completed all Prerequisites.

+

将映像烧录至 U 盘之前,verify and decompress your image

+
+

将 Clear Linux OS 映像烧录至 U 盘

+
+

警告

+

Burning an image formats the USB drive, and will destroy all pre-existing +content. Back up your data before proceeding.

+
+
    +
  1. 下载 Rufus 实用程序以便将映像烧录至 U 盘。此处使用 Rufus 3.5。仅使用最新 Rufus 版本。

    +
  2. +
  3. 插入 U 盘,打开 Rufus。

    +
  4. +
  5. Boot selection 中,点击 选择 按钮。

    +
  6. +
  7. 找到并选择此前解压缩的 Clear Linux OS 映像文件。

    +
  8. +
  9. 点击 启动 按钮。见图 2。

    +
    +Rufus utility +

    图 2: Rufus 实用程序

    +
    +
  10. +
  11. 对话出现时,选择 以 ISO 映像模式写入(推荐)。见图 3。

    +
    +ISOHybrid image detected +

    图 3:检测到 ISOHybrid 映像

    +
    +
  12. +
  13. 选择 USB 的 Windows 任务栏菜单并选择“弹出”。

    +
  14. +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/compatibility-check.html b/zh_CN/get-started/compatibility-check.html new file mode 100644 index 00000000..515db307 --- /dev/null +++ b/zh_CN/get-started/compatibility-check.html @@ -0,0 +1,1045 @@ + + + + + + + + + + + 检查处理器和 EFI 固件的兼容性 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

检查处理器和 EFI 固件的兼容性

+

安装 Clear Linux* OS 之前,检查主机系统的处理器和 EFI 固件兼容性。要检查兼容性,选择如下途径:

+ +
+

注解

+

该操作不会检查其他系统组件(例如:储存和显卡)与 Clear Linux OS 的兼容性。

+
+
+

检查兼容性

+
    +
  1. 下载 clear-linux-check-config.sh 文件。

    +

    如果浏览器不可用,使用:

    +
    curl -O https://cdn.download.clearlinux.org/current/clear-linux-check-config.sh
    +
    +
    +
  2. +
  3. 保证脚本可以运行。

    +
    chmod +x clear-linux-check-config.sh
    +
    +
    +
  4. +
  5. 运行脚本。

    +
      +
    1. 检查主机的处理器和 EFI 固件是否可以运行 Clear Linux OS。

      +
      ./clear-linux-check-config.sh host
      +
      +
      +
    2. +
    3. 检查主机是否可以在一个容器中运行 Clear Linux OS。

      +
      ./clear-linux-check-config.sh container
      +
      +
      +
    4. +
    +

    脚本会输出测试结果列表,如下所示。所有项应返回 SUCCESS 状态。本例表明主机的处理器和 EFI 固件可以支持运行 Clear Linux OS。

    +
    Checking if host is capable of running Clear Linux* OS
    +
    +SUCCESS: 64-bit CPU (lm)
    +SUCCESS: Supplemental Streaming SIMD Extensions 3 (ssse3)
    +SUCCESS: Streaming SIMD Extension v4.1 (sse4_1)
    +SUCCESS: Streaming SIMD Extensions v4.2 (sse4_2)
    +SUCCESS: Advanced Encryption Standard instruction set (aes)
    +SUCCESS: Carry-less Multiplication extensions (pclmulqdq)
    +SUCCESS: EFI Firmware
    +
    +
    +
  6. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/get-started.html b/zh_CN/get-started/get-started.html new file mode 100644 index 00000000..15bea485 --- /dev/null +++ b/zh_CN/get-started/get-started.html @@ -0,0 +1,1034 @@ + + + + + + + + + + + 开始使用 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/install-configfile.html b/zh_CN/get-started/install-configfile.html new file mode 100644 index 00000000..0b186d61 --- /dev/null +++ b/zh_CN/get-started/install-configfile.html @@ -0,0 +1,1209 @@ + + + + + + + + + + + 利用 clr-installer 和配置文件安装 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

利用 clr-installer 和配置文件安装

+

本页说明如何利用 clr-installer 工具和配置文件安装 Clear Linux* OS。配置文件 (clr-installer.yaml) 可以重复使用,在其他机器上复制相同的安装配置。

+ + +
+

流程

+

本指南介绍了利用配置文件和 clr-installer 工具进行安装的两种方法。您可以使用任何一种方法实现同一目标。选择最适合您的方法。

+

如果您是首次安装 Clear Linux OS,我们推荐例 1。

+

要在另一系统上克隆现有的 Clear Linux OS 配置,我们推荐例 2。

+
+

例 1

+

本方法使用配置文件模板执行全新安装。

+

执行以下步骤:

+
    +
  1. 转向 Downloads,下载最新的 Clear Linux OS Server 映像。

    +

    例如:https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz

    +
  2. +
  3. 按照说明 创建可引导 U 盘,因操作系统而异。

    +
  4. +
  5. 启动 U 盘。

    +
  6. +
  7. 从菜单中选择 Clear Linux 操作系统

    +
  8. +
  9. 在控制台窗口中,以 root 用户身份登录,然后设置密码。

    +
  10. +
  11. 确认拥有互联网连接,配置代理设置(如果使用防火墙)。

    +
  12. +
  13. 下载 live-server.yaml 模板。

    +

    例如:

    +
    curl -O https://download.clearlinux.org/releases/30010/clear/config/image/live-server.yaml
    +
    +
    +
  14. +
  15. 根据需要编辑模板,改变设置。

    +

    通常改变的设置包括:

    +
  16. +
+
+
    +
  1. 块设备 中,设置 “file: “/dev/sda”” 或输入喜欢的设备。
  2. +
  3. targetMedia 中,将第三分区大小设置为 “0”,以使用整个磁盘空间。
  4. +
  5. bundle 文件 部分,根据需要添加其他 bundle 文件。
  6. +
  7. 删除*安装后*部分,除非您有安装后脚本。
  8. +
  9. 版本 部分,设置版本号。要使用最新版本,设置为 “0”。
  10. +
+

通常改变的设置在下面的 15、34、37 和 51 行显示。查看 Installer YAML Syntax 了解详情。

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
          #clear-linux-config
+
+          # c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
+          # vi: set shiftwidth=2 tabstop=2 expandtab:
+          # :indentSize=2:tabSize=2:noTabs=true:
+
+          # File:         developer-live-server.yaml
+          # Use Case:     Live Image which boots into login prompt
+          #               Optionally allows for installing Clear Linux OS
+          #               using the TUI clr-installer by running clr-installer
+
+          # switch between aliases if you want to install to an actual block device
+          # i.e /dev/sda
+          block-devices: [
+             {name: "bdevice", file: "/dev/sda"}
+          ]
+
+          targetMedia:
+          - name: ${bdevice}
+            type: disk
+            children:
+            - name: ${bdevice}1
+              fstype: vfat
+              mountpoint: /boot
+              size: "150M"
+              type: part
+            - name: ${bdevice}2
+              fstype: swap
+              size: "32M"
+              type: part
+            - name: ${bdevice}3
+              fstype: ext4
+              mountpoint: /
+              size: "0"
+              type: part
+
+          bundles: [os-core, os-core-update, NetworkManager, clr-installer, vim]
+
+          autoUpdate: false
+          postArchive: false
+          postReboot: false
+          telemetry: false
+          iso: true
+          keepImage: true
+          autoUpdate: false
+
+          keyboard: us
+          language: en_US.UTF-8
+          kernel: kernel-native
+
+          version: 30010
+
+
+
+

利用以下命令开始安装:

+
clr-installer --config live-server.yaml
+
+
+
+
+

例 2

+

此方法使用此前安装中保存的配置文件,可以轻松利用该文件在其他机器上复制安装。

+

执行以下步骤:

+
    +
  1. 在安装 Clear Linux OS 的系统上打开控制台窗口,找到配置文件的副本。

    +
  2. +
  3. 在控制台窗口中,以 root 用户身份登录,输入密码。

    +
  4. +
  5. 将目录更改为 /root,然后将 clr-installer.yaml 文件复制到 U 盘。

    +
    cd /root
    +cp clr-installer.yaml <USB-thumb-drive>
    +
    +
    +
  6. +
+

按照以下步骤在目标设备上开始安装:

+
    +
  1. 转向 Downloads,下载最新的 Clear Linux OS Server 映像。

    +

    例如:https://download.clearlinux.org/releases/30010/clear/clear-30010-live-server.iso.xz

    +
  2. +
  3. 按照说明 创建可引导 U 盘,因操作系统而异。

    +
  4. +
  5. 启动 U 盘。

    +
  6. +
  7. 从菜单中选择 Clear Linux 操作系统

    +
  8. +
  9. 在控制台窗口中,以 root 用户身份登录,然后设置密码。

    +
  10. +
  11. 确认拥有互联网连接,配置代理设置(如果使用防火墙)。

    +
  12. +
  13. 插入并挂载 U 盘。U 盘中包含找到的 clr-installer.yaml 配置文件。

    +
  14. +
  15. 利用以下命令开始安装:

    +
    clr-installer --config clr-installer.yaml
    +
    +
    +
  16. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/gce.html b/zh_CN/get-started/virtual-machine-install/gce.html new file mode 100644 index 00000000..1629f994 --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/gce.html @@ -0,0 +1,1184 @@ + + + + + + + + + + + 在 Google Cloud Platform* 上启动 Clear Linux* OS Compute Engine — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

在 Google Cloud Platform* 上启动 Clear Linux* OS Compute Engine

+

本页说明在 Google Cloud Platform (GCP) 上创建 Clear Linux* OS 虚拟机实例的步骤。

+ +
+

必备条件

+
    +
  • 创建 Google 帐户和 GCP 计费帐户。
  • +
  • 在 Linux PC 中生成和安装用户 SSH 密钥。该 PC 将连接至 GCP 中的虚拟机。
  • +
+
+
+

在 GCP 上安装 Clear Linux OS 虚拟机

+
    +
  1. Google Cloud Console 上登录 Google* 帐户。

    +
    +Sign in to Google services +

    图 1:Google 登录屏幕

    +
    +
  2. +
  3. Google Cloud Platform 使用 项目 管理资源。选择或创建新项目来托管 Clear Linux OS 虚拟机。

    +
    +

    注解

    +

    请参阅 Quickstart Using a Linux VM 指南,了解在 GCP 上创建虚拟机实例的过程。

    +
    +
  4. +
  5. 导航至最新的 Clear Linux OS release folder,查看当前发布的 GCE 映像,下载 clear-<release number>-gce.tar.gz 映像档案文件。

    +

    您无需解压缩映像档案文件,完整文件稍后将上传至 Google Cloud Storage。

    +
  6. +
  7. 创建 存储 Bucket 以托管上一步下载的 Clear Linux OS 映像源档案文件:

    +
      +
    • 点击左上部屏幕菜单中的 导航菜单 图标。
    • +
    • Select the Storage item from the side bar on the left. You +will be sent to the Storage Browser tool or the Cloud Storage overview page.
    • +
    +
    +Browse Google Cloud Storage +

    图 2:浏览 Google Cloud Storage

    +
    +
    +

    注解

    +

    创建 bucket 之前,最好需要创建一个计费帐户,将其链接至此项目。

    +
    +
    +Cloud Storage Browser tool +

    图 3:Cloud Storage 浏览工具

    +
    +
      +
    • 点击 创建 BUCKET 按钮,进入 bucket 创建工具界面。bucket 的名称必须是唯一的,因为 Cloud Storage 中的所有 bucket 共享一个全局命名空间。

      +

      其余设置选项保留默认值,然后点击底部的 创建 按钮创建 Bucket

      +
      +Set a unique bucket name +

      图 4:设置 bucket 名称

      +
      +
    • +
    +
  8. +
  9. 创建 bucket 后,点击 Bucket 详细资料页上的 上传文件 按钮将 Clear Linux OS GCE 映像档案文件上传至指定的 bucket:

    +
    +Cloud Storage bucket is available for storing objects +

    图 5:Cloud Storage bucket

    +
    +
    +Uploading the image source archive file +

    图 6:上传映像源档案文件

    +
    +
    +Image archive imported complete +

    图 7:导入完成

    +
    +
  10. +
  11. 浏览 Compute Engine 映像库页:

    +
      +
    • 点击左上部屏幕菜单中的 导航菜单 图标。

      +
    • +
    • 从左侧边栏选择 Compute Engine ‣ 映像

      +
      +Go to Google Compute Engine Image library +

      图 8:映像库

      +
      +
    • +
    +
  12. +
  13. 在 Compute Engine 映像库页面,点击 [+] CREATE IMAGE 菜单项创建定制映像:

    +
    +Create a Google Compute Engine image +

    图 9:创建映像

    +
    +
  14. +
  15. 在虚拟机映像创建页上,将映像源类型更改为 Cloud Storage 文件

    +
  16. +
  17. 来源 中,选择 浏览

    +
  18. +
  19. 找到 clear-<release number>-gce.tar.gz 文件,然后点击 选择

    +
    +Create the image using the imported image archive object +

    图 10:利用导入的对象创建映像

    +
    +

    接受所有默认选项,然后点击底部的 创建 按钮,将 Clear Linux GCE 映像导入映像库。

    +
    +Clear Linux Compute Engine image is created +

    图 11:映像已创建

    +
    +
  20. +
  21. Clear Linux OS 映像导入后,可以启动一个运行 Clear Linux OS 的虚拟机实例:

    +
      +
    • 点击左上部屏幕菜单中的 导航菜单 图标。
    • +
    • 从左侧边栏选择 Compute Engine ‣ 映像
    • +
    +
    +Go to VM instances catalog +

    图 12:虚拟机实例目录

    +
    +
  22. +
  23. 如果此项目中没有创建虚拟机实例,系统会提示您创建一个实例。

    +
  24. +
  25. 另外,也可以点击虚拟机实例页上的 创建实例 按钮创建虚拟机实例。

    +
    +Prompt for VM creation +

    图 13:创建虚拟机

    +
    +
    +List of VM instances +

    图 14:虚拟机实例列表

    +
    +
      +
    • 区域 中,根据 Best practices for Compute Engine regions selection 选择一个区域。

      +
    • +
    • 引导磁盘 中,点击 更改 按钮。

      +
      +Use custom image while creating Clear Linux VM instance +

      图 15:使用定制映像

      +
      +
    • +
    • 选择 定制映像 标签,以使用 Clear Linux OS GCE 映像。

      +
      +Select Clear Linux boot disk to create a VM instance +

      图 16:选择 Clear Linux 引导磁盘创建虚拟机实例

      +
      +
    • +
    • 向下滚动至虚拟机实例创建页的底部,展开 管理、安全、磁盘、联网、独占租区 群组。

      +
      +Clear Linux requires setting up SSH keys +

      图 17:设置 SSH 密钥

      +
      +
      +

      注解

      +

      Clear Linux OS 默认情况下不允许使用 root 帐户进行 SSH 登录。因此,您必须使用 SSH 公共密钥配置虚拟机实例,以便能够远程访问。

      +

      请参考 OS Security 了解详情。

      +
      +
    • +
    • 点击 安全性 标签,复制并粘贴 SSH 公共密钥:

      +
      +Set SSH key for remote login +

      图 18:设置 SSH 密钥进行远程登录

      +
      +
      +

      警告

      +

      分配的用户名来自电子邮件地址 @ 前面的字符,包含在 SSH 密钥中。不允许使用符号 “.”,因为在 Clear Linux OS 中创建用户帐户时它是无效字符。

      +
      +
    • +
    • 点击 创建 按钮创建 Clear Linux OS 虚拟机。

      +
    • +
    +
  26. +
  27. Clear Linux 虚拟机实例已创建并分配了一个公共 IP 地址:

    +
    +Clear Linux VM instance is created and started +

    图 19:Clear Linux 虚拟机实例已创建并启动

    +
    +
  28. +
  29. 利用上一步获得的 IP 地址以及与 SSH 公共密钥相关联的用户名,您现在可以通过 SSH 登录虚拟机:

    +
    +SSH login to the Clear Linux VM +

    图 20:SSH 登录 Clear Linux 虚拟机

    +
    +
  30. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/hyper-v.html b/zh_CN/get-started/virtual-machine-install/hyper-v.html new file mode 100644 index 00000000..b8c5e36c --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/hyper-v.html @@ -0,0 +1,1047 @@ + + + + + + + + + + + 使用 Hyper-V* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

使用 Hyper-V*

+

本页说明如何在 Windows Server Virtualization* 或 Hyper-V 环境中运行 Clear Linux* OS。

+ +
+

必备条件

+ +
+
+

启用 Hyper-V

+

请参阅 Install Hyper-V on Windows 10 以在机器上启用和配置 Hyper-V

+
+
+

创建虚拟网络

+

Once Hyper-V has been enabled on your Windows system you will need to +create a virtual network in the Hyper-V Manager. Refer to the +Create a virtual network documentation to create and configure +a virtual network.

+
+
+

创建虚拟机

+
    +
  1. 下载和解压缩最新的 hyperv 磁盘映像 clear-XXXXX-hyperv.img.gz,其中 XXXXX 是 Downloads 页上的最新可用 Clear Linux OS 版本。

    +
  2. +
  3. 利用 Hyper-V Manager 创建虚拟机:

    +
      +
    1. 提示 指定虚拟机世代 时选择 第 2 代
    2. +
    3. 选择 使用现有虚拟硬盘,找到 clear-XXXX-hyperv.vhdx 文件。
    4. +
    5. 完成后,打开虚拟机设置,选择“固件选择”,在“安全引导配置”中 取消选中“启用安全引导”。
    6. +
    +
    +

    注解

    +

    现在,Clear Linux OS 不会通过启用 secure boot 来引导。

    +
    +
  4. +
  5. 连接至新虚拟机并将其启动。系统显示提示:

    +
    > User: root
    +
    +
    +
  6. +
  7. 设置 root 用户密码。

    +
  8. +
+

运行 Clear Linux OS 的虚拟机已准备就绪!

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/kvm.html b/zh_CN/get-started/virtual-machine-install/kvm.html new file mode 100644 index 00000000..d1088b8f --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/kvm.html @@ -0,0 +1,1201 @@ + + + + + + + + + + + 运行 Clear Linux* OS,用作 KVM 来宾操作系统 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

运行 Clear Linux* OS,用作 KVM 来宾操作系统

+

本页说明如何利用 KVM 在虚拟环境中运行 Clear Linux* OS。

+ +
+

安装 QEMU-KVM

+
    +
  1. 在主机 BIOS 中启用 Intel® Virtualization Technology (Intel® VT) 和 Intel® Virtualization Technology for Directed I/O (Intel® VT-d)。

    +
  2. +
  3. 登录并打开终端模拟器。

    +
  4. +
  5. 在主机上安装 QEMU*-KVM。下面是部分示例操作系统。

    +
      +
    • 在 Clear Linux OS 上:

      +
      sudo swupd bundle-add kvm-host
      +
      +
      +
    • +
    • 在 Ubuntu* 18.04 LTS Desktop 上:

      +
      sudo apt-get install qemu-kvm
      +
      +
      +
    • +
    • 在 Mint* 19.1 “Cinnamon” Desktop 上:

      +
      sudo apt-get install qemu-kvm
      +
      +
      +
    • +
    • 在 Fedora* 30 Workstation 上:

      +
      sudo dnf install qemu-kvm
      +
      +
      +
    • +
    +
  6. +
+
+
+

下载并开启虚拟机

+
    +
  1. image 目录下载最新的预构建 Clear Linux OS KVM 映像。查找 clear-<version>-kvm.img.xz。您还可以使用此命令:

    +
    curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm'\.')
    +
    +
    +
  2. +
  3. 解压缩下载的映像:

    +
    unxz -v clear-<version>-kvm.img.xz
    +
    +
    +
  4. +
  5. 下载 3 个 OVMF 文件(OVMF.fdOVMF_CODE.fdOVMF_VARS.fd),为虚拟机提供 UEFI 支持。

    +
    curl -O https://cdn.download.clearlinux.org/image/OVMF.fd
    +curl -O https://cdn.download.clearlinux.org/image/OVMF_CODE.fd
    +curl -O https://cdn.download.clearlinux.org/image/OVMF_VARS.fd
    +
    +
    +
    +

    注解

    +

    Clear Linux OS 的默认 OVMF 文件可能并不适用于部分操作系统版本。开启虚拟机时,可能会在 debug.log 文件中发现 ASSERT。如果出现此情况,则改用因操作系统而异的 OVMF 文件。例如,Clear Linux OS OVMF 文件适用于 Ubuntu 18.04 LTS,但不适用于 Ubuntu 19.04 LTS。安装和使用适用于 Ubuntu 19.04 LTS 的 OVMF 文件,解决了 ASSERT 问题。

    +
    +
  6. +
  7. 下载 start_qemu.sh script from the image 目录。此脚本将启动 Clear Linux OS 虚拟机,并在同一个终端模拟器窗口中提供控制台交互操作。

    +
    curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh
    +
    +
    +
  8. +
  9. 保证脚本可以运行:

    +
    chmod +x start_qemu.sh
    +
    +
    +
  10. +
  11. 启动 Clear Linux OS KVM 虚拟机:

    +
    sudo ./start_qemu.sh clear-<version>-kvm.img
    +
    +
    +
  12. +
  13. root 用户身份登录,设置新密码。

    +
  14. +
+
+
+

通过 SSH 访问虚拟机

+

要通过 SSH 而非开启虚拟机的控制台与 Clear Linux OS 虚拟机进行交互,请按照以下步骤操作:

+
    +
  1. 在 Clear Linux OS 虚拟机中配置 SSH,允许 root 登录:

    +
    cat > /etc/ssh/sshd_config << EOF
    +  PermitRootLogin yes
    +  EOF
    +
    +
    +
  2. +
  3. 在 Clear Linux OS 虚拟机中启用和启动 SSH 服务器:

    +
    systemctl enable sshd
    +systemctl start sshd
    +
    +
    +
  4. +
  5. 确认将在其上开启虚拟机的托管主机的 IP 地址。下一步中用此信息代替 <ip-addr-of-kvm-host>。

    +
    ip a
    +
    +
    +
  6. +
  7. 利用默认端口 10022,通过 SSH 登录 Clear Linux OS 虚拟机:

    +
    ssh -p 10022 root@<ip-addr-of-kvm-host>
    +
    +
    +
  8. +
+
+
+

可选:添加 GNOME Display Manager (GDM)

+

为将 GDM 添加至 Clear Linux OS 虚拟机,请按照以下步骤操作:

+
    +
  1. 关闭运行的 Clear Linux OS 虚拟机。

    +
    poweroff
    +
    +
    +
  2. +
  3. 在本地主机或远程系统上安装 Spice 查看器。下面是部分示例操作系统。

    +
      +
    • 在 Clear Linux 上:

      +
      sudo swupd bundle-add virt-viewer
      +
      +
      +
    • +
    • 在 Ubuntu* 18.04 LTS Desktop 上:

      +
      sudo apt-get install virt-viewer
      +
      +
      +
    • +
    • 在 Mint* 19.1 “Cinnamon” Desktop 上:

      +
      sudo apt-get install virt-viewer
      +
      +
      +
    • +
    • 在 Fedora* 30 Workstation 上:

      +
      sudo dnf install virt-viewer
      +
      +
      +
    • +
    +
  4. +
  5. 修改 start_qemu.sh 脚本,增加内存 (-m),添加显卡驱动程序 (-vga) 和 Spice(-spice-usb-device)支持。

    +
    qemu-system-x86_64 \
    +    -enable-kvm \
    +    ${UEFI_BIOS} \
    +    -smp sockets=1,cpus=4,cores=2 -cpu host \
    +    -m 4096 \
    +    -vga qxl \
    +    -nographic \
    +    -spice port=5924,disable-ticketing \
    +    -usb \
    +    -device usb-tablet,bus=usb-bus.0 \
    +    -drive file="$IMAGE",if=virtio,aio=threads,format=raw \
    +    -netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \
    +    -device virtio-net-pci,netdev=mynet0 \
    +    -debugcon file:debug.log -global isa-debugcon.iobase=0x402 $@
    +
    +
    +
  6. +
  7. 由于上一步在 start_qemu.sh 脚本中进行了更改,使用同一 OVMF 文件会导致虚拟机不能正常引导,最后进入 UEFI shell 界面。避免这种情况的最简单方法是删除 OVMF 文件,在重启虚拟机前恢复原始文件。

    +
  8. +
  9. 将虚拟机大小增加 10GB 以适应 GDM 安装。

    +
    qemu-img resize -f raw clear-<version>-kvm.img +10G
    +
    +
    +
  10. +
  11. 重新启动 Clear Linux OS 虚拟机:

    +
    sudo ./start_qemu.sh clear-<version>-kvm.img
    +
    +
    +
  12. +
  13. 确认将在其上开启虚拟机的托管主机的 IP 地址。下一步中用此信息代替 <ip-addr-of-kvm-host>。

    +
    ip a
    +
    +
    +
  14. +
  15. 从本地主机或远程系统上,打开新的终端模拟器窗口,利用 Spice 查看器连接至 Clear Linux OS 虚拟机:

    +
    remote-viewer spice://<ip-address-of-kvm-host>:5924
    +
    +
    +
  16. +
  17. root 用户身份登录 Clear Linux OS 虚拟机。

    +
  18. +
  19. 按照 增加图像的虚拟磁盘大小 中的这些步骤,调整虚拟机的虚拟磁盘分区大小。

    +
  20. +
  21. 将 GDM 添加至 Clear Linux OS 虚拟机:

    +
    swupd bundle-add desktop-autostart
    +
    +
    +
  22. +
  23. 重启 Clear Linux OS 虚拟机以启动 GDM:

    +
    reboot
    +
    +
    +
  24. +
  25. 进行 GDM 开箱体验 (OOBE)。

    +
  26. +
  27. GDM GUI 针对 Clear Linux OS 虚拟机的默认画面比例为 4:3。要改变该比例,请使用 GDM 的 Devices > Displays 设置工具(右上角)。

    +
  28. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/virtualbox-cl-installer.html b/zh_CN/get-started/virtual-machine-install/virtualbox-cl-installer.html new file mode 100644 index 00000000..18ca8c3a --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/virtualbox-cl-installer.html @@ -0,0 +1,1311 @@ + + + + + + + + + + + 在 VirtualBox* 中安装 Clear Linux* OS 虚拟机 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

在 VirtualBox* 中安装 Clear Linux* OS 虚拟机

+

本页说明如何利用 Clear Linux* OS 在 VirtualBox 虚拟机管理程序中创建虚拟机,用作来宾操作系统。本说明为 Clear Linux OS live-server 安装程序创建 Clear Linux OS 虚拟机 (VM) 提供支持。

+ +
+

必备条件

+
    +
  1. 在主机系统上从 EFI/BIOS 启用虚拟化功能,例如 Intel® Virtualization Technology (Intel® VT)。
  2. +
  3. Download and install VirtualBox version 6.0 or greater from +VirtualBox using the VirtualBox Installation Instructions for your +platform.
  4. +
+
+
+

下载并解压缩 Clear Linux OS 安装程序 ISO

+
    +
  1. Downloads 页下载 Clear Linux OS 的文件 clear-<VERSION>-live-server.iso.xz

    +
  2. +
  3. 通过检查文件哈希值和签名,验证所下载映像的完整性。参考 Validate signatures 了解详细步骤。

    +
  4. +
  5. 解压缩下载的映像。

    +
      +
    • On Windows you can use 7zip to extract the file by right-clicking the +file to Extract Here (in the same directory)
    • +
    +
    +7zip extract here command +

    图 1:7zip 的“解压缩到此处”命令

    +
    +
      +
    • Linux 系统:

      +
      xz -d clear-<VERSION>-live-server.iso.xz
      +
      +
      +
    • +
    +
  6. +
  7. 删除最初下载的压缩文件。

    +
  8. +
+
+
+

创建新的 VirtualBox 虚拟机

+

在即将安装 Clear Linux OS 的 VirtualBox Manager 中需要创建新的 VM。VirtualBox 指南中的 Creating Your First Virtual Machine 章节介绍了创建虚拟机的一般说明和使用不同设置的详细信息。

+
    +
  1. 在主机系统上启动 VirtualBox Manager。

    +
  2. +
  3. 点击 新建 按钮创建一个新虚拟机。

    +
  4. +
  5. 选择 专家模式

    +
  6. +
  7. 创建虚拟机 屏幕上,输入以下设置:

    +
      +
    • 名称:选择名称(例如 ClearLinuxOS-VM)。

      +
    • +
    • 类型:Linux

      +
    • +
    • 版本Linux 2.6 / 3.x / 4.x(64 位)

      +
    • +
    • 硬盘Create a virtual hard disk now

      +
    • +
    • 默认内存大小:2048 MB(进行相应调整。)

      +
      +

      注解

      +

      以后如果希望更改分配的 RAM 大小,请关闭虚拟机。返回 Settings > System 并将 基本内存 更改为想要的大小。

      +
      +
    • +
    +
    +Create Virtual Machine +

    图 2:创建虚拟机

    +
    +
  8. +
  9. 点击 创建

    +
  10. +
  11. 创建虚拟硬盘 屏幕上,选择:

    +
      +
    • 文件位置
    • +
    • 文件大小32.00 GB。根据需要调整大小。
    • +
    • 硬盘文件类型VDI (VirtualBox Disk Image)
    • +
    • Storage on physical hard disk:Dynamically allocated
    • +
    +
    +Create Virtual Hard Disk +

    图 3:创建虚拟硬盘

    +
    +
  12. +
  13. 点击 创建

    +

    新的虚拟机将创建完成并出现在 VirtualBox Manager 中。

    +
  14. +
  15. 点击 设置 配置 Clear Linux OS 虚拟机。

    +
  16. +
  17. 在左侧菜单中,导航至 系统 菜单。

    +
  18. +
  19. 主板 标签上,选择 芯片组 菜单,然后选择 ICH9。参见图 4。

    +
    +

    注解

    +

    您可以为虚拟机选择芯片组。查阅 VM VirtualBox User Manual 了解详情。

    +
    +
  20. +
  21. 已启用功能 中,选中以下方框:

    +
      +
    • 启用 I/O APIC
    • +
    • 启用 EFI(仅适用于特殊操作系统)
    • +
    +
    +Settings > System +

    图 4: 设置 > 系统

    +
    +
    +

    注解

    +

    默认情况下,只为新的虚拟机分配 1 个虚拟 CPU。可在“设置”>“系统”>“处理器”中考虑增加分配给虚拟机的虚拟处理器数量,以提高性能。

    +
    +
  22. +
  23. 点击 确定

    +
  24. +
+
+
+

在 VirtualBox 虚拟机上安装 Clear Linux OS。

+

Clear Linux OS 现在已准备好安装。

+
+

挂载安装 ISO

+

Clear Linux OS 安装程序 ISO 必须在虚拟机上作为虚拟 CD-ROM 挂载,然后才能打开虚拟机。

+
    +
  1. 从左边的 ClearLinux-OS 设置 菜单选择 存储

    +
  2. +
  3. 存储设备 中间栏上,点击标记为 的蓝色盘。

    +
  4. +
  5. 属性 菜单点击 光盘驱动器 下拉菜单旁边的蓝色 CD 盘,然后点击 选择虚拟光盘文件…

    +
    +Choose Virtual Optical Disk Drive +

    图 5:选择虚拟光盘驱动器

    +
    +
  6. +
  7. 显示 请选择虚拟光盘文件 后,选择 ISO 文件并点击 打开

    +
    +Mounting an ISO +

    图 6:挂载 ISO

    +
    +
  8. +
  9. 点击 确定 退出,返回主 VirtualBox Manager。

    +
  10. +
+
+
+

利用 live-server 安装程序安装 Clear Linux OS

+
    +
  1. 在 VirtualBox Manager 中,选择您创建的虚拟机,点击 启动

    +
    +Start the installer +

    图 7:启动安装程序

    +
    +
    +

    注解

    +

    要从虚拟机控制台窗口释放鼠标光标,按下键盘右边的 Ctrl 键。

    +
    +
  2. +
  3. 引导管理器中出现 Clear Linux 安装程序 时,选择 回车。不要安装 bundle 文件 desktop-autostart

    +
  4. +
  5. 按照 Install Clear Linux* OS on bare metal with live server 中的步骤,将 Clear Linux OS 安装在虚拟机的虚拟磁盘上。注:

    +
      +
    1. 配置安装介质 中,导航至顶级 VBOX HARDDISK,然后选择 确认
    2. +
    3. 高级选项 ‣ 管理用户 中,创建一个管理员用户。
    4. +
    5. 不要安装 bundle 文件 desktop-autostart
    6. +
    +
  6. +
  7. 完成 Clear Linux OS 安装后,点击 退出

    +
  8. +
  9. 根据提示输入:

    +
    shutdown now
    +
    +
    +
  10. +
+
+
+

卸载 ISO

+

需要卸载 Clear Linux OS 安装程序 ISO,以便从虚拟硬盘引导虚拟机。

+
    +
  1. 返回 VirtualBox Manager。

    +
  2. +
  3. 点击 设置 配置 Clear Linux OS 虚拟机。

    +
  4. +
  5. 从虚拟机 设置 窗口,导航至左侧菜单的 存储 窗格。

    +
  6. +
  7. 存储设备 中间栏上,点击 控制器: IDE 下面标注为 clear-<VERSION>-live-server.iso 的蓝色 CD 盘。

    +
  8. +
  9. From the Attributes column at right, in Optical Drive, +select the blue CD icon beside and click +Remove Disk from Virtual Drive.

    +
    +Remove Disk from Virtual Drive +

    图 8:从虚拟驱动器中取出磁盘

    +
    +
  10. +
  11. 点击 确定 退出 虚拟机设置 菜单,返回主 VirtualBox Manager。

    +
  12. +
+
+
+

安装 VirtualBox Linux Guest Additions

+

Clear Linux OS 利用其 kernel-lts (长期支持) bundle 中的安装脚本为 Linux Guest Additions 驱动程序提供完全的兼容性。

+
    +
  1. 从 VirtualBox Manager 中选择 Clear Linux OS 虚拟机,然后选择 启动

    +
  2. +
  3. 在虚拟机控制台上,以先前创建的管理员用户身份登录。

    +
    +

    注解

    +

    随机会显示一条消息:”A kernel update is available: you may wish to reboot the system.”

    +

    要更新内核,请输入:

    +
    sudo reboot
    +
    +
    +

    初次登录时,请输入管理员用户的密码,然后继续。

    +
    +
  4. +
  5. 查看 uname -r 命令的输出结果,验证安装的内核为 kernel-lts。它的结尾应该为 .lts.lts2018

    +
    uname -r
    +<VERSION>.lts
    +
    +
    +

    如果运行的内核不是 lts:手动安装 LTS 内核,更新引导启动程序,然后再次检查:

    +
    sudo swupd bundle-add kernel-lts
    +clr-boot-manager set-kernel $(basename $(realpath /usr/lib/kernel/default-lts))
    +clr-boot-manager update
    +reboot
    +
    +
    +
  6. +
  7. 移除任何结尾不是 -ltskernel-install 的内核 bundle,简化和避免冲突:

    +
    sudo swupd bundle-list | grep kernel
    +sudo swupd bundle-remove <NON-LTS-KERNEL>
    +
    +
    +
  8. +
  9. 在虚拟机控制台顶级菜单中,点击 设备,然后选择 插入 Guest Additions CD 映像…,在 Clear Linux OS 虚拟机上挂载 VirtualBox 驱动程序安装。

    +
    +Insert Guest Additions CD image +

    图 9:插入 Guest Additions CD 映像

    +
    +
  10. +
  11. 如果出现对话 “VBx_GAs_6.0.8…Would you like to run it?”,选择 取消

    +

    我们提供脚本在 Clear Linux OS 上安装 VirtualBox 驱动程序和修补程序。

    +
  12. +
  13. 打开终端,输入脚本:

    +
    sudo install-vbox-lga
    +
    +
    +
    +

    注解

    +

    成功安装后显示:”Guest Additions installation complete”。如果驱动程序已经安装,不要重复安装。

    +
    +
  14. +
  15. 关闭系统。选择 机器 ‣ ACPI 关机

    +
    +Powering off a VirtualBox VM +

    图 10:关闭 VirtualBox 虚拟机

    +
    +
  16. +
  17. 选择 设置显示

    +
  18. +
  19. 显卡 中,选择 VBoxSVGA,以便动态调整屏幕大小。

    +
    +Remove Disk from Virtual Drive +

    图 11:VirtualBox 硬件加速错误

    +
    +
  20. +
  21. 在 VirtualBox Manager 中,选择 启动

    +
  22. +
  23. 在虚拟机控制台上,登录并确认 VirtualBox 驱动程序已加载。

    +
    lsmod | grep ^vbox
    +
    +
    +

    此时,应该会看到以 vbox 开头的驱动程序(例如 vboxvideo、vboxguest)已加载。

    +
  24. +
  25. 添加 desktop-autostart 获得完整的桌面体验。

    +
    sudo swupd bundle-add desktop-autostart
    +
    +
    +
  26. +
  27. 重启虚拟机,以管理员用户身份登录。

    +
    sudo reboot
    +
    +
    +
  28. +
+

VirtualBox 上运行的 Clear Linux OS 虚拟机准备就绪,可供开发和探索。

+
+
+
+

故障排除

+
    +
  1. 问题: 在 Microsoft* Windows* 操作系统上,尝试开启虚拟机时 VirtualBox 发生错误,出现消息:系统不支持 VT-X/AMD-v 硬件加速。

    +
    +Remove Disk from Virtual Drive +

    图 12:VirtualBox 硬件加速错误

    +
    +

    解决方法: 首先仔细检查 Prerequisites 部分,确保主机系统的 EFI/BIOS 中启用了 经过硬件加速的虚拟化 扩展。

    +

    启用另一个管理程序(如 Hyper-V)后,VirtualBox 应禁用*经过硬件加速的虚拟化*。

    +

    要禁用 Hyper-V,在**管理员:命令提示符或 Powershell** 中执行此命令,然后重启系统:

    +
    bcdedit /set {current} hypervisorlaunchtype off
    +
    +
    +

    要再次启用 Hyper-V,在**管理员:命令提示符或 Powershell** 中执行此命令,然后重启系统:

    +
    bcdedit /set {current} hypervisorlaunchtype Auto
    +
    +
    +
  2. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/vmw-player-preconf.html b/zh_CN/get-started/virtual-machine-install/vmw-player-preconf.html new file mode 100644 index 00000000..57cb1ef5 --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/vmw-player-preconf.html @@ -0,0 +1,1342 @@ + + + + + + + + + + + 运行预配置的 Clear Linux* OS 映像,用作 VMware* Workstation Player 来宾操作系统 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • 开始使用 »
  • + +
  • 运行预配置的 Clear Linux* OS 映像,用作 VMware* Workstation Player 来宾操作系统
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

运行预配置的 Clear Linux* OS 映像,用作 VMware* Workstation Player 来宾操作系统

+

本页说明如何在 VMware Workstation 14 Player 上部署预配置的 Clear Linux OS VMware 映像。

+ +
+

概述

+

VMware Workstation 14 Player 是一个 2 类虚拟机管理程序。它在另一操作系统之上运行,如 Windows* 或 Linux*。利用 VMware ESXi,可以在本地系统上创建、配置、管理和运行 Clear Linux* OS VMs

+
+

注解

+

本文截图采用了 Windows 版 VMware Workstation 14 Player。Linux 版本中的菜单和提示有微小的文字差异。

+
+
+
+

安装 VMware Workstation Player 虚拟机管理程序

+
    +
  1. 在系统 BIOS 中启用 Intel® VTIntel® VT-d

    +
  2. +
  3. VMware Workstation 14 Player 有 Windows 和 Linux 版本。下载您喜欢的版本。

    +
  4. +
  5. 根据您的操作系统,安装下述说明安装。

    +
      +
    • 在支持的 Linux 操作系统上:

      +
        +
      1. 启用 GUI 桌面:

        +
      2. +
      3. 启动终端模拟器。

        +
      4. +
      5. 发出如下命令,按照指引步骤启动安装程序。

        +
        sudo sh ./VMware-Player-[version number].x86_64.bundle
        +
        +
        +
      6. +
      +
    • +
    • 在 Windows 上:

      +
        +
      1. 启动安装程序。
      2. +
      3. 按照安装向导提示操作。
      4. +
      +
    • +
    +
  6. +
+

有关其他帮助,请查看 VMware Workstation Player Documentation

+
+
+

下载最新的 Clear Linux OS VMware 映像

+

image 存储库中获取最新的 Clear Linux OS VMware 映像。查找 clear-[version number]-vmware.vmdk.xz。还可以使用以下命令:

+
curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware)
+
+
+

访问 Clear Linux* OS image types,了解关于所有 Clear Linux OS 映像的其他信息。

+
+

确认 Clear Linux OS 映像的完整性。

+

使用下载的 Clear Linux OS 映像之前,请确认其完整性。本操作消除了由于下载问题导致的罕见映像损坏。为了方便验证,发布的每个 Clear Linux OS 映像均有一个相应的 SHA512 校验和文件,后缀为 -SHA512SUMS

+
    +
  1. 下载与您的 Clear Linux OS 映像 相应的 SHA512 校验和文件。

    +
  2. +
  3. 启动命令提示符。

    +
  4. +
  5. 转到下载映像和校验和文件所在的目录。

    +
  6. +
  7. 利用以下命令获取该映像的 SHA512 校验和:

    +
    CertUtil -hashfile ./clear-[version number]-[image type].[compression type] sha512
    +
    +
    +
  8. +
  9. 手动比较该结果与所下载校验和文件中所示的原始校验和值,确保它们相匹配。

    +
  10. +
+
+
+

解压缩 Clear Linux OS 映像

+

发布的 Clear Linux OS 映像以 GNU zip (.gz) 或 XZ (.xz) 格式压缩。压缩类型取决于目标平台或环境。要解压缩映像,应按照以下步骤操作:

+
    +
  1. 下载并安装 7-Zip

    +
  2. +
  3. 转到下载映像所在的目录,右键点击该映像。

    +
  4. +
  5. 从弹出菜单中选择 7-Zip,然后选择 解压缩到此处,如图 1 所示。

    +
    +7-Zip extract file +

    图 1:Windows 7-Zip 解压缩文件。

    +
    +
  6. +
+
+
+
+

映像类型

+

表 1 列出了当前可用的独立于平台的映像。表 2 列出了当前可用的特定于平台的映像。

+ + ++++ + + + + + + + + + + + + + +
表 1: 独立于平台的 Clear Linux OS 映像的类型
映像类型描述
live-desktop.img 或 live-desktop.iso用于引导启动至 GNOME* 桌面以便预览或安装操作系统的映像。
live-server.img 或 live-server.iso用于引导启动至服务器命令提示符以便预览或安装操作系统的映像。
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
表 2: 特定于平台的 Clear Linux OS 映像的类型
映像类型描述
aws.img适用于 Amazon* AWS* 的映像。
azure.vhd用于 Microsoft* Azure* 云平台的虚拟硬盘。
azure-docker.vhd用于 Microsoft Azure 云平台并预安装 Docker* 的虚拟硬盘。
azure-machine-learning.vhd用于 Microsoft Azure 云平台并安装 machine-learning-basic bundle 的虚拟硬盘。
cloudguest.img安装一般云来宾虚拟机 (VM) 必备组件的映像。
gce.tar拥有 Google Compute Engine (GCE) 特定内核的映像。
hyperv.vhdx适用于 Microsoft Hyper-V* 虚拟机管理程序的虚拟硬盘。包括 optimized kernel for Hyper-V。
kvm.img可利用 start_qemu.sh 引导启动一个简单虚拟机的映像。包括用于虚拟机的 optimized kernel
kvm-legacy.img可利用 BIOS 引导启动一个简单虚拟机的映像,如果使用 start_qemu.sh,请确保删除 -bios 参数。
pxe.tar适用于 PXE 服务器的映像。
vmware.vmdk用于 VMware* 平台包括 Player、Workstation 和 ESXi 的虚拟机硬盘。
+

我们还提供了针对其他操作系统的说明。

+ +
+
+

创建并配置新虚拟机

+
    +
  1. 启动 VMware Workstation Player 应用。

    +
  2. +
  3. 在主屏幕上,点击 创建新虚拟机。见图 1。

    +
    +VMware Workstation 14 Player - Create a new virtual machine +

    图 1:VMware Workstation 14 Player - 创建新虚拟机

    +
    +
  4. +
  5. 欢迎使用“新建虚拟机”向导 屏幕上,选择 稍后安装操作系统 选项。见图 2。

    +
    +VMware Workstation 14 Player - Select install operating system +

    图 2:VMware Workstation 14 Player - 选择稍后安装操作系统。

    +
    +
  6. +
  7. 点击 下一步 按钮。

    +
  8. +
  9. 选择来宾操作系统 屏幕上,将 来宾操作系统 设置为 Linux。见图 3。

    +
    +VMware Workstation 14 Player - Select guest operating system type +

    图 3:VMware Workstation 14 Player - 选择来宾操作系统类型

    +
    +
  10. +
  11. 版本 设置为 其他 Linux 3.x 或更高版本内核 64 位

    +
  12. +
  13. 点击 下一步 按钮。

    +
  14. +
  15. 虚拟机命名 屏幕上,为新虚拟机命名。见图 4。

    +
    +VMware Workstation 14 Player - Name virtual machine +

    图 4:VMware Workstation 14 Player - 虚拟机命名

    +
    +
  16. +
  17. 点击 下一步 按钮。

    +
  18. +
  19. 指定磁盘容量 屏幕上,点击 下一步 按钮。默认磁盘设置保持不变。挂载预配置的 Clear Linux OS VMware 映像时,我们将移除默认虚拟磁盘,用预配置的磁盘来代替。见图 5。

    +
    +VMware Workstation 14 Player - Set disk capacity +

    图 5:VMware Workstation 14 Player - 设置磁盘容量

    +
    +
  20. +
  21. 准备创建虚拟机 屏幕上,点击 定制硬件… 按钮。见图 6。

    +
    +VMware Workstation 14 Player - Customize hardware +

    图 6:VMware Workstation 14 Player - 定制硬件

    +
    +
  22. +
  23. 设备 列表中,选择 处理器。见图 7。

    +
    +VMware Workstation 14 Player - Set virtualization engine option +

    图 7:VMware Workstation 14 Player - 设置虚拟化引擎选项

    +
    +
  24. +
  25. 虚拟化引擎 部分,选中 虚拟化英特尔 VT-x/EPT 或 AMD-V/RVI

    +
  26. +
  27. 如果因不再需要而断开虚拟 CD/DVD (IDE),请在 设备 列表中选择 新 CD/DVD (IDE)。见图 8。

    +
    +VMware Workstation 14 Player - Disconnect CD/DVD (IDE) +

    图 8:VMware Workstation 14 Player - 断开 CD/DVD (IDE)

    +
    +
  28. +
  29. 设备状态 部分,取消选中 开机时连接

    +
  30. +
  31. 点击·关闭 按钮。

    +
  32. +
  33. 点击 完成 按钮。

    +
  34. +
+
+
+

挂载预配置的 Clear Linux OS Vmware 映像

+
    +
  1. 将下载和解压缩的预配置 Clear Linux OS VMware 映像文件 clear-[version number]-basic.vmdk 移动至新建虚拟机所在的目录。

    +
    +

    注解

    +

    根据操作系统不同,通常可以在如下地址找到 VMware 虚拟机文件:

    +
      +
    • Linux 操作系统:/home/username/vmware
    • +
    • Windows:C:UsersusernameDocumentsVirtual Machines
    • +
    +
    +
  2. +
  3. VMware Workstation Player 主屏幕上,选择新创建的虚拟机。见图 9。

    +
    +VMware Workstation 14 Player - Edit virtual machine settings +

    图 9: VMware Workstation 14 Player - 编辑虚拟机设置

    +
    +
  4. +
  5. 点击 编辑虚拟机设置

    +
  6. +
  7. 要移除默认硬盘,在 设备 列表中选择 硬盘 (SCSI)。见图 10.

    +
    +VMware Workstation 14 Player - Remove hard drive +

    图 10:VMware Workstation 14 Player - 移除硬盘

    +
    +
  8. +
  9. 点击 移除 按钮。

    +
  10. +
  11. 要添加新硬盘并挂载预配置的 Clear Linux OS VMware 映像,点击 添加… 按钮。见图 11。

    +
    +VMware Workstation 14 Player - Add new hard drive +

    图 11:VMware Workstation 14 Player - 添加新硬盘

    +
    +
  12. +
  13. 硬盘类型 部分,选择 硬盘

    +
  14. +
  15. 点击 下一步 按钮。

    +
  16. +
  17. 选择您喜欢的 虚拟磁盘类型。见图 12。

    +
    +VMware Workstation 14 Player - Select virtual disk type +

    图 12:VMware Workstation 14 Player - 选择虚拟磁盘类型

    +
    +
  18. +
  19. 选择 使用现有的虚拟磁盘 选项。见图 13。

    +
    +VMware Workstation 14 Player - Use existing virtual disk +

    图 13:VMware Workstation 14 Player - 使用现有虚拟磁盘

    +
    +
  20. +
  21. 点击 浏览 按钮,选择预配置的 Clear Linux OS VMware 映像文件。见图 14。

    +
    +VMware Workstation 14 Player - Select ready-made VMware |CL| +

    图 14:VMware Workstation 14 Player - 选择现成的 VMware Clear Linux OS 映像文件

    +
    +
  22. +
  23. 点击 完成 按钮。

    +
    +

    注解

    +

    要求将现有虚拟磁盘转换为较新的格式时,选择任何一个选项均可。

    +
    +
  24. +
+
+
+

启用 UEFI 引导支持

+

Clear Linux OS needs UEFI support to boot. To enable it, add the +following line to the end of your VM’s .vmx file:

+
firmware = "efi"
+
+
+
+

注解

+

根据操作系统不同,通常可以在如下地址找到 VMware 虚拟机文件:

+
    +
  • Linux 操作系统:/home/username/vmware
  • +
  • Windows:C:\Users\username\Documents\Virtual Machines
  • +
+
+
+
+

开启虚拟机

+

配置上述设置后,开启 Clear Linux OS 虚拟机。

+
    +
  1. VMware Workstation Player 主屏幕上,选择虚拟机。见图 15。

    +
    +VMware Workstation 14 Player - Power on virtual machine +

    图 15:VMware Workstation 14 Player - 开启虚拟机

    +
    +
  2. +
  3. 点击 Play 虚拟机

    +
  4. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/vmw-player.html b/zh_CN/get-started/virtual-machine-install/vmw-player.html new file mode 100644 index 00000000..c1ffb304 --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/vmw-player.html @@ -0,0 +1,1220 @@ + + + + + + + + + + + 安装 Clear Linux* OS 用作 Vmware* Workstation Player 来宾操作系统 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

安装 Clear Linux* OS 用作 Vmware* Workstation Player 来宾操作系统

+

本页解释了如何创建新虚拟机,以及如何利用 VMware Workstation Player 虚拟机管理程序在它上面安装 Clear Linux OS。

+ +
+

概述

+

VMware Workstation Player 是一个 2 类虚拟机管理程序。它运行于 Windows* 或 Linux* 操作系统之上。利用 VMware ESXi,可以在本地系统上创建、配置、管理和运行 Clear Linux* OS VMs

+

VMware 提供一个专为云环境设计的 VMware ESXi 1 类虚拟机管理程序。有关如何在其上安装 Clear Linux OS 用作来宾操作系统的信息,请查看 安装 Clear Linux* OS,用作 VMware* ESXi 来宾操作系统

+
+

注解

+

本文档的截屏显示了 VMware Workstation 15 Player 的 Windows 版本。除了措辞上的微小差异,菜单和提示与其他 Windows 版本以及 Linux 操作系统类似。

+
+

如果您更喜欢使用预配置 Clear Linux OS VMware 映像,请查看我们的 运行预配置的 Clear Linux* OS 映像,用作 VMware* Workstation Player 来宾操作系统 指南。

+
+
+

安装 VMware Workstation Player 虚拟机管理程序

+
    +
  1. 在系统 BIOS 中启用 Intel® VTIntel® VT-d

    +
  2. +
  3. VMware Workstation Player 有 Windows 和 Linux 版本。下载您喜欢的版本。

    +
    +

    注解

    +

    默认情况i下,选择下载意味着您接受该应用程序的最新版本。根据版本不同,命令可能会有所差异。

    +
    +
  4. +
  5. 按照适用于操作系统的说明,安装 VMware Workstation Player:

    +
      +
    • 在支持的 Linux 操作系统上:

      +
        +
      1. 启用 GUI 桌面:

        +
      2. +
      3. 启动终端模拟器。

        +
      4. +
      5. 发出如下命令,按照指引步骤启动安装程序。

        +
        sudo sh ./VMware-Player-[version number].x86_64.bundle
        +
        +
        +
      6. +
      +
    • +
    • 在 Windows 上:

      +
        +
      1. 启动安装程序。
      2. +
      3. 按照安装向导提示操作。
      4. +
      +
    • +
    +
  6. +
+

有关其他帮助,请查看 VMware Workstation Player Documentation

+
+
+

下载最新的 Clear Linux OS 安装程序

+

利用 Clear Linux OS OS Desktop 从 downloads 页面获得最新安装程序。

+

访问 Clear Linux* OS image types,了解关于所有 Clear Linux OS 映像的其他信息。

+

我们还提供关于下载和验证 Clear Linux ISO 的说明。欲了解详情,请参阅 Download, verify, and decompress a Clear Linux* OS image

+
+
+

创建并配置新虚拟机

+
    +
  1. 启动 VMware Workstation Player 应用。

    +
  2. +
  3. 在主屏幕上,点击 创建新虚拟机。见图 1。

    +
    +VMware Workstation Player - Create a new virtual machine +

    图 1:VMware Workstation Player - 创建新虚拟机

    +
    +
  4. +
  5. 欢迎使用“新建虚拟机”向导 屏幕上,选择 安装盘映像文件 (iso) 选项。见图 2。

    +
    +VMware Workstation Player - Select |CL| installer ISO +

    图 2:VMware Workstation Player - 选择 Clear Linux OS 安装程序 ISO

    +
    +
  6. +
  7. 点击 浏览 按钮,选择解压缩的 Clear Linux OS 安装程序 ISO。

    +
  8. +
  9. 点击 下一步 按钮。

    +
  10. +
  11. 选择来宾操作系统 部分,将 来宾操作系统 设置为 Linux。见图 3。

    +
    +VMware Workstation Player - Select guest operating system type +

    图 3:VMware Workstation Player - 选择来宾操作系统类型

    +
    +
  12. +
  13. 版本 设置为 其他 Linux 4.x 或更高版本 64 位内核

    +
  14. +
  15. 点击 下一步 按钮。

    +
  16. +
  17. 虚拟机命名 屏幕上,为新虚拟机命名。见图 4。

    +
    +VMware Workstation Player - Name virtual machine +

    图 4:VMware Workstation Player - 虚拟机命名

    +
    +
  18. +
  19. 点击 下一步 按钮。

    +
  20. +
  21. 指定磁盘容量 屏幕上,设置虚拟机的最大磁盘空间。见图 5。

    +
    +VMware Workstation Player - Set disk capacity +

    图 5:VMware Workstation Player - 设置磁盘容量

    +
    +
    +

    注解

    +

    为获得 Clear Linux OS Desktop 映像的最优性能,我们推荐 32GB 磁盘空间。请查看 建议的最低系统要求 了解详情。

    +
    +
  22. +
  23. 点击 下一步 按钮。

    +
  24. +
  25. 准备创建虚拟机 屏幕上,点击 定制硬件… 按钮。见图 6。

    +
    +VMware Workstation Player - Customize hardware +

    图 6:VMware Workstation Player - 定制硬件

    +
    +
  26. +
  27. 选择 内存,将大小设置为 2GB。见图 7。

    +
    +VMware Workstation Player - Set memory size +

    图 7:VMware Workstation Player - 设置内存大小

    +
    +
    +

    注解

    +

    Clear Linux OS 安装程序 ISO 最少需要 2GB 大小的 RAM。完成安装后,Clear Linux OS 可在只有 128MB 的 RAM 上运行。因此,如果需要,您可以减少内存大小。请查看 建议的最低系统要求 了解详情。

    +
    +
  28. +
  29. 设备 列表中,选择 处理器。见图 8。

    +
    +VMware Workstation Player - Set virtualization engine option +

    图 8:VMware Workstation Player - 设置虚拟化引擎选项

    +
    +
  30. +
  31. 虚拟化引擎 部分,选中 虚拟化英特尔 VT-x/EPT 或 AMD-V/RVI

    +
  32. +
  33. 点击·关闭 按钮。

    +
  34. +
  35. 点击 完成 按钮。

    +
  36. +
+
+
+

将 Clear Linux OS 安装至新虚拟机

+
    +
  1. 选择新创建的虚拟机,点击 Play 虚拟机 按钮。见图 9。

    +
    +VMware Workstation Player - Power on virtual machine +

    图 9:VMware Workstation Player - 开启虚拟机

    +
    +
  2. +
  3. 按照 Install from live image 指南完成 Clear Linux OS 的安装。

    +
  4. +
  5. 完成安装后,重启虚拟机。此操作会重新启动 Clear Linux OS 安装程序。

    +
  6. +
+
+
+

从虚拟机断开 Clear Linux OS 安装程序 ISO

+
    +
  1. 为启用鼠标指针,以便访问 VMware Workstation Player 的菜单,请按下键盘上的 <CTRL> + <ALT>

    +
  2. +
  3. 要断开 CD/DVD 防止它再次引导 Clear Linux OS 安装程序 ISO,请点击 Player 菜单。见图 10。

    +
    +VMware Workstation Player - Edit CD/DVD settings +

    图 10:VMware Workstation Player - 编辑 CD/DVD 设置

    +
    +
  4. +
  5. 转到 可移除设备‣CD/DVD (IDE)‣断开

    +
  6. +
  7. 点击 确定 按钮。

    +
  8. +
+
+
+

启用 UEFI 引导支持

+

Clear Linux OS 需要 UEFI 支持才可以引导。要启用 UEFI:

+
    +
  1. 要关闭虚拟机,点击 Player 菜单。见图 11。

    +
    +VMware Workstation Player - Power off virtual machine +

    图 11:VMware Workstation Player - 关闭虚拟机

    +
    +
  2. +
  3. 转到 电源,选择 关闭来宾

    +
  4. +
  5. 在虚拟机的 .vmx 文件结尾处添加如下代码行:

    +
    firmware = "efi"
    +
    +
    +
    +

    注解

    +

    根据操作系统不同,通常可以在如下地址找到 VMware 虚拟机文件:

    +
      +
    • Linux 操作系统:/home/username/vmware
    • +
    • Windows:C:\Users\username\Documents\Virtual Machines
    • +
    +
    +
  6. +
  7. 配置上述设置后,开启 Clear Linux OS 虚拟机。在 VMware Workstation Player 主屏幕上,选择虚拟机。见图 9。

    +
  8. +
  9. 点击 Play 虚拟机

    +
  10. +
  11. 安装 Open VM Tools。您可能希望在虚拟机上安装 open-vm-tools。Open Virtual Machine Tools (open-vm-tools) 是用于 Linux 来宾操作系统的开源 VMware 执行工具。在 Clear Linux OS 中,您可以利用如下步骤在您的虚拟机中安装该 bundle

    +
    sudo swupd bundle-add os-cloudguest-vmware
    +sudo systemctl enable --now open-vm-tools
    +
    +
    +
  12. +
+

详情可访问网站 VMWare Tools Product Documentation

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/vmware-esxi-install-cl.html b/zh_CN/get-started/virtual-machine-install/vmware-esxi-install-cl.html new file mode 100644 index 00000000..1abfd1d0 --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/vmware-esxi-install-cl.html @@ -0,0 +1,1247 @@ + + + + + + + + + + + 安装 Clear Linux* OS,用作 VMware* ESXi 来宾操作系统 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

安装 Clear Linux* OS,用作 VMware* ESXi 来宾操作系统

+

本页说明如何创建新的 VM 以及如何在运行 VMware ESXi 6.5 的新虚拟机上手动安装 Clear Linux* OS。

+ +
+

概述

+

VMware ESXi 是一个 1 类裸机虚拟机管理程序,可直接在服务器硬件上运行。利用 VMware ESXi,可以在云端创建、配置、管理和运行 Clear Linux OS 虚拟机。

+

安装期间,在新的虚拟机上手动安装 Clear Linux OS 提高了配置灵活性。例如,备用磁盘空间、分区数量、预安装 bundle 等。

+

如果喜欢使用预配置的 Clear Linux OS VMware 映像,可参阅 Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS

+
+

注解

+

VMware 还提供一个适用于桌面环境的 2 类虚拟机管理程序,名为 VMware Workstation Player。请参阅 运行预配置的 Clear Linux* OS 映像,用作 VMware* Workstation Player 来宾操作系统安装 Clear Linux* OS 用作 Vmware* Workstation Player 来宾操作系统 了解更多信息。

+

访问 Clear Linux* OS image types 了解所有可用映像的详情。

+
+
+
+

下载最新的 Clear Linux OS 安装程序 ISO

+

image 存储库中获取最新的 Clear Linux OS 安装程序 ISO。寻找 clear-[version number]-installer.iso.xz

+

我们还提供关于下载和验证 Clear Linux ISO 的说明。欲了解详情,请参阅 Download, verify, and decompress a Clear Linux* OS image

+
+
+

将 Clear Linux OS 安装程序 ISO 上传至 VMware 服务器

+
    +
  1. 连接 VMware 服务器,登录拥有充分权限的帐户以创建和管理虚拟机。

    +
  2. +
  3. 浏览器 窗口中,选择 存储。见图 1。

    +
  4. +
  5. 数据存储 标签下,点击 数据存储浏览器 按钮。

    +
    +VMware ESXi - Navigator > Storage +

    图 1:VMware ESXi - 浏览器 > 存储

    +
    +
  6. +
  7. 点击 创建目录 按钮并命名目录 ISOs。见图 2。

    +
    +VMware ESXi - Datastore > Create directory +

    图 2:VMware ESXi - 数据存储 > 创建目录

    +
    +
  8. +
  9. 选择新建目录,点击 上传 按钮。见图 3。

    +
    +VMware ESXi - Datastore > Upload ISO +

    图 3:VMware ESXi - 数据存储 > 上传 ISO

    +
    +
  10. +
  11. 选择解压缩的 Clear Linux OS 安装程序 ISO 文件 clear-[version number]-installer.iso 并将其上传。

    +
  12. +
+
+
+

创建并配置新虚拟机

+

本节中,您会创建新虚拟机,配置基本参数,如驱动器大小、CPU 数量、内存大小,然后挂载 Clear Linux OS 安装程序 ISO。

+
    +
  1. 浏览器 窗口中,选择 虚拟机。见图 4。

    +
  2. +
  3. 在右侧窗口中,点击 创建 / 注册虚拟机 按钮。

    +
    +VMware ESXi - Navigator > Virtual Machines +

    图 4:VMware ESXi - 浏览器 > 虚拟机

    +
    +
  4. +
  5. 选择创建类型 步骤:

    +
      +
    1. 选择 创建新虚拟机 选项。见图 5。

      +
    2. +
    3. 点击 下一步 按钮。

      +
      +VMware ESXi - Create a new virtual machine +

      图 5:VMware ESXi - 创建新虚拟机

      +
      +
    4. +
    +
  6. +
  7. 选择名称和来宾操作系统 步骤:

    +
      +
    1. 名称 字段中为新虚拟机命名 见图 6。

      +
    2. +
    3. 兼容性 选项设置为 ESXi 6.5 虚拟机

      +
    4. +
    5. 来宾操作系统系列 选项设置为 Linux

      +
    6. +
    7. 来宾操作系统版本 选项设置为 其他 3.x 或更高 Linux 版本(64 位)

      +
    8. +
    9. 点击 下一步 按钮。

      +
      +VMware ESXi - Give a name and select guest OS type +

      图 6:VMware ESXi - 命名并选择来宾操作系统类型

      +
      +
    10. +
    +
  8. +
  9. 选择存储 步骤:

    +
      +
    1. 接受默认选项。
    2. +
    3. 点击 下一步 按钮。
    4. +
    +
  10. +
  11. 定制设置 步骤:

    +
      +
    1. 点击 虚拟硬件 按钮。见图 7。

      +
    2. +
    3. 展开 CPU 设置,选中 在来宾操作系统中显示经过硬件辅助实现的虚拟化功能 启用 硬件虚拟化

      +
      +VMware ESXi - Enable hardware virtualization +

      图 7:VMware ESXi - 启用硬件虚拟化

      +
      +
    4. +
    5. 内存 大小设置为 2048MB (2GB)。见图 8。

      +
      +VMware ESXi - Set memory size +

      图 8:VMware ESXi - 设置内存大小

      +
      +
      +

      注解

      +

      Clear Linux OS 安装程序 ISO 需要至少 2GB 的 RAM 才能正常运行。如果需要,可以在安装完成后减少内存,因为 Clear Linux OS 最小安装可以在仅有 128MB RAM 的情况下运行。请查看 建议的最低系统要求 了解详情。

      +
      +
    6. +
    7. 硬盘 1 设置为所需容量。见图 9。

      +
      +VMware ESXi - Set hard disk size +

      图 9:VMware ESXi - 设置硬盘大小

      +
      +
      +

      注解

      +

      Clear Linux OS 最小安装可在 600MB 的驱动器空间中存储。请查看 建议的最低系统要求 了解详情。

      +
      +
    8. +
    9. 挂载 Clear Linux OS 安装程序 ISO。对于 CD/DVD 驱动器 1 设置,点击其右侧下拉列表,选择 数据存储 ISO 文件 选项。然后,选择此前上传至 VMware 服务器的 Clear Linux OS 安装程序 ISO clear-[version number]-installer.iso。见图 10。

      +
      +VMware ESXi - Set CD/DVD to boot installer ISO +

      图 10:VMware ESXi - 设置 CD/DVD 引导安装程序 ISO

      +
      +
    10. +
    +
  12. +
  13. 点击 下一步 按钮。

    +
  14. +
  15. 点击 完成 按钮。

    +
  16. +
+
+
+

将 Clear Linux OS 安装至新虚拟机

+
    +
  1. 开启虚拟机。

    +
      +
    1. 浏览器 窗口中,选择 虚拟机。见图 11。

      +
    2. +
    3. 在右侧窗口中,选择新创建的虚拟机。

      +
    4. +
    5. 点击 开机 按钮。

      +
    6. +
    7. 点击代表虚拟机的图标,显示虚拟机,将虚拟机窗口最大化。

      +
      +VMware ESXi - Navigator > Virtual Machines > Power on VM +

      图 11:VMware ESXi - 浏览器 > 虚拟机 > 开启虚拟机

      +
      +
    8. +
    +
  2. +
  3. 按照 Install from live image 指南完成 Clear Linux OS 的安装。

    +
  4. +
  5. 安装完成后,按照 Clear Linux OS 说明重启。此操作会再次重启安装程序。

    +
  6. +
+
+
+

重新配置虚拟机设置,以引导新安装的 Clear Linux OS

+

利用安装程序 ISO 安装 Clear Linux OS 后,必须卸载安装程序 ISO,防止再次运行。而且,为了引导新安装的 Clear Linux OS,必须启用 UEFI 支持。

+
    +
  1. 关闭虚拟机。

    +
      +
    1. 点击 操作 按钮(按钮位于虚拟机窗口的右上角),转到 电源 设置,然后选择 关机 选项。见图 12。

      +
      +VMware ESXi - Actions > Power off +

      图 12:VMware ESXi - 操作 > 关闭

      +
      +
    2. +
    +
  2. +
  3. 编辑虚拟机设置。

    +
      +
    1. 再次点击 操作`按钮,选择 :guilabel:`编辑设置。见图 13。

      +
      +VMware ESXi - Actions > Edit settings +

      图 13:VMware ESXi - 操作 > 编辑设置

      +
      +
    2. +
    +
  4. +
  5. 断开 CD/DVD,防止它再次引导 Clear Linux OS 安装程序 ISO。

    +
      +
    1. 点击 虚拟硬件 按钮。见图 14。

      +
    2. +
    3. 对于 CD/DVD 驱动器 1 设置,取消选中 连接 复选框。

      +
      +VMware ESXi - Disconnect the CD/DVD drive +

      图 14:VMware ESXi - 断开 CD/DVD 驱动器

      +
      +
    4. +
    +
  6. +
  7. Clear Linux OS 需要 UEFI 支持才可以引导。请予以启用。

    +
      +
    1. 点击 虚拟机选项 按钮。见图 15。

      +
    2. +
    3. 展开 引导选项 设置。

      +
    4. +
    5. 对于 固件 设置,点击其右侧的下拉列表,选择 EFI 选项。

      +
      +VMware ESXi - Set boot firmware to EFI +

      图 15:VMware ESXi - 将引导固件设置为 EFI

      +
      +
    6. +
    +
  8. +
  9. 点击 保存 按钮。

    +
  10. +
+
+
+

开启虚拟机,引导 Clear Linux OS

+

配置上述设置后,开启虚拟机。

+
    +
  1. 浏览器 窗口中,选择 虚拟机。见图 16。

    +
  2. +
  3. 在右侧窗口,选择虚拟机。

    +
  4. +
  5. 点击 开机 按钮。

    +
  6. +
  7. 点击代表虚拟机的图标,显示虚拟机,将虚拟机窗口最大化。

    +
    +VMware ESXi - Navigator > Virtual Machines > Power on VM +

    图 16:VMware ESXi - 浏览器 > 虚拟机 > 开启虚拟机

    +
    +
  8. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.html b/zh_CN/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.html new file mode 100644 index 00000000..91103bd6 --- /dev/null +++ b/zh_CN/get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.html @@ -0,0 +1,1215 @@ + + + + + + + + + + + Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS

+

本页说明如何在 VMware ESXi 6.5 主机上部署预配置的 Clear Linux OS VMware VM 映像。

+ +
+

概述

+

VMware ESXi 是一个 1 类裸机虚拟机管理程序,可直接在服务器硬件上运行。利用 VMware ESXi,可以大规模创建、配置、管理和运行 Clear Linux* OS 虚拟机。

+

我们提供可在 VMware ESXi 6.5 主机上运行的 Clear Linux OS VMware 映像。

+

如果喜欢手动安装,请参阅 安装 Clear Linux* OS,用作 VMware* ESXi 来宾操作系统

+
+

注解

+

VMware 还提供一个适用于桌面环境的 2 类虚拟机管理程序,名为 VMware Workstation Player。请参阅 运行预配置的 Clear Linux* OS 映像,用作 VMware* Workstation Player 来宾操作系统安装 Clear Linux* OS 用作 Vmware* Workstation Player 来宾操作系统 了解更多信息。

+
+
+
+

下载最新的 Clear Linux OS VMware 映像

+

image 存储库中获取最新的 Clear Linux OS VMware 预构建映像。查找 clear-[version number]-vmware.vmdk.xz。还可以使用以下命令:

+
curl -O https://cdn.download.clearlinux.org/image/$(curl https://cdn.download.clearlinux.org/image/latest-images | grep vmware)
+
+
+

访问 Clear Linux* OS image types,了解关于所有 Clear Linux OS 映像的其他信息。

+

我们还提供关于下载和验证 Clear Linux ISO 的说明。欲了解详情,请参阅 Download, verify, and decompress a Clear Linux* OS image

+
+
+

将 Clear Linux OS 映像上传至 VMware 服务器

+

在本地系统下载并解压缩 Clear Linux OS VMware 预构建映像后,必须将其上传至 VMware ESXi 服务器上的数据存储。

+

有关本节中的步骤,还可以参考 VMware 文档 Using Datastore File Browser in the VMware Host Client

+
    +
  1. 连接 VMware ESXi 服务器,登录拥有充分权限的帐户,以创建和管理虚拟机。

    +
  2. +
  3. 在左侧的 浏览器 窗口中,选择 存储。见图 1

    +
  4. +
  5. 数据存储 标签下,点击 数据存储浏览器 按钮。

    +
    +VMware ESXi - Navigator > Storage +

    图 1:VMware ESXi - 浏览器 > 存储

    +
    +
  6. +
  7. 点击 创建目录 按钮,将目录命名为 Clear Linux VM。见图 2。

    +
    +VMware ESXi - Datastore > Create directory +

    图 2:VMware ESXi - 数据存储 > 创建目录

    +
    +
  8. +
  9. 选择新建目录,点击 上传 按钮。见图 3。

    +
    +VMware ESXi - Datastore > Upload VMware image +

    图 3:VMware ESXi - 数据存储 > 上传 VMware 映像

    +
    +
  10. +
  11. 选择解压缩的 Clear Linux OS Vmware 映像文件 clear-[version number]-vmware.vmdk 并上传。

    +
  12. +
+
+
+

将 Clear Linux OS 映像转换为 ESXi 支持的格式。

+

Once the Clear Linux OS VMware prebuilt image has been uploaded to the VMware ESXi +datastore, it must be converted to a format for usable with VMware’s ESXi +hypervisor.

+

有关本节中的步骤,还可以参考 VMware 文档 Cloning and converting virtual machine disks with vmkfstools

+
    +
  1. 通过 SSH 连接到 vSphere Management Assistant 设备,利用 vSphere CLI 管理 ESXi 主机或连接到 vSphere 主机托管。

    +
    +

    注解

    +

    如果没有配置或可用的 vMA 设备或 vCLI,则可以按照 在 VMware 主机客户端启用 Secure Shell (SSH) 中所述步骤直接在 ESXi 主机上临时启用 SSH。

    +

    作为最佳安全实践,务必按照本节中的步骤操作之后禁用 SSH 访问。

    +
    +
  2. +
  3. 找出上传的映像,该映像通常位于 /vmfs/volumes/datastore1

    +
  4. +
  5. 使用 vmkfstools 命令进行转换,如下所示:

    +
    vmkfstools -i clear-[version number]-vmware.vmdk -d zeroedthick clear-[version number]-esxi.vmdk
    +
    +
    +

    由此应产生两个文件:

    +
      +
    • clear-[version number]-esxi-flat.vmdk
    • +
    • clear-[version number]-esxi.vmdk
    • +
    +

    clear-[version number]-esxi.vmdk 文件会在下一节创建新虚拟机时用到。

    +
  6. +
+
+
+

创建并配置新虚拟机

+

本节中,您会创建新虚拟机,配置基本参数,如 CPU 数量、内存大小,然后挂载转换后的 Clear Linux OS VMware 映像。而且,为了引导 Clear Linux OS,必须启用 UEFI 支持。

+
    +
  1. 浏览器 窗口中,选择 虚拟机。见图 4。

    +
  2. +
  3. 在右侧窗口中,点击 创建 / 注册虚拟机 按钮。

    +
    +VMware ESXi - Navigator > Virtual Machines +

    图 4:VMware ESXi - 浏览器 > 虚拟机

    +
    +
  4. +
  5. 选择创建类型 步骤:

    +
      +
    1. 选择 创建新虚拟机 选项。见图 5。
    2. +
    3. 点击 下一步 按钮。
    4. +
    +
    +VMware ESXi - Create a new virtual machine +

    图 5:VMware ESXi - 创建新虚拟机

    +
    +
  6. +
  7. 选择名称和来宾操作系统 步骤:

    +
  8. +
  9. 名称 字段中为新虚拟机命名 见图 6。

    +
  10. +
  11. 兼容性 选项设置为 ESXi 6.5 虚拟机

    +
  12. +
  13. 来宾操作系统系列 选项设置为 Linux

    +
  14. +
  15. 来宾操作系统版本 选项设置为 其他 3.x 或更高 Linux 版本(64 位)

    +
  16. +
  17. 点击 下一步 按钮。

    +
    +VMware ESXi - Give a name and select guest OS type +

    图 6:VMware ESXi - 命名并选择来宾操作系统类型

    +
    +
  18. +
  19. 选择存储 步骤:

    +
      +
    1. 接受默认选项。
    2. +
    3. 点击 下一步 按钮。
    4. +
    +
  20. +
  21. 定制设置 步骤:

    +
      +
    1. 点击 虚拟硬件 按钮。见图 7。
    2. +
    3. 展开 CPU 设置,选中 在来宾操作系统中显示经过硬件辅助实现的虚拟化功能 启用 硬件虚拟化
    4. +
    +
    +VMware ESXi - Enable hardware virtualization +

    图 7:VMware ESXi - 启用硬件虚拟化

    +
    +
      +
    1. 点击右侧的 X 图标,移除默认 硬盘 1 设置。见图 8。
    2. +
    +
    +VMware ESXi - Remove hard drive +

    图 8:VMware ESXi - 移除硬盘

    +
    +
      +
    1. 由于要使用预配置映像,所以不再需要 CD/DVD 驱动器 1 设置。取消选中 连接 复选框禁用该设置。见图 9。
    2. +
    +
    +VMware ESXi - Disconnect the CD/DVD drive +

    图 9:VMware ESXi - 断开 CD/DVD 驱动器

    +
    +
      +
    1. 挂载 clear-[version number]-esxi.vmdk 文件。该文件从预配置的 Clear Linux OS VMware 映像转换而来。
        +
      1. 点击 添加硬盘 按钮,选择 现有硬盘驱动器 选项。见图 10。
      2. +
      +
    2. +
    +
    +VMware ESXi - Add an existing hard drive +

    图 10: VMware ESXi - 添加现有硬盘

    +
    +
      +
    1. 选择已转换的 clear-[version number]-esxi.vmdk 文件。不要使用最初未转换的 clear-[version number]-vmware.vmdk 文件。见图 11。
    2. +
    +
    +
    +
    +VMware ESXi - Select the converted `vmdk` file +

    图 11:VMware ESXi - 选择已转换的 clear-[version number]-esxi.vmdk 文件

    +
    +
  22. +
  23. Clear Linux OS 需要 UEFI 支持才可以引导。启用 UEFI 引导支持。

    +
      +
    1. 点击 虚拟机选项 按钮。见图 12。
    2. +
    3. 展开 引导选项 设置。
    4. +
    5. 对于 固件 设置,点击其右侧的下拉列表,选择 EFI 选项。
    6. +
    +
    +VMware ESXi - Set boot firmware to EFI +

    图 12:VMware ESXi - 将引导固件设置为 EFI

    +
    +
  24. +
  25. 点击 保存 按钮。

    +
  26. +
  27. 点击 下一步 按钮。

    +
  28. +
  29. 点击 完成 按钮。

    +
  30. +
+
+
+

开启虚拟机,引导 Clear Linux OS

+

配置上述设置后,开启虚拟机。

+
    +
  1. 浏览器 窗口中,选择 虚拟机。见图 13。

    +
  2. +
  3. 在右侧窗口中,选择新创建的虚拟机。

    +
  4. +
  5. 点击 开机 按钮。

    +
  6. +
  7. 点击代表虚拟机的图标,显示虚拟机,将虚拟机窗口最大化。

    +
    +VMware ESXi - Navigator > Virtual Machines > Power on VM +

    图 13:VMware ESXi - 浏览器 > 虚拟机 > 开启虚拟机

    +
    +
  8. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/autoproxy.html b/zh_CN/guides/clear/autoproxy.html new file mode 100644 index 00000000..17bbf140 --- /dev/null +++ b/zh_CN/guides/clear/autoproxy.html @@ -0,0 +1,1118 @@ + + + + + + + + + + + Autoproxy — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Autoproxy

+

Autoproxy is provided to enable Clear Linux* OS to work smoothly behind a +corporate proxy.

+ +
+

Description

+

Autoproxy tries to detect a Proxy Auto-Config (PAC) script and use it to +automatically resolve the proxy needed for a given connection. With +Autoproxy, you can use Clear Linux OS inside any proxy environment without having to +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 require manual configuration of +proxies to perform the most mundane tasks, such as cloning a repo or checking +for updates. With Clear Linux OS, all of the work is done behind the scenes to +effortlessly use your network and have connections “just work”.

+

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* +distributions with a few minor additions and modifications. We leveraged the +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 +parse it.

+
+../../_images/autoproxy_0.png +

Figure 1: Autoproxy Flow

+
+

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 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.

+
+

Troubleshooting

+

Autoproxy allows Clear Linux OS to operate seamlessly behind a proxy +because swupd and other Clear Linux OS tools are implemented on +top of libcurl. Tools that do not use libcurl, like git, must +be configured independently.

+

If you are familiar with PAC files and WPAD, you can use +pacdiscovery and FindProxyForURL to +troubleshoot problems with autproxy.

+
+

注解

+

Learn more about WPAD, PAC files, and PAC functions at findproxyforurl.

+
+

Run pacdiscovery with no arguments to indicate

+
    +
  1. if there is a problem resolving the WPAD host name resolution:

    +
    pacdiscovery
    +
    +
    +
    failed getaddrinfo: No address associated with hostname
    +Unable to find wpad host
    +
    +
    +
  2. +
  3. or if the pacrunner service is disabled (masked).

    +
    pacdiscovery
    +
    +
    +
    PAC url: http://autoproxy.your.domain.com/wpad.dat
    +Failed to create proxy config: Unit pacrunner.service is masked.
    +
    +
    +
  4. +
+

Unmask the pacrunner service by running:

+
systemctl unmask pacrunner.service
+
+
+

FindProxyForURL with busctl can also indicate if the +pacrunner.service is masked.

+
busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
+
+
+
FindProxyForURL ss "http://www.google.com" "google.com"
+Unit pacrunner.service is masked.
+dig wpad, dig wpad.<domain>
+
+
+

FindProxyForURL returns the URL and port of the proxy server when +an external URL and host are provided as arguments.

+
busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
+
+
+
FindProxyForURL ss "http://www.google.com" "google.com"
+s "PROXY proxy.your.domain.com:<port>"
+
+
+

If a proxy server is not avialable, or if pacrunner is running +without a PAC file, FindProxyForURL will return “DIRECT”.

+
busctl call org.pacrunner /org/pacrunner/client org.pacrunner.Client
+
+
+
FindProxyForURL ss "http://www.google.com" "google.com"
+s "DIRECT"
+
+
+

Once pacdiscovery is able to look up WPAD, restart the +pacrunner service:

+
systemctl stop pacrunner
+systemctl restart pacdiscovery
+
+
+
+

注解

+

A “domain” or “search” entry in /etc/resolv.conf is required +for short name lookups to resolve. The resolv.conf man page has +additional details.

+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/autospec.html b/zh_CN/guides/clear/autospec.html new file mode 100644 index 00000000..26306854 --- /dev/null +++ b/zh_CN/guides/clear/autospec.html @@ -0,0 +1,1443 @@ + + + + + + + + + + + autospec — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

autospec

+

autospec is a tool used to assist with the automated creation and maintenance of +RPM packaging in Clear Linux* OS. Where a standard RPM build process using +rpmbuild requires a tarball and .spec file to start, autospec +requires only a tarball and package name to start.

+ +
+

Description

+

The autospec tool attempts to infer the requirements of the .spec file +by analyzing the source code and Makefile information. It +continuously runs updated builds based on new information discovered from build +failures until it has a complete and valid .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 +additional information on using mock.

+

For a general understanding of how an RPM works, visit +the rpm website or the RPM Packaging Guide .

+
+
+

How it works

+

Learn the autospec tool set up and process.

+ +
+

Prerequisites

+

The setup for building source in Clear Linux OS must be completed before using the +autospec tool.

+

Refer to Setup environment to build source for instructions on completing +the setup.

+
+
+

Create an RPM

+

The basic autospec process is described in the following steps:

+
    +
  1. The make autospec command generates a .spec file based on +the analysis of code and existing control files.

    +

    Any control files should be located in the same directory as the resulting +.spec file.

    +

    View the autospec README for more information on control files.

    +
  2. +
  3. autospec creates a build root with mock config.

    +
  4. +
  5. autospec attempts to build an RPM from the generated .spec.

    +
  6. +
  7. autospec detects any missed declarations in the .spec.

    +
  8. +
  9. If build errors occur, autospec scans the build log to try to detect +the root cause.

    +
  10. +
  11. If autospec detects the root cause and knows how to continue, it restarts +the build automatically at step 1 with updated build instructions.

    +
  12. +
  13. 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 +control files.

    +

    The user resumes the process at step 1 after errors are resolved.

    +

    If a binary dependency doesn’t exist in Clear Linux OS, you must build it +before running autospec again.

    +
  14. +
+

Following these steps, autospec continues to rebuild the package, based on +new information discovered from build failures, until it has a valid +.spec. If no build errors occur, RPM packages are successfully built.

+
+
+
+

Examples

+

Complete Setup environment to build source before using these examples.

+ +
+

Example 1: Build RPM with an existing spec file

+

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.

+
    +
  1. Navigate to the autospec workspace and clone the dmidecode package:

    +
    cd ~/clearlinux
    +make clone_dmidecode
    +
    +
    +
    +

    注解

    +

    You can clone all package repos at once using the following command:

    +
    make [-j NUM] clone-packages
    +
    +
    +

    The optional NUM is the number of threads to use.

    +

    For a list of available packages, view the +~/clearlinux/projects/common/packages file.

    +
    +
  2. +
  3. Navigate to the local copy of the dmidecode package and build it:

    +
    cd ~/clearlinux/packages/dmidecode/
    +make build
    +
    +
    +
  4. +
  5. The resulting RPMs are in ./rpms. Build logs and additional RPMs are +in ./results.

    +
  6. +
+
+
+

Example 2: Build a new RPM

+

This example shows how to build a new RPM with no spec file. The example will +create a simple helloclear RPM.

+
    +
  1. Navigate to the autospec workspace and build the helloclear RPM. The +Makefile provides a make autospecnew that can +automatically generate an RPM package using the autospec tool. You must pass +the URL to the source tarball and the NAME of the RPM you wish to create:

    +
    cd ~/clearlinux
    +make autospecnew URL="https://github.com/clearlinux/helloclear/archive/helloclear-v1.0.tar.gz" NAME="helloclear"
    +
    +
    +

    The resulting RPMs are in ./packages/helloclear/rpms. Build logs and +additional RPMs are in ./packages/helloclear/results.

    +
  2. +
+
+
+

Example 3: Generate a new spec file with a pre-defined package

+

This example shows how to modify an existing package to create a custom RPM. In +this example you will make a simple change to the dmidecode package and +rebuild the package.

+
    +
  1. Navigate to the autospec workspace and clone the dmidecode package:

    +
    cd ~/clearlinux
    +make clone_dmidecode
    +
    +
    +
  2. +
  3. Navigate into the dmidecode directory:

    +
    cd packages/dmidecode
    +
    +
    +
  4. +
  5. Open the excludes file with an editor and add these lines:

    +
    /usr/bin/biosdecode
    +/usr/bin/ownership
    +/usr/bin/vpddecode
    +/usr/share/man/man8/biosdecode.8
    +/usr/share/man/man8/ownership.8
    +/usr/share/man/man8/vpddecode.8
    +
    +
    +
    +

    注解

    +

    These files aren’t needed by dmidecode, so we can remove them without +any issues.

    +
    +
  6. +
  7. In the dmidecode directory, build the modified dmidecode package:

    +
    make autospec
    +
    +
    +
  8. +
  9. The resulting RPMs are in ./rpms. Logs are in ./results.

    +
  10. +
+
+
+

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 so autospec can complete a successful build.

+
    +
  1. Navigate to the autospec workspace:

    +
    cd ~/clearlinux
    +
    +
    +
  2. +
  3. If you have not already, clone all upstream package repos:

    +
    make [-j NUM] clone-packages
    +
    +
    +

    The optional NUM is the number of threads to use.

    +
    +

    注解

    +

    In a later step of this example, we will search the cloned package repos +for a missing dependency.

    +
    +
  4. +
  5. Build the opae-sdk RPM:

    +
    make autospecnew URL="https://github.com/OPAE/opae-sdk/archive/0.13.0.tar.gz" NAME="opae-sdk"
    +
    +
    +

    This results in an error for a missing license file:

    +
    [FATAL]    Cannot find any license or opae-sdk.license file!
    +
    +
    +
  6. +
  7. Navigate to the package with build failures:

    +
    cd packages/opae-sdk
    +
    +
    +
  8. +
  9. 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:

    +
    echo "BSD-3-Clause MIT" > opae-sdk.license
    +
    +
    +
  10. +
  11. Run autospec again:

    +
    make autospec
    +
    +
    +

    This results in a generic error:

    +
    [FATAL]    Build failed, aborting
    +
    +
    +
  12. +
  13. Open the build log to view the error details:

    +
    cat ./results/build.log
    +
    +
    +

    The build log contains details for the specific failures. In this +instance, there are missing dependencies:

    +
    CMake Error: The following variables are used in this project, but they are set to NOTFOUND.  Please set them or make sure they are set and tested correctly in the CMake files:
    +CJSON_LIBRARY
    +   linked by target "opae-c++-utils" in directory /builddir/build/BUILD/opae-sdk-0.13.0/tools/c++utilslib
    +json-c_LIBRARIES
    +   linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae
    +libuuid_LIBRARIES
    +   linked by target "opae-c" in directory /builddir/build/BUILD/opae-sdk-0.13.0/libopae
    +
    +
    +
  14. +
  15. Search the spec files of upstream Clear Linux OS packages to see if the json-c library +is available. In this case, it does exist and we’ll add the json-c ‘dev’ +package into the buildreq_add:

    +
    grep 'json-c\.so$' ~/clearlinux/packages/*/*.spec
    +echo "json-c-dev" >> buildreq_add
    +
    +
    +
    +

    注解

    +

    This search step works only if the user cloned all of the upstream package +repos. In this example, upstream package repos were cloned in a previous +step.

    +
    +
  16. +
  17. Search the spec files of upstream Clear Linux OS packages to see if the libuuid library +is available. In this case, it exists in the util-linux package, so we’ll add +util-linux-dev package into the buildreq_add:

    +
    grep 'libuuid\.so$' ~/clearlinux/packages/*/*.spec
    +echo "util-linux-dev" >> buildreq_add
    +
    +
    +
  18. +
  19. Run autospec again and find the successfully-generated RPMs in the rpms +directory:

    +
    make autospec
    +
    +
    +
  20. +
+
+

注解

+

If you need a dependency that does not exist in the Clear Linux OS repo, you must first +build it manually (see Example 2: Build a new RPM), then add the repo so +that autospec knows the package exists. For example:

+
cd ~/clearlinux/packages/<package-name>
+make repoadd
+make repostatus
+
+
+

You only need to add the dependency to the buildreq_add control file +if autospec is not able to automatically find the correct dependency on its +own.

+
+
+
+
+

Test packaged software

+

After software has been packaged with autospec, the resulting RPMs can be +tested for functionality before being integrated and deployed into a Clear Linux OS +image with the Mixer tool.

+

The Clear Linux OS development tooling offers two ways to quickly test autospec +generated RPMs.

+
+

注解

+

The methods outlined below should only be used for temporary testing on +development systems.

+
+
+

Test in a Clear Linux OS virtual machine

+

The Clear Linux OS development tooling includes a method to install RPMs into a Clear Linux OS +virtual machine running on the KVM hypervisor. Using a VM allows testing in a completely isolated environment.

+

To test an autospec-created package inside a VM:

+
    +
  1. Download the Clear Linux OS KVM image into the ~/clearlinux directory as +clear.img. The location and name clear.img.xz is important +for the tooling to work:

    +
    cd ~/clearlinux
    +curl -o clear.img.xz https://download.clearlinux.org/image/$(curl https://download.clearlinux.org/image/latest-images | grep '[0-9]'-kvm)
    +
    +
    +
  2. +
  3. Extract the downloaded Clear Linux OS KVM image:

    +
    unxz -v clear.img.xz
    +
    +
    +
  4. +
  5. Copy the QEMU start script and virtual firmware needed for KVM into the +~/clearlinux directory:

    +
    cp ~/clearlinux/projects/common/start_qemu.sh .
    +cp /usr/share/qemu/OVMF.fd .
    +
    +
    +
  6. +
  7. Run make install from the package’s autospec directory. The +make install command mounts the downloaded Clear Linux OS KVM image and +installs the autospec-created RPM into it:

    +
    cd ~/clearlinux/packages/<package-name>
    +make install
    +
    +
    +

    The code that makes this possible can be viewed by searching for the +install: target in the Makefile.common file on GitHub.

    +
  8. +
  9. Return to the ~/clearlinux directory and start the Clear Linux OS VM:

    +
    cd ~/clearlinux/
    +sudo ./start_qemu.sh clear.img
    +
    +
    +
  10. +
  11. A new Clear Linux OS VM will launch in the console. Log into the VM as root and set +a new pasword for the VM.

    +
  12. +
  13. Check that the software is installed in the Clear Linux OS VM as expected and perform +any relevant tests.

    +
  14. +
  15. After testing has been completed, the Clear Linux OS VM can be powered off and +deleted:

    +
    poweroff
    +rm clear.img
    +
    +
    +
  16. +
+
+
+

Test directly on a development machine

+

The Clear Linux OS development tooling also includes a method to extract +autospec-created RPMs locally onto a Clear Linux OS development system for testing. +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.

+

To test an autospec created package directly on the Clear Linux OS development system:

+
    +
  1. Run make install-local from the package’s autospec directory. +The make install-local command extracts the RPM directly onto +the filesystem of the running Clear Linux OS system:

    +
    cd ~/clearlinux/packages/<package-name>
    +make install-local
    +
    +
    +

    The code that makes this possible can be viewed by searching for the +install-local: target in the Makefile.common file on GitHub.

    +
  2. +
  3. Check that the software is installed as expected and perform any relevant +tests.

    +
  4. +
  5. After testing has been completed, the software and any related files must +be identified and deleted. The swupd repair --picky +command can help restore the state of the /usr directory (see +swupd) however any other files must be cleaned up +manually.

    +
  6. +
+
+
+
+

References

+

Reference the autospec README for details regarding autospec commands and options.

+
+

Setup environment to build source

+

Setup of the workspace and tooling used for building source in Clear Linux OS is mostly +automated for you with a setup script. It uses tools from the +os-clr-on-clr bundle.

+

The setup script creates a workspace in the clearlinux folder, with the +subfolders Makefile, packages, and projects. The +projects folder contains the main tools used for making packages in +Clear Linux OS autospec and common.

+

Follow these steps to setup the workspace and tooling for building source:

+
    +
  1. Install the os-clr-on-clr bundle:

    +
    sudo swupd bundle-add os-clr-on-clr
    +
    +
    +
  2. +
  3. Download the user-setup.sh script:

    +
    curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh
    +
    +
    +
  4. +
  5. Make user-setup.sh executable:

    +
    chmod +x user-setup.sh
    +
    +
    +
  6. +
  7. Run the script as an unprivileged user:

    +
    ./user-setup.sh
    +
    +
    +
  8. +
  9. After the script completes, log out and log in again to complete the setup +process.

    +
  10. +
  11. Set your Git user email and username for the repos on your system:

    +
    git config --global user.email "you@example.com"
    +git config --global user.name "Your Name"
    +
    +
    +

    This global setting is used by Clear Linux OS tools that make use of Git.

    +
  12. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/compatible-kernels.html b/zh_CN/guides/clear/compatible-kernels.html new file mode 100644 index 00000000..9fb47512 --- /dev/null +++ b/zh_CN/guides/clear/compatible-kernels.html @@ -0,0 +1,1058 @@ + + + + + + + + + + + Kernels — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Kernels

+

The Clear Linux* OS provides the following Linux kernels with a respective bundle. +This document describes the specific use cases these bundles serve +and provides links to their source code.

+
+

Bare metal only

+
+
Kernel native
+
The kernel-native bundle focuses on the bare metal platforms. It is +optimized for fast booting and performs best on the Intel® architectures +described on the supported hardware list. The +optimization patches are found in our Linux GitHub* repo.
+
+
+
+

Also compatible with VMs

+
+
Kernel LTS
+
The kernel-lts bundle focuses on the bare metal platforms but uses the +latest LTS Linux kernel. It is optimized for +fast booting and performs best on the Intel® architectures described on the +supported hardware list. Additionally, this +kernel includes the VirtualBox* kernel modules, see our +instructions on using Virtualbox for more +information. The optimization patches are found in our Linux-LTS GitHub +repo.
+
+
+
+

VM only

+
+
Kernel KVM
+
The kernel-kvm bundle focuses on the Linux +KVM. It is optimized for fast +booting and performs best on Virtual Machines running on the Intel® +architectures described on the +supported hardware list. Use this kernel when +running Clear Linux OS as the guest OS on top of qemu/kvm. Use this kernel with +cloud orchestrators using qemu/kvm internally as their hypervisor +. This kernel can be used as a standalone Clear Linux OS VM, see our +instructions on using KVM for more information. The +optimization patches are found in our Linux-KVM GitHub repo.
+
Kernel Hyper-V*
+
The kernel-hyperv bundle focuses on running Linux on Microsoft* +Hyper-V. It is optimized for fast booting and performs best on Virtual +Machines running on the Intel® architectures described on the +supported hardware list. +Use this kernel when running Clear Linux OS as the guest OS of Cloud Instances in +projects such as Microsoft Azure*. This kernel can be used in a +standalone Clear Linux OS VM, see our instructions on using Hyper-V +for more information. The optimization patches are found in our +Linux-HyperV GitHub repo.
+
Kernel Hyper-V LTS
+
The kernel-hyperv-lts bundle focuses on running Linux on Microsoft +Hyper-V but uses the latest LTS Linux kernel. +It is optimized for fast booting and performs best on Virtual +Machines running on the Intel® architectures described on the +supported hardware list. +Use this kernel when running Clear Linux OS as the guest OS of Cloud Instances in +projects such as Microsoft Azure. This kernel can be used in a +standalone Clear Linux OS VM, see our instructions on using Hyper-V +for more information. The optimization patches are found in our +Linux-HyperV-LTS GitHub repo.
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/debug.html b/zh_CN/guides/clear/debug.html new file mode 100644 index 00000000..68e26c22 --- /dev/null +++ b/zh_CN/guides/clear/debug.html @@ -0,0 +1,1067 @@ + + + + + + + + + + + Debug system — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Debug system

+

Clear Linux* OS introduces a novel approach to system software debugging using +clr-debug-info. On the client side, the Clear Linux OS 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.

+ +
+

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, such as binaries and libraries. Extra developer data, such as 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 Clear Linux OS and seamlessly engages once +installed.

+
    +
  1. Install the dev-utils bundle.

    +
    sudo swupd bundle-add dev-utils
    +
    +
    +
    +

    注解

    +

    The telemetrics and performance-tools bundles also include +clr-debug-info.

    +
    +
  2. +
  3. Start a debugging session against a program using a debugger, such as GDB. +For example, to debug gnome-control-center execute the following +command:

    +
    gdb /usr/bin/gnome-control-center
    +
    +
    +
  4. +
+

As you step through the program and debug information is needed, the +clr_debug_daemon obtains it in the background.

+
+
+

Implementation

+

The implementation of the Clear Linux OS debug system is open source and available on +GitHub at: https://github.com/clearlinux/clr-debug-info/

+
+Debug system communication flow +

Figure 1: The communication flow of the Clear Linux OS debug system

+
+

The Clear Linux OS debug system implements a FUSE +filesystem mounted at /usr/lib/debug and /usr/src/debug. The +FUSE filesystem starts automatically. You can verify its status by executing +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 that need it. It is socket activated whenever a request to the local +FUSE filesystem occurs. You can verify its status with systemctl +status clr_debug_daemon.service.

+

Clear Linux OS hosts debuginfo content packaged for consumption by Clear Linux OS debug clients at +https://download.clearlinux.org/debuginfo/

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/ister.html b/zh_CN/guides/clear/ister.html new file mode 100644 index 00000000..e78df000 --- /dev/null +++ b/zh_CN/guides/clear/ister.html @@ -0,0 +1,1077 @@ + + + + + + + + + + + ister.py image builder — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

ister.py image builder

+

The ister.py tool is a template-based installer used by Clear Linux* OS to produce +images for each release. The same ister tool is available for use in Clear Linux OS to +create custom images based on an upstream image.

+ +
+

Description

+

Clear Linux OS is a rolling release and produces an average of 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.

+

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 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 mixer guide +for instructions on using ister to build an image for a custom mix.

+
+
+

Examples

+
+

Recreate an upstream image

+

The published configuration files for upstream images may be used to recreate an +image. Here are some examples:

+
    +
  • Use an older version of Clear Linux OS and the image is no longer available (only after +March 2017).
  • +
  • Customize the partitions of an image.
  • +
  • Customize the bundles preinstalled in an image.
  • +
  • Run your own post installation script.
  • +
+

Follow these steps to recreate an upstream image based on the image’s JSON +configuration file:

+
    +
  1. Install the os-installer bundle. Refer to swupd for +more information on installing bundles.

    +
  2. +
  3. Download the ister.py tool and grant it sudo privileges.

    +
  4. +
  5. Download the JSON configuration file for the desired image (located in +config/image/):

    + +

    For a previous release, navigate to Previous releases, select the version +you want, and find the JSON configuration file under +/clear/config/image. For example: +https://cdn.download.clearlinux.org/releases/15700/clear/config/image/

    +
  6. +
  7. 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 +process. If it does, download the script and make it executable.

    +
  8. +
  9. Edit the JSON configuration file as needed.

    +
  10. +
  11. If your configuration file has an accompanying “PostNonChroot” script, change +the default path of the script to match your path.

    +
  12. +
  13. Generate the new image with the following command:

    +
    sudo ister.py -t [JSON configuration]
    +
    +
    +
  14. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/mixer.html b/zh_CN/guides/clear/mixer.html new file mode 100644 index 00000000..45ae3834 --- /dev/null +++ b/zh_CN/guides/clear/mixer.html @@ -0,0 +1,1747 @@ + + + + + + + + + + + mixer — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

mixer

+

mixer is the tool used by the Clear Linux* OS team to generate official update +content and releases. The update content generated by mixer is then consumed +by swupd on a downstream client. The same mixer tool is available as part of +Clear Linux OS to create your own customized update content and releases.

+ +
+

Description

+

mixer uses the following sources as inputs to generate update content:

+
    +
  • Upstream Clear Linux OS bundles with their corresponding RPM packages
  • +
  • Locally-defined bundles with their corresponding local RPM packages
  • +
  • Locally-defined bundles with upstream RPM packages
  • +
+

Using the mixer tool, you select which set of content from these sources +will be part of your update. You can select content from each of these sources to make a unique combination of functionality for your custom update content, known as a mix.

+

The update content that mixer generates consists of various pieces of OS +content, update metadata, as well as a complete image. The OS content +includes all files in an update, as well as zero- and delta-packs for improved update performance. The update metadata, stored as manifests, describes all of the bundle information for the update. Update content produced by mixer is then published to a web server and consumed by clients via swupd. Refer to swupd for additional information regarding updates and update content.

+
+
+

How it works

+

Learn the mixer tool set up and workflow.

+ +
+

Prerequisites

+
    +
  • mixer bundle

    +

    Add the mixer tool with the mixer bundle. Refer to +swupd for more information on installing bundles.

    +
  • +
  • Docker* container

    +

    mixer by default runs all build commands in a Docker container to ensure +the correct tool versions are used. This also allows custom mixes to +automatically perform downstream format bumps when the upstream releases a +format bump. See Format version for additional information regarding +format bumps.

    +

    Refer to Configure and enable Docker for instruction.

    +
  • +
  • Docker proxy (optional)

    +

    If you use a proxy server, you must set your proxy environment variables and +create a proxy configuration file for the Docker daemon and container.

    +

    Consult your IT department for the correct values if you are behind a +corporate proxy.

    +

    Refer to Configure Docker proxy info for instruction.

    +
  • +
  • Location to host the update content and images

    +

    In order for swupd to make use of your mix, the update content for your mix +must be hosted on a web server. Your mix will be configured with an update +location URL, which swupd will use to pull down updates.

    +

    Refer to Set up a nginx web server for mixer for an simple example of +setting up an update location.

    +
  • +
+
+
+

Mix setup

+

Follow these steps to create and initialize the mixer workspace. Complete +the setup before you create a mix.

+
    +
  1. Create workspace.

    +

    The mixer tool uses a simple workspace to contain all input and output in a +basic directory structure. The workspace is simply an empty folder from +which you execute the mixer commands. Each mix uses its own separate +workspace.

    +
  2. +
  3. Initialize the workspace and mix.

    +

    Before you create a mix, you must explicitly initialize the mixer workspace. +During initialization, the mixer workspace is configured and the base for +your mix is defined. By default, your mix is based on the latest +upstream version and starts with the minimum set of bundles. Your first custom +mix version number starts at 10. Alternatively, you can select other +versions or bundle sets from which to start.

    +

    Initialization creates the directory structure within the workspace and adds +the builder.conf file, which is used to configure the mixer tool.

    +

    View the mixer.init man page for more information on mixer +initialization.

    +

    View the list of suitable releases from which to mix.

    +
  4. +
  5. Edit builder.conf.

    +

    builder.conf tells the mixer tool how to configure the mix. For +example, it allows you to configure where mixer output is located and where +swupd update content will be located.

    +

    At minimum, set the URL of your update server so your custom OS knows where +to get update content.

    +

    Refer to the builder.conf section for more information.

    +
  6. +
+
+
+

Create a mix

+

A mix is created with the following steps:

+
    +
  1. Add custom RPMs and set up local repo (optional).

    +

    If you are adding custom RPMs to your mix, you must add the RPMs to +your mix workspace and set up a corresponding local repository.

    +

    Go to the autospec guide to learn to build RPMs from +scratch. If the RPMs are not built on Clear Linux OS, make sure your +configuration and toolchain builds them correctly for Clear Linux OS. Otherwise there +is no guarantee they will be compatible.

    +

    Refer to the autospec guide for more information on using autospec to +build RPMs.

    +
  2. +
  3. Update and build bundles.

    +

    Add, edit, or remove bundles that will be part of your content and build +them. mixer automatically updates the mixbundles file when you +update the bundles in your mix.

    +

    View the mixer.bundle man page for more information on configuring bundles +in a mix.

    +

    View the mixer.build man page for more information on building bundles.

    +

    View the Bundles section for more information on how mixer manages +bundles.

    +
  4. +
  5. Create the update content.

    +

    mixer creates update content with this step. Zero-packs are created +automatically, and delta-packs can be optionally created at the same time +(for all builds after version 0).

    +

    A zero-pack is the full set of content needed to go from mix version 0 +(nothing) to the mix version for which you just built content.

    +

    A delta-pack provides the content delta between a PAST_VERSION to a +MIX_VERSION that allows the transition from one mix version to another.

    +

    View swupd for more information on update content.

    +
  6. +
  7. Create image.

    +

    mixer creates a bootable image from your updated content using +the ister.py image builder tool. In this step you can specify which bundles you want +preinstalled in the image. Users can later install other bundles available +in your mix.

    +
  8. +
  9. Make update available.

    +

    Deploy update content and images to your update server.

    +

    View the Example 3: Deploy updates to target for a simple deployment +scenario.

    +
  10. +
+
+
+

Maintain or modify mix

+

Update or modify your content to a new version by following the steps to +create a mix. Increment the mix version number for the next mix.

+
+
+
+

Examples

+

The following examples are designed to work together and in order. The examples +use:

+
    +
  • A stock installation of Clear Linux OS.
  • +
  • A web server that comes with Clear Linux OS to host the content updates.
  • +
  • A simple VM that updates against the locally produced content created in +Example 2.
  • +
+

Complete all Prerequisites before using these examples.

+
+

Example 1: Mix set up

+

This example shows the basic steps for the first-time setup of +mixer for a new mix.

+
    +
  1. Create an empty directory to use as a workspace for mixer:

    +
    mkdir ~/mixer
    +
    +
    +
  2. +
  3. In your mixer workspace, generate an initial mix based on the latest upstream +Clear Linux OS version, with minimum bundles. In the initialization output, be aware +that your initial mix version is set to 10 and that the minimum bundles have +been added.

    +
    cd ~/mixer
    +mixer init
    +
    +
    +
  4. +
  5. Edit builder.conf to set the value of CONTENTURL and VERSIONURL to +the IP address of the nginx* server you set up in the prerequisite +Set up a nginx web server for mixer. For example:

    +
    CONTENTURL="http://192.168.25.52"
    +VERSIONURL="http://192.168.25.52"
    +
    +
    +
  6. +
+
+
+

Example 2: Create a simple mix

+

This example shows how to create a simple custom mix using upstream content. +We’ll create an image for a QEMU virtual machine that we can use later to test +our mix.

+

We can use the default bundles that were added during initialization, but these +include the native-kernel bundle that is intended to be used on a +bare metal system instead of a VM. So we will modify the default bundle +set to get a smaller kernel image, which will also be faster to load.

+
    +
  1. Update bundles in mix:

    +
    mixer bundle remove kernel-native
    +mixer bundle add kernel-kvm
    +
    +
    +
  2. +
  3. In this case, we will add the editors bundle from upstream, but we will +remove the joe editor.

    +
    mixer bundle add editors
    +mixer bundle edit editors
    +
    +
    +
  4. +
  5. Use an editor and manually remove joe from the bundle definition.

    +
    $EDITOR ./local-bundles/editors
    +
    +
    +
  6. +
  7. List the bundles in the mix again to confirm removal.

    +
    mixer bundle list  --tree
    +
    +
    +
  8. +
  9. Build bundles:

    +
    mixer build bundles
    +
    +
    +

    Look in ~/mixer/update/image/<mix version>/full for the full chroot after the +build command completes.

    +
  10. +
  11. Build update content. Browse to your http://localhost site and you’ll see +the web page is now up, but with no update content. Build the update content:

    +
    mixer build update
    +
    +
    +

    Refresh your http://localhost site and now you can see the update +content for mix version 10.

    +

    Look in ~/mixer/update/www/<mix version> to see the update content in your +workspace.

    +
  12. +
  13. Configure image. Edit the ister configuration file for your image to include +all of the bundles you want preinstalled in the image. If this is the first +time creating an image, first get a copy of the +release-image-config.json template file:

    +
    curl -O https://raw.githubusercontent.com/bryteise/ister/master/release-image-config.json
    +
    +
    +

    For this example, edit release-image-config.json so that the root +partition size is “5G” and replace the “kernel-native” bundle with +“kernel-kvm”.

    +
    {
    +  "DestinationType" : "virtual",
    +  "PartitionLayout" : [ { "disk" : "release.img", "partition" : 1, "size" : "32M", "type" : "EFI" },
    +                        { "disk" : "release.img", "partition" : 2, "size" : "16M", "type" : "swap" },
    +                        { "disk" : "release.img", "partition" : 3, "size" : "5G", "type" : "linux" } ],
    +  "FilesystemTypes" : [ { "disk" : "release.img", "partition" : 1, "type" : "vfat" },
    +                        { "disk" : "release.img", "partition" : 2, "type" : "swap" },
    +                        { "disk" : "release.img", "partition" : 3, "type" : "ext4" } ],
    +  "PartitionMountPoints" : [ { "disk" : "release.img", "partition" : 1, "mount" : "/boot" },
    +                             { "disk" : "release.img", "partition" : 3, "mount" : "/" } ],
    +  "Version": "latest",
    +  "Bundles": ["kernel-kvm", "os-core", "os-core-update"]
    +}
    +
    +
    +
  14. +
  15. Build the image.

    +
    sudo mixer build image
    +
    +
    +

    The output from this step will be release.img, which is a live image.

    +
  16. +
  17. Make the next mix. Create a new version of your mix, for the live image to +update to. Increment your mix version by 10:

    +
    mixer versions update
    +
    +
    +

    Repeat steps 1-3 to add the upstream curl bundle to the mix:

    +
    mixer bundle add curl
    +mixer build bundles
    +mixer build update
    +
    +
    +

    Build optional delta-packs, which helps reduce client update time:

    +
    mixer build delta-packs --from 10 --to 20
    +
    +
    +

    Refresh your http://localhost site to see the update content for +mix version 20.

    +

    Look in ~/mixer/update/www/<mix version> to see the update content in your +workspace.

    +
  18. +
+
+
+

Example 3: Deploy updates to target

+

The image created in Example 2 is directly bootable in QEMU. In this example, +we’ll boot the image from Example 2 to verify it, and update the image from +mix version 10 (from which the image was built), to mix version 20.

+
    +
  1. Set up the QEMU environment.

    +

    Install the kvm-host bundle to your Clear Linux OS:

    +
    sudo swupd bundle-add kvm-host
    +
    +
    +

    Get the virtual EFI firmware, download the image launch script, and make it +executable:

    +
    curl -O https://download.clearlinux.org/image/OVMF.fd
    +curl -O https://download.clearlinux.org/image/start_qemu.sh
    +chmod +x start_qemu.sh
    +
    +
    +
  2. +
  3. Start your VM image (created in Example 2):

    +
    sudo ./start_qemu.sh release.img
    +
    +
    +
  4. +
  5. Log in as root and set a password

    +
  6. +
  7. Try out your mix.

    +

    Take a look at the default bundles installed in your mix:

    +
    swupd info
    +swupd bundle-list
    +swupd bundle-list -a
    +
    +
    +
  8. +
  9. Now we will add the editors bundle that we modified.

    +
    swupd bundle add editors
    +
    +
    +
  10. +
  11. Try to start the joe editor. It should not appear because we removed it +from the original editors bundle.

    +
  12. +
  13. Next we will update from version 10 to 20 to capture the newly +available bundles. Use swupd to update your mix:

    +
    swupd check-update
    +swupd update
    +swupd bundle-list -a
    +
    +
    +
  14. +
  15. Now your mix should be at version 20 and curl is now available. Try using +curl. This will fail because curl is not yet installed:

    +
    curl: command not found
    +To install curl use: swupd bundle-add curl
    +
    +
    +

    Add the new bundle from your update server to your VM. Retry curl. It works!

    +
    swupd bundle-add curl
    +curl -O https://download.clearlinux.org/image/start_qemu.sh
    +
    +
    +

    Shutdown your VM:

    +
    poweroff
    +
    +
    +
  16. +
+
+
+
+

References

+

Reference the mixer man page for details regarding mixer commands and options.

+ +
+

builder.conf

+

mixer initialization creates a builder.conf that stores the basic +configuration for the mixer tool. The items of primary interest are CONTENTURL +and VERSIONURL, which will be used by systems updating against your custom +content.

+
#builder.conf
+
+#VERSION 1.0
+
+[Builder]
+  CERT = "/home/clr/mix/Swupd_Root.pem"
+  SERVER_STATE_DIR = "/home/clr/mix/update"
+  VERSIONS_PATH = "/home/clr/mix"
+  YUM_CONF = "/home/clr/mix/.yum-mix.conf"
+
+[Swupd]
+  BUNDLE = "os-core-update"
+  CONTENTURL = "<URL where the content will be hosted>"
+  VERSIONURL = "<URL where the version of the mix will be hosted>"
+
+[Server]
+  DEBUG_INFO_BANNED = "true"
+  DEBUG_INFO_LIB = "/usr/lib/debug"
+  DEBUG_INFO_SRC = "/usr/src/debug"
+
+[Mixer]
+  LOCAL_BUNDLE_DIR = "/home/clr/mix/local-bundles"
+  LOCAL_REPO_DIR = ""
+  LOCAL_RPM_DIR = ""
+  DOCKER_IMAGE_PATH = "clearlinux/mixer"
+
+
+

Additional explanation of variables in builder.conf is provided in Table +1.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VariableExplanation
CERT

Sets the path where mixer stores the certificate file +used to sign content for verification. mixer +automatically generates the certificate if you do not +provide the path to an existing one, and signs the +Manifest.MoM file to provide security for the +updated content you create.

+

chroot-builder uses the certificate file to sign +the root Manifest.MoM file to provide +security for content verification.

+

swupd uses this certificate to verify the +Manifest.MoM file’s signature.

+

For now, we strongly recommend that you do not modify +this variable, as swupd expects a certificate with a +very specific configuration to sign and verify +properly.

+
CONTENTURL and VERSIONURL

Set these variables to the IP address of the web server +hosting the update content.

+

VERSIONURL is the IP address where the swupd client +looks to determine if a new version is available.

+

CONTENTURL is the location from which swupd pulls +content updates.

+

If the web server is on the same machine as the +SERVER_STATE_DIR directory, you can create a symlink to +the directory in your web server’s document root to +easily host the content.

+

These URLs are embedded in the images created by mixer.

+
DOCKER_IMAGE_PATHSets the base name of the docker image that mixer pulls +down to run builds in the proper container.
LOCAL_BUNDLE_DIRSets the path where mixer stores the local bundle +definition files. The bundle definition files include +any new, original bundles you create, along with any +edited versions of upstream bundles.
SERVER_STATE_DIRSets the path to which mixer outputs content. By +default, mixer automatically sets the path.
VERSIONS_PATHSets the path for the mix version and upstream version’s +two state files: mixversion and +upstreamversion. mixer creates both files for +you when you set up the workspace.
YUM_CONF

Sets the path where mixer automatically generates the +.yum-mix.conf file.

+

The yum configuration file points the chroot-builder to +where the RPMs are stored.

+
Table 1: Variables in builder.conf
+
+

Format version

+

Compatible versions of an OS are tracked with an OS compatibility epoch. +Versions of an OS within an epoch are fully compatible and can update to any +other version within that epoch. The compatibility epoch is set as the +Format variable in the mixer.state file. Variables in the +mixer.state are used by mixer between executions and should not be +manually changed.

+

A format bump is like modifying the foundation of a house to create a new +level. If Format increments to a new epoch (a “format bump”), the OS has +changed in such a way that updating from build A in format X to build B in +format Y will not work.

+

A format bump is required when:

+
    +
  • The software updater, swupd, or the software is no longer +compatible with the previous update scheme
  • +
  • A package is removed from the update stream and the update must ensure the +files associated with that package are removed from the system
  • +
+

Using a format increment, we make sure pre- and co-requisite changes flow out +with proper ordering. The updated client will only update to the latest +release in its respective format version, unless overridden by command line +flags. In this way, we can guarantee that all clients update to the final +version in their given format.

+

The given format must contain all the changes needed to understand the content built in the next format. Only after reaching the final release in the old format can a client continue to update to releases in the new format.

+

The format version is incremented only when a compatibility breakage is +introduced. Normal updates, such as updating a software package, do not require a format increment.

+
+
+
+

Bundles

+

mixer stores information about the bundles included in a mix in a flat file +called mixbundles, which is located in the path set by the VERSIONS_PATH variable in builder.conf. mixbundles is automatically created when the mix is initiated. mixer will refresh the file each time you change the bundles in the mix.

+

Bundles can include other bundles. Nested bundles can themselves include +other bundles. If you see an unexpected bundle in your mix, it is likely a +nested bundle in one of the bundles you explicitly added.

+

A bundle will fill into one of two categories: upstream or local. Upstream +bundles are those provided by Clear Linux OS. Local bundles are either modified upstream bundles or new local bundles.

+
+

Upstream bundles

+

mixer automatically downloads and caches upstream bundle definition files. +These definition files are stored in the upstream-bundles directory in the +workspace. Do not modify the files in this directory. This directory is +simply a mirror for mixer to use. mixer will automatically delete the +contents of this directory before repopulating it on-the-fly if a new +version must be downloaded.

+

The mixer tool automatically caches the bundles for the Clear Linux OS version +configured in the upstreamversion file. mixer also cleans up old +versions once they are no longer needed.

+
+
+

Local bundles

+

Local bundles are bundles that you create, or are edited versions of upstream +bundles. Local bundle definition files are stored in the local-bundles +directory in the workspace. The LOCAL_BUNDLE_DIR variable sets the path of this directory in the builder.conf file.

+

mixer always checks for local bundles first and the upstream bundles +second. So bundles in the local-bundles directory will always take +precedence over any upstream bundles that have the same name. This +precedence enables you to copy upstream bundles locally, and edit into a +local variation.

+
+
+

Bundle configuration

+

mixer provides commands to configure the bundles for a mix, such as to add a +bundle to a mix, to create a new bundle for a mix, or to remove a bundle from a +mix. View the mixer.bundle man page for a full list of commands and more +information on configuring bundles in a mix.

+

Editing an existing local bundle is as simple as opening the bundle definition +file in your favorite editor, making the desired edits, and saving your changes.

+
+

注解

+

Removing bundles from a mix: By default, removing a bundle will only +remove the bundle from the mix. The local bundle definition file will +still remain. To completely remove a bundle, including its local bundle definition file, use the --local flag.

+

If you remove the bundle definition file for a local, edited version of an +upstream bundle in a mix, the mix reverts to reference the original upstream version of the bundle.

+
+
+
+
+

Configure and enable Docker

+

Use these steps to enable Docker for the mixer tool. Make sure to +Configure Docker proxy info first if needed.

+
    +
  1. Start the Docker daemon:

    +
    sudo systemctl start docker
    +sudo chmod 777 /var/run/docker.sock
    +sudo docker info
    +
    +
    +
  2. +
  3. Add user to the docker group

    +
    sudo usermod -G docker -a <username>
    +
    +
    +
  4. +
+
+

Pull Docker container manually (optional)

+

By default, mixer automatically pulls a Docker container for mixing if one +does not already exist. If you need to troubleshoot the mixer container, it +may be useful to manually pull a mixer Docker container.

+

Versions of the mixer Docker container are available under the tags for the +clearlinux/mixer repo +on Docker Hub. Each version of the mixer Docker container is named after the +associated Clear Linux OS upstream format version. Refer to Format version for +additional information on upstream format versions.

+

Use the following steps to manually pull a mixer Docker container:

+
    +
  1. Find the version of the container you need by viewing the tags for the +clearlinux/mixer repo +on Docker Hub.

    +
  2. +
  3. Pull the latest container version:

    +
    docker pull clearlinux/mixer:<upstream-format-version>
    +
    +
    +
  4. +
  5. View local docker images:

    +
    docker images
    +
    +
    +
  6. +
+
+
+
+

Configure Docker proxy info

+

If needed, use these steps to configure the Docker proxy information.

+
    +
  1. Create the Docker daemon proxy config directory:

    +
    sudo mkdir -p /etc/systemd/system/docker.service.d
    +
    +
    +
  2. +
  3. Create /etc/systemd/system/docker.service.d/http-proxy.conf and +add the following using your own proxy values:

    +
    [Service]
    +Environment="HTTP_PROXY=<HTTP proxy URL>:<port number>"
    +Environment="HTTPS_PROXY=<HTTPS proxy URL>:<port number>"
    +
    +
    +
  4. +
  5. Reload the Docker daemon:

    +
    sudo systemctl daemon-reload
    +
    +
    +
  6. +
+

Configure the Docker container proxies, to pass proxy settings to +containers:

+
    +
  1. Create a directory for your container config:

    +
    mkdir ~/.docker
    +
    +
    +
  2. +
  3. Create the config file ~/.docker/config.json and add the following +entries, using your own proxy values:

    +
    {
    +  "proxies":
    +  {
    +    "default":
    +    {
    +      "httpProxy": "<proxy-url>:<port>",
    +      "httpsProxy": "<proxy-url>:<port>"
    +    }
    +  }
    +}
    +
    +
    +
  4. +
  5. Set ownership and permission on the docker config directory:

    +
    sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
    +sudo chmod g+rwx "$HOME/.docker" -R
    +
    +
    +
  6. +
+

Configure proxies to allow mixer to access upstream content from behind +a firewall.

+
    +
  1. Open your $HOME/.bashrc file and add proxy and port values for the +following:

    +
    export http_proxy="<proxy-url>:<port>"
    +export https_proxy="<proxy-url>:<port>"
    +export HTTP_PROXY="<proxy-url>:<port>"
    +export HTTPS_PROXY="<proxy-url>:<port>"
    +export no_proxy="<...>"
    +
    +
    +
  2. +
  3. Log out and log back in for the proxies to take effect.

    +
  4. +
+
+
+

Set up a nginx web server for mixer

+

A web server is needed to host your update content. In this example, we use +the nginx web server, which comes with Clear Linux OS.

+

Set up a nginx web server for mixer with the following steps:

+
    +
  1. Install the nginx bundle:

    +
    sudo swupd bundle-add nginx
    +
    +
    +
  2. +
  3. Make the directory where mixer updates will reside:

    +
    sudo mkdir -p /var/www
    +
    +
    +
  4. +
  5. Create a symbolic link between your workspace updates and the updates on +the local nginx web server. In this example, $HOME/mixer is the +workspace for the mix.

    +
    sudo ln -sf $HOME/mixer/update/www /var/www/mixer
    +
    +
    +
  6. +
  7. Set up nginx configuration:

    +
    sudo mkdir -p  /etc/nginx/conf.d
    +
    +
    +
  8. +
  9. Copy the default example configuration file:

    +
    sudo cp -f /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf
    +
    +
    +
  10. +
  11. Configure the mixer update server. Create and add the following server +configuration content to /etc/nginx/conf.d/mixer.conf (sudo required):

    +
    server {
    +     server_name localhost;
    +     location / {
    +               root /var/www/mixer;
    +               autoindex on;
    +     }
    +}
    +
    +
    +
  12. +
  13. Restart the daemon, enable nginx on boot, and start the service.

    +
    sudo systemctl daemon-reload
    +
    +sudo systemctl enable nginx
    +
    +sudo systemctl start nginx
    +
    +
    +
  14. +
  15. Verify the web server is running at http://localhost. At this point +you should no longer see a “404 Not Found” message.

    +
  16. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/security.html b/zh_CN/guides/clear/security.html new file mode 100644 index 00000000..a07a9478 --- /dev/null +++ b/zh_CN/guides/clear/security.html @@ -0,0 +1,1115 @@ + + + + + + + + + + + OS Security — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

OS Security

+

Clear Linux* OS aims to make systemic and layered security-conscious decisions +that are both performant and practical. This security philosophy is rooted +within the project’s codebase and operating culture.

+ +
+

Security in updates

+

The Clear Linux OS team believes in the benefits of software security through open +sourcing, incremental updates, and rapidly resolving known security advisories.

+
+

The latest Linux* codebase

+

Clear Linux OS uses the newest version of the Linux kernel which allows the operating +system to leverage the latest features from the upstream Linux kernel, +including security fixes.

+
+
+

Automated effective updating

+

Clear Linux OS is incrementally updated multiple times per day.

+

This rolling release model allows Clear Linux OS to consume the latest security fixes +of software packages as soon as they become available. There is no waiting for +major or minor releases on Clear Linux OS.

+

An update is not effective if it is just simply downloaded onto a system. +It needs to be obtained AND ensured that the new patched copy is being +used; not an older copy loaded into memory. Clear Linux OS will let you know when a +service needs to be rebooted or do it for your automatically after +a software update, if desired.

+

In Clear Linux OS updates are delivered automatically, efficiently, and effectively. For +more information about software updates in Clear Linux OS, refer to the swupd +guide.

+
+
+

Automated CVE scanning and remediation

+

The sheer number of software packages and security vulnerabilities is growing +exponentially. Repositories of Common Vulnerabilities and Exposures (CVEs) +and their fixes, if known, are published by NIST in a +National Vulnerability Database https://nvd.nist.gov/ and at https://cve.mitre.org/ .

+

Clear Linux OS employs a proactive and measured approach to addressing known +and fixable CVEs. +Packages are automatically scanned against CVEs daily, and security +patches are deployed as soon as they are available.

+

These combined practices minimize the amount of time Clear Linux OS systems are exposed to unnecessary security risk.

+
+
+
+

Security in software

+
+

Minimized attack surface

+

Clear Linux OS removes legacy, unneeded, or redundant standards and components as much as +possible to enable the use of best known security standards. Below are some +examples:

+
    +
  • RC4, SSLv3, 3DES, and SHA-1 ciphers which have had known +vulnerabilities, have been explicitly disabled within many Clear Linux OS packages to +avoid their accidental usage.
  • +
  • Services and subsystems which expose sensitive system information +have been removed such as the finger and tcpwrappers.
  • +
  • SFTP has been disabled by default due to security considerations.
  • +
+
+
+

Verified trust

+

Clear Linux OS encourages the use of secure practices such as encryption +and digital signature verification throughout the system and discourages blind +trust. Below are some examples:

+
    +
  • All update operations from swupd are transparently encrypted and checked +against the Clear Linux OS maintainers’ public key for authenticity. +More information about swupd security can be found in the +Security for software update in Clear Linux* OS blog post.
  • +
  • Before being built, packages available from Clear Linux OS verify checksums and +signatures provided by third party project codebases and maintainers.
  • +
  • Clear Linux OS features a unified certificate store, clrtrust which comes +ready to work with well-known Certificate Authorities out of the box. +clrtrust also offers an easy to use command line interface for managing +system-wide chains of trust, instead of ignoring foreign certificates.
  • +
+
+
+

Compiled with secure options

+

While Clear Linux OS packages are optimized for performance on Intel® architecture, +security conscious kernel and compiler options are sensibly taken advantage of. +Below are some examples:

+ +
+
+
+

Security in system design

+

Simple, yet effective, techniques are used throughout the Clear Linux OS system design to +defend against common attack vectors and enable good security hygiene. Below are +some examples:

+
    +
  • Full disk encryption using LUKS is available +during installation. Refer to cryptsetup for additional information about +LUKS.
  • +
  • Clear Linux OS uses the PAM cracklib module to harden user login and password +security resulting in:
      +
    • No default username or root password set out of the box with +Clear Linux OS, you will be asked to set your own password immediately.
    • +
    • Simple password schemes, which are known to be easily compromised, +cannot be set in Clear Linux OS.
    • +
    • A password blacklist, to avoid system passwords being set to +passwords which have been compromised in the past.
    • +
    +
  • +
  • Tallow, a lightweight service which monitors and blocks suspicious SSH +login patterns, is installed with the openssh-server bundle.
  • +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/stateless.html b/zh_CN/guides/clear/stateless.html new file mode 100644 index 00000000..b87c9b32 --- /dev/null +++ b/zh_CN/guides/clear/stateless.html @@ -0,0 +1,1106 @@ + + + + + + + + + + + Stateless — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Stateless

+

In most operating systems, user data, system data, and configuration files +can become intermingled.

+
+Stateless: User and system files mixed +

Figure 1: Without stateless, user and system files become mixed on the filesystem over time.

+
+

Clear Linux* OS has a stateless design philosophy with the goal to provide an +OS that functions without excessive user +configuration or customization. Stateless in this context does not mean +ephemeral or non-persistent.

+ +
+

File-level separation

+

To accomplish a stateless design the Linux Filesystem Hierarchy is separated +between user-owned areas and Clear Linux OS-owned areas.

+
+Stateless: User and system files separation +

Figure 2: With stateless, user and system files are separated on the filesystem.

+
+
+

System areas

+

File under the /usr directory are managed by Clear Linux OS as system files. +Files written under the /usr directory by users can get removed +through system updates with swupd. This operating +assumption allows Clear Linux OS to verify and maintain integrity of system files.

+
+
+

User areas

+

Files under the /etc/, /home, and /var directories are +owned and managed by the user. A freshly installed Clear Linux OS system will only have +a minimal set of files in the /etc/ directory and software installed +by Clear Linux OS does not write to /etc. This operating assumption allows Clear Linux OS +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, Clear Linux OS provided defaults, and user-provided +configuration.

+
+

Default configurations

+

Software in Clear Linux OS provides default configuration values so that it is +immediately functional, whenever it is appropriate to do so.

+

Clear Linux OS distributed software packages may be directly modified to include default +configuration values or default configuration files may be provided by Clear Linux OS +under /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 /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 /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:

+
    +
  1. Create the destination directory for the configuration:

    +
    sudo mkdir /etc/httpd
    +
    +
    +
  2. +
  3. Copy the default configuration as a reference template:

    +
    sudo cp /usr/share/defaults/httpd/httpd.conf /etc/httpd/
    +
    +
    +
  4. +
  5. Make any desired modifications to the configurations:

    +
    sudoedit /etc/httpd/httpd.conf
    +
    +
    +
  6. +
  7. Reload the service or reboot the system to pickup any changes:

    +
    systemctl daemon-reload httpd && systemctl restart httpd
    +
    +
    +
  8. +
+

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 /etc/ and +/var.

+

Running the commands below effectively performs a system reset as if it was +just installed:

+
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.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/clear/swupd-guide.html b/zh_CN/guides/clear/swupd-guide.html new file mode 100644 index 00000000..de8c4dd5 --- /dev/null +++ b/zh_CN/guides/clear/swupd-guide.html @@ -0,0 +1,1288 @@ + + + + + + + + + + + swupd — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

swupd

+

swupd links a Clear Linux* OS installation with upstream updates and +software.

+ +
+

Description

+

swupd has two main functions:

+
    +
  1. Manage software and replace APT or YUM, by installing bundles +rather than packages.
  2. +
  3. Check for system updates and install them.
  4. +
+

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.

+

Bundles contain everything needed to deliver a software +capability. They are the smallest granularity component that is +managed by Clear Linux OS. A bundle comes with all of its dependencies rather than +downloading a cascade of package dependencies when installing a piece of +software.

+
+

Versioning

+

Using package managers to monitor software version compatibility or +compare multiple systems on many Linux distributions can be cumbersome.

+

With Clear Linux OS swupd, versioning happens at the individual file level. +This means Clear Linux OS 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 git internal version +tracking, where any of the individual file commits are tracked and move the +pointer forward when changed.

+

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. On a daily basis, +this matters 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 Clear Linux OS.

+
+
+

Updating

+

Clear Linux OS 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, 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 Clear Linux OS are also efficient. Unlike package-based +distributions, 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, Clear Linux OS is able to +apply only what is needed.

+

For details on how to generate update content for Clear Linux OS, see the +mixer tool.

+
+
+
+

How it works

+
+

Prerequisites

+
    +
  • The device is on a well-connected network.
  • +
  • The device is able to connect to an update server. The default server is: +http://update.clearlinux.org
  • +
+
+
+

Updates

+

Clear Linux OS updates are automatic by default, but can be set to occur only on +demand. swupd makes sure that regular updates are simple and +secure. It can also check the validity of currently installed files and +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 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

+

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 is used if the OS verification +needs to replace a single file, for instance.
  • +
  • Packs are available for some releases. They 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). They cannot be used without having the original file content.
  • +
+
+
+ +
+
+

Examples

+
+

Example 1: Disable and enable automatic updates

+

Clear Linux OS updates are automatic by default, but can be set to occur only +on demand.

+
    +
  1. Verify your current auto-update setting.

    +
    sudo swupd autoupdate
    +
    +
    +

    Output:

    +
    Enabled
    +
    +
    +
  2. +
  3. Disable automatic updates.

    +
    sudo swupd autoupdate --disable
    +
    +
    +

    Output:

    +
    Warning: disabling automatic updates may take you out of compliance with your IT policy
    +
    +Running systemctl to disable updates
    +Created symlink /etc/systemd/system/swupd-update.service → /dev/null.
    +Created symlink /etc/systemd/system/swupd-update.timer → /dev/null.
    +
    +
    +
  4. +
  5. Check manually for updates.

    +
    sudo swupd check-update
    +
    +
    +
  6. +
  7. Install an update after identifying one that you need.

    +
    sudo swupd update --version <version number>
    +
    +
    +
  8. +
  9. Re-enable automatic installs.

    +
    sudo swupd autoupdate --enable
    +
    +
    +
  10. +
+
+
+

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 VM for +improved security.

+

Clear Linux OS makes it very easy to install, since you only need to add +one bundle to use Kata Containers: containers-virt, despite a +number of dependencies. Also, check out our tutorial: Install Kata Containers*.

+
    +
  1. Find the correct bundle.

    +

    To return all possible matches for the search string, enter +swupd search, followed by ‘kata’:

    +
    sudo swupd search kata
    +
    +
    +

    The output should be similar to:

    +
    Bundle with the best search result:
    +
    +containers-virt - Run container applications from Dockerhub in
    +lightweight virtual machines
    +
    +This bundle can be installed with:
    +
    +     swupd bundle-add  containers-virt
    +
    +Alternative bundle options are
    +
    +     cloud-native-basic - Contains ClearLinux native software for Cloud
    +
    +
    +
    +

    注解

    +

    If your search does not produce results with a specific term, shorten +the search term. For example, use kube instead of kubernetes.

    +
    +
  2. +
  3. Add the bundle.

    +
    sudo swupd bundle-add containers-virt
    +
    +
    +
    +

    注解

    +

    To add multiple bundles, add a space followed by the bundle name.

    +
    +

    The output of a successful installation should be similar to:

    +
    Downloading packs...
    +
    +Extracting containers-virt pack for version 24430
    +    ...50%
    +Extracting kernel-container pack for version 24430
    +    ...100%
    +Starting download of remaining update content. This may take a while...
    +    ...100%
    +Finishing download of update content...
    +Installing bundle(s) files...
    +    ...100%
    +Calling post-update helper scripts.
    +Successfully installed 1 bundle
    +
    +
    +
  4. +
+
+
+

Example 3: Verify and correct system file mismatch

+

swupd can determine whether system directories and files have +been added to, overwritten, removed, or modified (e.g., permissions).

+
sudo swupd diagnose
+
+
+

All directories that are watched by swupd are verified according +to the manifest data. Hash mismatches are flagged as follows:

+
Verifying version 23300
+Verifying files
+   ...0%
+Hash mismatch for file: /usr/bin/chardetect
+...
+...
+Hash mismatch for file: /usr/lib/python3.6/site-packages/urllib3/util/wait.py
+   ...100%
+Inspected 237180 files
+   423 files did not match
+Verify successful
+
+
+

In this case, Python* packages that were installed on top of the default +install were flagged as mismatched. swupd can be directed to +ignore or fix issues based on command line options.

+

swupd can correct any issues it detects. Additional directives +can be added including a white list of directories to be ignored.

+

The following command repairs issues, removes unknown items, and +ignores files or directories matching /usr/lib/python:

+
sudo swupd repair --picky --picky-whitelist=/usr/lib/python
+
+
+
+
+
+

Quick reference

+
+
swupd info
+
Returns the currently installed version and update servers.
+
swupd update <version number>
+
Updates to a specific version or updates to latest version if no +arguments are used.
+
swupd bundle-list [–all]
+
Lists installed bundles.
+
swupd bundle-add [-b] <search term>
+
Finds a bundle that contains your search term.
+
swupd bundle-add <bundle name>
+
Adds a bundle.
+
swupd bundle-remove <bundle name>
+
Removes a bundle.
+
swupd –help
+
Lists additional swupd commands.
+
man swupd
+
Opens the swupd man page.
+
+

Refer to swupd source documentation on GitHub for more details.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/deploy-at-scale.html b/zh_CN/guides/deploy-at-scale.html new file mode 100644 index 00000000..08eb5e73 --- /dev/null +++ b/zh_CN/guides/deploy-at-scale.html @@ -0,0 +1,1201 @@ + + + + + + + + + + + Deploy at Scale — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Deploy at Scale

+

This guide describes deployment considerations and strategies when deploying +Clear Linux* OS at scale in your environment.

+ +
+

Overview

+

In this guide the term endpoint refers to a system targeted for Clear Linux OS +installation, whether that is a datacenter system or unit deployed in field.

+
+

注解

+

This guide is not a replacement or blueprint for designing your own IT +operating environment.

+

Implementation details for a scale deployment are beyond the scope of this +guide.

+

Your Clear Linux OS deployment should complement your existing environment and +available tools. It is assumed core IT dependencies of your environment, +such as your network, are healthy and scaled to suit the deployment.

+
+
+
+

Pick a usage and update strategy

+

Different business scenarios call for different deployment methodologies. +Clear Linux OS offers the flexibility to continue consuming the upstream Clear Linux OS +distribution or the option to fork away from the Clear Linux OS distribution and +act as your own OSV.

+

Below is an overview of some considerations.

+
+

Create your own Linux distribution (mix)

+

This approach forks away from the Clear Linux OS upstream and has you act as your own +OSV by leveraging the mixer process to +create customized images based on Clear Linux OS. This is a level of responsibility +that requires having more infrastructure and processes to adopt. In return, +this approach offers you a high degree of control and customization. Consider:

+
    +
  • Development systems that generate bundles and updates should have +sufficient performance for the task and be separate from the swupd update +webservers that serve update content to production machines.

    +
  • +
  • swupd update webservers that serve update content to production machines +should be appropriately scaled. Specific implementation details for a scalable, +resilient web server are beyond the scope of this document.

    +

    (See mixer for more information about update servers.)

    +
  • +
+
+
+

Adopt an agile methodology

+

The cloud, and other scaled deployments, are all about flexibility and speed. +It only makes sense that any Clear Linux OS deployment strategy should follow suit.

+

Manually rebuilding your own bundles or mix for every release is not +sustainable at a large scale. A Clear Linux OS deployment pipeline should be agile +enough to validate and produce new versions with speed. Whether or not those +updates actually make their way to your production can be separate +business decision. However this ability to frequently roll new versions of +software to your endpoints is an important prerequisite.

+

You own the validation and lifecycle of the OS and should treat it like any +other software development lifecycle. Below are some pointers:

+
    +
  • Thoroughly understand the custom software packages that you will need to +integrate with Clear Linux OS and maintain along with their dependencies.
  • +
  • Setup a path to production for building Clear Linux OS based images. At minimum this +should include:
      +
    • A development clr-on-clr environment to test building packages and +bundles for Clear Linux OS systems.
    • +
    • A pre-production environment to deploy Clear Linux OS versions to before +production
    • +
    +
  • +
  • Employ a continuous integration and continuous deployment (CI/CD) +philosophy in order to:
      +
    • Automatically pull custom packages as they are updated from their +upstream projects or vendors.
    • +
    • Generate Clear Linux OS bundles and potentially bootable images with your +customizations, if any.
    • +
    • Measure against metrics and indicators which are relevant to your +business (e.g. performance, power, etc) from release to release.
    • +
    • Integrate with your organization’s governance processes, such as change +control.
    • +
    +
  • +
+
+
+

Versioning infrastructure

+

Clear Linux OS version numbers are very important as they apply to the whole +infrastructure stack from OS components to libraries and applications.

+

Good record keeping is important, so you should keep a detailed registry and +history of previously deployed versions and their contents.

+

With a glance at the Clear Linux OS version numbers deployed, you should be able to +tell if your Clear systems are patched against a particular security +vulnerability or incorporate a critical new feature.

+
+
+
+

Pick an image distribution strategy

+

Once you have decided on a usage and update strategy, you should understand +how Clear Linux OS will be deployed to your endpoints. In a large scale deployment, +interactive installers should be avoided in favor of automated installations +or prebuilt images.

+

There are many well-known ways to install an operating system at scale. Each +have their own benefits, and one may lend itself easier in your environment +depending on the resources available to you.

+

See the available Clear Linux* OS image types.

+

Below are some common ways to install Clear Linux OS to systems at scale:

+
+

Bare metal

+

Preboot Execution Environments (PXE) or other out-of-band booting options are +one way to distribute Clear Linux OS to physical bare metal systems on a LAN.

+

This option works well if your customizations are fairly small in size +and infrastructure can be stateless.

+

The Clear Linux OS Downloads page offers a live image that can be deployed as +a PXE boot server if one doesn’t already exist in your environment. Also see +documentation on how to Install Clear Linux* OS on bare metal with live server.

+
+
+

Cloud instances or virtual machines

+

Image templates in the form of cloneable disks are an effective way to +distribute Clear Linux OS for virtual machine environments, whether on-premises or +hosted by a Cloud Solution Provider (CSP).

+

When used in concert with cloud VM migration features, this can be a good option +for allowing your applications a degree of high availability and workload +mobility; VMs can be restarted on a cluster of hypervisor host or moved between +datacenters transparently.

+

The Clear Linux OS Downloads page offers example prebuilt VM images and is readily +available on popular CSPs. Also see documentation on how to +在虚拟机上安装.

+
+
+

Containers

+

Containerization platforms allow images to be pulled from a repository and +deployed repeatedly as isolated containers.

+

Containers with a Clear Linux OS image can be a good option to blueprint and ship +your application, including all its dependencies, as an artifact while +allowing you or your customers to dynamically orchestrate and scale +applications.

+

Clear Linux OS is capable of running a Docker host, has a container image which can +be pulled from DockerHub, or can be built as a customized container. +For more information visit the Containers page.

+
+
+
+

Considerations with stateless systems

+

An important Clear Linux OS concept is statelessness and partitioning of system data +from user data. This concept can change the way you think about an at scale +deployment.

+
+

Backup strategy

+

A Clear Linux OS system and its infrastructure should be considered a commodity and +be easily reproducible. Avoid focusing on backing up the operating system +itself or default values.

+

Instead, focus on backing up what’s important and unique - the application +and data. In other words, only focus on backing up critical areas like +/home, /etc, and /var.

+
+
+

Meaningful logging & telemetry

+

Offload logging and telemetry from endpoints to external servers, so it is +persistent and can be accessed on another server when an issue occurs.

+
    +
  • Remote syslogging in Clear Linux OS is available through the +systemd-journal-remote.service

    +
  • +
  • Clear Linux OS offers a Telemetrics, which can be a powerful tool +for a large deployment to quickly crowdsource issues of interest. Take +advantage of this feature with careful consideration of the target audience +and the kind of data that would be valuable, and expose events +appropriately.

    +

    Like any web server, the telemetry server should be appropriately scaled and +resilient. Specific implementation details for a scalable, resilient web +server are beyond the scope of this document.

    +
  • +
+
+
+

Orchestration and configuration management

+

In cloud environments, where systems can be ephemeral, being able to +configure and maintain generic instances is valuable.

+

Clear Linux OS offers an efficient cloud-init style solution, micro-config-drive, +through the os-cloudguest bundles which allow you to configure many Day 1 +tasks such as setting hostname, creating users, or placing +SSH keys in an automated way at boot. For more information on +automating configuration during deployment of Clear Linux OS endpoints see the +Bulk provision guide.

+

A configuration management tool is useful for maintaining consistent system +and application-level configuration. Ansible* is offered through the +sysadmin-hostmgmt bundle as a configuration management and automation +tool.

+
+
+

Cloud-native applications

+

An Infrastructure OS can design for good behavior, but it is ultimately up +to applications to make agile design choices. Applications deployed +on Clear Linux OS should aim to be host-aware but not depend on any specific host to +run. References should be relative and dynamic when possible.

+

The application architecture should incorporate an appropriate tolerance for +infrastructure outages. Don’t just keep stateless design as a noted feature. +Continuously test its use; Automate its use by redeploying Clear Linux OS and +application on new hosts. This naturally minimizes configuration drift, +challenges your monitoring systems, and business continuity plans.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/guides.html b/zh_CN/guides/guides.html new file mode 100644 index 00000000..3fa3c661 --- /dev/null +++ b/zh_CN/guides/guides.html @@ -0,0 +1,1069 @@ + + + + + + + + + + + Guides — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/kernel/kernel-development.html b/zh_CN/guides/kernel/kernel-development.html new file mode 100644 index 00000000..b80febfd --- /dev/null +++ b/zh_CN/guides/kernel/kernel-development.html @@ -0,0 +1,1414 @@ + + + + + + + + + + + Kernel development — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Kernel development

+

This guide shows how to obtain and compile a Linux* kernel source using +Clear Linux* OS development tooling.

+ +
+

Overview

+

The Kernels available in Clear Linux OS 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 Clear Linux OS kernels, and can be +used for development instead.

+
+
+

Request changes be included with the Clear Linux OS kernel

+

If the kernel modification you need is already open source and likely to be +useful to others, consider submitting a request to include it in the +Clear Linux OS kernels. If your change request is accepted, you do not need to maintain +your own modified kernel.

+

Make enhancement requests to the Clear Linux OS Distribution Project on GitHub*.

+
+
+

Set up kernel development environment

+

In some cases, it may be necessary to modify the kernel to suit your specific +needs or to test new kernel code.

+

You can build and install a custom kernel; however you must:

+
    +
  • Disable Secure Boot
  • +
  • Maintain any updates to the kernel going forward
  • +
+

To create a custom kernel, start with the Clear Linux OS development environment. +Then make changes to the kernel, build it, and install it.

+
+

Install the Clear Linux OS development tooling framework

+

Setup of the workspace and tooling used for building source in Clear Linux OS is mostly +automated for you with a setup script. It uses tools from the +os-clr-on-clr bundle.

+

The setup script creates a workspace in the clearlinux folder, with the +subfolders Makefile, packages, and projects. The +projects folder contains the main tools used for making packages in +Clear Linux OS autospec and common.

+

Follow these steps to setup the workspace and tooling for building source:

+
    +
  1. Install the os-clr-on-clr bundle:

    +
    sudo swupd bundle-add os-clr-on-clr
    +
    +
    +
  2. +
  3. Download the user-setup.sh script:

    +
    curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh
    +
    +
    +
  4. +
  5. Make user-setup.sh executable:

    +
    chmod +x user-setup.sh
    +
    +
    +
  6. +
  7. Run the script as an unprivileged user:

    +
    ./user-setup.sh
    +
    +
    +
  8. +
  9. After the script completes, log out and log in again to complete the setup +process.

    +
  10. +
  11. Set your Git user email and username for the repos on your system:

    +
    git config --global user.email "you@example.com"
    +git config --global user.name "Your Name"
    +
    +
    +

    This global setting is used by Clear Linux OS tools that make use of Git.

    +
  12. +
+
+
+

Clone the kernel package

+

Clone the existing kernel package repository from Clear Linux OS as a starting point.

+
    +
  1. Clone the Linux kernel package from Clear Linux OS. Using the +make clone_<PACKAGENAME> command in the +clearlinux/ directory clones the package from the +clearlinux-pkgs repo on GitHub.

    +
    cd ~/clearlinux
    +make clone_linux
    +
    +
    +
  2. +
  3. Navigate into the cloned package directory.

    +
    cd ~/clearlinux/packages/linux
    +
    +
    +
  4. +
+

The “linux” package is the kernel that comes with Clear Linux OS in the 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.

+
+

注解

+

The latest version of the Clear Linux OS kernel package is pulled as a starting +point. An older version can pulled by switching to different git tag by using +git checkout tag/<TAG_NAME>.

+
+
+
+

Change the kernel version

+

Clear Linux OS tends to use the latest kernel available from kernel.org, the Linux +upstream. The kernel version that will be built can be changed in the +RPM SPEC file. While most packages in Clear Linux are typically packaged +using Autospec, the kernel is not. This means control files +provided by autospec are not available and changes must be made manually.

+
    +
  1. Open the Linux kernel package RPM SPEC file in an editor.

    +
    $EDITOR linux.spec
    +
    +
    +
  2. +
  3. Modify the Version, Release, and Source0 URL entries at the top of the +file to change the version of Linux kernel that will be compiled.

    +

    A list of current and available kernel release can be found on +kernel.org.

    +
    Name:           linux
    +Version:        4.20.8
    +Release:        696
    +License:        GPL-2.0
    +Summary:        The Linux kernel
    +Url:            http://www.kernel.org/
    +Group:          kernel
    +Source0:        https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.8.tar.xz
    +Source1:        config
    +Source2:        cmdline
    +
    +%define ktarget  native
    +
    +
    +
    +

    注解

    +
      +
    • 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.
    • +
    +
    +
  4. +
  5. Commit and save the changes to the file.

    +
  6. +
+
+
+

Pull a copy of the Linux kernel source code

+

Obtain a local copy of the source code to make modifications against.

+
    +
  1. Run make sources to pull the kernel source code specified in the RPM +SPEC file. In the example, it downloads the linux-4.20.8.tar.xz file.

    +
    make sources
    +
    +
    +
  2. +
  3. Extract the kernel source code archive. This will create a working copy +of the Linux source that you can modify.

    +
    tar -xvf linux-4.20.8.tar.xz
    +
    +
    +
  4. +
  5. Navigate to the extracted directory. In this example, it has been +extracted into a linux-4.20.8 directory.

    +
    cd linux-4.20.8/
    +
    +
    +
  6. +
+
+
+
+

Customize the Linux kernel source

+

After the kernel sources have been obtained, customizations to the kernel +configuration or source code can be made for inclusion with the kernel +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.

+

These configuration values must be provided in the .config file at +compile time. You will need to make modifications to the .config +file, and include it in the kernel package.

+
    +
  1. 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.

    +
  2. +
  3. If you have an existing .config file from an old kernel, copy it +into the working directory as .config for comparison. +Otherwise, use the Clear Linux OS kernel configuration file as template

    +
    cp ~/clearlinux/packages/linux/config .config
    +
    +
    +
  4. +
  5. Make any desired changes to the .config using a kernel +configuration tool. Below are some popular options:

    +
      +
    • $EDITOR .config - the .config file can be directly edited +for simple changes with names that are already known.
    • +
    • make config - a text-based tool that asks questions +one-by-one to decide configuration options.
    • +
    • make menuconfig - a terminal user interface that provides +menus to decide configuration options.
    • +
    • make xconfig - a graphical user interface that provides +tree views to decide configuration options.
    • +
    +

    More configuration tools can be found by looking at the make help: +make help | grep config

    +
  6. +
  7. Commit and save the changes to the .config file.

    +
  8. +
  9. Copy the .config file from the kernel source directory into +the kernel package directory as config for inclusion in the build.

    +
    cp .config ../config
    +
    +
    +
  10. +
+
+
+

Modify kernel source code

+

Changes to kernel code are applied with patch files. Patch files are +formatted git commits that can be applied to the main source code.

+

You will need to obtain a copy of the source code, +make modifications, generate patch file(s), and add them to the RPM SPEC +file for inclusion during the kernel build.

+

If you have a large number of patches or a more complex workflow, +consider using a patch management tool in addition to Git such as +Quilt.

+
    +
  1. 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.

    +
  2. +
  3. Initialize the kernel source directory as a new git repo and create a +commit with all the existing source files to begin tracking changes.

    +
    git init
    +git add -A
    +git commit -m "Initial commit of Linux kernel source"
    +
    +
    +
  4. +
  5. Apply patches provided by the Clear Linux OS kernel package to the kernel source +in the working directory.

    +
    git am ../*.patch
    +
    +
    +
  6. +
  7. Make any of your desired code changes to the Linux source code files.

    +
  8. +
  9. Track and commit your changes to the local git repo.

    +
    git add <FILENAME>
    +git commit -m "My patch for driver A" <FILENAME>
    +
    +
    +
  10. +
  11. Generate a patch file based on your git commits. +<n> represents the number of local commits to create patch file. +See the git-format-patch documentation for detailed information +on using git format-patch

    +
    git format-patch -<n>
    +
    +
    +
  12. +
  13. Copy the patch files from the patches directory in the linux +source tree to the RPM build directory.

    +
    cp *.patch ~/clearlinux/packages/linux/
    +
    +
    +
  14. +
  15. Navigate back to the RPM build directory.

    +
    cd ~/clearlinux/packages/linux/
    +
    +
    +
  16. +
  17. Open the Linux kernel package RPM SPEC file in an editor.

    +
    $EDITOR linux.spec
    +
    +
    +
  18. +
  19. Locate the section of the SPEC file that contains existing patch +variable definitions and append your patch file name. Ensure the +patch number does not collide with an existing patch. +In this example, the patch file is called +2001-my-patch-for-driver-A.patch

    +
    #
    +# Small Clear Linux Tweaks
    +#
    +Patch0501: 0501-zero-extra-registers.patch
    +Patch0502: 0502-locking-rwsem-spin-faster.patch
    +
    +#Serie1.name WireGuard
    +#Serie1.git  https://git.zx2c4.com/WireGuard
    +#Serie1.tag  00bf4f8c8c0ec006633a48fd9ee746b30bb9df17
    +Patch1001: 1001-WireGuard-fast-modern-secure-kernel-VPN-tunnel.patch
    +#Serie1.end
    +
    +Patch2001: 2001-my-patch-for-driver-A.patch
    +
    +
    +
  20. +
  21. Locate the section of the SPEC file further down that contains +patch application and append your patch file number used in the step above. +In this example, patch2001 is added.

    +
    #
    +# Small tweaks
    +#
    +%patch0501 -p1
    +%patch0502 -p1
    +
    +#Serie1.patch.start
    +%patch1001 -p1
    +#Serie1.patch.end
    +
    +%patch2001 -p1
    +
    +
    +
  22. +
  23. Commit and save the changes to the RPM SPEC file.

    +
  24. +
+
+
+

Modify kernel boot parameters

+

The kernel boot options are passed from the bootloader to the kernel with +command-line parameters.

+

While temporary changes can be made to kernel parameters on a running +system or on a during boot, you can also modify the default parameters that +are persistent and distributed with a customized kernel.

+
    +
  1. Open the kernel cmdline file in an editor.

    +
    $EDITOR cmdline
    +
    +
    +
  2. +
  3. Make any desired change to the kernel parameters. +For example, you can remove the quiet parameter to see more +verbose output of kernel log messages during the boot process.

    +
  4. +
  5. Commit and save the changes to the cmdline file.

    +
  6. +
+

See the kernel parameters documentation for a list of available +parameters.

+
+
+
+

Build and install the kernel

+

After changes have been made to the kernel source and RPM SPEC file, +the kernel is ready to be compiled and packaged into an RPM.

+

The Clear Linux OS development tooling makes use of mock environments to +isolate building of packages in a sanitized workspace.

+
    +
  1. Start the compilation process by issuing the make build +command. This process is typically resource intensive and will take a while.

    +
    make build
    +
    +
    +
    +

    注解

    +

    The mock plugin ccache can be enabled to help speed up any future +rebuilds of the kernel package by caching compiler outputs and reusing +them.

    +
    +
  2. +
  3. The result will be multiple .rpm files in the rpms +directory as output.

    +
    ls rpms/
    +
    +
    +

    The kernel RPM will be named +linux<NAME>-<VERSION>-<RELEASE>.x86_64.rpm

    +
  4. +
  5. The kernel RPM file can be input to the mixer to create a +custom bundle and mix of Clear Linux OS.

    +
  6. +
+

Alternatively, the kernel RPM bundle can be installed manually on a local +machine for testing. This approach works well for individual development or +testing. For a more scalable and customizable approach, consider using the +mixer to provide a custom kernel with updates.

+
    +
  1. Install the kernel onto the local system by extracting the RPM with the +rpm2cpio command.

    +
    rpm2cpio linux<NAME>-<VERSION>-<RELEASE>.x86_64.rpm | (cd /; sudo cpio -i -d -u -v);
    +
    +
    +
  2. +
  3. Update the Clear Linux OS boot manager using clr-boot-manager and reboot.

    +
    sudo clr-boot-manager list-kernels
    +sudo clr-boot-manager set-kernel org.clearlinux.<TARGET>.<VERSION>-<RELEASE>
    +
    +sudo reboot
    +
    +
    +
  4. +
  5. After a reboot, verify the customized kernel is running.

    +
    uname -a
    +
    +
    +
  6. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/kernel/kernel-modules-dkms.html b/zh_CN/guides/kernel/kernel-modules-dkms.html new file mode 100644 index 00000000..868ce21a --- /dev/null +++ b/zh_CN/guides/kernel/kernel-modules-dkms.html @@ -0,0 +1,1317 @@ + + + + + + + + + + + Add kernel modules with DKMS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Add kernel modules with DKMS

+

This guide describes how to add kernel modules with +DKMS.

+ +
+

Overview

+

Certain kernel modules are enabled by default in Clear Linux* OS. 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 +DKMS or refer to Add kernel modules manually.

+
+
+

Description

+

Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree).

+

DKMS is a framework that facilitates +the building and installation of kernel modules. DKMS allows Clear Linux OS to provide +hooks that automatically rebuild modules against new kernel versions.

+
+
+

Kernel module availability

+

Clear Linux OS comes with many upstream kernel modules available for use. Using an +existing module is significantly easier to maintain and retains signature +verification of the Clear Linux OS kernel. For more information on Clear Linux OS security +practices, see the OS Security page.

+

Before continuing, check if the kernel module you’re looking for is already +available in Clear Linux OS or submit a request to add the module.

+
+

Check if the module is already available

+

You can search for kernel module file names, which end with the .ko +file extension, using the swupd search command, as shown in the +following example. See swupd for more information.

+
sudo swupd search ${module_name}.ko
+
+
+
+
+

Submit a request to add the module

+

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 Clear Linux OS kernel.

+

Make enhancement requests to the Clear Linux OS ‘Distribution Project’_ on GitHub.

+
+
+
+

Install DKMS

+

The kernel-native-dkms bundle provides the dkms program and +Linux kernel headers, which are required for compiling kernel modules.

+

The kernel-native-dkms bundle also:

+
    +
  • Adds a systemd update trigger +(/usr/lib/systemd/system/dkms-new-kernel.service) to automatically +run DKMS to rebuild modules after a kernel upgrade occurs with swupd +update.
  • +
  • Disables kernel module signature verification by appending a kernel +command-line parameter (module.sig_unenforce) from the +/usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf file.
  • +
  • Adds a notification to the Message of the Day (MOTD) indicating kernel +module signature verification is disabled.
  • +
+
+

警告

+

We recommend that you always review the swupd update output +to make sure kernel modules were successfully rebuilt against the new +kernel. This is especially important for systems where a successful boot +relies on a kernel module.

+
+

Install the kernel-native-dkms or kernel-lts-dkms +bundle:

+
    +
  1. Determine which kernel variant is running on Clear Linux OS. Only the native +and lts kernels are enabled to build and load out-of-tree kernel modules +with DKMS.

    +
    $ uname -r
    +5.XX.YY-ZZZZ.native
    +
    +
    +

    Ensure .native or .lts is in the kernel name.

    +
  2. +
  3. Install the DKMS bundle corresponding to the installed kernel. Use +kernel-native-dkms for the native kernel or +kernel-lts-dkms for the lts kernel.

    +
    sudo swupd bundle-add kernel-native-dkms
    +
    +
    +

    or

    +
    sudo swupd bundle-add kernel-lts-dkms
    +
    +
    +
  4. +
  5. Update the Clear Linux OS bootloader and reboot.

    +
    sudo clr-boot-manager update
    +reboot
    +
    +
    +
  6. +
+
+
+

Build, install, and load an out-of-tree module

+

Follow the steps in this section if you are an individual user or testing, +and you need an out-of-tree kernel module that is not available through +Clear Linux OS. For a more scalable and customizable approach, we recommend using +mixer to provide a custom kernel and updates.

+
+

Prerequisites

+

Before you begin, you must:

+
    +
  • Disable Secure Boot in UEFI/BIOS. The loading of new out-of-tree modules +modifies the signatures that Secure Boot relies on for trust.
  • +
  • Obtain a kernel module package in the form of source code or +pre-compiled binaries.
  • +
+
+
+

Obtain kernel module source

+

A required 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:

+
    +
  • Source code without a dkms.conf file
  • +
  • Source code with a premade dkms.conf file
  • +
  • Source code with a premade dkms.conf file and precompiled module +binaries
  • +
  • Precompiled module binaries only (without source code)
  • +
+

Of the package types listed above, only precompiled kernel module binaries +will not work, because Clear Linux OS 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 dkms.conf file, you must manually create +a dkms.conf file, described later in this document.

+
    +
  1. Download the kernel module’s source code.

    +
      +
    • Review the available download options. Some kernel modules provide +separate archives that are specifically enabled for DKMS support.
    • +
    • Review the README documentation, because it often provides required +information to build the module with DKMS support.
    • +
    +
    curl -O http://<URL-TO-KERNEL-MODULE-SOURCE>.tar.gz
    +tar -xvf <KERNEL-MODULE-SOURCE>.tar.gz
    +cd <KERNEL-MODULE-SOURCE>/
    +cat README
    +
    +
    +
  2. +
+
+
+

Build kernel module with an existing dkms.conf

+

If the kernel module maintainer packaged the source archive with the +dkms mktarball command, the entire archive can be passed to the +dkms ldtarball which completes many steps for you.

+

The archive contains the required dkms.conf file, and may contain +a dkms_source_tree directory and a dkms_binaries_only +directory.

+
    +
  1. Run the dkms ldtarball command against the kernel +module archive.

    +
    dkms ldtarball <KERNEL-MODULE-SOURCE_WITH_DKMS>.tar.gz
    +
    +
    +

    dkms ldtarball places the kernel module source under +/usr/src/<MODULE-NAME>-<MODULE-VERSION>/, builds it if necessary, +and adds the module into the DKMS tree.

    +
  2. +
  3. Verify the kernel module is detected by checking the output of the +dkms status command.

    +
    dkms status
    +
    +
    +
  4. +
  5. Install the kernel module.

    +
    dkms install -m <MODULE-NAME> -v <MODULE-VERSION>
    +
    +
    +
  6. +
+
+
+

Build kernel module without an existing dkms.conf

+

If the kernel module source does not contain a dkms.conf file or the +dkms ldtarball command encounters errors, you must manually +create the file.

+

Review the kernel module README documentation for guidance on what needs to be +in the dkms.conf file, including special variables that may be +required to build successfully.

+

Here are some additional resources that can be used for reference:

+
    +
  • DKMS manual page (man dkms) shows detailed syntax in the +DKMS.CONF section.
  • +
  • Ubuntu community wiki entry for the Kernel DKMS Package shows an example +where a single package contains multiple modules.
  • +
  • Sample dkms.conf file in the GitHub* repository for the DKMS project.
  • +
+
+

注解

+

AUTOINSTALL=yes must be set in the dkms.conf for the module to +be automatically recompiled with Clear Linux OS updates.

+
+

The instructions below show a generic example:

+
    +
  1. Create or modify the dkms.conf file inside of the extracted source +code directory.

    +
    $EDITOR dkms.conf
    +
    +MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
    +CLEAN="make -C src/ clean"
    +BUILT_MODULE_NAME=custom_module
    +BUILT_MODULE_LOCATION=src/
    +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.

    +
  2. +
  3. Copy the kernel module source code into the /usr/src/ directory.

    +
    sudo mkdir /usr/src/<PACKAGE_NAME>-<PACKAGE_VERSION>
    +sudo cp -Rv . /usr/src/<PACKAGE_NAME>-<PACKAGE_VERSION>
    +
    +
    +
    +

    注解

    +

    <PACKAGE_NAME> and <PACKAGE_VERSION> must match the entries in the +dkms.conf file.

    +
    +
  4. +
  5. Add the kernel module to the DKMS tree so that it is tracked by DKMS.

    +
    sudo dkms add -m <MODULE-NAME>
    +
    +
    +
  6. +
  7. Build the kernel module using DKMS. If the build encounters errors, +you may need to edit the dkms.conf file.

    +
    sudo dkms build -m <MODULE-NAME> -v <MODULE-VERSION>
    +
    +
    +
  8. +
  9. Install the kernel module using DKMS.

    +
    sudo dkms install -m <MODULE-NAME> -v <MODULE-VERSION>
    +
    +
    +
  10. +
+
+
+

Load kernel module

+

By default, DKMS installs modules “in-tree” under /lib/modules so the +modprobe command can be used to load them.

+
    +
  1. Load the installed module with the modprobe command.

    +
    +
    sudo modprobe <MODULE-NAME>
    +
    +
    +
    +
  2. +
  3. Validate the kernel module is loaded.

    +
    lsmod | grep <MODULE-NAME>
    +
    +
    +
  4. +
+
+
+
+

Examples

+
+

Optional: Specify module options and aliases

+

Use the modprobe command to load a module and set options.

+

modprobe may add or remove more than one module due to module +interdependencies. You can specify which options to use with individual modules, +by using configuration files under the /etc/modprobe.d directory.

+
sudo mkdir /etc/modprobe.d
+
+
+

All files underneath the /etc/modprobe.d directory that end with the +.conf extension specify module options to use when loading. You can use +.conf files to create convenient aliases for modules or to override the +normal loading behavior altogether for those with special requirements.

+

Learn more about modprobe on the modprobe.d manual page:

+
man modprobe.d
+
+
+
+
+

Optional: Configure kernel modules to load at boot

+

Use the /etc/modules-load.d configuration directory to specify kernel +modules to load automatically at boot.

+
sudo mkdir /etc/modules-load.d
+
+
+

All files underneath the /etc/modules-load.d directory that end with +the .conf extension contain a list of module names of aliases (one per +line) to load at boot.

+

Learn more about module loading in the modules-load.d manual page:

+
man modules-load.d
+
+
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/kernel/kernel-modules.html b/zh_CN/guides/kernel/kernel-modules.html new file mode 100644 index 00000000..da37037a --- /dev/null +++ b/zh_CN/guides/kernel/kernel-modules.html @@ -0,0 +1,1177 @@ + + + + + + + + + + + Add kernel modules manually — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Add kernel modules manually

+

This guide describes how to add kernel modules manually.

+ +
+

Overview

+

Certain kernel modules are enabled by default in Clear Linux* OS. 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 Add kernel modules with DKMS.

+
+
+

Description

+

Kernel modules are additional pieces of software capable of being inserted +into the Linux kernel to add functionality, such as a hardware driver. +Kernel modules may already be part of the Linux source tree (in-tree) or may +come from an external source, such as directly from a vendor (out-of-tree).

+
+
+

Kernel module availability

+

Clear Linux OS comes with many upstream kernel modules available for use. Using an +existing module is significantly easier to maintain and retains signature +verification of the Clear Linux OS kernel. For more information on Clear Linux OS security +practices, see the OS Security page.

+

Before continuing, check if the kernel module you’re looking for is already +available in Clear Linux OS or submit a request to add the module.

+
+

Check if the module is already available

+

You can search for kernel module file names, which end with the .ko +file extension, using the swupd search command, as shown in the +following example. See swupd for more information.

+
sudo swupd search ${module_name}.ko
+
+
+
+
+

Submit a request to add the module

+

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 Clear Linux OS kernel.

+

Make enhancement requests to the Clear Linux OS ‘Distribution Project’_ on GitHub.

+
+
+
+

Build, install, and load an out-of-tree module

+

Follow the steps in this section if you are an individual user or testing, and +you need an out-of-tree kernel module that is not available through Clear Linux OS. For +a more scalable and customizable approach, we recommend using the +mixer to provide a custom kernel and updates.

+
+

Prerequisites

+

Before you begin, you must:

+
    +
  • Disable Secure Boot.
  • +
  • Disable kernel module integrity checking.
  • +
  • Have a kernel module package in the form of source code.
  • +
  • Rebuild the module against new versions of the Linux kernel.
  • +
+
+

注解

+

Any time the kernel is upgraded on your Clear Linux system, you must +rebuild your out-of-tree modules.

+
+
+
+

Build and install kernel module

+
    +
  1. Determine which kernel variant is running on Clear Linux OS. In the example below, +the native kernel is in use.

    +
    $ uname -r
    +5.XX.YY-ZZZZ.native
    +
    +
    +
  2. +
  3. Install the kernel dev bundle corresponding to the installed kernel. The +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.
    • +
    +
    sudo swupd bundle-add linux-dev
    +
    +
    +
  4. +
  5. Follow instructions from the kernel module source code to compile the +kernel module. For example:

    +
    curl -O http://<URL-TO-KERNEL-MODULE-SOURCE>.tar.gz
    +tar -xvf <KERNEL-MODULE-SOURCE>.tar.gz
    +cd <KERNEL-MODULE-SOURCE>/
    +cat README
    +
    +
    +
  6. +
+
+
+

Load kernel module

+
    +
  1. Disable Secure Boot in your system’s UEFI settings, if you have enabled +it. The loading of new out-of-tree modules modifies the signatures that +Secure Boot relies on for trust.

    +
  2. +
  3. Disable signature checking for the kernel by modifying the kernel boot +parameters and reboot the system.

    +

    All kernel modules from Clear Linux OS have been signed to enforce kernel security. +However, out-of-tree modules break this chain of trust so this mechanism +needs to be disabled.

    +
    sudo mkdir -p /etc/kernel/cmdline.d
    +echo "module.sig_unenforce" | sudo tee /etc/kernel/cmdline.d/allow-unsigned-modules.conf
    +
    +
    +
  4. +
  5. Update the boot manager and reboot the system to implement the changed +kernel parameters.

    +
    sudo clr-boot-manager update
    +sudo reboot
    +
    +
    +
    +

    注解

    +

    If successful, the clr-boot-manager update command does not +return any console output.

    +
    +
  6. +
  7. After rebooting, manually load out-of-tree modules using the +insmod command.

    +
    sudo insmod </PATH/TO/MODULE.ko>
    +
    +
    +
  8. +
+
+
+
+

Examples

+
+

Optional: Specify module options and aliases

+

Use the modprobe command to load a module and set options.

+

modprobe may add or remove more than one module due to module +interdependencies. You can specify which options to use with individual modules, +by using configuration files under the /etc/modprobe.d directory.

+
sudo mkdir /etc/modprobe.d
+
+
+

All files underneath the /etc/modprobe.d directory that end with the +.conf extension specify module options to use when loading. You can use +.conf files to create convenient aliases for modules or to override the +normal loading behavior altogether for those with special requirements.

+

Learn more about modprobe on the modprobe.d manual page:

+
man modprobe.d
+
+
+
+
+

Optional: Configure kernel modules to load at boot

+

Use the /etc/modules-load.d configuration directory to specify kernel +modules to load automatically at boot.

+
sudo mkdir /etc/modules-load.d
+
+
+

All files underneath the /etc/modules-load.d directory that end with +the .conf extension contain a list of module names of aliases (one per +line) to load at boot.

+

Learn more about module loading in the modules-load.d manual page:

+
man modules-load.d
+
+
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/architect-lifecycle.html b/zh_CN/guides/maintenance/architect-lifecycle.html new file mode 100644 index 00000000..15c32df8 --- /dev/null +++ b/zh_CN/guides/maintenance/architect-lifecycle.html @@ -0,0 +1,1058 @@ + + + + + + + + + + + Architect the life-cycle of Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Architect the life-cycle of Clear Linux* OS

+

This guide describes the basic, recommended infrastructure and workflow for +maintaining a Clear Linux* OS derivative.

+ +
+

Prerequisites

+
    +
  • A repository with software RPM artifacts and a CI/CD system with a Clear Linux OS +machine for building mixes
  • +
  • Experience using mixer to create a Clear Linux OS-based distro
  • +
  • Experience using swupd for maintaining the Clear Linux OS +build environment
  • +
  • Familiarity with Clear Linux OS architecture and reuse of its content in releases
  • +
+
+
+

Description

+

Maintaining a Clear Linux OS derivative requires:

+
    +
  • Monitoring upstream Clear Linux OS 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 Clear Linux OS derivative. We divide deployment of this infrastucture in two +parts: Content Workflow; and Release Workflow, shown in Figure 1.

+
+Architect the life-cycle +

Figure 1: Architect the life-cycle

+
+
+
+

Content Workflow

+

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 +Watcher Pipeline checks Clear Linux OS and a content provider, such as Koji, to +determine if a new release is necessary.

+
+
+

Release Workflow

+

The Release Workflow (Figure 1) gathers the content of the RPMs and +ensures it can be consumed by mixer. A content web server +hosts the Clear Linux OS derivative, to which targets connect for updating their OSes. +As an integral part of this toolchain, the Release Pipeline enables these +derivatives to incorporate Clear Linux OS content into their own custom +content. The Watcher Pipeline triggers the Release Pipeline to create +new releases.

+
+
+

Implementation

+

The Clear Linux OS Distro Factory manages the Release Workflow. For detailed information +about Distro Factory deployment, refer to the clr-distro-factory GitHub* repo.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/assign-static-ip.html b/zh_CN/guides/maintenance/assign-static-ip.html new file mode 100644 index 00000000..9079c9e8 --- /dev/null +++ b/zh_CN/guides/maintenance/assign-static-ip.html @@ -0,0 +1,1139 @@ + + + + + + + + + + + Assign a static IP address — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Assign a static IP address

+

This guide explains how to assign a static IP address. This may be helpful in +scenarios such as a network with no DHCP server.

+ +
+

Identify which program is managing the interface

+

New installations of Clear Linux* OS use NetworkManager as the default network interface +manager for all network connections.

+
+

注解

+
    +
  • The cloud Clear Linux OS images continue to use systemd-networkd to manage +network connections.
  • +
  • In earlier Clear Linux OS 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, verify which +program is managing the network interface.

+
    +
  1. Check the output of nmcli device to see if NetworkManager is +managing the device.

    +
    nmcli device status
    +
    +
    +

    If the STATE column for the device shows connected or disconnected, the +network configuration is being managed by NetworkManager, then use the +instructions for using NetworkManager.

    +

    If the STATE column for the device shows unmanaged, then check if the +device is being managed by systemd-networkd.

    +
  2. +
  3. Check the output of networkctl list to see if +systemd-networkd is managing the device.

    +
    networkctl list
    +
    +
    +

    If the SETUP column for the device shows configured, the network +configuration is being managed by systemd-networkd, then use the +instructions for using systemd-networkd.

    +
  4. +
+
+
+

Using NetworkManager

+

Network connections managed by NetworkManager are stored as files with the +.nmconnection file extension in the +/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.

+
    +
  1. Identify the existing connection name:

    +
    nmcli connection show
    +
    +
    +

    Sample output:

    +
    NAME                UUID                                  TYPE            DEVICE
    +Wired connection 1  00000000-0000-0000-0000-000000000000  802-3-etherneten01
    +
    +
    +

    If a connection does not exist, create it with the +nmcli connection add command.

    +
  2. +
  3. Modify the connection to use a static IP address. Replace the variables in +brackets with the appropriate values. Replace [CONNECTION_NAME] with the +NAME from the command above.

    +
    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 +/etc/NetworkManager/system-connections/*.nmconnection. can be edited +directly.

    +
  4. +
  5. Restart the NetworkManager server to reload the DNS servers:

    +
    sudo systemctl restart NetworkManager
    +
    +
    +
  6. +
  7. Verify your static IP address details have been set:

    +
    nmcli
    +
    +
    +
  8. +
+
+
+

Using systemd-networkd

+

Network connections managed by systemd-networkd are stored as files with the +.network file extension the /etc/systemd/network/ directory.

+

Files to manipulate network connections managed by systemd-networkd must be +created manually.

+
    +
  1. Create the /etc/systemd/network directory if it does not already exist:

    +
    sudo mkdir -p /etc/systemd/network
    +
    +
    +
  2. +
  3. Create a .network file and add the following content. Replace the +variables in brackets with the appropriate values. Replace [INTERFACE_NAME] +with LINK from the output of the networkctl list command that was +run previously.

    +
    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.

    +
  4. +
  5. Restart the systemd-networkd service:

    +
    sudo systemctl restart systemd-networkd
    +
    +
    +
  6. +
  7. Verify your static IP address details have been set:

    +
    networkctl status
    +
    +
    +
  8. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/bulk-provision.html b/zh_CN/guides/maintenance/bulk-provision.html new file mode 100644 index 00000000..fea69b29 --- /dev/null +++ b/zh_CN/guides/maintenance/bulk-provision.html @@ -0,0 +1,1150 @@ + + + + + + + + + + + Bulk provision — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Bulk provision

+

This guide explains how to perform a bulk provision of Clear Linux* OS using a +combination of the Clear Linux OS installer, Ister, and +ICIS.

+ +
+

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.

+
+Bulk provision information flow +

Figure 1: Bulk provision information flow

+
+
+
+

Prerequisites

+

Before performing a bulk provision, verify you have a PXE server capable +of performing network boots of Clear Linux OS. Please refer to our +guide on how to perform an iPXE boot using +NAT for details.

+

Because a bulk provision relies on a reboot, ensure the following +preparations have been made:

+
    +
  • No existing disks are bootable.
  • +
  • The network boot option must come immediately after the disk boot option +on any computer performing the installation.
  • +
+
+
+

Configuration

+
    +
  1. Install ICIS by following the getting started guide on the +ICIS GitHub* repository.

    +
  2. +
  3. Create an Ister installation file and save it to the +static/ister directory within the web hosting directory for +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 +up. Lastly, the file outlines which bundles to install. See our +Available bundles document for the list of available bundles. The +following example shows the contents of an Ister installation file:

    +
    {
    +    "DestinationType":"physical",
    +    "PartitionLayout":[
    +        {"disk":"sda", "partition":1, "size":"512M", "type":"EFI"},
    +        {"disk":"sda", "partition":2, "size":"512M", "type":"swap"},
    +        {"disk":"sda", "partition":3, "size":"rest", "type":"linux"}
    +    ],
    +    "FilesystemTypes":[
    +        {"disk":"sda", "partition":1, "type":"vfat"},
    +        {"disk":"sda", "partition":2, "type":"swap"},
    +        {"disk":"sda", "partition":3, "type":"ext4"}
    +    ],
    +    "PartitionMountPoints":[
    +        {"disk":"sda", "partition":1, "mount":"/boot"},
    +        {"disk":"sda", "partition":3, "mount":"/"}
    +    ],
    +    "Version":"latest",
    +    "Bundles":[
    +        "kernel-native",
    +        "os-core",
    +        "os-core-update",
    +        "os-cloudguest"
    +    ],
    +    "IsterCloudInitSvc":"http://192.168.1.1:60000/icis/"
    +}
    +
    +
    +
    +

    重要

    +

    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 +install.

    +
    +
  4. +
  5. Create an Ister configuration file to define the location of the +Ister installation file. Save it to the static/ister directory +within the web hosting directory of ICIS. The following example shows +an Ister configuration file:

    +
    template=http://192.168.1.1:60000/icis/static/ister/ister.json
    +
    +
    +
  6. +
  7. 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 +kernel parameter value. The following example shows an iPXE boot script +with the isterconf parameter:

    +
    #!ipxe
    +kernel linux quiet init=/usr/lib/systemd/systemd-bootchart initcall_debug tsc=reliable no_timer_check noreplace-smp rw initrd=initrd isterconf=http://192.168.1.1:60000/icis/static/ister/ister.conf
    +initrd initrd
    +boot
    +
    +
    +
    +

    注解

    +

    After the network image of Clear Linux OS boots, Ister inspects the +parameters used during boot in /proc/cmdline to find the +location of the Ister configuration file.

    +
    +
  8. +
  9. Write a cloud-init document to customize the instance of the installation +according to your requirements. The cloud-init documentation provides a +guide on how to write a cloud-init document. The guide covers the +customization options provided by cloud-init after an installation.

    +
  10. +
  11. Save the cloud-init document to the static/roles directory within +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”.

    +
  12. +
  13. After creating the roles, also known as cloud-init files, assign roles to +MAC addresses of PXE clients. To do so, modify the config.txt file +in the static directory within the web hosting directory of ICIS. +The following example shows an example assignment:

    +
    # MAC address,role
    +00:01:02:03:04:05,ciao
    +
    +
    +

    If MAC addresses of PXE clients are not listed within the +config.txt file, a default role for those MAC address may be +defined as follows:

    +
    # MAC address,role
    +default,ciao
    +
    +
    +
  14. +
  15. 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
    • +
    +
  16. +
  17. Power on the PXE client and watch it boot and install Clear Linux OS.

    +
  18. +
  19. Power-cycle the PXE client and watch it customize the Clear Linux OS installation.

    +
  20. +
+

Congratulations! You have successfully performed a bulk provision of Clear Linux OS.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/cpu-performance.html b/zh_CN/guides/maintenance/cpu-performance.html new file mode 100644 index 00000000..425c72e7 --- /dev/null +++ b/zh_CN/guides/maintenance/cpu-performance.html @@ -0,0 +1,1148 @@ + + + + + + + + + + + CPU Power and Performance — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

CPU Power and Performance

+

This guide explains the CPU power and performance mechanisms in Clear Linux* OS.

+ +
+

Overview

+

Modern x86 CPUs employ a number of features +and technologies to balance performance, energy, and thermal efficiencies.

+

By default, Clear Linux OS 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.

+
+
+

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 (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:

+
cat /sys/devices/system/cpu/cpuidle/current_driver
+
+
+

For troubleshooting, C-states can be limited with a kernel command line boot +parameter by adding processor.max_cstate=N intel_idle.max_cstate=N +or completely disabled with idle=poll.

+
+

注解

+
    +
  • processor.max_cstate=0 is changed to processor.max_cstate=1 +by the kernel to be a valid value.
  • +
  • intel_idle.max_cstate=0 disables the Intel Idle driver, not set +it to C-state 0.
  • +
+
+
+
+

P-states (performance states)

+

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.

+

P-states can typically be limited or disabled in a system’s firmware (UEFI/BIOS).

+
+

Turbo boost

+

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.

+

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 Clear Linux OS 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 C-states and 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:

+
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
+
+
+
+
+

Scaling governor

+

Clear Linux OS 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:

+
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
+
+
+

To change the CPU frequency scaling governor:

+
    +
  1. Disable Clear Linux OS enforcement of certain power and performance settings:

    +
    sudo systemctl mask clr-power.timer
    +
    +
    +
  2. +
  3. Change the governor. In the example below, the governor is set to +performance:

    +
    echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    +
    +
    +
  4. +
+

The list of all governors can be found in the Linux kernel documentation on +CPUFreq Governors.

+
+

注解

+

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 Clear Linux OS and starts automatically if battery +power is detected. thermald can be manually enabled using the systemd service +by running the command:

+
sudo systemctl enable thermald
+sudo systemctl start thermald
+
+
+

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:

+
sudo swupd bundle-add desktop-apps-extras
+sudo usermod -a -G power <USER>
+ThermalMonitor
+
+
+
+

注解

+

After adding a new group, you must log out and log back in for the new group +to take effect.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/developer-workstation.html b/zh_CN/guides/maintenance/developer-workstation.html new file mode 100644 index 00000000..184cd523 --- /dev/null +++ b/zh_CN/guides/maintenance/developer-workstation.html @@ -0,0 +1,1105 @@ + + + + + + + + + + + Developer Workstation — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Developer Workstation

+

This guide helps you find the minimum set of bundles needed to start your +Clear Linux* OS development project.

+

Before continuing, review the swupd guide to learn more +about the swupd tool and how Clear Linux OS simplifies software versioning compared to +other Linux* distributions.

+ +
+

Workstation Setup

+

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 Clear Linux OS development, you can add the large bundle +*os-clr-on-clr*. 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 +Table 1 as a starting point.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Developer Profiles
Clear Linux OS BundleInternet of Things (IoT)System AdministratorClient/Cloud/Web Developer
editors
network-basic
openssh-server
webserver-basic 
application-server 
database-basic 
desktop-autostart
dev-utils  
+
+ +
+

Core Concepts

+

We recommend that you understand these core concepts in Clear Linux OS before +developing your project.

+ +
+

Other resources for developers

+ +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/download-verify-decompress.html b/zh_CN/guides/maintenance/download-verify-decompress.html new file mode 100644 index 00000000..5b011ebc --- /dev/null +++ b/zh_CN/guides/maintenance/download-verify-decompress.html @@ -0,0 +1,1230 @@ + + + + + + + + + + + Download, verify, and decompress a Clear Linux* OS image — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Guides »
  • + +
  • Download, verify, and decompress a Clear Linux* OS image
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Download, verify, and decompress a Clear Linux* OS image

+

This guide describes the available types of Clear Linux OS images, where to +download them, how to verify their integrity, and how to decompress them. +Follow the steps for your OS.

+ +

Clear Linux* OS offers many types of images for different platforms and environments.

+

The naming convention of a Clear Linux OS image filename is:

+
clear-[version number]-[image type].[compression type]
+
+
+
    +
  • The [version number] field specifies the version number.
  • +
  • The [image type] field specifies the type of image and its corresponding +file format.
  • +
  • The [compression type] field specifies the compression type. Two types of +compressions are used: GNU* zip (.gz) and XZ (.xz).
  • +
+
+

Linux OS steps

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Open a Terminal.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Verify the integrity of the image and compare it to its original checksum +with the command:

    +
    sha512sum -c ./clear-[version number]-[image type].[compression type]-SHA512SUMS
    +
    +
    +
  8. +
+

If the checksum of the downloaded image is different than the original +checksum, a warning is displayed with a message indicating the computed +checksum does not match. Otherwise, the name of the image is printed on +the screen followed by OK.

+

For a more in-depth discussion of image verification including checking the +certificate see Image content validation.

+
+
+

Decompress the Clear Linux OS image

+

Released Clear Linux OS images are compressed with either GNU zip (.gz) or XZ +(.xz). The compression type depends on the target platform or +environment. To decompress the image, follow these steps:

+
    +
  1. Open a Terminal.

    +
  2. +
  3. Go to the directory with the downloaded image.

    +

    To decompress an XZ image, enter:

    +
    unxz clear-[version number]-[image type].xz
    +
    +
    +

    To decompress a GZ image, enter:

    +
    gunzip clear-[version number]-[image type].gz
    +
    +
    +
  4. +
+
+
+
+

macOS* steps

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Open a Terminal.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Verify the integrity of the image and compare it to its original checksum +with the command:

    +
    shasum -a512 clear-[version number]-[image type].[compression type] | diff clear-[version number]-[image type].[compression type]-SHA512SUMS -
    +
    +
    +
  8. +
+

If the checksum of the downloaded image is different than the original +checksum, the differences will be displayed. Otherwise, an empty output indicates +a match and your downloaded image is good.

+
+
+

Decompress the Clear Linux OS image

+

We compress all released Clear Linux OS images by default with either GNU zip +(.gz) or xz (.xz). The compression type we use depends on the target +platform or environment. To decompress the image, follow these steps:

+
    +
  1. Open a Terminal.

    +
  2. +
  3. Go to the directory with the downloaded image.

    +
  4. +
  5. Use the gunzip command to decompress either compression type. For example:

    +
    gunzip clear-[version number]-[image type].xz
    +gunzip clear-[version number]-[image type].gz
    +
    +
    +
  6. +
+
+
+
+

Windows* OS steps

+
+

Verify the integrity of the Clear Linux OS image

+

Before you use a downloaded Clear Linux OS image, verify its integrity. This action +eliminates the small chance of a corrupted image due to download issues. To +support verification, each released Clear Linux OS image has a corresponding SHA512 +checksum file designated with the suffix -SHA512SUMS.

+
    +
  1. Download the corresponding SHA512 checksum file of your Clear Linux OS image.

    +
  2. +
  3. Start Command Prompt.

    +
  4. +
  5. Go to the directory with the downloaded image and checksum files.

    +
  6. +
  7. Get the SHA512 checksum of the image with the command:

    +
    CertUtil -hashfile ./clear-[version number]-[image type].[compression type] sha512
    +
    +
    +
  8. +
  9. Manually compare the output with the original checksum value shown in +the downloaded checksum file and make sure they match.

    +
  10. +
+
+
+

Decompress the Clear Linux OS image

+

Released Clear Linux OS images are compressed with either GNU zip (.gz) or XZ +(.xz). The compression type depends on the target platform or +environment. To decompress the image, follow these steps:

+
    +
  1. Download and install 7-Zip.

    +
  2. +
  3. Go to the directory with the downloaded image and right-click it.

    +
  4. +
  5. From the pop-up menu, select 7-Zip and select +Extract Here as shown in Figure 1.

    +
    +7-Zip extract file +

    Figure 1: Windows 7-Zip extract file.

    +
    +
  6. +
+
+
+
+

Image types

+

Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific.

+ + ++++ + + + + + + + + + + + + + +
Table 1: Types of platform-independent Clear Linux OS images
Image TypeDescription
live-desktop.img or live-desktop.isoImage for booting to GNOME* desktop to preview or install the OS.
live-server.img or live-server.isoImage for booting to server command prompt to preview or install the OS.
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2: Types of platform-specific Clear Linux OS images
Image TypeDescription
aws.imgImage suitable for use with Amazon* AWS*.
azure.vhdVirtual Hard Disk for use on Microsoft* Azure* cloud platform.
azure-docker.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with Docker* pre-installed.
azure-machine-learning.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with the machine-learning-basic bundle installed.
cloudguest.imgImage with generic cloud guest virtual machine (VM) requirements installed.
gce.tarImage with the Google Compute Engine (GCE) specific kernel.
hyperv.vhdxVirtual Hard Disk for use with Microsoft Hyper-V* hypervisor. Includes optimized kernel for Hyper-V.
kvm.imgImage for booting in a simple VM with start_qemu.sh. Includes +optimized kernel for KVM.
kvm-legacy.imgImage for booting in a simple VM using legacy BIOS, if using start_qemu.sh make sure to remove -bios parameter.
pxe.tarImage suitable for use with PXE server.
vmware.vmdkVirtual Machine Disk for VMware* platforms inclduing Player, Workstation, and ESXi.
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/enable-user-space.html b/zh_CN/guides/maintenance/enable-user-space.html new file mode 100644 index 00000000..39854ee1 --- /dev/null +++ b/zh_CN/guides/maintenance/enable-user-space.html @@ -0,0 +1,1075 @@ + + + + + + + + + + + Create and enable a new user space — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Create and enable a new user space

+

This guide provides steps to complete the following basic setup tasks for +a newly installed Clear Linux* OS system:

+ +
+

Create a new user

+

To create a new user and set a password for that user, enter the following +commands as a root user:

+
useradd <userid>
+passwd <userid>
+
+
+

Replace the <userid> with the name of the user account you want to create +including the password for that user. The 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

+

Before logging off as root and logging into your new user account, +enable the sudo command for your new <userid>.

+

To be able to execute all applications with root privileges, add the +<userid> to the wheel group.

+
    +
  1. Add <userid> to the wheel group:

    +
    usermod -G wheel -a <userid>
    +
    +
    +
  2. +
  3. Log out of root and into the new <userid>.

    +

    To log off as root, enter exit.

    +
  4. +
  5. Enter the new <userid> and the password created earlier.

    +

    You will now be in the home directory of <userid>.

    +
  6. +
+
+
+

Install and update the OS software to its current version

+

The Clear Linux OS software utility swupd allows you to perform +system updates while reaping the benefits of upstream development.

+

To update your newly installed OS, run:

+
sudo swupd update
+
+
+
+
+

Add a bundle

+

Software applications are installed as bundles using the command +swupd bundle-add. Experienced Linux users might compare swupd +to running apt-get or yum install for package +management. However Clear Linux OS 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:

+
swupd bundle-add sysadmin-basic
+
+
+

View a full list of bundles and packages installed with the sysadmin-basic +bundle. You can also view all bundles for Clear Linux OS, active or deprecated.

+

Expand your knowledge of swupd and check out our developer resources:

+ +
+
+

Next steps

+

Check out our guides and tutorials.

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/fix-broken-install.html b/zh_CN/guides/maintenance/fix-broken-install.html new file mode 100644 index 00000000..93371dd0 --- /dev/null +++ b/zh_CN/guides/maintenance/fix-broken-install.html @@ -0,0 +1,1103 @@ + + + + + + + + + + + Fix a broken installation — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Fix a broken installation

+

This guide explains how to fix a broken installation of Clear Linux* OS using a live +desktop image on a USB.

+ +
+

Overview

+

This guide assumes you have installed Clear Linux OS 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 +swupd owns in /usr. Files outside of this path, such +as /home/, /etc, /var, etc., cannot be repaired by this +process.

+
+
+

Prerequisites

+ +
+
+

Boot a live desktop image to fix target system

+
    +
  1. Boot the Clear Linux OS live desktop image.
  2. +
+
+
+

Install from live image

+

After you download and burn the live desktop image on a USB drive, follow +these steps.

+
    +
  1. Insert the USB drive into an available USB slot.

    +
  2. +
  3. Power on the system.

    +
  4. +
  5. Open the system BIOS setup menu by pressing the F2 key. +Your BIOS setup menu entry point may vary.

    +
  6. +
  7. In the setup menu, enable the UEFI boot and set the USB drive as the +first option in the device boot order.

    +
  8. +
  9. Save these settings, e.g. F10, and exit.

    +
  10. +
  11. Reboot the target system.

    +
  12. +
  13. Select Clear Linux OS in the boot menu, shown in Figure 1.

    +
    +Clear Linux OS in boot menu +

    Figure 1: Clear Linux OS in boot menu

    +
    +
  14. +
+
+
+

Mount root partition, verify, and fix

+
    +
  1. Open a Terminal window.

    +
  2. +
  3. Ensure the system is connected to the network.

    +
  4. +
  5. Mount the system’s root partition.

    +
      +
    1. To find the root partition, run:

      +
      lsblk
      +
      +
      +

      We’ll use /dev/sda3/ as the root partition example.

      +
    2. +
    3. Next, mount the partition to the /mnt folder.

      +
      sudo mount /dev/sda3 /mnt
      +
      +
      +
    4. +
    +
  6. +
  7. Verify that you mounted the correct root partition by checking for some +files commonly found on Clear Linux OS systems.

    +
    cat /mnt/usr/lib/os-release
    +ls /mnt/usr/share/clear/bundles
    +
    +
    +
  8. +
  9. Next, run swupd to fix any issues on the target system.

    +
    sudo swupd repair --picky --path=/mnt
    +
    +
    +

    Learn more about how swupd works.

    +
  10. +
  11. After the process is complete, unmount the root partition:

    +
    sudo umount /mnt
    +
    +
    +
  12. +
  13. Reboot the system, remove the live desktop USB drive, +and boot into the repaired system.

    +
    sudo reboot
    +
    +
    +
  14. +
+

Congratulations! You successfully restored Clear Linux OS.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/hostname.html b/zh_CN/guides/maintenance/hostname.html new file mode 100644 index 00000000..f06c3db9 --- /dev/null +++ b/zh_CN/guides/maintenance/hostname.html @@ -0,0 +1,1062 @@ + + + + + + + + + + + Modify hostname — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Modify hostname

+

This guide describes how to modify and view the hostname of your Clear Linux* OS +system.

+ +
+

Overview

+

By default, Clear Linux OS installations have a machine generated name, which is a +long string of letters and numbers. The generated name is fine for computers +but is not human-friendly. Administrators and users will often want to rename +their machines with a name that is easier to remember, type, and search +for. Renaming a machine also makes it easier to identify, by including +meaningful data in the name. The following examples show human-friendly machine +names:

+
    +
  • regression-test
  • +
  • sally-test-box1
  • +
  • az-bldg2-lab
  • +
+
+
+

Set your hostname

+

Clear Linux OS uses the hostnamectl command to display and modify the machine +name. hostnamectl is part of the 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 +Clear Linux OS telemetry test machine on the second floor at grid location H15. +Make sure to reboot after setting a new hostname.

+
sudo hostnamectl set-hostname telemetry-test-2-h15
+sudo reboot
+
+
+
+

注解

+

There are three types of hostname: static, transient, and pretty. +The most common is the static hostname. Static hostnames must be between +two and 63 characters long, must start and end with a letter or number, +and may contain letters (case-insensitive), numbers, dashes, or dots.

+

If the static hostname exists, it is used to generate the transient hostname, +which is maintained by the kernel. The transient hostname can be changed +by DHCP or mDNS at runtime.

+

The pretty hostname is a free-form UTF8 name used for presentation to the user.

+
+
+
+

View your hostname

+

View your current hostname using the following command:

+
hostnamectl
+
+
+

You should see output similar to:

+
Static hostname   : telemetry-test-2-h15
+Pretty hostname   : telemetry-test-2-h15
+Icon name         : computer-desktop
+Chassis           : desktop
+Machine ID        : 4d0d60207a904ebbab96680a51ac1339
+Boot ID           : 98d3514e5a984e8cbbdf46a2f0d6b397
+Operating System  : Clear Linux OS
+Kernel            : Linux 4.18.8-632.native
+Architecture      : x86-64
+
+
+

Congratulations! You successfully modified the hostname of your Clear Linux OS system.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/increase-virtual-disk-size.html b/zh_CN/guides/maintenance/increase-virtual-disk-size.html new file mode 100644 index 00000000..d52cf4ab --- /dev/null +++ b/zh_CN/guides/maintenance/increase-virtual-disk-size.html @@ -0,0 +1,1132 @@ + + + + + + + + + + + 增加图像的虚拟磁盘大小 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

增加图像的虚拟磁盘大小

+

本指南介绍了在需要更多容量的时候如何增加预构建 Clear Linux* OS 映像的大小。

+ +
+

确定预构建映像的分区顺序和大小。

+

Clear Linux OS 预构建映像大小多样,从 300 MB 至 20 GB 不等。

+

有两种方法可找到预构建 Clear Linux OS 映像分区虚拟磁盘的顺序和大小。

+

在两例中,预构建 Hyper-V 映像的磁盘大小为 8.5 GB,/dev/sda3 为 root 文件系统 (/) 分区

+
+

在虚拟机上检查 lsblk

+

第一种方法是引导 VM,执行 lsblk 命令,如下所示:

+
sudo lsblk
+
+
+

lsblk 命令的示例输出:

+
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
+sda      8:0   0    8.5G  0 disk
+├─sda1   8:1   0    512M  0 part
+├─sda2   8:2   0     32M  0 part [SWAP]
+└─sda3   8:3   0      8G  0 part /
+
+
+

还可以在图 1 中查看此例。

+
+
+

检查用来构建映像的 config.json

+

第二种方法是确定分区,检查用来创建预构建映像的 config.json 文件。该文件在 releases 存储库中。例如,要发现版本号 20450 的 Hyper-V* 映像的大小,请按照如下步骤操作:

+
    +
  1. 转到 releases 存储库。

    +
  2. +
  3. 浏览至 20450 > clear > config > image 目录。

    +
  4. +
  5. 打开 hyperv-config.json 文件。

    +
  6. +
  7. 找到 PartitionLayout 键。

    +

    本例显示 DFI 分区为 512 MB,swap 分区为 32 MB,而 root 分区为 8 GB。

    +
    "PartitionLayout" : [ { "disk" : "hyperv.img",
    +                        "partition" : 1,
    +                        "size" : "512M",
    +                        "type" : "EFI" },
    +                        { "disk" : "hyperv.img",
    +                        "partition" : 2,
    +                        "size" : "32M",
    +                        "type" : "swap" },
    +                        { "disk" : "hyperv.img",
    +                        "partition" : 3,
    +                        "size" : "8G",
    +                        "type" : "linux" } ],
    +
    +
    +
  8. +
+
+
+
+

增加虚拟磁盘大小

+

一旦确定增加磁盘和分区的大小,实际上则会增加磁盘、分区和文件系统的大小。

+
+

关闭虚拟机并增加虚拟磁盘大小:

+

要为预构建映像增加虚拟磁盘大小,请执行以下几个步骤:

+
    +
  1. 关闭正在运行的虚拟机。
  2. +
  3. 使用虚拟机管理程序或云提供商定义的流程来增加 Clear Linux OS 虚拟机的虚拟磁盘大小。
  4. +
  5. 开启虚拟机。
  6. +
+
+
+

调整虚拟磁盘的分区大小:

+
    +
  1. 登录拥有 root 权限的帐户。

    +
  2. +
  3. 打开终端模拟器。

    +
  4. +
  5. 添加 :command:storage-utils` bundle,安装 partedresize2fs 工具。

    +
    sudo swupd bundle-add storage-utils
    +
    +
    +
  6. +
  7. 启动 parted 工具。

    +
    sudo parted
    +
    +
    +
  8. +
  9. parted 工具中,执行以下几个步骤:

    +
      +
    1. 按下 p,打印分区表。

      +
    2. +
    3. 如果显示下面的警告消息,则输入 Fix

      +
      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?
      +
      +Fix/Ignore?
      +
      +
      +
    4. +
    5. 输入 resizepart [partition number],其中 [partition number] 是需要修改的分区的分区编号。

      +
    6. +
    7. 出现提示时输入 yes

      +
    8. +
    9. 输入新的 End 大小。

      +
      +

      注解

      +

      如果希望一个分区占用剩余的磁盘空间,则输入磁盘的总大小。使用 p 命令打印分区表时,在 Disk 标签后面会显示总磁盘大小。

      +

      可以在图 1 中查看此例。

      +
      +
    10. +
    11. 调整映像完成后,输入 q 退出 parted

      +

      图 1 介绍了将虚拟磁盘分区从 8.5GB 调整为 20GB 的步骤。

      +
      +Increase root partition size +

      图 1:增加 root 分区的大小。

      +
      +
    12. +
    +
  10. +
+
+
+

调整文件系统的大小

+
    +
  1. 输入 sudo resize2fs -p /dev/[modified partition name],其中 [modified partition name] 是将在 parted 中改变的分区。

    +
  2. +
  3. 运行 df -h 确认文件系统大小已增加。

    +

    图 2 介绍了将虚拟磁盘分区从 8.5GB 调整为 20GB 的步骤。

    +
    +Increase root filesystem with resize2fs +

    图 2:扩展分区后增加 root 文件系统大小。

    +
    +
  4. +
+

恭喜! 您已经知道如何调整磁盘、分区和文件系统的大小。此时,增加磁盘容量有用。

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/query-upstream.html b/zh_CN/guides/maintenance/query-upstream.html new file mode 100644 index 00000000..6a8b321a --- /dev/null +++ b/zh_CN/guides/maintenance/query-upstream.html @@ -0,0 +1,1193 @@ + + + + + + + + + + + Query package info from upstream repository — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Query package info from upstream repository

+

This guide describes how to query package information from the Clear Linux OS upstream +repositories. This guide is intended for developers and advanced users.

+ +
+

Overview

+

In Clear Linux* OS, the swupd tool manages software +dependencies and installs bundles instead of packages. Although a bundle is +a collection of one or more packages, Clear Linux OS does not work with packages on +the client side. However, on the upstream/factory side, Clear Linux OS does work with +packages using a process called mixing.

+

Currently, swupd does not report which packages are installed, +provide package version information, or return other package details. This +guide describes a method for retrieving package information from the Clear Linux OS +upstream repositories using DNF commands.

+
+
+

Prerequisites

+

This guide assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +the bare metal installation guide.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Configure DNF

+
    +
  1. Install the DNF bundle with the command:

    +
    sudo swupd bundle-add dnf
    +
    +
    +
  2. +
  3. Create a dnf.conf file with the commands:

    +
    sudo mkdir -p /etc/dnf
    +sudo curl -L https://github.com/clearlinux/common/raw/master/conf/dnf.conf --output /etc/dnf/dnf.conf
    +
    +
    +
  4. +
  5. Edit the /etc/dnf/dnf.conf file and set the baseurl variable +for binary and source RPMs as shown in lines 3 and 9 in the following +example.

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    [clear]
    +name=Clear
    +baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/x86_64/os/
    +enabled=1
    +gpgcheck=0
    +[clear-source]
    +name=Clear sources
    +failovermethod=priority
    +baseurl=https://cdn.download.clearlinux.org/releases/$releasever/clear/source/SRPMS/
    +enabled=1
    +gpgcheck=0
    +
    +
    +
  6. +
  7. Initialize the RPM database with the command:

    +
    sudo rpm --initdb
    +
    +
    +
  8. +
+
+
+

DNF command usage examples

+ +
+

List all binary and source RPMs in the current release

+

Command:

+
dnf repoquery --releasever=current
+
+
+

Sample output:

+
Clear                                    5.1 MB/s |  13 MB     00:02
+Clear sources                            1.8 MB/s | 1.7 MB     00:00
+AVB-AudioModules-0:4.1.0-1.src
+AVB-AudioModules-0:4.1.0-1.x86_64
+AVB-AudioModules-data-0:4.1.0-1.x86_64
+AVB-AudioModules-dev-0:4.1.0-1.x86_64
+AVB-AudioModules-lib-0:4.1.0-1.x86_64
+AVB-AudioModules-license-0:4.1.0-1.x86_64
+AVBStreamHandler-0:1.1.0-21.src
+AVBStreamHandler-0:1.1.0-21.x86_64
+AVBStreamHandler-abi-0:1.1.0-21.x86_64
+AVBStreamHandler-bin-0:1.1.0-21.x86_64
+AVBStreamHandler-data-0:1.1.0-21.x86_64
+AVBStreamHandler-dev-0:1.1.0-21.x86_64
+AVBStreamHandler-lib-0:1.1.0-21.x86_64
+AVBStreamHandler-license-0:1.1.0-21.x86_64
+...
+<trimmed>
+
+
+
+
+

Show version information for a package in current release

+

This example queries version information for the zstd package.

+

Command:

+
dnf repoquery --releasever=current zstd
+
+
+

Sample output:

+
Last metadata expiration check: 0:02:30 ago on Tue 16 Jul 2019 03:03:34 PM PDT.
+zstd-0:1.4.0-46.src
+zstd-0:1.4.0-46.x86_64
+
+
+
+
+

Show version information for a package in a specific release

+

This example queries version information for the zstd package in release +21000.

+

Command:

+
dnf repoquery --releasever=21000 zstd
+
+
+

Sample output:

+
Clear
+2.7 MB/s | 3.9 MB     00:01
+Clear sources
+628 kB/s | 559 kB     00:00
+zstd-0:1.3.3-20.src
+zstd-0:1.3.3-20.x86_64
+
+
+
+
+

Show only version and release information for a package in a specific release

+

This example queries version and release information for the zstd package in +release 15000.

+

Command:

+
dnf repoquery --releasever=15000 --qf="%{VERSION}\n%{RELEASE}" zstd
+
+
+

Sample output:

+
Clear
+3.4 MB/s | 3.9 MB     00:01
+Clear sources
+345 kB/s | 528 kB     00:01
+1.1.4
+5
+
+
+
+
+

Show the binary package for a specified binary file

+

This example returns the binary package that contains the +/usr/bin/zip binary file.

+

Command:

+
dnf repoquery --releasever=current --whatprovides /usr/bin/zip
+
+
+

Sample output:

+
Last metadata expiration check: 0:04:47 ago on Tue 16 Jul 2019 03:03:34 PM PDT.
+zip-bin-0:3.0-23.x86_64
+
+
+
+
+

Show the source package for a specified binary file

+

This example returns the source package that contains the +/usr/bin/zip binary file.

+

Command:

+
dnf repoquery --releasever=current --whatprovides /usr/bin/zip --srpm
+
+
+

Sample output:

+
Last metadata expiration check: 0:05:50 ago on Tue 16 Jul 2019 03:03:34 PM PDT.
+zip-0:3.0-23.src
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/resource-limits.html b/zh_CN/guides/maintenance/resource-limits.html new file mode 100644 index 00000000..3e1d879b --- /dev/null +++ b/zh_CN/guides/maintenance/resource-limits.html @@ -0,0 +1,1083 @@ + + + + + + + + + + + Resource limits — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Resource limits

+

Linux systems employ limiting or quota mechanisms to provide quality of +service for system resources and contain rogue processes.

+

These limits are layered at the system-level and user-level. If these limits +need to be modified, it is useful to understand the different limit +configurations.

+ +
+

System-wide limits

+

Some global resource limits are implemented in the Linux kernel and are +controllable with kernel parameters.

+

For example, a global limit for the maximum number of open files is set with +the fs.file-max parameter. This limit applies to all processes and users an +cannot be exceeded other limit values.

+
+

Checking limit

+

You can check a current value with sysctl -n <PARAMETER>. For +example:

+
sysctl -n fs.file-max
+
+
+

This fs.file-max value is set intentionally high on Clear Linux OS systems by +default. You can check the maximum value supported by the system with:

+
cat /proc/sys/fs/file-max
+
+
+
+
+

Overriding limit

+

You can override a value with sysctl -w <PARAMETER>. For +example:

+
sudo sysctl -w fs.file-max=<NUMBER>
+
+
+

If needed permanently, the value can be set by creating a +/etc/sysctl.d/*.conf file (see man sysctl.d for details). +For example:

+
sudo mkdir -p /etc/sysctl.d/
+
+sudo tee /etc/sysctl.d/fs-file-max.conf  > /dev/null <<'EOF'
+fs.file-max=<NUMBER>
+EOF
+
+
+
+
+
+

Per-user limits

+

For processes not managed by systemd, resource limits can be set for PAM +logins on a per-user basis with upper and lower limits in the +/etc/security/limits.conf file.

+

You can set temporary values and check the current values with the +ulimit command. For example, to change the soft limit of maximum +number of open file descriptors for the current user:

+
ulimit -S -n <NUMBER>
+
+
+

See man limits.conf for details.

+
+
+

Service limits

+

Resource limits for services started with systemd units do not follow normal +user limits because the process is started in a seperate Linux control group +(cgroup) Linux +cgroups associate related process groups and provide resource accounting.

+

Resource limits for individual systemd services can be controlled inside their +unit files or its configuration drop-in directory with the resource Limit +directives. See process properties section of the systemd.exec man page.

+

Resource limits for all systemd services can be controlled with a file in the +/etc/systemd/system.conf.d/ directory. For example, to have no +restriction on the number of open files:

+
sudo mkdir -p /etc/systemd/system.conf.d/
+
+sudo tee /etc/systemd/system.conf.d/50-nfiles.conf  > /dev/null <<'EOF'
+[Manager]
+DefaultLimitNOFILE=infinity
+EOF
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/restart.html b/zh_CN/guides/maintenance/restart.html new file mode 100644 index 00000000..877a9d4c --- /dev/null +++ b/zh_CN/guides/maintenance/restart.html @@ -0,0 +1,1135 @@ + + + + + + + + + + + Restart system services after an OS update — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Restart system services after an OS update

+

This guide describes how to use the clr-service-restart tool.

+ +
+

Overview

+

Clear Linux* OS includes a clr-service-restart tool that shows which +system daemons require a restart.

+

clr-service-restart reads various files in the procfs +filesystem provided by the kernel and relies on systemd to +determine which services to restart.

+
+
+

How it works

+

clr-service-restart implements a whitelist to identify which +daemons can be restarted. As a system administrator, you can customize the +default Clear Linux OS OS whitelist using allow or disallow options +for restarting system services. When a software update occurs, +clr-service-restart consults the whitelist to see if a service daemon +is allowed to be restarted or not.

+
+
+

Basic options

+

clr-service-restart has three basic options: allow, +disallow, and default.

+
+

allow

+

The allow option identifies a daemon to restart after an OS software +update. The clr-service-restart daemon creates a symlink in +/etc/clr-service-restart as a record. The example below tells +clr-service-restart to restart the tallow daemon after an +OS software update.

+
sudo clr-service-restart allow tallow.service
+
+
+
+
+

disallow

+

The disallow option tells clr-service-restart not to +restart the specified daemon even if the OS defaults permit the daemon to be +restarted. The clr-service-restart daemon creates a symlink in +/etc/clr-service-restart that points to /dev/null as a +record. The example below tells clr-service-restart not to +restart the rngd daemon after an OS software update.

+
sudo clr-service-restart disallow rngd
+
+
+
+
+

default

+

The default option makes clr-service-restart revert back +to the OS defaults and delete any symlink in /etc/clr-service-restart. +The example below tells clr-service-restart to restart rngd +automatically again, because rngd is whitelisted for automatic service +restarts by default in Clear Linux OS.

+
sudo clr-service-restart default rngd
+
+
+
+
+
+

Monitor options

+

clr-service-restart works in the background and is invoked with +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, +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.

+
+

-n option

+

The -n option makes clr-service-restart perform no restarts. +Instead it displays the services that could potentially be restarted. When used, +clr-service-restart outputs a list of messages showing:

+
    +
  • Which service needs a restart.
  • +
  • What unit it is.
  • +
  • Why it needs a restart.
  • +
  • Which command is required to restart the unit.
  • +
+
+
+

-a option

+

The -a option makes clr-service-restart consider all system +services, not only the ones that are whitelisted. Because the default whitelist +in Clear Linux OS 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, 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:

+
sudo clr-service-restart -a -n
+
+
+

Sample output:

+
upower.service: needs a restart (a library dependency was updated)
+/usr/bin/systemctl --no-ask-password try-restart upower.service
+NetworkManager.service: needs a restart (a library dependency was
+updated)
+/usr/bin/systemctl --no-ask-password try-restart NetworkManager.service
+....
+
+
+
+
+

Telemetry

+

clr-service-restart may cause problems such as a short service +outage when a daemon is being restarted, or if a daemon fails to properly +restart. To minimize issues, clr-service-restart creates a +telemetry record and sends it to the optional Clear Linux OS telemetry service if both +conditions below are met:

+
    +
  • If a unit fails to automatically restart after an OS update.
  • +
  • If that unit resides in the system location /usr/lib/systemd/system.
  • +
+

If you do not install the Clear Linux OS telemetrics bundle, the data is discarded. If +you install the telemetrics bundle and you opt to send telemetry, then the +system unit name is sent to the Clear Linux OS telemetry service. We evaluate the +report and update the whitelist to remove services that are not safe to +restart.

+
+
+

Conclusion

+

The Clear Linux OS team enjoys coming up with simple and efficient solutions to make +your work easier. We made a GitHub* project of clr-service-restart +and we invite you to look at the code, share your thoughts, and work with us +on improving the project. You can find the project at:

+

https://github.com/clearlinux/clr-service-restart

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/time.html b/zh_CN/guides/maintenance/time.html new file mode 100644 index 00000000..3aa7bcec --- /dev/null +++ b/zh_CN/guides/maintenance/time.html @@ -0,0 +1,1039 @@ + + + + + + + + + + + Set the time — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set the time

+

This guide describes how to reset the time in your Clear Linux* OS system when +the default NTP servers cannot be reached.

+

Clear Linux OS uses the systemd-timesyncd.service daemon to synchronize time.

+
    +
  1. Install the sysadmin-basic bundle.

    +
    sudo swupd bundle-add sysadmin-basic
    +
    +
    +
  2. +
  3. Set your time zone. This example uses Los Angeles.

    +
    timedatectl set-timezone America/Los_Angeles
    +
    +
    +
    +

    注解

    +

    To see a list of time zones, use the command: +timedatectl list-timezones | grep <locale>

    +
    +
  4. +
  5. Create a /etc/systemd/ directory.

    +
    sudo mkdir -p /etc/systemd/
    +
    +
    +
  6. +
  7. Create a new file named /etc/systemd/timesyncd.conf and enter the +following text.

    +
    [Time]
    +NTP=<Preferred Server>
    +FallbackNTP=<backup server 1> <backup server 2>
    +
    +
    +
  8. +
  9. Enable the systemd-timesyncd service.

    +
    timedatectl set-ntp true
    +
    +
    +
  10. +
+
+

注解

+

To check the service status, use the timedatectl status command.

+

To restart the timesyncd daemon, enter systemctl restart +systemd-timesyncd into your terminal emulator.

+
+

Congratulations! You successfully set up the time in your Clear Linux OS system.

+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/maintenance/validate-signatures.html b/zh_CN/guides/maintenance/validate-signatures.html new file mode 100644 index 00000000..e4fc2dea --- /dev/null +++ b/zh_CN/guides/maintenance/validate-signatures.html @@ -0,0 +1,1118 @@ + + + + + + + + + + + Validate signatures — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Validate signatures

+

This guide describes how to validate the contents of a Clear Linux* OS image.

+ +
+

Overview

+

Validating the contents of an image is a manual process and is the same process +that swupd performs internally.

+

Clear Linux OS 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.

+
+
+

Image content validation

+

In the steps below, we used the installer image of the latest release +of Clear Linux OS. You may use any image of Clear Linux OS you choose.

+
    +
  1. Download the image, the signature of the SHA512 sum of the image, and the +Clear Linux OS certificate used for signing the SHA512 sum.

    +
    # Image
    +curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz
    +# Signature of SHA512 sum of image
    +curl -O https://cdn.download.clearlinux.org/current/clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig
    +# Certificate
    +curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/ClearLinuxRoot.pem
    +
    +
    +
  2. +
  3. Generate the SHA256 sum of the Clear Linux OS certificate.

    +
    sha256sum ClearLinuxRoot.pem
    +
    +
    +
  4. +
  5. Ensure the generated SHA256 sum of the Clear Linux OS certificate matches the +following SHA256 sum to verify the integrity of the certificate.

    +
    4b0ca67300727477913c331ff124928a98bcf2fb12c011a855f17cd73137a890  ClearLinuxRoot.pem
    +
    +
    +
  6. +
  7. Generate the SHA512 sum of the image and save it to a file.

    +
    sha512sum clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz > sha512sum.out
    +
    +
    +
  8. +
  9. Ensure the signature of the SHA512 sum of the image was created using the +Clear Linux OS certificate. This confirms that the image is trusted and has not +been modified.

    +
    openssl smime -verify -purpose any -in clear-$(curl https://cdn.download.clearlinux.org/latest)-installer.img.xz-SHA512SUMS.sig -inform der -content sha512sum.out -CAfile ClearLinuxRoot.pem
    +
    +
    +
    +

    注解

    +

    The -purpose any option is required when using OpenSSL 1.1. +If you use 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.

    +
    +
  10. +
  11. The output should contain “Verification successful”. If the output +contains “bad_signature” anywhere, then the image is not trustworthy.

    +
  12. +
+
+
+

Update content validation

+

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 Clear Linux OS release. There is no need to perform +these steps manually when performing a swupd update.

+
    +
  1. Download the MoM, the signature of the MoM, +and the Swupd certificate used for signing the signature of the MoM.

    +
    # MoM
    +curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM
    +# Signature of MoM
    +curl -O https://cdn.download.clearlinux.org/update/$(curl https://cdn.download.clearlinux.org/latest)/Manifest.MoM.sig
    +# Swupd certificate
    +curl -O https://cdn.download.clearlinux.org/releases/$(curl https://cdn.download.clearlinux.org/latest)/clear/Swupd_Root.pem
    +
    +
    +
  2. +
  3. Generate the SHA256 sum of the swupd certificate.

    +
    sha256sum Swupd_Root.pem
    +
    +
    +
  4. +
  5. Confirm that the generated SHA256 sum of the swupd certificate matches the +SHA256 sum shown below to verify the integrity of the certificate.

    +
    ff06fc76ec5148040acb4fcb2bc8105cc72f1963b55de0daf3a4ed664c6fe72c  Swupd_Root.pem
    +
    +
    +
  6. +
  7. Confirm that the signature of the MoM was created using the Swupd +certificate. This signature validates the update content is trustworthy and +has not been modified.

    +
    openssl smime -verify -purpose any -in Manifest.MoM.sig -inform der -content Manifest.MoM -CAfile Swupd_Root.pem
    +
    +
    +
    +

    注解

    +

    The -purpose any option is required when using OpenSSL 1.1. +If you use 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 SHA512 sum of the MoM is not generated and then signed. Instead, the +MoM is signed directly because it is small in size compared to an image of +Clear Linux OS.

    +
    +
  8. +
  9. 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.

    +
  10. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/network/custom-clear-container.html b/zh_CN/guides/network/custom-clear-container.html new file mode 100644 index 00000000..61b9237f --- /dev/null +++ b/zh_CN/guides/network/custom-clear-container.html @@ -0,0 +1,1292 @@ + + + + + + + + + + + Build a custom Clear Linux* OS based Docker container image — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Guides »
  • + +
  • Build a custom Clear Linux* OS based Docker container image
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Build a custom Clear Linux* OS based Docker container image

+

This guide contains the steps to build a custom container image. The official +base Clear Linux* OS container image is published on Docker* Hub and is updated on a +regular basis.

+ +
+

Prerequisites

+
    +
  • You must perform these steps on a Clear Linux OS system because the +swupd is used to manage bundles in the +container.
  • +
  • You must install the containers-basic bundle on the Clear Linux OS system +or Docker will not work.
  • +
  • You have a basic understanding of Docker.
  • +
+
+
+

Build the base container image

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Verify Docker is installed and running.

    +
    docker info
    +
    +
    +

    If Docker is installed and running, the output is similar to +this example:

    +
    Containers: 0
    + Running: 0
    + Paused: 0
    + Stopped: 0
    +Images: 4
    +Server Version: 17.05.0-ce
    +Storage Driver: overlay
    + Backing Filesystem: extfs
    + Supports d_type: true
    +Logging Driver: json-file
    +Cgroup Driver: cgroupfs
    +Plugins:
    + Volume: local
    + Network: bridge host macvlan null overlay
    +Swarm: inactive
    +Runtimes: runc
    +Default Runtime: runc
    +Init Binary: docker-init
    +containerd version:  (expected: 9048e5e50717ea4497b757314bad98ea3763c145)
    +runc version: N/A (expected: 9c2d8d184e5da67c95d601382adf14862e4f2228)
    +init version: N/A (expected: )
    +Kernel Version: 4.12.7-377.native
    +Operating System: Clear Linux OS for Intel Architecture
    +OSType: linux
    +Architecture: x86_64
    +CPUs: 4
    +Total Memory: 15.62GiB
    +Name: clr-os
    +ID: XQHJ:DYEM:3Q4D:DKLM:JOA4:RUSF:GAFR:DLPA:HOJP:W5FF:ULEE:7HZ3
    +Docker Root Dir: /var/lib/docker
    +Debug Mode (client): false
    +Debug Mode (server): false
    +Registry: https://index.docker.io/v1/
    +Experimental: false
    +Insecure Registries:
    + 127.0.0.0/8
    +Live Restore Enabled: false
    +
    +
    +

    If Docker is not installed, enter the commands:

    +
    swupd bundle-add containers-basic
    +systemctl start docker
    +
    +
    +
  4. +
  5. Use os-install to download and install the bundles.

    +
    swupd os-install --url https://cdn.download.clearlinux.org/update --statedir "$PWD"/swupd-state --no-boot-update --version 29790 -B os-core-update,editors,network-basic base
    +
    +
    +

    The swupd example uses the following flags:

    +
      +
    • os-install tells swupd to download and install.
    • +
    • -V / --version specifies the version of the Clear Linux OS bundles.
    • +
    • --url specifies the URL of the bundles repository.
    • +
    • --statedir specifies the state directory where downloaded bundles +and any state information are stored.
    • +
    • --no-boot-update tells swupd to skip updating boot files because +boot files are not required for a container.
    • +
    +

    For more information on swupd flags, enter the swupd os-install -h +command.

    +

    Example output:

    +
    swupd-client software verify 3.12.2
    +Copyright (C) 2012-2017 Intel Corporation
    +
    +Verifying version 17870
    +Attempting to download version string to memory
    +Downloading packs...
    +
    +Extracting python-basic pack for version 17820
    +  ...14%
    +Extracting perl-basic pack for version 17790
    +  ...28%
    +Extracting openssh-server pack for version 17660
    +  ...42%
    +Extracting editors pack for version 17850
    +  ...57%
    +Extracting network-basic pack for version 17650
    +  ...71%
    +Extracting os-core pack for version 17870
    +  ...85%
    +Extracting os-core-update pack for version 17870
    +  ...100%
    +Adding any missing files
    +  ...88%
    +Inspected 33982 files
    +  33974 files were missing
    +    33974 of 33974 missing files were replaced
    +    0 of 33974 missing files were not replaced
    +Calling post-update helper scripts.
    +WARNING: boot files update skipped due to --no-boot-update argument
    +Fix successful
    +
    +
    +
    +

    注解

    +

    The WARNING message is expected and can be ignored.

    +
    +
  6. +
  7. Create a tarball and compress it.

    +
    tar -C base -cf base.tar .
    +xz -v -T0 base.tar
    +
    +
    +
  8. +
  9. Create the Dockerfile to build the image.

    +
    cat > Dockerfile << EOF
    +FROM scratch
    +MAINTAINER First Last <first.last@example.com>
    +ADD base.tar.xz /
    +CMD ["/bin/bash"]
    +EOF
    +
    +
    +
  10. +
  11. Build the Clear Linux OS container image.

    +
    docker build -t my-custom-clear-linux-container .
    +
    +
    +

    Example output:

    +
    Sending build context to Docker daemon  806.5MB
    +Step 1/4 : FROM scratch
    +  --->
    +Step 2/4 : MAINTAINER First Last <first.last@example.com>
    +  ---> Running in 7238f35abcd0
    +  ---> ec5064287c60
    +Removing intermediate container 7238f35abcd0
    +Step 3/4 : ADD base.tar.xz /
    +  ---> 2723b7d20716
    +Removing intermediate container 16e3ed0df8da
    +Step 4/4 : CMD /bin/bash
    +  ---> Running in efa893350647
    +  ---> 5414c3a12993
    +Removing intermediate container efa893350647
    +Successfully built 5414c3a12993
    +Successfully tagged my-custom-clear-linux-container:latest
    +
    +
    +
  12. +
  13. List the newly created Clear Linux OS container image.

    +
    docker images
    +
    +
    +

    Example output:

    +
    REPOSITORY                        TAG                 IMAGE ID            CREATED              SIZE
    +my-custom-clear-linux-container   latest              5414c3a12993        About a minute ago   616MB
    +
    +
    +
  14. +
  15. Launch the built Clear Linux OS container.

    +
    docker run -it my-custom-clear-linux-container
    +
    +
    +
  16. +
+
+
+

Manage bundles in a container

+

You can add and remove bundles from a Clear Linux OS container using the +RUN swupd command in the Dockerfile.

+
+

Add a bundle

+

This example Dockerfile adds the pxe-server bundle to an existing Clear Linux OS +Docker image:

+
cat > Dockerfile << EOF
+FROM my-customer-clear-linux-container
+MAINTAINER First Last <first.last@example.com>
+RUN swupd bundle-add pxe-server
+CMD ["/bin/bash/bash"]
+EOF
+
+
+

Example output:

+
docker build -t my-clearlinux-with-pxe-server-bundle .
+
+Sending build context to Docker daemon  806.5MB
+Step 1/4 : FROM my-custom-clear-linux-container
+ ---> 5414c3a12993
+Step 2/4 : MAINTAINER First Last <first.last@example.com>
+ ---> Running in 19b4411cf4bd
+ ---> 08d400baffde
+Removing intermediate container 19b4411cf4bd
+Step 3/4 : RUN swupd bundle-add pxe-server
+ ---> Running in 3e634d6e0792
+swupd-client bundle adder 3.12.2
+   Copyright (C) 2012-2017 Intel Corporation
+
+Attempting to download version string to memory
+Downloading packs...
+
+Extracting pxe-server pack for version 17820
+.
+Installing bundle(s) files...
+..............................................................................
+..............................................................................
+..............................................................................
+..............................................................................
+..............................................................................
+..............................................................................
+Calling post-update helper scripts.
+WARNING: systemctl not operable, unable to run systemd update triggers
+Bundle(s) installation done.
+ ---> 8ead5f2c0c33
+Removing intermediate container 3e634d6e0792
+Step 4/4 : CMD /bin/bash
+ ---> Running in 0ceae320279b
+ ---> dcd9adb40611
+Removing intermediate container 0ceae320279b
+Successfully built dcd9adb40611
+Successfully tagged my-clearlinux-with-pxe-server-bundle:latest
+
+
+
+

注解

+

The WARNING message can be ignored because systemd does not run inside +a container.

+
+
+
+

Remove a bundle

+

This example Dockerfile removes the pxe-server bundle from an existing +Clear Linux OS Docker image:

+
cat > Dockerfile << EOF
+FROM my-clearlinux-with-pxe-server-bundle
+MAINTAINER First Last <first.last@example.com>
+RUN swupd bundle-remove pxe-server
+CMD ["/bin/bash/bash"]
+EOF
+
+
+

Example output:

+
docker build -t my-clearlinux-remove-pxe-server-bundle .
+
+Sending build context to Docker daemon  806.5MB
+Step 1/4 : FROM my-clearlinux-with-pxe-server-bundle
+ ---> dcd9adb40611
+Step 2/4 : MAINTAINER First Last <first.last@example.com>
+ ---> Running in 71b60f15003e
+ ---> 742192751c1a
+Removing intermediate container 71b60f15003e
+Step 3/4 : RUN swupd bundle-remove pxe-server
+ ---> Running in ad28a3390ecc
+swupd-client bundle remover 3.12.2
+   Copyright (C) 2012-2017 Intel Corporation
+
+Removing bundle: pxe-server
+Deleting bundle files...
+Total deleted files: 92
+Untracking bundle from system...
+Success: Bundle removed
+1 bundle(s) were removed successfully
+ ---> d6ee7903e14d
+Removing intermediate container ad28a3390ecc
+Step 4/4 : CMD /bin/bash
+ ---> Running in 7694989e97de
+ ---> ec23189ef954
+Removing intermediate container 7694989e97de
+Successfully built ec23189ef954
+Successfully tagged my-clearlinux-remove-pxe-server-bundle:latest
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/network/dpdk.html b/zh_CN/guides/network/dpdk.html new file mode 100644 index 00000000..668f8670 --- /dev/null +++ b/zh_CN/guides/network/dpdk.html @@ -0,0 +1,1309 @@ + + + + + + + + + + + Use DPDK to send packets between platforms — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use DPDK to send packets between platforms

+

This guide describes how to send packets between two platforms.

+ +
+

Overview

+

Figure 1 shows how to send packets between two platforms in a simple +configuration. The example uses the Data Plane Development Kit, +which is a set of libraries, drivers, sample applications, and tools for fast +packet processing.

+
+Platform A and B +

Figure 1: Environment for l3fwd DPDK application

+
+

This example uses the following DPDK components:

+
    +
  • pktgen: Traffic generator. See pktgen documentation for details.
  • +
  • l3fwd: Layer 3 forwarding example application. See +l3fwd documentation for details.
  • +
+
+
+

Prerequisites

+
    +
  • Two platforms using Clear Linux* OS release 13330 or higher.

    +
  • +
  • Both images must include the kernel-native bundle.

    +
  • +
  • Install the network-basic-dev bundle with the command:

    +
    sudo swupd bundle-add network-basic-dev
    +
    +
    +
  • +
  • Each platform must have at least one NIC. +Check the DPDK project for the list of supported dpdk.org NICs.

    +
  • +
  • Two network cables.

    +
  • +
+
+
+

Install dpdk and build l3fwd example (Platform B)

+
    +
  1. Change to the l3fwd example directory.

    +
    sudo cd /usr/share/dpdk/examples/l3fwd
    +
    +
    +
  2. +
  3. Assign RTE_SDK variable to the makefiles path.

    +
    sudo export RTE_SDK=/usr/share/dpdk/
    +
    +
    +
  4. +
  5. Assign RTE_TARGET variable to the location of the gcc* config +file.

    +
    sudo export RTE_TARGET=x86_64-native-linuxapp-gcc
    +
    +
    +
  6. +
  7. Build the l3fwd application and add the configuration header to +the CFLAGS variable.

    +
    sudo make CFLAGS+="-include /usr/include/rte_config.h"
    +
    +
    +
  8. +
+
+
+

Build pktgen (Platform A)

+
    +
  1. Download the pktgen tar package v3.1.2 or newer.

    +
  2. +
  3. Decompress packages and move to uncompressed source directory.

    +
  4. +
  5. Assign RTE_SDK variable to the path where makefiles are located.

    +
    sudo export RTE_SDK=/usr/share/dpdk/
    +
    +
    +
  6. +
  7. Assign RTE_TARGET to the location of the gcc config file.

    +
    sudo export RTE_TARGET=x86_64-native-linuxapp-gcc
    +
    +
    +
  8. +
  9. Build the pktgen project and set the CONFIG_RTE_BUILD_SHARED_LIB variable +to “n”.

    +
    sudo make CONFIG_RTE_BUILD_SHARED_LIB=n
    +
    +
    +
  10. +
+
+
+

Bind NICs to DPDK kernel drivers (Platforms A and B)

+

The l3fwd application uses two NICs. The DPDK includes tools for binding +NICs to DPDK modules to run DPDK applications.

+
    +
  1. Load the DPDK I/O kernel module.

    +
    sudo modprobe vfio-pci
    +
    +
    +
  2. +
  3. Check the NIC status to determine which network cards are not +busy. When another application is using them, the status shows “Active”, +and those NICs cannot be bound.

    +
    sudo dpdk-devbind --status
    +
    +
    +
  4. +
  5. Bind two available NICs. The general syntax for binding is: +dpdk-devbind --bind=vfio-pci <device-entry>. +A working example is shown below:

    +
    sudo dpdk-devbind --bind=vfio-pci 01:00.0
    +
    +
    +
  6. +
  7. Check the NIC status to verify that the NICs are bound correctly. If +successful, drv displays the value igb_uio, which confirms +that the NICs are using the DPDK modules.

    +
  8. +
+
+
+

Set hugepages (Platforms A and B)

+

Clear Linux OS supports hugepages for the large memory pool allocation used for +packet buffers.

+
    +
  1. Set the number of hugepages.

    +
    sudo echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
    +
    +
    +
  2. +
  3. Allocate pages on NUMA machines.

    +
    sudo echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
    +sudo echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
    +
    +
    +
  4. +
  5. Make memory available for DPDK.

    +
    sudo mkdir -p /mnt/huge $ mount -t hugetlbfs nodev /mnt/huge
    +
    +
    +

    For more information, refer to the DPDK guide System Requirements +section.

    +
  6. +
+
+
+

Set up the physical environment (Platforms A and B)

+

Connect the NICs on Platform A to the NICs on Platform B using the network +cables as shown in figure 2.

+
+../../_images/pyshical_net.png +

Figure 2: Physical network environment

+
+
+
+

Run l3fwd application (Platform B)

+

The l3fwd application is one of the DPDK examples available when you +install the dpdk-dev bundle. l3fwd forwards packets from one +NIC to another. For details, refer to the l3fwd documentation.

+
    +
  1. Open the l3fwd example directory.

    +
    sudo cd  /usr/share/dpdk/examples/l3fwd
    +
    +
    +
  2. +
  3. This step is very important.

    +
      +
    1. DPDK needs poll mode drivers to operate.
    2. +
    3. Poll mode drivers are shared objects in /usr/lib64.
    4. +
    5. See the full list of supported NICs at dpdk.org NICs.
    6. +
    7. You must know which kernel module each NIC is using and choose a poll +mode driver that corresponds to your NICs.
    8. +
    +
  4. +
  5. NIC binding and pktgen configuration depends upon network use cases and +available system resources. Use the -d flag to set the poll mode +driver.

    +

    The following example assumes that the NICs use the e1000 network driver +and the e1000 poll mode driver. The librte_pmd_e1000.so is +located in /usr/lib64 in Clear Linux OS.

    +
    sudo ./build/l3fwd -c 0x3 -n 2 -d librte_pmd_e1000.so -- -p 0x3 --config="(0,0,0),(1,0,1)"
    +
    +
    +
  6. +
  7. The l3fwd application shows port initialization details at startup. +After port 0 initialization completes, l3fwd shows a MAC address and +information for port 1.

    +

    Save the MAC address for configuring the pktgen project.

    +
  8. +
+
+
+

Run pktgen application (Platform A)

+

pktgen is a network traffic generator included in the DPDK.

+
    +
  1. pktgen configuration depends upon the network setup and the +available system resources. The following example shows a basic +configuration.

    +
    sudo ./app/app/x86_64-native-linuxapp-gcc/pktgen -c 0xf -n 4 -- -p 0xf -P -m "1.0, 2.1"
    +
    +
    +
  2. +
  3. Enable active colorful output (optional).

    +
    Pktgen> theme enable
    +
    +
    +
  4. +
  5. Use the MAC addresses shown by the l3fwd application during initialization. +The command to set the MAC addresses in pktgen has the format:

    +
    set mac <port number> <mac address>
    +
    +
    +

    Here is a working example:

    +
    Pktgen> set mac 0 00:1E:67:CB:E8:C9
    +Pktgen> set mac 1 00:1E:67:CB:E8:C9
    +
    +
    +
  6. +
  7. Send packets.

    +
    Pktgen> start 0-1
    +
    +
    +
  8. +
+

For more details, see the pktgen documentation.

+
+
+

Appendix A: Use pass-through for virtual machines

+

This section explains how to set up a virtual environment where virtual +machines control the NICs on the host.

+
    +
  1. Create a new directory and move to it.

    +
  2. +
  3. Download or create a start_qemu.sh script for running a kvm virtual +machine:

    +
    sudo curl -O https://cdn.download.clearlinux.org/image/start_qemu.sh
    +
    +
    +
  4. +
  5. Download a bare-metal image of Clear Linux OS and rename it as clear.img.

    +
  6. +
  7. Look for an Ethernet* device entry that contains vendor and device ID:

    +
    sudo lspci -nn | grep Ethernet
    +
    +
    +

    An example output:

    +
    03:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521]
    +
    +
    +

    where 03:00.0 is the device entry and 8086:1521 is the vendor:device +ID. Record this information, because you need it to unbind the NICs from a +host.

    +
  8. +
  9. Unbind the NICs from the host to do pass-through with virtual machines. Clear Linux OS +supports this action. The commands take the format:

    +
    echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/new_id
    +echo "entry for device" > /sys/bus/pci/drivers/igb/unbind
    +echo "entry for device" > /sys/bus/pci/drivers/pci-stub/bind
    +echo "vendor device_ID" > /sys/bus/pci/drivers/pci-stub/remove_id
    +
    +
    +

    Here is a working example:

    +
    sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/new_id
    +sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/igb/unbind
    +sudo echo "0000:03:00.0" > /sys/bus/pci/drivers/pci-stub/bind
    +sudo echo "8086 1521" > /sys/bus/pci/drivers/pci-stub/remove_id
    +
    +
    +
  10. +
  11. Assign the unbound NICs to the KVM virtual machine (guest). +Modify the start_qemu.sh script in qemu-system-x86_64 arguments, and +add the lines with the host’s NICs information in the format:

    +
    -device pci-assign,host="<entry for device>",id=passnic0,addr=03.0
    +-device pci-assign,host="<entry for device>",id=passnic1,addr=04.0
    +
    +
    +

    Here is a working example:

    +
    -device pci-assign,host=03:00.0,id=passnic0,addr=03.0 \
    +-device pci-assign,host=03:00.3,id=passnic1,addr=04.0 \
    +
    +
    +
  12. +
  13. Add more NUMA machines to the virtual machine by adding lines to the +Makefile boot target in the format:

    +
    -numa node,mem=<memory>,cpus=<number of cpus>
    +
    +
    +

    Here is a working example for a virtual machine with 4096 memory and four +CPUs:

    +
    -numa node,mem=2048,cpus=0-1 \
    +-numa node,mem=2048,cpus=2-3 \
    +
    +
    +
    +

    注解

    +

    Each NUMA machine must use the same quantity of memory.

    +
    +
  14. +
  15. Run the start_qemu.sh script.

    +
  16. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/network/ipxe-install.html b/zh_CN/guides/network/ipxe-install.html new file mode 100644 index 00000000..9b2383b7 --- /dev/null +++ b/zh_CN/guides/network/ipxe-install.html @@ -0,0 +1,1292 @@ + + + + + + + + + + + Install over the network with iPXE — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install over the network with iPXE

+

This guide describes how to install Clear Linux* OS using PXE over the network.

+ +
+

Overview

+

PXE is an industry standard that describes client-server interaction with +network-boot software and uses the DHCP and TFTP protocols. This guide shows one +method of using the PXE environment to install Clear Linux OS.

+

The PXE extension called iPXE adds support for additional protocols such as +HTTP, iSCSI, AoE, and FCoE. iPXE +enables network booting on computers with no built-in PXE support.

+

To install Clear Linux OS through iPXE, you must create a PXE client. Figure 1 depicts +the flow of information between a PXE server and a PXE client.

+
+PXE information flow +

Figure 1: PXE information flow.

+
+
+

警告

+

The Clear Linux OS image that boots through the PXE process automatically erases all +data and partitions on the PXE client system and creates 3 new partitions +to install onto.

+
+
+
+

Prerequisites

+

Before booting with iPXE, make the following preparations.

+

Connect the PXE server and PXE clients to a switch on a private network, as +shown in figure 2.

+
+Network topology +

Figure 2: Network topology.

+
+

Your PXE client must have a boot order where the network boot option is +prioritized before the disk boot option.

+

Your PXE server must have:

+
    +
  • Ethernet/LAN boot option.
  • +
  • At least two network adapters.
  • +
  • Connection to a public network.
  • +
  • Secure boot option disabled.
  • +
+
+

注解

+

You must disable the secure boot option in the BIOS because the UEFI +binaries used to boot Clear Linux OS are not signed.

+
+
+
+

Configuration

+

To set up Clear Linux OS using iPXE automatically, use the configure-ipxe.sh +script included with ICIS. For additional +instructions on the script, refer to the guide on the ister-cloud-init-svc +GitHub* repository.

+

To set up Clear Linux OS manually, perform the steps below.

+
    +
  1. Define the variables used for iPXE boot configuration.

    +
    ipxe_app_name=ipxe
    +ipxe_port=50000
    +web_root=/var/www
    +ipxe_root=$web_root/$ipxe_app_name
    +tftp_root=/srv/tftp
    +external_iface=eno1
    +internal_iface=eno2
    +pxe_subnet=192.168.1
    +pxe_internal_ip=$pxe_subnet.1
    +pxe_subnet_mask_ip=255.255.255.0
    +pxe_subnet_bitmask=16
    +
    +
    +
  2. +
  3. Log in and get root privilege.

    +
    sudo -s
    +
    +
    +
  4. +
  5. Add the pxe-server bundle to your Clear Linux OS system. The bundle contains all +files needed to run a PXE server.

    +
    sudo swupd bundle-add pxe-server
    +
    +
    +
  6. +
  7. Download the latest network-bootable release of Clear Linux OS and extract the +files.

    +
    sudo mkdir -p $ipxe_root
    +sudo curl -o /tmp/clear-pxe.tar.xz \
    +  https://cdn.download.clearlinux.org/current/clear-$(curl \
    +  https://cdn.download.clearlinux.org/latest)-pxe.tar.xz
    +sudo tar -xJf /tmp/clear-pxe.tar.xz -C $ipxe_root
    +sudo ln -sf $(ls $ipxe_root | grep 'org.clearlinux.*') $ipxe_root/linux
    +
    +
    +
    +

    注解

    +

    Ensure that the initial ramdisk file is named initrd and +the kernel file is named linux, which is a symbolic link to the +actual kernel file.

    +
    +
  8. +
  9. Create an iPXE boot script with the following contents. During an iPXE +boot, the iPXE boot script directs the PXE client to download the files to +boot and install Clear Linux OS. Use the names previously given to the initial +ramdisk and kernel files.

    +
    sudo cat > $ipxe_root/ipxe_boot_script.ipxe << EOF
    +#!ipxe
    +kernel linux quiet init=/usr/lib/systemd/systemd-bootchart \
    +initcall_debug tsc=reliable no_timer_check noreplace-smp rw \
    +initrd=initrd
    +initrd initrd
    +boot
    +EOF
    +
    +
    +
  10. +
  11. The pxe-server bundle contains a lightweight web-server known as +nginx. Create a configuration file for nginx to serve Clear Linux OS to PXE +clients with the following contents:

    +
    sudo mkdir -p /etc/nginx/conf.d
    +sudo cat > /etc/nginx/conf.d/$ipxe_app_name.conf << EOF
    +server {
    +  listen $ipxe_port;
    +  server_name localhost;
    +  location /$ipxe_app_name/ {
    +    root $web_root;
    +    autoindex on;
    +  }
    +}
    +EOF
    +
    +sudo cp /usr/share/nginx/conf/nginx.conf.example /etc/nginx/nginx.conf
    +
    +
    +
    +

    注解

    +

    Create a separate nginx configuration file to serve network-bootable +images on a non-standard port number. This action saves existing nginx +configurations.

    +
    +
  12. +
  13. Start nginx and enable the startup on boot option.

    +
    sudo systemctl start nginx
    +sudo systemctl enable nginx
    +
    +
    +
  14. +
  15. The pxe-server bundle contains a lightweight DNS server which +conflicts with the DNS stub listener provided in systemd-resolved. +Disable the DNS stub listener and temporarily stop systemd-resolved.

    +
    sudo mkdir -p /etc/systemd
    +sudo cat > /etc/systemd/resolved.conf << EOF
    +[Resolve]
    +DNSStubListener=no
    +EOF
    +
    +sudo systemctl stop systemd-resolved
    +
    +
    +
  16. +
  17. Assign a static IP address to the network adapter for the private network +and restart systemd-networkd with the following commands:

    +
    sudo mkdir -p /etc/systemd/network
    +sudo cat > /etc/systemd/network/70-internal-static.network << EOF
    +[Match]
    +Name=$internal_iface
    +[Network]
    +DHCP=no
    +Address=$pxe_internal_ip/$pxe_subnet_bitmask
    +EOF
    +
    +sudo systemctl restart systemd-networkd
    +
    +
    +
  18. +
  19. Configure NAT to route traffic from +the private network to the public network. This action makes the PXE +server act as a router. To make these changes persistent during reboots, save the +changes to the firewall with the following commands:

    +
    sudo iptables -t nat -F POSTROUTING
    +sudo iptables -t nat -A POSTROUTING -o $external_iface -j MASQUERADE
    +sudo systemctl enable iptables-save.service
    +sudo systemctl restart iptables-save.service
    +sudo systemctl enable iptables-restore.service
    +sudo systemctl restart iptables-restore.service
    +
    +
    +
    +

    注解

    +

    The firewall masks packets to make them appear as coming from the PXE +server and hides PXE clients from the public network.

    +
    +
  20. +
  21. Configure the kernel to forward network packets to different +interfaces. Otherwise, NAT will not work.

    +
    sudo mkdir -p /etc/sysctl.d
    +sudo echo net.ipv4.ip_forward=1 > /etc/sysctl.d/80-nat-forwarding.conf
    +sudo echo 1 > /proc/sys/net/ipv4/ip_forward
    +
    +
    +
  22. +
  23. The pxe-server bundle contains iPXE firmware images that allow computers +without an iPXE implementation to perform an iPXE boot. Create a TFTP +hosting directory and populate the directory with the iPXE firmware images +with the following commands:

    +
    sudo mkdir -p $tftp_root
    +sudo ln -sf /usr/share/ipxe/undionly.kpxe $tftp_root/undionly.kpxe
    +
    +
    +
  24. +
  25. The pxe-server bundle contains a lightweight TFTP, DNS, and DHCP +server known as dnsmasq. Create a configuration file for dnsmasq +to listen on a dedicated IP address for those functions. PXE clients on +the private network will use this IP address.

    +
    sudo cat > /etc/dnsmasq.conf << EOF
    +listen-address=$pxe_internal_ip
    +EOF
    +
    +
    +
  26. +
  27. Add the options to serve iPXE firmware images to PXE clients over TFTP to +the dnsmasq configuration file.

    +
    sudo cat >> /etc/dnsmasq.conf << EOF
    +enable-tftp
    +tftp-root=$tftp_root
    +EOF
    +
    +
    +
  28. +
  29. Add the options to host a DHCP server for PXE clients to the dnsmasq +configuration file.

    +
    sudo cat >> /etc/dnsmasq.conf << EOF
    +dhcp-leasefile=/var/db/dnsmasq.leases
    +
    +dhcp-authoritative
    +dhcp-option=option:router,$pxe_internal_ip
    +dhcp-option=option:dns-server,$pxe_internal_ip
    +
    +dhcp-match=set:pxeclient,60,PXEClient*
    +dhcp-range=tag:pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,15m
    +dhcp-range=tag:!pxeclient,$pxe_subnet.2,$pxe_subnet.253,$pxe_subnet_mask_ip,6h
    +
    +dhcp-match=set:ipxeboot,175
    +dhcp-boot=tag:ipxeboot,http://$pxe_internal_ip:$ipxe_port/$ipxe_app_name/ipxe_boot_script.ipxe
    +dhcp-boot=tag:!ipxeboot,undionly.kpxe,$pxe_internal_ip
    +EOF
    +
    +
    +

    The configuration provides the following important functions:

    +
      +
    • Directs PXE clients without an iPXE implementation to the TFTP server +to acquire architecture-specific iPXE firmware images that allow them +to perform an iPXE boot.
    • +
    • Activates only on the network adapter that has an IP address on the +defined subnet.
    • +
    • Directs PXE clients to the DNS server.
    • +
    • Directs PXE clients to the PXE server for routing via NAT.
    • +
    • Divides the private network into two pools of IP addresses. One pool +is for network boot and one pool is used after boot. Each pool has +their own lease times.
    • +
    +
  30. +
  31. Create a file for dnsmasq to record the IP addresses it provides +to PXE clients.

    +
    sudo mkdir -p /var/db
    +sudo touch /var/db/dnsmasq.leases
    +
    +
    +
  32. +
  33. Start dnsmasq and enable startup on boot.

    +
    sudo systemctl enable dnsmasq
    +sudo systemctl restart dnsmasq
    +
    +
    +
  34. +
  35. Start systemd-resolved.

    +
    sudo systemctl start systemd-resolved
    +
    +
    +
    +

    注解

    +

    systemd-resolved dynamically updates the list of DNS servers for the +private network if you use the dnsmasq DNS server. The setup creates a +pass-through DNS server that relies on the DNS servers listed in +/etc/resolv.conf.

    +
    +
  36. +
  37. Power on the PXE client and watch the client boot and install Clear Linux OS.

    +

    After booting, Clear Linux OS automatically partitions the hard drive, +installs itself, updates to the latest version, and reboots.

    +
  38. +
+

Congratulations! You have successfully installed and configured a PXE +server that enables PXE clients to boot and install Clear Linux OS over the network.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/network/network-bonding.html b/zh_CN/guides/network/network-bonding.html new file mode 100644 index 00000000..3a8eedf1 --- /dev/null +++ b/zh_CN/guides/network/network-bonding.html @@ -0,0 +1,1093 @@ + + + + + + + + + + + Combine multiple interfaces with network bonding — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Combine multiple interfaces with network bonding

+

This guide describes how to configure systemd to use the bonding +driver.

+

Network bonding combines multiple network interfaces into a single logical +interface to provide redundancy and bandwidth aggregation.

+

Clear Linux* OS includes the Linux Bonding driver and Team driver .

+

The example demonstrates how to:

+
    +
  • Bond all four ports of a quad-port NIC in 802.3ad mode.
  • +
  • Enable jumbo frames to optimize large data transfers on the local network.
  • +
+

Your NICs and network switch must support 802.3ad mode and jumbo frames. The +example explains how to configure your NICs for both features. Your switch may +require additional configuration. See your switch documentation for details.

+
+

注解

+

You must run all commands in this guide as root.

+
+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Create the /etc/systemd/network directory.

    +
    mkdir -p /etc/systemd/network
    +
    +
    +

    The /etc/systemd/network directory contains configuration files and +network settings for the virtual device and its underlying physical +interfaces.

    +
  4. +
  5. Configure systemd to create a virtual network device called bond1. Use a +text editor to create a file named 30-bond1.netdev.

    +
    [NetDev]
    +Name=bond1
    +Kind=bond
    +
    +[Bond]
    +Mode=802.3ad
    +TransmitHashPolicy=layer3+4
    +MIIMonitorSec=1s
    +LACPTransmitRate=fast
    +
    +
    +

    Refer to the systemd.netdev manpage for 30-bond1.netdev file +syntax. This example is based on Example 9 on the manpage. Modify the +example for your configuration.

    +
  6. +
  7. Configure the slave interfaces. Create a text file named +30-bond1-enp1s0.network. Assign the slave interfaces to the virtual +bond1 device and use the syntax shown in systemd.network.

    +
    [Match]
    +Name=enp1s0f*
    +
    +[Network]
    +Bond=bond1
    +
    +[Link]
    +MTUBytes=9000
    +
    +
    +

    The example bonds all four ports of a quad-port NIC as a slave of bond1. +The example uses a wildcard match because the NIC names are in the range +enp1s0f0-enp1s0f3. If your NIC names are not wildcard-compatible, create +a separate .network file for each NIC.

    +

    For best results, do not assign addresses or DHCP support to the individual +NICs.

    +

    The MTUBytes setting enables jumbo frames of up to 9000 bytes. Your +switch may require additional configuration to support this setting.

    +
  8. +
  9. Configure the bonded interface in a file named 30-bond1.network.

    +
    [Match]
    +Name=bond1
    +
    +[Network]
    +BindCarrier=enp1s0f0 enp1s0f1 enp1s0f2 enp1s0f3
    +Address=192.168.1.201/24
    +
    +[Link]
    +MTUBytes=9000
    +
    +
    +

    bond1 is a virtual interface with no physical link status.

    +

    BindCarrier indicates that the bond1 link status is determined by the +status of the listed slave devices.

    +

    Address contains an IP address that you assign to the logical interface. +DHCP bonded interfaces are complex and outside the scope of this example.

    +

    MTUBytes must be set to 9000 on all slave interfaces and on the bonded +interface for successful jumbo frames operation. If MTUBytes is not the +same on all interfaces, then the lowest value is used.

    +
  10. +
  11. Apply the new network configuration with the command:

    +
    systemctl restart systemd-networkd
    +
    +
    +

    The MTUBytes settings do not take effect until you reboot or manually +apply the settings with a utility such as ifconfig.

    +
  12. +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/network/vnc.html b/zh_CN/guides/network/vnc.html new file mode 100644 index 00000000..37a12e98 --- /dev/null +++ b/zh_CN/guides/network/vnc.html @@ -0,0 +1,1757 @@ + + + + + + + + + + + Remote-desktop to a host using VNC — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Remote-desktop to a host using VNC

+

This guide describes how to use VNC to +connect to a remote Clear Linux* OS host.

+

VNC is a client-server GUI-based tool that allows you to connect via +remote-desktop to your Clear Linux OS host.

+ +
+

Install the VNC server and misc. components on your host

+

To configure VNC to work on your Clear Linux OS host, install these bundles:

+
    +
  • desktop-autostart: Installs GDM, sets +it to start automatically on boot, and installs TigerVNC Viewer.
  • +
  • vnc-server: Installs the TigerVNC server.
  • +
+

Follow these steps:

+
    +
  1. Log into your Clear Linux OS host and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Install the Clear Linux OS bundles.

    +
    swupd bundle-add desktop-autostart vnc-server
    +
    +
    +
  4. +
  5. Reboot your Clear Linux OS host.

    +
  6. +
+
+
+

Configure a VNC-server-start method on your host

+

There are three methods you can use to configure and start the VNC server on +your Clear Linux OS host:

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1: VNC-server-start Configuration Methods
AttributeMethod 1: Manually start a VNC sessionMethod 2: Automatically start a VNC session via a systemd service scriptMethod 3: Create multi-user logins with authentication through GDM
DescriptionThis is the traditional method where you SSH into the Clear Linux OS host, manually +start a VNC session to get a display ID, and connect to it by +supplying the display ID.The system administrator sets up a systemd service script for you with +a pre-assigned display ID. You make a VNC connection and supply +your pre-assigned display ID.The system adminstrator configures GDM to accept connection requests. +When you make a VNC connection to the Clear Linux OS host, you see +the GDM login screen and authenticate as if you are local.
Who configures VNC settings?YouSystem adminstratorSystem adminstrator
Who starts VNC session?YouSet to start automatically on boot by system administratorSet to start automatically on boot by system administrator
Who ends VNC sesssion?YouYouSystem administrator can disable VNC service altogether
Requires VNC password to authenticate?YesYesNo. Use Clear Linux OS account username and password through GDM
+

Although all three methods can coexist on the same Clear Linux OS host, we recommend +you pick a method that suits your needs.

+

For simplicity, the rest of this guide refers to these methods as +Method 1, Method 2, and Method 3.

+
+

Method 1: Manually start a VNC session

+

You (and each user) must perform these steps to initialize your VNC settings.

+
    +
  1. Log in.

    +
  2. +
  3. Open a terminal emulator.

    +
  4. +
  5. Start VNC with the vncserver command. Since this is your +first time starting VNC, it adds default configuration files and asks you +to set a VNC password.

    +
    vncserver
    +
    +
    +

    Example output:

    +
    You will require a password to access your desktops.
    +
    +Password:
    +Verify:
    +Would you like to enter a view-only password (y/n)? n
    +xauth:  file /home/vnc-user-a/.Xauthority does not exist
    +
    +New 'clr-linux:2 (vnc-user-a)' desktop is clr-linux:2
    +
    +Creating default startup script /home/vnc-user-a/.vnc/xstartup
    +Creating default config /home/vnc-user-a/.vnc/config
    +Starting applications specified in /home/vnc-user-a/.vnc/xstartup
    +Log file is /home/vnc-user-a/.vnc/clr-linux:2.log
    +
    +
    +

    Upon completion, you can find the default configuration files and the +password file hidden in the .vnc directory in your home directory.

    +

    A VNC session starts and shows a unique display ID, which is the +number following the hostname and the colon “:”. In the above example, the +display ID is 2. In a later step, you will supply the display ID to +your VNC viewer app for connection.

    +
  6. +
  7. Kill the active VNC session for the time being with the +vncserver -kill :[display ID] command. Substitute [display ID] +with your active VNC session display ID. For example:

    +
    vncserver -kill :2
    +
    +
    +
    +

    注解

    +

    If you do not recall the active session display ID, use the +vncserver -list command to find it.

    +
    +
  8. +
  9. Optional configurations:

    +
      +
    • To customize settings such as screen size, security type, etc., +modify the $HOME/.vnc/config file.
    • +
    • To customize the applications to run at startup, modify the +$HOME/.vnc/xstartup file.
    • +
    +
  10. +
+
+
+

Method 2: Automatically start a VNC session via a systemd service script

+

To configure VNC for this method, you must have root privileges. You will +set up a systemd service file for all intended VNC users with their own +preassigned unique display ID.

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Make sure the user accounts already exist. Use the following command to +list all users.

    +
    cut -d: -f1 /etc/passwd
    +
    +
    +
  4. +
  5. Create the path /etc/systemd/system.

    +
    mkdir -p /etc/systemd/system
    +
    +
    +
  6. +
  7. Create a systemd service script file vncserver@:[X].service, +where [X] is the display ID, for each user in /etc/systemd/system +Each user must be assigned a unique display ID. Be sure the correct +username is entered in the User field. The example below shows user +vnc-user-b who is assigned the display ID 5.

    +
    # cat > /etc/systemd/system/vncserver@:5.service << EOF
    +
    +[Unit]
    +Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5"
    +After=syslog.target network.target
    +
    +[Service]
    +Type=simple
    +User=vnc-user-b
    +PAMName=login
    +PIDFile=/home/%u/.vnc/%H%i.pid
    +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    +ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -alwaysshared -fg
    +ExecStop=/usr/bin/vncserver -kill %i
    +
    +[Install]
    +WantedBy=multi-user.target
    +
    +EOF
    +
    +
    +
  8. +
  9. Have each user log into their account and set a VNC password with +the vncpasswd command before proceeding to the next step.

    +
  10. +
  11. Start the VNC service script and set it to start automatically on +boot for each user. Replace the [X] with the display ID.

    +
    systemctl daemon-reload
    +systemctl start vncserver@:[X].service
    +systemctl enable vncserver@:[X].service
    +
    +
    +
  12. +
  13. After starting the services, verify they are running.

    +
    systemctl | grep vnc
    +
    +
    +

    The example below shows 2 VNC sessions that were successfully started for +users vnc-user-b with display ID 5 and vnc-user-c with display ID 6.

    +
    # systemctl | grep vnc
    +
    +vncserver@:5.services   loaded active running  VNC Remote Desktop Service for "vnc-user-b" with display ID "5"
    +vncserver@:6.services   loaded active running  VNC Remote Desktop Service for "vnc-user-c" with display ID "6"
    +system-vncserver.slice  loaded active active system-vncserver.slice
    +
    +
    +
  14. +
+
+
+

Method 3: Multi-user logins with authentication through GDM

+

For this method, VNC is configured as a systemd service that listens on port +5900 and GDM is configured to accept access requests from VNC. When you +make a VNC connection to your Clear Linux OS host, you are presented with the GDM login +screen and you authenticate as if you are local. You must have root privileges +to perform this configuration.

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Create the path /etc/systemd/system.

    +
    mkdir -p /etc/systemd/system
    +
    +
    +
  4. +
  5. Create a systemd socket file xvnc.socket and add the following:

    +
    # cat > /etc/systemd/system/xvnc.socket << EOF
    +
    +[Unit]
    +Description=XVNC Server on port 5900
    +
    +[Socket]
    +ListenStream=5900
    +Accept=yes
    +
    +[Install]
    +WantedBy=sockets.target
    +
    +EOF
    +
    +
    +
  6. +
  7. Create a systemd service file xvnc@.service and add the following:

    +
    # cat > /etc/systemd/system/xvnc@.service << EOF
    +
    +[Unit]
    +Description=Daemon for each XVNC connection
    +
    +[Service]
    +ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 2000x1200 -once -SecurityTypes=None
    +User=nobody
    +StandardInput=socket
    +StandardError=syslog
    +
    +EOF
    +
    +
    +
  8. +
  9. Create the path /etc/gdm.

    +
    mkdir -p /etc/gdm
    +
    +
    +
  10. +
  11. Create a GDM custom.conf file and add the following:

    +
    # cat > /etc/gdm/custom.conf << EOF
    +
    +[xdmcp]
    +Enable=true
    +Port=177
    +
    +EOF
    +
    +
    +
  12. +
  13. Start the VNC socket script and set it to start automatically on boot.

    +
    systemctl daemon-reload
    +systemctl start xvnc.socket
    +systemctl enable xvnc.socket
    +
    +
    +
  14. +
  15. After starting the socket, verify it is running.

    +
    systemctl | grep vnc
    +
    +
    +

    The example below shows the xvnc.socket is running.

    +
    # systemctl | grep vnc
    +
    +xvnc.socket               loaded active listening XVNC Server on port 5900
    +system-xvnc.slice         loaded active active    system-xvnc.slice
    +
    +
    +
  16. +
+

See the vncserver Man page for additional information.

+
+
+
+

Install a VNC viewer app and an SSH client on your client system

+

You need a VNC viewer app on your client system to connect to your Clear Linux OS host. +An SSH client is only needed if you chose to use Method 1 or you plan to +encrypt your VNC traffic, which is discussed later in this guide.

+

Perform the steps below to add these apps to your client system.

+
+

Install a VNC viewer app

+

On Clear Linux OS:

+
swupd bundle-add desktop-autostart
+
+
+

On Ubuntu*, Mint*:

+
apt-get install xtightvncviewer
+
+
+

On Fedora*:

+
dnf install tigervnc
+
+
+

On Windows*:

+ +

On macOS*:

+ +
+
+

Install an SSH client

+
    +
  • On most Linux distros (Clear Linux OS, Ubuntu, Mint, Fedora, etc.) and macOS, +SSH is built-in so you don’t need to install it.
  • +
  • On Windows, you can install Putty.
  • +
+
+
+
+

Establish a VNC connection to your host

+

Depending on the VNC-server-configuration method chosen, use the appropriate VNC +connection:

+
    +
  • If you chose Method 1, you must take a few extra steps by using SSH to connect +to your Clear Linux OS host and then manually launching VNC.
  • +
  • If you chose Method 2, get your preassigned VNC display ID from your system +administrator first and then proceed to the Connect to your VNC session +section below.
  • +
  • If you chose Method 3, proceed to the Connect to your VNC session below.
  • +
+
+

SSH into your host and launch VNC

+
    +
  1. SSH into your Clear Linux OS host

    +
      +
    1. On Linux distros and macOS:

      +
      ssh [username]@[clear-linux-host-ip-address]
      +
      +
      +
    2. +
    3. On Windows:

      +
        +
      1. Launch Putty.

        +
      2. +
      3. Under the Category section, select Session. +See Figure 1.

        +
      4. +
      5. Enter the IP address of your Clear Linux OS host in the +Host Name (or IP address) field.

        +
      6. +
      7. Set the Connection type option to SSH.

        +
      8. +
      9. Click the Open button.

        +
        +Putty - configure SSH session settings +

        Figure 1: Putty - configure SSH session settings

        +
        +
      10. +
      +
    4. +
    +
  2. +
  3. Log in with your Clear Linux OS username and password. Do not use your VNC password.

    +
  4. +
  5. Start a VNC session.

    +
    vncserver
    +
    +
    +

    Example output:

    +
    New 'clr-linux:3 (vnc-user-c)' desktop is clr-linux:3
    +
    +Starting applications specified in /home/vnc-user-c/.vnc/xstartup
    +Log file is /home/vnc-user-c/.vnc/clr-linux:3.log
    +
    +
    +
  6. +
  7. Take note of the generated display ID because you will input it into +the VNC viewer app to establish the connection. The above example shows +the display ID is 3.

    +
    +

    注解

    +

    VNC automatically picks a unique display ID unless you specify one. +To specify a display ID, enter a unique number that is not already +in use after the colon. For example:

    +
    vncserver :8
    +
    +
    +
    +
  8. +
  9. You can now end the SSH connection by logging out. This does +not terminate your active VNC session.

    +
  10. +
+
+
+

Connect to your VNC session

+

For Method 1 and Method 2, you must connect to a specific active session +or display ID using one of two options:

+
    +
  • Use a fully-qualified VNC port number, which consists of the default VNC +server port (5900) plus the display ID
  • +
  • Use the display ID
  • +
+

For example, if the display ID is 3, it can be specified as 5903 or just +as 3. For Method 3, VNC does not expect a display ID. Use 5900. For simplicity, +the instructions below use the fully-qualified VNC port number.

+

On Linux distros:

+
    +
  1. Open a terminal emulator and enter:

    +
    vncviewer [clear-linux-host-ip-address]:[fully-qualified VNC port  number]
    +
    +
    +
  2. +
  3. Enter your credentials.

    +
      +
    • For Method 1 and Method 2, enter your VNC password. No username is +required.

      +
    • +
    • For Method 3, enter your Clear Linux OS account username and password through +GDM.

      +
      +

      注解

      +

      With Method 3, you cannot remotely log into your Clear Linux OS host through +VNC if you are logged in locally and vice versa.

      +
      +
    • +
    +
  4. +
+

On Windows and macOS using RealVNC app:

+
    +
  1. Start the RealVNC viewer app. See Figure 2.

    +
  2. +
  3. Enter the IP address of the Clear Linux OS host and the fully-qualified +VNC port number.

    +

    The following screenshot shows connecting to Clear Linux OS host +192.168.25.54 with a fully-qualified VNC port number 5902.

    +
    +RealVNC Viewer +

    Figure 2: RealVNC Viewer

    +
    +
  4. +
  5. Press the Enter key.

    +
  6. +
  7. Enter your credentials.

    +
      +
    • For Method 1 and Method 2, enter your VNC password. No username is +required.

      +
    • +
    • For Method 3, enter your Clear Linux OS account username and password through +GDM.

      +
      +

      注解

      +

      With Method 3, you cannot remotely log into your Clear Linux OS host through +VNC if you are logged in locally and vice versa.

      +
      +
    • +
    +
  8. +
+
+

Optional: Configure RealVNC Image Quality

+

To increase the RealVNC viewer image quality, manually change the ColorLevel +value. Follow these steps:

+
    +
  1. Right-click a connection node and select Properties…. +See Figure 3.

    +
    +RealVNC Viewer - change connection node properties +

    Figure 3: RealVNC Viewer - change connection node properties

    +
    +
  2. +
  3. Select the Expert tab. See Figure 4.

    +
  4. +
  5. Select the ColorLevel setting and change it to your +preferred setting.

    +
    +RealVNC Viewer - change ColorLevel +

    Figure 4: RealVNC Viewer - change ColorLevel

    +
    +
  6. +
+
+
+
+
+

Terminate a VNC connection to your host

+

For Method 1 and Method 2, once started, a VNC session remains active +on your Clear Linux OS host even if you close your VNC viewer app. If you want to +truly terminate an active VNC session, follow these steps:

+
    +
  1. SSH into your Clear Linux OS host.

    +
  2. +
  3. Open a terminal emulator.

    +
  4. +
  5. Find the active VNC session display ID with the command +vncserver -list.

    +
    vncserver -list
    +
    +
    +
  6. +
  7. Terminate it with the vncserver -kill command followed by a +colon and the display ID.

    +
    vncserver -kill :[display ID]
    +
    +
    +
  8. +
  9. For Method 3, only the system administrator can stop and disable the +VNC service by using these commands:

    +
    systemctl stop xvnc.socket
    +systemctl disable xnvc.socket
    +
    +
    +
  10. +
+
+
+

Encrypt VNC traffic through an SSH tunnel

+

By default, VNC traffic is not encrypted. Figure 6 shows an example warning +from RealVNC Viewer.

+
+RealVNC Viewer - Connection not encrypted warning +

Figure 6: RealVNC Viewer - Connection not encrypted warning

+
+

To add security, VNC traffic can be routed through an SSH tunnel. This is +accomplished by following these steps:

+
    +
  1. Configure the VNC server to only accept connection from localhost by +adding the -localhost option.
  2. +
  3. Set up an SSH tunnel between your client system and your Clear Linux OS host. +Your client system will forward traffic from the localhost (the client) +destined for a specified fully-qualified VNC port number (on the client) +to your Clear Linux OS host with the same port number.
  4. +
  5. The VNC viewer app on your client system will now connect to localhost, +instead of the IP address of your Clear Linux OS host.
  6. +
+
+

Configure VNC to only accept connection from localhost

+

For Method 1:

+
    +
  1. Edit the config file located in $HOME/.vnc and uncomment +the # localhost line. It should look like this:

    +
    ## Supported server options to pass to vncserver upon invocation can be listed
    +## in this file. See the following manpages for more: vncserver(1)
    +Xvnc(1).
    +## Several common ones are shown below. Uncomment and modify to your liking.
    +##
    +# securitytypes=vncauth,tlsvnc
    +# desktop=sandbox
    +# geometry=2000x1200
    +localhost
    +# alwaysshared
    +
    +
    +
  2. +
  3. If an active session exists, kill it, and then restart it.

    +
  4. +
+

For Method 2:

+
    +
  1. Edit the systemd service script vncserver@:[X].service located in +/etc/systemd/system and add -localhost to the ExecStart +line. The example below uses vncserver@:5.service:

    +
    [Unit]
    +Description=VNC Remote Desktop Service for "vnc-user-b" with display ID "5"
    +After=syslog.target network.target
    +
    +[Service]
    +Type=simple
    +User=vnc-user-b
    +PAMName=login
    +PIDFile=/home/%u/.vnc/%H%i.pid
    +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    +ExecStart=/usr/bin/vncserver %i -geometry 2000x1200 -localhost -alwaysshared -fg
    +ExecStop=/usr/bin/vncserver -kill %i
    +
    +[Install]
    +WantedBy=multi-user.target
    +
    +
    +
  2. +
  3. Restart the service script:

    +
    systemctl daemon-load
    +systemctl restart vncserver@:5.service
    +
    +
    +
  4. +
+

For Method 3:

+
    +
  1. No change is needed to the xvnc@service script.

    +

    After you have restarted your VNC session, you can verify that it only +accepts connections from localhost by using the netstat +command like this:

    +
    netstat -plant
    +
    +
    +
    +

    注解

    +

    Add the Clear Linux OS network-basic bundle to get the netstat +command.

    +
    +
  2. +
+

Figure 7 shows two VNC sessions (5901 and 5905) accepting connections from +any host as specified by the 0.0.0.0’s. This is before the +-localhost option was used.

+
+VNC session accepting connection from any host +

Figure 7: VNC sessions (5901 and 5905) accepting connections from any host

+
+

Figure 8 shows two VNC sessions (5901 and 5905) only accepting connections from +localhost as specified by 127.0.0.1’s. This is after the +-localhost option was used.

+
+VNC session only accepting connection from localhost +

Figure 8: VNC sessions (5901 and 5905) only accepting connections from localhost

+
+
+
+

Set up an SSH tunnel from your client system to your Clear Linux OS host

+

On Linux distros and macOS:

+
    +
  1. Open terminal emulator and enter:

    +
    ssh -L [client port number]:localhost:[fully-qualified VNC port number] \
    +-N -f -l [username] [clear-linux-host-ip-address]
    +
    +
    +
  2. +
  3. Enter your Clear Linux OS account password (not your VNC password).

    +
    +

    注解

    +
      +
    • -L specifies that [client port number] on the localhost (on the +client side) is forwarded to [fully-qualified VNC port number] +(on the server side).
    • +
    • Replace [client port number] with an available client port number +(for example: 1234). For simplicity, you can make the +[client port number] the same as the [fully-qualified VNC port number].
    • +
    • Replace [fully-qualified VNC port number] with 5900 (default VNC +port) plus the display ID. For example, if the display ID is 2, +the fully-qualified VNC port number is is 5902.
    • +
    • -N tells SSH to only forward ports and not execute a remote +command.
    • +
    • -f tells SSH to go into the background before command execution.
    • +
    • -l specifies the username to log in as.
    • +
    +
    +
  4. +
+

On Windows:

+
    +
  1. Launch Putty.

    +
  2. +
  3. Specify the Clear Linux OS VNC host to connect to.

    +
      +
    1. Under the Category section, select Session. +See Figure 1.
    2. +
    3. Enter the IP address of your Clear Linux OS host in the +Host Name (or IP address) field.
    4. +
    5. Set the Connection type option to SSH.
    6. +
    +
  4. +
  5. Configure the SSH tunnel. See Figure 9 for an example.

    +
      +
    1. Under the Category section, go to +Connection > SSH > Tunnels.

      +
    2. +
    3. In the Source port field, enter an available client +port number (for example: 1234). For simplicity, you can make the +Source port the same as the fully-qualified VNC port number.

      +
    4. +
    5. In the Destination field, enter +localhost: plus the fully-qualified VNC port number.

      +
    6. +
    7. Click the Add button.

      +
      +Putty - configure SSH tunnel +

      Figure 9: Putty - configure SSH tunnel

      +
      +
    8. +
    +
  6. +
  7. Click the Open button.

    +
  8. +
  9. Enter your Clear Linux OS account password (not your VNC password).

    +
  10. +
+
+
+

Connect to a VNC session through an SSH tunnel

+

After you have set up an SSH tunnel, follow these instructions to connect to +your VNC session.

+

On Linux distros:

+
    +
  1. Open terminal emulator and enter:

    +
    vncviewer localhost:[client port number]
    +
    +
    +
  2. +
+

On Windows and macOS using `RealVNC`:

+
    +
  1. Start the RealVNC viewer app.

    +
  2. +
  3. Enter localhost and the fully-qualified VNC port number. See Figure 10 +for an example.

    +
    +RealVNC viewer app connecting to localhost:1234 +

    Figure 10: RealVNC viewer app connecting to localhost:1234

    +
    +
    +

    注解

    +

    RealVNC will still warn that the connection is not encrypted even +though its traffic is going through the SSH tunnel. You can ignore +this warning.

    +
    +
    +
    +
  4. +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/stacks/dars.html b/zh_CN/guides/stacks/dars.html new file mode 100644 index 00000000..547a3881 --- /dev/null +++ b/zh_CN/guides/stacks/dars.html @@ -0,0 +1,1097 @@ + + + + + + + + + + + Data Analytics Reference Stack — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Data Analytics Reference Stack

+

This guide explains how to use the DARS, +and to optionally build your own DARS container image.

+

Any system that supports Docker* containers can be used with DARS. This steps +in this guide use Clear Linux* OS as the host system.

+ +
+

The Data Analytics Reference Stack release

+

The Data Analytics Reference Stack (DARS) provides developers and enterprises a straightforward, highly optimized software stack for storing and processing large +amounts of data. More detail is available on the +DARS architecture and performance benchmarks.

+

The Data Analytics Reference Stack provides two pre-built Docker images, +available on Docker Hub:

+ +

We recommend you view the latest component versions for each image in the +README found in the Data Analytics Reference Stack GitHub* +repository. Because Clear Linux OS is a rolling distribution, the package version numbers +in the Clear Linux OS-based containers may not be the latest released by Clear Linux OS.

+
+

注解

+

The Data Analytics Reference Stack is a collective work, and each piece +of software within the work has its own license. Please see the +DARS Terms of Use for more details about licensing and usage of the Data +Analytics Reference Stack.

+
+
+
+

Using the Docker images

+
    +
  1. To immediately start using the latest stable DARS images, pull an image +directly from Docker Hub. This example uses the +DARS with Intel® MKL Docker image.

    +
  2. +
  3. Once you have downloaded the image, you can run it with

    +
    docker run -it --ulimit nofile=1000000:1000000 --name mkl <name of image>
    +
    +
    +

    This will launch the image and drop you into a bash shell inside the +container. You will see output similar to the following:

    +
    root@fd5155b89857 /root # spark-shell
    +spark-shell
    +Config directory: /usr/share/defaults/spark/
    +Welcome to
    +  ____              __
    + / __/__  ___ _____/ /__
    + _\ \/ _ \/ _ `/ __/  '_/
    +/___/ .__/\_,_/_/ /_/\_\   version 2.4.0
    +   /_/
    +
    +Using Scala version 2.12.7 (OpenJDK 64-Bit Server VM, Java 1.8.0-internal)
    +Type in expressions to have them evaluated.
    +Type :help for more information.
    +
    +scala>
    +
    +
    +

    The --ulimit nofile parameter is currently required in order to +increase the number of open files opened at certain point by the spark +engine.

    +
  4. +
+
+
+

Building DARS images

+

If you choose to build your own DARS container images, you can customize +them as needed. Use the provided Dockerfile as a baseline.

+

To construct images with Clear Linux OS, start with a Clear Linux OS development platform that +has the containers-basic-dev bundle installed. Learn more about +bundles and installing them by using swupd.

+
    +
  1. Clone the Data Analytics Reference Stack GitHub* repository.

    +
    git clone https://github.com/clearlinux/dockerfiles/tree/master/stacks/dars -b master
    +
    +
    +
  2. +
  3. Inside the DARS directory, run make to build OpenBLAS and MKL images.

    +
    make
    +
    +
    +

    Run make baseline to build the baseline CentOS image. Depending on +the system, it may take a while to finish building.

    +
    make baseline
    +
    +
    +
  4. +
  5. Once completed, check the resulting images with Docker

    +
    docker images | grep dars
    +
    +
    +
  6. +
  7. You can use any of the resulting images to launch fully functional containers. +If you need to customize the containers, you can edit the provided Dockerfile.

    +
  8. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/stacks/dlrs/dlrs.html b/zh_CN/guides/stacks/dlrs/dlrs.html new file mode 100644 index 00000000..934638b9 --- /dev/null +++ b/zh_CN/guides/stacks/dlrs/dlrs.html @@ -0,0 +1,1466 @@ + + + + + + + + + + + Deep Learning Reference Stack — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Deep Learning Reference Stack

+

This guide describes how to run benchmarking workloads for TensorFlow*, +PyTorch*, and Kubeflow in Clear Linux* OS using the Deep Learning Reference Stack.

+ +
+

Overview

+

We created the Deep Learning Reference Stack to help AI developers deliver +the best experience on Intel® Architecture. This stack reduces complexity +common with deep learning software components, provides flexibility for +customized solutions, and enables you to quickly prototype and deploy Deep +Learning workloads. Use this guide to run benchmarking workloads on your +solution.

+

The Deep Learning Reference Stack is available in the following versions:

+
    +
  • Intel MKL-DNN-VNNI, which is optimized using Intel® Math Kernel Library +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.
  • +
  • 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.
  • +
+
+

重要

+

To take advantage of the Intel® AVX-512 and VNNI functionality with the Deep +Learning Reference Stack, you must use the following hardware:

+
    +
  • Intel® AVX-512 images require an Intel® Xeon® Scalable Platform
  • +
  • VNNI requires a 2nd generation Intel® Xeon® Scalable Platform
  • +
+
+
+

Stack features

+ +
+

注解

+

The Deep Learning Reference Stack is a collective work, and each piece of +software within the work has its own license. Please see the DLRS Terms of Use +for more details about licensing and usage of the Deep Learning Reference Stack.

+
+
+
+

Prerequisites

+
    +
  • Install Clear Linux OS on your host system
  • +
  • containers-basic bundle
  • +
  • cloud-native-basic bundle
  • +
+

In Clear Linux OS, containers-basic includes Docker*, which is required for +TensorFlow and PyTorch benchmarking. Use the swupd utility to +check if containers-basic and cloud-native-basic are +present:

+
sudo swupd bundle-list
+
+
+

To install the containers-basic or cloud-native-basic +bundles, enter:

+
sudo swupd bundle-add containers-basic cloud-native-basic
+
+
+

Docker is not started upon installation of the containers-basic +bundle. To start Docker, enter:

+
sudo systemctl start docker
+
+
+

To ensure that Kubernetes is correctly installed and configured, follow the +instructions in Run Kubernetes*.

+
+
+

Version compatibility

+

We validated these steps against the following software package versions:

+
    +
  • Clear Linux OS 26240 (Minimum supported version)
  • +
  • Docker 18.06.1
  • +
  • Kubernetes 1.11.3
  • +
  • Go 1.11.12
  • +
+
+

注解

+

The Deep Learning Reference Stack was developed to provide the best user +experience when executed on a Clear Linux OS host. However, as the stack runs in a +container environment, you should be able to complete the following sections of this guide on other Linux* distributions, provided they comply with the Docker*, Kubernetes* and Go* package versions listed above. Look for your distribution documentation on how to update packages and manage Docker services.

+
+
+
+
+

TensorFlow single and multi-node benchmarks

+

This section describes running the TensorFlow Benchmarks in single node. +For multi-node testing, replicate these steps for each node. These steps +provide a template to run other benchmarks, provided that they can invoke +TensorFlow.

+
+

注解

+

Performance test results for the Deep Learning Reference Stack and for this +guide were obtained using runc as the runtime.

+
+
    +
  1. Download either the Eigen or the Intel MKL-DNN Docker image +from Docker Hub.

    +
  2. +
  3. Run the image with Docker:

    +
    docker run --name <image name>  --rm -i -t <clearlinux/
    +stacks-dlrs-TYPE> bash
    +
    +
    +
    +

    注解

    +

    Launching the Docker image with the -i argument starts +interactive mode within the container. Enter the following commands in +the running container.

    +
    +
  4. +
  5. Clone the benchmark repository in the container:

    +
    git clone http://github.com/tensorflow/benchmarks -b cnn_tf_v1.12_compatible
    +
    +
    +
  6. +
  7. Execute the benchmark script:

    +
    python benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --device=cpu --model=resnet50 --data_format=NHWC
    +
    +
    +
  8. +
+
+

注解

+

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.

+
+
+
+

PyTorch single and multi-node benchmarks

+

This section describes running the PyTorch benchmarks for Caffe2 in +single node.

+
    +
  1. Download either the PyTorch with OpenBLAS or the PyTorch with Intel +MKL-DNN Docker image from Docker Hub.

    +
  2. +
  3. Run the image with Docker:

    +
    docker run --name <image name>  --rm -i -t <clearlinux/stacks-dlrs-TYPE> bash
    +
    +
    +
    +

    注解

    +

    Launching the Docker image with the -i argument starts +interactive mode within the container. Enter the following commands in +the running container.

    +
    +
  4. +
  5. Clone the benchmark repository:

    +
    git clone https://github.com/pytorch/pytorch.git
    +
    +
    +
  6. +
  7. Execute the benchmark script:

    +
    cd pytorch/caffe2/python
    +python convnet_benchmarks.py --batch_size 32 \
    +                      --cpu \
    +                      --model AlexNet
    +
    +
    +
  8. +
+
+
+

Kubeflow multi-node benchmarks

+

The benchmark workload runs in a Kubernetes cluster. The guide uses +Kubeflow for the Machine Learning workload deployment on three nodes.

+
+

警告

+

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 guide.

+
+
+

Kubernetes setup

+

Follow the instructions in the Run Kubernetes* tutorial to get set up on +Clear Linux OS. The Kubernetes community also has instructions for creating a cluster, +described in Creating a single control-plane cluster with kubeadm.

+
+
+

Kubernetes networking

+

We used flannel as the network provider for these tests. If you +prefer a different network layer, refer to the Kubernetes network documentation +described in Creating a single control-plane cluster with kubeadm for setup.

+
+
+

Kubectl

+

You can use kubectl to run commands against your Kubernetes cluster. Refer to +the Overview of kubectl 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.

+
    +
  1. Copy this example.yaml script to your system:

    +
    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" ]
    +
    +
    +
  2. +
  3. Execute the script with kubectl:

    +
    kubectl apply –f <path-to-yaml-file>/example.yaml
    +
    +
    +
  4. +
+

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

+

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. Note that this guide uses Kubeflow v0.4.0, and cannot guarantee results if you use a different version.

+

From the Docker image, run the following:

+
mkdir -p /opt
+git clone https://github.com/tensorflow/benchmarks.git /opt/tf-benchmarks
+cp launcher.py /opt
+chmod u+x /opt/*
+
+
+

Your entry point becomes: /opt/launcher.py.

+

This builds an image that can be consumed directly by TFJob from Kubeflow.

+
+
+

ksonnet*

+

Kubeflow uses ksonnet* to manage deployments, so you must install it +before setting up Kubeflow.

+

ksonnet was added to the cloud-native-basic bundle in Clear Linux OS version +27550. If you are using an older Clear Linux OS version (not recommended), you must +manually install ksonnet as described below.

+

On Clear Linux OS, follow these steps:

+
swupd bundle-add go-basic-dev
+export GOPATH=$HOME/go
+export PATH=$PATH:$GOPATH/bin
+go get github.com/ksonnet/ksonnet
+cd $GOPATH/src/github.com/ksonnet/ksonnet
+make install
+
+
+

After the ksonnet installation is complete, ensure that binary ks is +accessible across the environment.

+
+
+

Kubeflow

+

Once you have Kubernetes running on your nodes, set up Kubeflow by +following these instructions from the Getting Started with Kubeflow guide.

+
export KUBEFLOW_SRC=$HOME/kflow
+export KUBEFLOW_TAG="v0.4.1"
+export KFAPP="kflow_app"
+export K8S_NAMESPACE="kubeflow"
+
+mkdir ${KUBEFLOW_SRC}
+cd ${KUBEFLOW_SRC}
+ks init ${KFAPP}
+cd ${KFAPP}
+ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${KUBEFLOW_TAG}/kubeflow
+ks pkg install kubeflow/common
+ks pkg install kubeflow/tf-training
+
+
+

Next, deploy the primary package for our purposes: tf-job-operator.

+
ks env rm default
+kubectl create namespace ${K8S_NAMESPACE}
+ks env add default --namespace "${K8S_NAMESPACE}"
+ks generate tf-job-operator tf-job-operator
+ks apply default -c tf-job-operator
+
+
+

This creates the CustomResourceDefinition (CRD) endpoint to launch a TFJob.

+
+
+

Run a TFJob

+
    +
  1. Get the ksonnet registries for deploying TFJobs from dlrs-tfjob.

    +
  2. +
  3. Install the TFJob components as follows:

    +
    ks registry add dlrs-tfjob github.com/clearlinux/dockerfiles/tree/master/stacks/dlrs/kubeflow/dlrs-tfjob
    +
    +ks pkg install dlrs-tfjob/dlrs-bench
    +
    +
    +
  4. +
  5. Export the image name to use for the deployment:

    +
    export DLRS_IMAGE=<docker_name>
    +
    +
    +
    +

    注解

    +

    Replace <docker_name> with the image name you specified in previous steps.

    +
    +
  6. +
  7. Generate Kubernetes manifests for the workloads and apply them using these +commands:

    +
    ks generate dlrs-resnet50 dlrsresnet50 --name=dlrsresnet50 --image=${DLRS_IMAGE}
    +ks generate dlrs-alexnet dlrsalexnet --name=dlrsalexnet --image=${DLRS_IMAGE}
    +ks apply default -c dlrsresnet50
    +ks apply default -c dlrsalexnet
    +
    +
    +
  8. +
+

This replicates and deploys three test setups in your Kubernetes cluster.

+
+
+

Results of running this guide

+

You must parse the logs of the Kubernetes pod to retrieve performance +data. The pods will still exist post-completion and will be in +‘Completed’ state. You can get the logs from any of the pods to inspect the +benchmark results. More information about Kubernetes logging is available +in the Kubernetes Logging Architecture documentation.

+
+
+
+

Use Jupyter Notebook

+

This example uses the PyTorch with OpenBLAS container image. After it is +downloaded, run the Docker image with -p to specify the shared port +between the container and the host. This example uses port 8888.

+
docker run --name pytorchtest --rm -i -t -p 8888:8888 clearlinux/stacks-pytorch-oss bash
+
+
+

After you start the container, launch the Jupyter Notebook. This +command is executed inside the container image.

+
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
+
+
+

After the notebook has loaded, you will see output similar to the following:

+
To access the notebook, open this file in a browser: file:///.local/share/jupyter/runtime/nbserver-16-open.html
+Or copy and paste one of these URLs:
+http://(846e526765e3 or 127.0.0.1):8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09
+
+
+

From your host system, or any system that can access the host’s IP address, +start a web browser with the following. If you are not running the browser on +the host system, replace 127.0.0.1 with the IP address of the host.

+
http://127.0.0.1:8888/?token=6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09
+
+
+

Your browser displays the following:

+
+Jupyter Notebook +
+

Figure 1: Jupyter Notebook

+

To create a new notebook, click New and select Python 3.

+
+Create a new notebook +
+

Figure 2: Create a new notebook

+

A new, blank notebook is displayed, with a cell ready for input.

+
+New blank notebook +
+

To verify that PyTorch is working, copy the following snippet into the blank +cell, and run the cell.

+
from __future__ import print_function
+import torch
+x = torch.rand(5, 3)
+print(x)
+
+
+
+Sample code snippet +
+

When you run the cell, your output will look something like this:

+
+code output +
+

You can continue working in this notebook, or you can download existing +notebooks to take advantage of the Deep Learning Reference Stack’s optimized +deep learning frameworks. Refer to Jupyter Notebook for details.

+
+
+

Uninstallation

+

To uninstall the Deep Learning Reference Stack, you can choose to stop the +container so that it is not using system resources, or you can stop the +container and delete it to free storage space.

+

To stop the container, execute the following from your host system:

+
    +
  1. Find the container’s ID

    +
    docker container ls
    +
    +
    +

    This will result in output similar to the following:

    +
    CONTAINER ID        IMAGE                        COMMAND               CREATED             STATUS              PORTS               NAMES
    +e131dc71d339        clearlinux/stacks-dlrs-oss   "/bin/sh -c 'bash'"   23 seconds ago      Up 21 seconds                           oss
    +
    +
    +
  2. +
  3. You can then use the ID or container name to stop the container. This example +uses the name “oss”:

    +
    docker container stop oss
    +
    +
    +
  4. +
  5. Verify that the container is not running

    +
    docker container ls
    +
    +
    +
  6. +
  7. To delete the container from your system you need to know the Image ID:

    +
    docker images
    +
    +
    +

    This command results in output similar to the following:

    +
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    +clearlinux/stacks-dlrs-oss   latest              82757ec1648a        4 weeks ago         3.43GB
    +clearlinux/stacks-dlrs-mkl   latest              61c178102228        4 weeks ago         2.76GB
    +
    +
    +
  8. +
  9. To remove an image use the image ID:

    +
    docker rmi 82757ec1648a
    +
    +
    +
    # docker rmi 827
    +Untagged: clearlinux/stacks-dlrs-oss:latest
    +Untagged: clearlinux/stacks-dlrs-oss@sha256:381f4b604537b2cb7fb5b583a8a847a50c4ed776f8e677e2354932eb82f18898
    +Deleted: sha256:82757ec1648a906c504e50e43df74ad5fc333deee043dbfe6559c86908fac15e
    +Deleted: sha256:e47ecc039d48409b1c62e5ba874921d7f640243a4c3115bb41b3e1009ecb48e4
    +Deleted: sha256:50c212235d3c33a3c035e586ff14359d03895c7bc701bb5dfd62dbe0e91fb486
    +
    +
    +

    Note that you can execute the docker rmi command using only the first few characters of the image ID, provided they are unique on the system.

    +
  10. +
  11. Once you have removed the image, you can verify it has been deleted with:

    +
    docker images
    +
    +
    +
  12. +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/stacks/greengrass.html b/zh_CN/guides/stacks/greengrass.html new file mode 100644 index 00000000..2b648c32 --- /dev/null +++ b/zh_CN/guides/stacks/greengrass.html @@ -0,0 +1,1390 @@ + + + + + + + + + + + Enable AWS Greengrass* and OpenVINO™ toolkit — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Enable AWS Greengrass* and OpenVINO™ toolkit

+

This guide explains how to enable AWS Greengrass* and OpenVINO™ toolkit. +Specifically, the guide demonstrates how to:

+
    +
  • Set up the Intel® edge device with Clear Linux* OS
  • +
  • Install the OpenVINO™ toolkit and Amazon Web Services* (AWS*) +Greengrass* software stacks
  • +
  • Use AWS Greengrass* and AWS Lambda* to deploy the FaaS samples from +the cloud
  • +
+ +
+

Overview

+

Hardware accelerated Function-as-a-Service (FaaS) enables cloud developers to +deploy inference functionalities [1] on Intel® IoT edge devices with +accelerators (CPU, Integrated GPU, Intel® FPGA, and Intel® Movidius™ +technology). These functions provide a great developer experience and +seamless migration of visual analytics from cloud to edge in a secure manner +using a containerized environment. Hardware-accelerated FaaS provides the +best-in-class performance by accessing optimized deep learning libraries on +Intel® IoT edge devices with accelerators.

+
+
+

Supported platforms

+
    +
  • Operating System: Clear Linux OS latest release
  • +
  • Hardware: Intel® core platforms (that support inference on CPU only)
  • +
+
+

Sample description

+

The AWS Greengrass samples are located at Edge-Analytics-FaaS. This +guide uses the 1.0 version of the source code.

+

Clear Linux OS provides the following AWS Greengrass samples:

+
    +
  • greengrass_classification_sample.py

    +

    This AWS Greengrass sample classifies a video stream using classification +networks such as AlexNet and GoogLeNet and publishes top-10 results on AWS* +IoT Cloud every second.

    +
  • +
  • greengrass_object_detection_sample_ssd.py

    +

    This AWS Greengrass sample detects objects in a video stream and +classifies them using single-shot multi-box detection (SSD) networks such +as SSD Squeezenet, SSD Mobilenet, and SSD300. This sample publishes +detection outputs such as class label, class confidence, and bounding box +coordinates on AWS IoT Cloud every second.

    +
  • +
+
+
+
+

Install the OS on the edge device

+

Start with a clean installation of Clear Linux OS on a new system, using the +Install Clear Linux* OS from the live desktop, found in 开始使用.

+
+

Create user accounts

+

After Clear Linux OS is installed, create two user accounts. Create an administrative +user in Clear Linux OS and create a user account for the Greengrass services to use ( +see Greengrass user below).

+
    +
  1. Create a new user and set a password for that user. Enter the following +commands as root:

    +
    useradd <userid>
    +passwd <userid>
    +
    +
    +
  2. +
  3. Next, enable the sudo command for your new <userid>. Add +<userid> to the wheel group:

    +
    usermod -G wheel -a <userid>
    +
    +
    +
  4. +
  5. Create a /etc/fstab file.

    +
    touch /etc/fstab
    +
    +
    +
    +

    注解

    +

    By default, Clear Linux OS does not create an /etc/fstab file. +You must create this file before the Greengrass service runs.

    +
    +
  6. +
+
+
+

Add required bundles

+

Use the swupd software updater utility to add the prerequisite bundles +for the OpenVINO software stack:

+
swupd bundle-add os-clr-on-clr desktop-autostart computer-vision-basic
+
+
+
+

注解

+

Learn more about how to swupd.

+
+

The computer-vision-basic bundle installs the OpenVINO™ toolkit, +and the sample models optimized for Intel® edge platforms.

+
+
+

Convert deep learning models

+
+

Locate sample models

+

There are two types of provided models that can be used in conjunction with +AWS Greengrass for this guide: classification or object detection.

+

To complete this guide using an image classification model, +download the BVLC AlexNet model files bvlc_alexnet.caffemodel and +deploy.prototxt to the default model_location at +/usr/share/openvino/models. Any custom pre-trained classification models +can be used with the classification sample.

+

For object detection, the sample models optimized for Intel® edge platforms +are included with the computer-vision-basic bundle installation at +/usr/share/openvino/models. These models are provided as an example; +you may also use a custom SSD model with the Greengrass object detection sample.

+
+
+

Run model optimizer

+

Follow the instructions in the Model Optimizer Developer Guide for converting +deep learning models to Intermediate Representation using Model Optimizer. To +optimize either of the sample models described above, run one of the following commands.

+

For classification using BVLC AlexNet model:

+
python3 mo.py --framework caffe --input_model
+<model_location>/bvlc_alexnet.caffemodel --input_proto
+<model_location>/deploy.prototxt --data_type <data_type> --output_dir
+<output_dir> --input_shape [1,3,227,227]
+
+
+

For object detection using SqueezeNetSSD-5Class model:

+
python3 mo.py --framework caffe --input_model
+<model_location>/'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.caffemodel
+--input_proto <model_location>/'SqueezeNet 5-Class detection'/SqueezeNetSSD-5Class.prototxt
+--data_type <data_type> --output_dir <output_dir>
+
+
+

In these examples:

+
    +
  • <model_location> is /usr/share/openvino/models.
  • +
  • <data_type> is FP32 or FP16, depending on target device.
  • +
  • <output_dir> is the directory where the Intermediate Representation +(IR) is stored. IR contains .xml format corresponding to the network +structure and .bin format corresponding to weights. This .xml file should be +passed to <PARAM_MODEL_XML>.
  • +
  • In the BVLC AlexNet model, the prototxt defines the input shape with +batch size 10 by default. In order to use any other batch size, the +entire input shape must be provided as an argument to the model +optimizer. For example, to use batch size 1, you must provide: +–input_shape [1,3,227,227]
  • +
+
+
+
+
+

Configure AWS Greengrass group

+

For each Intel® edge platform, you must create a new AWS Greengrass group +and install AWS Greengrass core software to establish the connection between +cloud and edge.

+
    +
  1. To create an AWS Greengrass group, follow the instructions in +Configure AWS IoT Greengrass on AWS IoT.

    +
  2. +
  3. To install and configure AWS Greengrass core on edge platform, follow +the instructions in Start AWS Greengrass on the Core Device. In +step 8(b), download the x86_64 Ubuntu* configuration of the AWS Greengrass +core software.

    +
    +

    注解

    +

    You do not need to run the cgroupfs-mount.sh script in step #6 +of Module 1 of the AWS Greengrass Developer Guide because this is +enabled already in Clear Linux OS.

    +
    +
  4. +
  5. Be sure to download both the security resources and the AWS Greengrass +core software.

    +
    +

    注解

    +

    Security certificates are linked to your AWS account.

    +
    +
  6. +
+
+
+

Create and package Lambda function

+
    +
  1. Complete steps 1-4 of the AWS Greengrass guide at +Create and Package a Lambda Function.

    +
    +

    注解

    +

    This creates the tarball needed to create the AWS Greengrass +environment on the edge device.

    +
    +
  2. +
  3. In step 5, replace greengrassHelloWorld.py with the classification or +object detection Greengrass sample from Edge-Analytics-Faas:

    + +
  4. +
  5. Zip the selected Greengrass sample with the extracted Greengrass SDK folders +from the previous step into greengrass_sample_python_lambda.zip.

    +

    The zip should contain:

    +
      +
    • greengrasssdk
    • +
    • greengrass classification or object detection sample
    • +
    +

    For example:

    +
    zip -r greengrass_lambda.zip greengrasssdk
    +greengrass_object_detection_sample_ssd.py
    +
    +
    +
  6. +
  7. Return to the AWS documentation section called +Create and Package a Lambda Function and complete the procedure.

    +
    +

    注解

    +

    In step 9(a) of the AWS documentation, while uploading the zip file, +make sure to name the handler to one of the following, depending on the +AWS Greengrass sample you are using:

    +
      +
    • greengrass_object_detection_sample_ssd.function_handler
    • +
    • greengrass_classification_sample.function_handler
    • +
    +
    +
  8. +
+
+
+

Configure Lambda function

+

After creating the Greengrass group and the Lambda function, start +configuring the Lambda function for AWS Greengrass.

+
    +
  1. Follow steps 1-8 in Configure the Lambda Function for AWS IoT Greengrass +in the AWS documentation.

    +
  2. +
  3. In addition to the details mentioned in step 8, change the Memory limit +to 2048 MB to accommodate large input video streams.

    +
  4. +
  5. Add the following environment variables as key-value pairs when editing +the Lambda configuration and click on update:

    + + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 1. Environment variables: Lambda configuration
    KeyValue
    PARAM_MODEL_XML<MODEL_DIR>/<IR.xml>, where <MODEL_DIR> is user specified and +contains IR.xml, the Intermediate Representation file from Intel® Model Optimizer. +For this guide, <MODEL_DIR> should be set to ‘/usr/share/openvino/models’ +or one of its subdirectories.
    PARAM_INPUT_SOURCE
    +
    <DATA_DIR>/input.webm to be specified by user. Holds both input and
    +
    output data. For webcam, set PARAM_INPUT_SOURCE to ‘/dev/video0’
    +
    +
    PARAM_DEVICE“CPU”
    PARAM_CPU_EXTENSION_PATH/usr/lib64/libcpu_extension.so
    PARAM_OUTPUT_DIRECTORY<DATA_DIR> to be specified by user. Holds both input and output +data
    PARAM_NUM_TOP_RESULTSUser specified for classification sample. +(e.g. 1 for top-1 result, 5 for top-5 results)
    +
  6. +
  7. Add subscription to subscribe, or publish messages from AWS Greengrass +Lambda function by completing the procedure in Configure the Lambda Function for AWS IoT Greengrass.

    +
    +

    注解

    +

    The optional topic filter field is the topic mentioned inside the Lambda function. In this guide, sample topics include the following: +openvino/ssd or openvino/classification

    +
    +
  8. +
+
+

Add local resources

+

Refer to the AWS documentation Access Local Resources with Lambda Functions and Connectors +for details about local resources and access privileges.

+

The following table describes the local resources needed for the CPU:

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Local resources
NameResource typeLocal pathAccess
ModelDirVolume<MODEL_DIR> to be specified by userRead-Only
WebcamDevice/dev/video0Read-Only
DataDirVolume<DATA_DIR> to be specified by user. Holds both input and output +data.Read and Write
+
+
+
+

Deploy Lambda function

+

Refer to the AWS documentation Deploy Cloud Configurations to an AWS IoT Greengrass Core Device for instructions on how to deploy the lambda function to AWS +Greengrass core device. Select Deployments on the group page and follow the instructions.

+
+

Output consumption

+

There are four options available for output consumption. These options are +used to report, stream, upload, or store inference output at an interval +defined by the variable reporting_interval in the AWS Greengrass samples.

+
    +
  1. IoT cloud output:

    +

    This option is enabled by default in the AWS Greengrass samples using the +enable_iot_cloud_output variable. You can use it to verify the lambda +running on the edge device. It enables publishing messages to IoT cloud +using the subscription topic specified in the lambda. (For example, topics +may include openvino/classification for classification and openvino/ssd +for object detection samples.) For classification, top-1 result with class +label are published to IoT cloud. For SSD object detection, detection +results such as bounding box coordinates of objects, class label, and +class confidence are published.

    +

    Refer to the AWS documentation +Verify the Lambda Function Is Running on the Device for instructions on +how to view the output on IoT cloud.

    +
  2. +
  3. Kinesis streaming:

    +

    This option enables inference output to be streamed from the edge device +to cloud using Kinesis [3] streams when enable_kinesis_output is set +to True. The edge devices act as data producers and continually push +processed data to the cloud. You must set up and specify +Kinesis stream name, Kinesis shard, and AWS region in the AWS Greengrass +samples.

    +
  4. +
  5. Cloud storage using AWS S3 bucket:

    +

    When the enable_s3_jpeg_output variable is set to True, it enables +uploading and storing processed frames (in jpeg format) in an AWS S3 +bucket. You must set up and specify the S3 bucket name in the AWS +Greengrass samples to store the JPEG images. The images are named using the +timestamp and uploaded to S3.

    +
  6. +
  7. Local storage:

    +

    When the enable_s3_jpeg_output variable is set to True, it enables +storing processed frames (in jpeg format) on the edge device. The images +are named using the timestamp and stored in a directory specified by +PARAM_OUTPUT_DIRECTORY.

    +
  8. +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/guides/telemetrics/telem-guide.html b/zh_CN/guides/telemetrics/telem-guide.html new file mode 100644 index 00000000..4e76ef7f --- /dev/null +++ b/zh_CN/guides/telemetrics/telem-guide.html @@ -0,0 +1,1781 @@ + + + + + + + + + + + Telemetrics — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Telemetrics

+

This guide describes the Clear Linux* OS telemetry solution.

+
+

重要

+

Telemetry in Clear Linux OS is opt-in. The telemetry client is not active +and sends no data until you explicitly enable it.

+
+
+

注解

+

The telemetry functionality adheres to Intel privacy policies regarding +the collection and use of PII +and is open source.

+

No intentionally identifiable information about the user or system owner is +collected.

+
+ +
+

Overview

+

Telemetrics in Clear Linux OS is a client and server solution used to collect +data from running Clear Linux OS systems to help quickly identify and fix bugs in the +OS. Both client and server are customizable, and an API is available on the +client side for instrumenting your code for debug and analysis.

+

Telemetry, one of the key features of Clear Linux OS, enables developers to observe and +proactively address issues in the OS before end users are impacted.

+

Telemetrics is a combination word made from:

+
    +
  • Telemetry, which is sensing and reporting data.
  • +
  • Analytics, which is using visualization and statistical inferencing to make +sense of the reported data.
  • +
+

Clear Linux OS telemetry reports system-level debug/crash information using specialized +probes. The probes monitor system tasks such as swupd, kernel oops, machine +error checks, and the BIOS error report table for unhandled hardware +failures. Telemetry enables real-time issue reporting to allow system +developers to focus quickly on an issue and monitor corrective actions.

+

Clear Linux OS telemetry is fully customizable and can be used during software +development for debugging purposes. You can use the libtelemetry library in +your code to create custom telemetry records. You can also use the +telem-record-gen utility in script files for light-touch record creation +where instrumenting code files doesn’t make sense.

+

The Clear Linux OS telemetrics solution is an opt-in choice on the client side. +By default, the telemetry client is disabled until you choose to enable it. +Enabling the client is covered in this guide.

+
+

Architecture

+

Clear Linux OS telemetry has two fundamental components, which are shown in Figure 1:

+
    +
  • Client: generates and delivers records to the backend server via the network.
  • +
  • Backend: receives records sent from the client and displays the cumulative +content through a specialized web interface.
  • +
+
+Figure 1, Telemetry Architecture +

Figure 1: |CL| Telemetry Architecture

+
+

The telemetry client provides the front end of the telemetrics solution and +includes the following components:

+
    +
  • telemprobd, which is a daemon that receives and prepares telemetry records +from probes and spools them to disk.
  • +
  • telempostd, which is a daemon that manages spooled telemetry records and +delivers these records according to configurable settings.
  • +
  • probes, which collect specific types of data from the operating system.
  • +
  • libtelemetry, which is the API that telemetrics probes use to create records.
  • +
+

The telemetry backend provides the server-side component of the telemetrics +solution and consists of:

+
    +
  • Nginx web server.
  • +
  • Two Flask apps:
      +
    • Collector, which is an ingestion web app for records received from client +probes.
    • +
    • TelemetryUI, which is a web app that exposes different views to visualize +the telemetry data.
    • +
    +
  • +
  • PostgreSQL as the underlying database server.
  • +
+
+

注解

+

The default telemetry backend server is hosted by the Intel Clear Linux OS development +team and is not viewable outside the Intel firewall. To collect your own +records, you must set up your own telemetry backend server.

+
+
+
+
+

How to use

+

From a workflow perspective, the Clear Linux OS telemetrics system is straightforward. +On the client side, the main decisions after installation and enabling +telemetry involve what to do with the record data generated by the probes. +You can send the data to the default or a custom backend server, keep the data +local to the system, or both. The backend server has a more complex setup, but +once it’s running, it is simple to use and configure.

+

This section describes some of the possible scenarios for configuring +the Clear Linux OS telemetrics system, and suggests which ones make sense according to +your needs.

+
+

Scenarios

+
    +
  1. Enable telemetry:

    +

    Before probes can generate records, the telemetry client daemons must be +enabled. You can configure the client before enabling by creating a custom +telemetrics.conf file that you place in the /etc/telemetrics +directory. If you choose to use the default settings, records will be sent +to the telemetrics backend server managed by the Clear Linux OS development team at +Intel.

    +
  2. +
  3. Save record data locally:

    +

    You can configure the telemetry client to save records locally. This is +convenient when you want instant feedback during a development cycle, or to +track system issues if you believe there is a machine specific problem. The +client can be set not to send records at all, or to both keep the records +locally and send to the backend server.

    +
  4. +
  5. Set up a server to collect data:

    +

    Whether you are managing a network of Clear Linux OS systems or you don’t want to +send records to the default telemetry server, you can set up a backend +server to collect your records. The backend server can be installed on any +Linux system and provides the same dashboard as the default server.

    +
  6. +
  7. Instrument your code with the libtelemetry API:

    +

    The telemetrics bundle includes the libtelemetry C library, which +exposes an API used by the telemprobd and telempostd daemons. You can use +these in your applications as well. The API documentation is found in the +telemetry.h file in Telemetrics client repository.

    +
  8. +
+
+
+
+

Examples

+ +
+

Enable or disable telemetry

+
    +
  1. Enabling during installation:

    +

    During the initial installation of Clear Linux OS, you are requested to join the +stability enhancement program and allow Clear Linux OS to collect anonymous reports to +improve system stability. If you choose not to join this program, then the +telemetry software bundle is not added to your system. Choosing to join will +automatically enable telemetry on your system after installation is +complete.

    +
  2. +
  3. Enabling after install:

    +

    To start telemetry on your system, run the following command:

    +
    sudo telemctl start
    +
    +
    +

    This enables and starts the telemprobd and telempostd +daemons. Your system will begin to send telemetry data to the server defined +in the file /etc/telemetrics/telemetrics.conf. If this file does not +exist, the telemprobd and telempostd daemons will use +the file /usr/share/defaults/telemetrics/telemetrics.conf.

    +
  4. +
  5. Disabling after install:

    +

    To disable both of the telemetry daemons, run the following command:

    +
    sudo telemctl stop
    +
    +
    +
  6. +
  7. Opt in to telemetry:

    +

    To opt-in to the telemetry services, simply enter the opt-in command, which +also starts the service:

    +
    sudo telemctl opt-in
    +
    +
    +

    This removes the /etc/telemetrics/opt-out file, if it exists, and +starts the telemetry services.

    +
    +

    注解

    +

    To opt-in but not immediately start telemetry services, you must +run the command sudo telemctl stop after the opt-in +command is entered. Once you are ready to start the service, enter the +command sudo telemctl start.

    +
    +
  8. +
  9. Opt out of telemetry:

    +

    To stop sending telemetrics data from your system, opt out of the telemetry +service:

    +
    sudo telemctl opt-out
    +
    +
    +

    This creates the file /etc/telemetrics/opt-out and stops the +telemetry services.

    +
  10. +
+
+
+

Saving data locally

+

This example requires Clear Linux OS to be installed and telemetry to be enabled on the +system.

+

To change how records are managed, copy the default +/usr/share/defaults/telemetrics/telemetrics.conf file to +/etc/telemetrics/telemetrics.conf and edit it. The changes in the +/etc/telemetrics/telemetrics.conf file will override the defaults in +the /usr/share/defaults/telemetrics/telemetrics.conf file. You may need +root permissions to create and edit files in /etc. For each +example, and for any time you make changes to the configuration file, you must +restart the client daemons to pick up the changes:

+
sudo telemctl restart
+
+
+

The telemctl journal command gives you access to features and +options of the telemetry journal to assist with system analytics and debug. +telemctl journal has a number of options to help filter records. +Use -h or --help to view usage options.

+
    +
  1. Keep a local copy and send records to backend server:

    +

    To keep a local copy of the telemetry record and also send it on to the +backend server, we will need to change the +record_retention_enabled configuration key value to +true.

    +
  2. +
  3. Keep all records – don’t send to backend server:

    +

    To keep records on the system without sending them to a backend server, set +the record_server_delivery_enabled key value to +false. Note that you will also need to ensure the +record_retention_enabled configuration key value is set to +true or the system will not keep local copies.

    +
  4. +
  5. Keep and send records to custom server:

    +

    This assumes you have set up a custom server according to the next example.

    +

    The server is identified by the server setting, and by default +records are sent to the Clear Linux OS server +server=https://clr.telemetry.intel.com/v2/collector. To change +this, you can use an IP address or fully qualified domain name.

    +
  6. +
+
+
+

Set up a back-end server to collect telemetry records

+

For this example, start with a clean installation of Clear Linux OS on a new system +using the Install Clear Linux* OS on bare metal with live server getting started guide and:

+
    +
  1. Join the Stability Enhancement Program to install and +enable the telemetrics components.

    +
  2. +
  3. Select the manual installation method with the following settings:

    +
      +
    • Set the hostname to clr-telem-server,
    • +
    • Create an administrative user named clear and add this user +to sudoers
    • +
    +
  4. +
  5. Log in with your administrative user, from your $HOME directory, +run git to clone the telemetrics-backend repository +into the $HOME/telemetrics-backend directory:

    +
    git clone https://github.com/clearlinux/telemetrics-backend
    +
    +
    +
    +

    注解

    +

    You may need to set up the https_proxy environment variable if +you have issues reaching github.com.

    +
    +
  6. +
  7. Change your current working directory to telemetrics-backend/scripts.

    +
  8. +
  9. Before you install the telemetrics backend with the deploy.sh script +file in the next step, here is an explanation of the options to be specified:

    +
      +
    • -a install to perform an install
    • +
    • -d clr to install to a Clear Linux OS distro
    • +
    • -H localhost to set the domain to localhost
    • +
    +
    +

    警告

    +

    The deploy.sh shell script has minimal error checking and makes +several changes to your system. Be sure that the options you define on +the cmdline are correct before proceeding.

    +
    +
  10. +
  11. Run the shell script from the $HOME/telemetrics-backend/scripts +directory:

    +
    ./deploy.sh -H localhost -a install -d clr
    +
    +
    +

    The script starts and lists all the defined options and prompts you for +the PostgreSQL database password.

    +
    Options:
    + host: localhost
    + distro: clr
    + action: install
    + repo: https://github.com/clearlinux/telemetrics-backend
    + source: master
    + type: git
    + DB password: (default: postgres):
    +
    +
    +
  12. +
  13. For the DB password:, press the Enter key to accept the +default password postgres.

    +
    +

    注解

    +

    The deploy.sh script uses sudo to run commands and you +may be prompted to enter your user password at any time while the script +is executing. If this occurs, enter your user password to execute the +sudo command.

    +
    +
  14. +
  15. After all the server components have been installed, you are prompted to +enter the PostgreSQL database password to change it as +illustrated below:

    +
    Enter password for 'postgres' user:
    +New password:
    +Retype new password:
    +passwd: password updated successfully
    +
    +
    +

    Enter postgres for the current value of the password and then enter a new +password, retype it to verify the new password and the PostgreSQL +database password will be updated.

    +
  16. +
  17. After the installation is complete, you can use your web browser to view the +new server by opening the browser on the system and typing in localhost +in the address bar. You should see a web page similar to the one shown in +Figure 2 below.

    +
    +Telemetry UI +

    Figure 2: Telemetry UI

    +
    +
  18. +
+
+
+

Create records with telem-record-gen

+

The telemetrics bundle provides a record generator tool called +telem-record-gen. This tool can be used to create records from shell +scripts or the command line when writing a probe in C is not desirable. +Records are sent to the backend server, and can also be echoed to stdout.

+

There are three ways to supply the payload to the record.

+
    +
  1. On the command line, use the -p <string> option:

    +
    telem-record-gen -c a/b/c -n -o -p 'payload goes here'
    +
    +
    +
    record_format_version: 4
    +classification: a/b/c
    +severity: 1
    +machine_id: FFFFFFFF
    +creation_timestamp: 1539023189
    +arch: x86_64
    +host_type: innotek GmbH|VirtualBox|1.2
    +build: 25180
    +kernel_version: 4.14.71-404.lts
    +payload_format_version: 1
    +system_name: clear-linux-os
    +board_name: VirtualBox|Oracle Corporation
    +cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz
    +bios_version: VirtualBox
    +event_id: 2236710e4fc11e4a646ce956c7802788
    +
    +payload goes here
    +
    +
    +
  2. +
  3. Specify a file that contains the payload with the option +-P path/to/file.

    +
    telem-record-gen -c a/b/c -n -o -P ./payload_file.txt
    +
    +
    +
    record_format_version: 4
    +classification: a/b/c
    +severity: 1
    +machine_id: FFFFFFFF
    +creation_timestamp: 1539023621
    +arch: x86_64
    +host_type: innotek GmbH|VirtualBox|1.2
    +build: 25180
    +kernel_version: 4.14.71-404.lts
    +payload_format_version: 1
    +system_name: clear-linux-os
    +board_name: VirtualBox|Oracle Corporation
    +cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz
    +bios_version: VirtualBox
    +event_id: d73d6040afd7693cccdfece479df9795
    +
    +payload read from file
    +
    +
    +
  4. +
  5. If the -p or -P options are absent, the tool reads +from stdin so you can use it in a heredoc in scripts.

    +
    #telem-record-gen -c a/b/c -n -o << HEOF
    +payload read from stdin
    +HEOF
    +
    +
    +
    record_format_version: 4
    +classification: a/b/c
    +severity: 1
    +machine_id: FFFFFFFF
    +creation_timestamp: 1539023621
    +arch: x86_64
    +host_type: innotek GmbH|VirtualBox|1.2
    +build: 25180
    +kernel_version: 4.14.71-404.lts
    +payload_format_version: 1
    +system_name: clear-linux-os
    +board_name: VirtualBox|Oracle Corporation
    +cpu_model: Intel(R) Core(TM) i7-4650U CPU @ 1.70GHz
    +bios_version: VirtualBox
    +event_id: 2f070e8e71679f2b1f28794e3a6c42ee
    +
    +payload read from stdin
    +
    +
    +
  6. +
+
+
+

Set a static machine id

+

The machine id reported by the telemetry client is rotated every three days +for privacy reasons. If you wish to have a static machine id for testing +purposes, you can opt in by creating a file named opt-in-static-machine-id +in the directory /etc/telemetrics/.

+
    +
  1. Create a directory telemetrics.

    +
    sudo mkdir -p /etc/telemetrics
    +
    +
    +
  2. +
  3. Create the file and replace the “unique machine ID” with your desired +static machine ID.

    +
    echo "unique machine ID" | sudo tee /etc/telemetrics/opt-in-static-machine-id
    +
    +
    +
  4. +
+
+

注解

+

The machine ID is different than the system hostname.

+
+
+
+

Instrument your code with the libtelemetry API

+
+

Prerequisites

+

Confirm that the telemetrics header file is located on the system at +usr/include/telemetry.h The latest version of the file can also be +found on github for reference, but installing the telemetry bundle +will install the header file that matches your Clear Linux OS version.

+
    +
  1. Includes and variables:

    +

    You must include the following headers in your code to use the API:

    +
    #define _GNU_SOURCE
    +#include <stdlib.h>
    +#include <stdio.h>
    +#include <string.h>
    +#include <telemetry.h>
    +
    +
    +

    Use the following code to create the variables needed to hold the data for +the record to be created:

    +
    uint32_t severity = 1;
    +uint32_t payload_version = 1;
    +char classification[30] = "org.clearlinux/hello/world";
    +struct telem_ref *tm_handle = NULL;
    +char *payload;
    +int ret = 0;
    +
    +
    +
    +
    Severity:
    +

    Type: uint32_t +Value: Severity field value. Accepted values are in the range 1-4, with +1 being the lowest severity, and 4 being the highest severity. Values +provided outside of this range are clamped to 1 or 4. [low, med, high, +crit]

    +
    +
    Payload_version:
    +

    Type: uint32_t +Value: Payload format version. The only supported value right now is 1, +which indicates that the payload is a freely-formatted (unstructured) +string. Values greater than 1 are reserved for future use.

    +
    +
    Classification:
    +

    Type: char array +Value: It should have the form, DOMAIN/PROBENAME/REST: DOMAIN is the +reverse domain to use as a namespace for the probe (e.g. org.clearlinux); +PROBENAME is the name of the probe; and REST is an arbitrary value that +the probe should use to classify the record. The maximum length for the +classification string is 122 bytes. Each sub-category may be no longer +than 40 bytes long. Two / delimiters are required.

    +
    +
    Tm_handle:
    +

    Type: Telem_ref struct pointer +Value: Struct pointer declared by the caller, The struct is initialized +if the function returns success.

    +
    +
    Payload:
    +

    Type: char pointer +Value: The payload to set

    +
    +
    +
  2. +
  3. For this example, we’ll set the payload to “hello” by using +asprintf():

    +
    if (asprintf(&payload, "hello\n") < 0) {
    +  exit(EXIT_FAILURE);
    +   }
    +
    +
    +

    The functions asprintf() and vasprintf() are analogs of +sprintf(3) and vsprintf(3), except that they allocate a +string large enough to hold the output including the terminating null byte +(‘0’), and return a pointer to it via the first argument. This pointer +should be passed to free(3) to release the allocated storage when +it is no longer needed.

    +
  4. +
  5. Create the new telemetry record:

    +

    The function tm_create_record() initializes a telemetry record and +sets the severity and classification of that record, as well as the payload +version number. The memory needed to store the telemetry record is allocated +and should be freed with tm_free_record() when no longer needed.

    +
    if ((ret = tm_create_record(&tm_handle, severity,    classification, payload_version)) < 0) {
    +printf("Failed to create record: %s\n", strerror(-ret));
    +ret = 1;
    +goto fail;
    +}
    +
    +
    +
  6. +
  7. Set the payload field of a telemetrics record:

    +

    The function tm_set_payload() attaches the provided telemetry record +data to the telemetry record. The current maximum payload size is 8192b.

    +
    if ((ret = tm_set_payload(tm_handle, payload)) < 0) {
    +   printf("Failed to set record payload: %s\n", strerror(-ret));
    +   ret = 1;
    +   goto fail;
    +}
    +free(payload);
    +
    +
    +

    The free() function frees the memory space pointed to by ptr, which +must have been returned by a previous call to malloc(), +calloc(), or realloc(). Otherwise, or if +free(ptr) has already been called before, undefined behavior +occurs. If ptr is NULL, no operation is performed.

    +
  8. +
  9. Send a record to the telemetrics daemon:

    +

    The function tm_send_record() delivers the record to the local +telemprobd(1) service. Since the telemetry record was allocated by +the program it should be freed with tm_free_record() when it is no +longer needed.

    +
    if ((ret = tm_send_record(tm_handle)) < 0) {
    +   printf("Failed to send record to daemon: %s\n", strerror(-ret));
    +   ret = 1;
    +   goto fail;
    +} else {
    +   printf("Successfully sent record to daemon.\n");
    +   ret = 0;
    +}
    +fail:
    +tm_free_record(tm_handle);
    +tm_handle = NULL;
    +
    +return ret;
    +
    +
    +
  10. +
  11. A full sample application with compiling flags:

    +

    Create a new file test.c and add the following code:

    +
    #define _GNU_SOURCE
    +#include <stdlib.h>
    +#include <stdio.h>
    +#include <string.h>
    +#include <telemetry.h>
    +
    +int main(int argc, char **argv)
    +{
    +      uint32_t severity = 1;
    +      uint32_t payload_version = 1;
    +      char classification[30] = "org.clearlinux/hello/world";
    +      struct telem_ref *tm_handle = NULL;
    +      char *payload;
    +
    +      int ret = 0;
    +
    +      if (asprintf(&payload, "hello\n") < 0) {
    +              exit(EXIT_FAILURE);
    +      }
    +
    +      if ((ret = tm_create_record(&tm_handle, severity, classification, payload_version)) < 0) {
    +              printf("Failed to create record: %s\n", strerror(-ret));
    +              ret = 1;
    +              goto fail;
    +      }
    +
    +      if ((ret = tm_set_payload(tm_handle, payload)) < 0) {
    +              printf("Failed to set record payload: %s\n", strerror(-ret));
    +              ret = 1;
    +              goto fail;
    +      }
    +
    +      free(payload);
    +
    +      if ((ret = tm_send_record(tm_handle)) < 0) {
    +              printf("Failed to send record to daemon: %s\n", strerror(-ret));
    +              ret = 1;
    +              goto fail;
    +      } else {
    +              printf("Successfully sent record to daemon.\n");
    +              ret = 0;
    +      }
    +fail:
    +      tm_free_record(tm_handle);
    +      tm_handle = NULL;
    +
    +      return ret;
    + }
    +
    +
    +

    Compile with the gcc compiler, using this command:

    +
    gcc test.c -ltelemetry -o test_telem
    +
    +
    +

    Test to ensure the program is working:

    +
    ./test_telem
    +Successfully sent record to daemon.
    +
    +
    +
    +

    注解

    +

    A full example of the heartbeat probe in C is documented in the +source code.

    +
    +
  12. +
+
+
+
+
+

Reference

+ +
+

The telemetry API

+

Installing the telemetrics bundle includes the libtelemetry C library, +which exposes an API used by the telemprobd and telempostd daemons. You can +use these in your applications as well. The API documentation is found in the +telemetry.h file in Telemetrics client repository.

+
+
+

Client configuration

+

The telemetry client will look for the configuration file located at +/etc/telemetrics/telemetrics.conf and use it if it exists. If the +file does not exist, the client will use the default configuration located +at /usr/share/defaults telemetrics/telemetrics.conf. To modify or +customize the configuration, copy the file from +/usr/share/defaults/telemetrics to /etc/telemetrics and edit it.

+
+

Configuration options

+

The client uses the following configuration options from the config file:

+
+
server
+
This specifies the web server to which telempostd sends the telemetry records.
+
socket_path
+
This specifies the path of the unix domain socket on which the telemprobd +listens for connections from the probes.
+
spool_dir
+
This configuration option is related to spooling. If the daemon is not able +to send the telemetry records to the backend server due to reasons such as +the network availability, then it stores the records in a spool directory. +This option specifies the path of the spool directory. This directory should +be owned by the same user as the daemon.
+
record_expiry
+
This is the time, in minutes, after which the records in the spool directory +are deleted by the daemon.
+
spool_process_time
+
This specifies the time interval, in seconds, that the daemon waits for +before checking the spool directory for records. The daemon picks up the +records in the order of modification date and tries to send the record to the +server. It sends a maximum of 10 records at a time. If it was able to send a +record successfully, it deletes the record from the spool. If the daemon +finds a record older than the “record_expiry” time, then it deletes that +record. The daemon looks at a maximum of 20 records in a single spool run loop.
+
rate_limit_enabled
+
This determines whether rate-limiting is enabled or disabled. When enabled, +there is a threshold on both records sent within a window of time, and record +bytes sent within a window a time.
+
record_burst_limit
+
This is the maximum amount of records allowed to be passed by the daemon +within the record_window_length of time. If set to -1, the rate-limiting for +record bursts is disabled.
+
record_window_length
+
The time, in minutes (0-59), that establishes the window length for the +record_burst_limit. For example, if record_burst_window=1000 and +record_window_length=15, then no more than 1000 records can be passed within +any given fifteen-minute window.
+
byte_burst_limit
+
This is the maximum amount of bytes that can be passed by the daemon within +the byte_window_length of time. If set to -1, the rate-limiting for byte +bursts is disabled.
+
byte_window_length
+
This is the time, in minutes (0-59), that establishes the window length for +the byte_burst_limit.
+
rate_limit_strategy
+
This is the strategy chosen once the rate-limiting threshold has been +reached. Currently the options are ‘drop’ or ‘spool’, with spool being the +default. If spool is chosen, records will be spooled and sent at a later time.
+
record_retention_enabled
+
When this key is enabled (true) the daemon saves a copy of the payload on +disk from all valid records. To avoid the excessive use of disk space only +the latest 100 records are kept. The default value for this configuration key +is false.
+
record_server_delivery_enabled
+
+
This key controls the delivery of records to server; when enabled (default +value), the record will be posted to the address in the configuration file. +If this configuration key is disabled (false), records will not be spooled or +posted to backend. This configuration key can be used in combination with +record_retention_enabled to keep copies of telemetry records locally only.
+
+

注解

+

Configuration options may change as the telemetry client evolves. +Please use the comments in the file itself as the most accurate +reference for configuration.

+
+
+
+
+
+
+

Client run-time options

+

The Clear Linux OS telemetry client provides an admin tool called telemctl +for managing the telemetry services and probes. The tool is located in +/usr/bin. Running it with no argument results in the following:

+
sudo telemctl
+
+
+
/usr/bin/telemctl - Control actions for telemetry services
+  stop       Stops all running telemetry services
+  start      Starts all telemetry services
+  restart    Restarts all telemetry services
+  is-active  Checks if telemprobd and telempostd are active
+  opt-in     Opts in to telemetry, and starts telemetry services
+  opt-out    Opts out of telemetry, and stops telemetry services
+  journal    Prints telemetry journal contents. Use -h argument for more
+             options
+
+
+
+

start/stop/restart

+

The commands to start, stop and restart the telemetry services manage all +required services and probes on the system. There is no need to separately +start/stop/restart the two client daemons telemprobd and telempostd. +The restart command option will call telemctl stop +followed by telemctl start .

+
+
+

is-active

+

The is-active option reports whether the two client daemons are +active. This is useful to verify that the opt-in and +opt-out options have taken effect, or to ensure that telemetry is +functioning on the system. Note that both daemons are verified.

+
sudo telemctl is-active
+
+
+
telemprobd : active
+telempostd : active
+
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/index.html b/zh_CN/index.html new file mode 100644 index 00000000..ea9ecfb2 --- /dev/null +++ b/zh_CN/index.html @@ -0,0 +1,1013 @@ + + + + + + + + + + + Clear Linux* project — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Clear Linux* project

+

Welcome to the Clear Linux* OS documentation pages, the source for Clear Linux OS documentation.

+

Our documentation is divided into the following sections:

+
+
开始使用
+
If you are new to Clear Linux OS, get started fast with tutorials for installing Clear Linux OS +on bare metal, in a virtual environment, or as a live image on a USB stick.
+
About
+
Clear Linux is a little different from other distros. Here are some +important tools and concepts for managing your install.
+
Guides
+
Guides show how to complete common tasks that help you leverage Clear Linux OS native +features effectively. From basic system configuration to advanced +management of a cloud installation, there is a guide for you.
+
Tutorials
+
Clear Linux OS tutorials provide step-by-step instructions on how Clear Linux OS features can +be used and extended, frequently with third-party tools.
+
Reference
+
Find the detailed information you need to enable your configuration or task +in our Clear Linux OS reference section.
+
FAQ
+
Refer to our FAQ section to read commonly asked questions and answers.
+
+
+
+
+ + +
+ +
+
+ + + + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/objects.inv b/zh_CN/objects.inv new file mode 100644 index 00000000..e727f384 Binary files /dev/null and b/zh_CN/objects.inv differ diff --git a/zh_CN/reference/bundle-commands.html b/zh_CN/reference/bundle-commands.html new file mode 100644 index 00000000..500b6587 --- /dev/null +++ b/zh_CN/reference/bundle-commands.html @@ -0,0 +1,1023 @@ + + + + + + + + + + + Useful bundle commands — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Useful bundle commands

+

To see a list of currently installed bundles, enter:

+
sudo swupd bundle-list
+
+
+

To see the list of all available bundles, enter:

+
sudo swupd bundle-list --all
+
+
+

Alternatively, you can view our available bundles +webpage.

+

To search for bundles and their contents, enter:

+
sudo swupd search [bundle name]
+
+
+

To add a bundle, enter:

+
sudo swupd bundle-add [bundle name]
+
+
+
+

Additional information

+

For additional swupd commands, enter:

+
swupd --help
+
+
+

To reference the swupd man page, enter:

+
man swupd
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/bundles/bundles.html b/zh_CN/reference/bundles/bundles.html new file mode 100644 index 00000000..b7d7acfc --- /dev/null +++ b/zh_CN/reference/bundles/bundles.html @@ -0,0 +1,27219 @@ + + + + + + + + + + + Available bundles — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Available bundles

+

This document provides a current list of available bundles. View the clr-bundles repo on GitHub*, or select the bundle +Name for more details.

+

To learn more about how Clear Linux* OS uses bundles for software deployment, visit +Bundles.

+
+

Bundle list

+ + + + + + + Bundles in Clear Linux* OS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Updated: 05/14/19 18:42 UTC +
Name Description
aclTools to manipulate filesystem access control list.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
acpica-unix2Intel Advanced Configuration and Power Interface (ACPI) utilities.
+ +

Includes bundle(s): +

    + +
  • ACPI
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
akonadiAsynchronous API to access PIM data.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
alsa-utilsUseful utilities for controlling a sound card.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
amateur-radioApplications to support ham or amateur radio operations.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • file
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
+

+ +
ansibleIT automation tool with software provisioning, configuration management, and application deployment.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ipmitool
  • + +
+

+ +
application-serverRun an application server via HTTP.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • web-server-basic
  • + +
  • c-basic
  • + +
+

+ +
arkGraphical file compression/decompression utility.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
atomText and source code editor with plug-in support for Node.js and Git.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • python3-basic
  • + +
+

+ +
audaciousMusic player for Gtk/GNOME
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
auditSystem audit tools.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • openldap
  • + +
+

+ +
automotive-toolsVarious tools for automotive use cases
+ +
aws-greengrass-iotLibraries to support building IoT applications on AWS Greengrass.
+ +

Includes bundle(s): +

    + +
  • cloud-api
  • + +
  • python2-basic
  • + +
  • python-extras
  • + +
+

+ +
axelLight command line download accelerator.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
azure-iot-sdkLibraries to support building IoT applications on Azure.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • p11-kit
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
BabelInternationalization and localization utilities for Python, emphasizing web applications.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
baobabScan folders or volumes to provide graphical representation of the contents.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
bcBasic calculator, an arbitrary-precision calculator language.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bcache-toolsbcache is a way to pair a fast SSD with a slow HDD to create a hybrid disk.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bccBPF Compiler Collection (BCC) for performance analysis, troubleshooting.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • llvm
  • + +
  • BCC
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
big-data-basicTools and frameworks for big data management.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • java11-basic
  • + +
  • R-basic
  • + +
  • elasticsearch
  • + +
  • openblas
  • + +
+

+ +
bijibenWrite out notes--every detail matters.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • webkitgtk
  • + +
  • perl-basic
  • + +
  • NetworkManager-extras
  • + +
+

+ +
binutilsVarious development tools to manage binary executable code.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bisonGeneral-purpose parser generator that converts annotated context-free grammar into a deterministic LR.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
blenderA 3D creation suite supporting modelling, rendering, video editing, game development.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
bmap-toolsTools for creating block map (bmap) for a file and copying files; alternative to "dd" or "cp".
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • bmap
  • + +
+

+ +
boinc-clientVolunteer computing and grid computing for science projects.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-openssl
  • + +
  • webkitgtk
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
boot-encryptedEnable booting with encrypted root, swap, or other partitions.
+ +

Includes bundle(s): +

    + +
  • bootloader-extras
  • + +
+

+ +
bootloaderLoads kernel from disk and boots the system.
+ +

Includes bundle(s): +

    + +
  • syslinux
  • + +
+

+ +
bootloader-extrasExtra packages to decrypt root partition.
+ +
borgbackupDeduplicating archiver with compression and authenticated encryption.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
c-basicBuild and run C/C++ language programs.
+ +

Includes bundle(s): +

    + +
  • bison
  • + +
  • nasm
  • + +
  • binutils
  • + +
  • make
  • + +
  • glibc-locale
  • + +
  • llvm
  • + +
  • flex
  • + +
  • perl-basic
  • + +
+

+ +
c-basic-legacyBuild and run 32bit C/C++ language programs.
+ +

Includes bundle(s): +

    + +
  • bison
  • + +
  • devpkg-zlib
  • + +
  • binutils
  • + +
  • make
  • + +
  • glibc-locale
  • + +
  • flex
  • + +
+

+ +
cabextractManipulate or unpack CAB archives.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
calcArbitrary precision console calculator.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
casyncContent Addressable Data Synchronizer to distribute frequently-updated file system images over the Internet.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
ccacheCache compilations to avoid repeating same computation and speed project build times.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cephDistributed object store and file system.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • libxslt
  • + +
  • openldap
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cheeseWebcam photo booth software for GNOME.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
clamavClam AntiVirus is toolkit to detect malware and viruses, originally for Unix, with third-pary support.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
clocCount lines of code for many programming languages.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cloud-apiAPI helpers for cloud access.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
+

+ +
cloud-controlRun a cloud orchestration server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • sqlite
  • + +
  • cloud-api
  • + +
  • storage-cluster
  • + +
  • sudo
  • + +
  • openssl
  • + +
  • network-basic
  • + +
  • kvm-host
  • + +
  • git
  • + +
+

+ +
cloud-native-basicContains Clear Linux OS native software for cloud.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • iproute2
  • + +
  • ethtool
  • + +
  • libstdcpp
  • + +
+

+ +
clr-devopsRun all Clear Linux OS devops workloads.
+ +

Includes bundle(s): +

    + +
  • web-server-basic
  • + +
  • rust-basic
  • + +
  • mixer
  • + +
  • koji
  • + +
  • java-basic
  • + +
  • os-installer
  • + +
  • os-core-update
  • + +
  • scm-server
  • + +
+

+ +
clr-installerImage creation and installation for Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • tzdata
  • + +
  • libstdcpp
  • + +
  • linux-firmware-extras
  • + +
  • openssh-server
  • + +
  • curl
  • + +
  • wpa_supplicant
  • + +
  • linux-firmware-wifi
  • + +
  • jq
  • + +
  • kbd
  • + +
  • less
  • + +
  • telemetrics
  • + +
  • locales
  • + +
  • iproute2
  • + +
+

+ +
clr-installer-guiGraphical installation for Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • NetworkManager
  • + +
  • gparted
  • + +
  • clr-installer
  • + +
+

+ +
clr-network-troubleshooterTool to test network availability and suggest actions to fix issues.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • perl-basic
  • + +
+

+ +
clr-user-bundlesManage third-party bundles.
+ +
cockpitWeb-based administration for GNU/Linux servers.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-openssl
  • + +
+

+ +
columbiadA full screen app chooser for HTPCs
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
compat-commonCommon legacy compatibility libraries
+ +
computer-vision-basicBuild computer vision applications.
+ +

Includes bundle(s): +

    + +
  • machine-learning-tensorflow
  • + +
  • cloud-api
  • + +
  • python2-basic
  • + +
  • python-data-science
  • + +
  • computer-vision-models
  • + +
  • devpkg-opencv
  • + +
  • python-extras
  • + +
  • openblas
  • + +
+

+ +
computer-vision-modelsDeep learning models for computer vision.
+ +

Includes bundle(s): +

    + +
  • machine-learning-tensorflow
  • + +
+

+ +
conkyA light-weight system monitor.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
containers-basicRun container applications from Dockerhub.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • p11-kit
  • + +
  • iproute2
  • + +
  • git
  • + +
+

+ +
containers-basic-devAll packages required to build the containers-basic bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-vala
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • gjs
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • containers-basic
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-gcr
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-gobject-introspection
  • + +
  • diffutils
  • + +
+

+ +
containers-virtRun container applications from Dockerhub in lightweight virtual machines.
+ +

Includes bundle(s): +

    + +
  • containers-basic
  • + +
+

+ +
containers-virt-devAll packages required to build the containers-virt bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • containers-basic-dev
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-vala
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • musl
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • containers-virt
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • gjs
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-gcr
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-gobject-introspection
  • + +
  • diffutils
  • + +
+

+ +
cpioCopies files into or out of a cpio or tar archive.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cronieRun specified programs at scheduled times.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
cryptographyEncrypt, decrypt, sign and verify objects.
+ +

Includes bundle(s): +

    + +
  • openssl
  • + +
  • libglib
  • + +
+

+ +
cryptoprocessor-managementManage the Trusted Platform Module (TPM).
+ +

Includes bundle(s): +

    + +
  • lib-openssl
  • + +
  • TPM
  • + +
  • libglib
  • + +
+

+ +
cryptoprocessor-management-devAll packages required to build the cryptoprocessor-management bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • devpkg-xz
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • cryptoprocessor-management
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • tzdata
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
curlCommand line tool to transfer data to/from a URL.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
cve-bin-toolCommon Vulnerabilities and Exposures (CVE) scanning tool.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • CVE
  • + +
+

+ +
d-basicBuild and run D language programs.
+ +

Includes bundle(s): +

    + +
  • llvm
  • + +
+

+ +
darktablePhotography workflow application with raw image development.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
database-basicRun an SQL database.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • sqlite
  • + +
  • mariadb
  • + +
  • postgresql
  • + +
+

+ +
database-basic-devAll packages required to build the database-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libgpg-error
  • + +
  • nasm
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • gdb
  • + +
  • database-basic
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
dddGraphical debugger front-end; GDB, DBX, Ladebug, JDB, Perl, Python.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
desktopRun the GNOME GUI desktop environment.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • linux-firmware-extras
  • + +
  • wpa_supplicant
  • + +
  • sysadmin-basic
  • + +
  • libX11client
  • + +
  • nautilus
  • + +
  • lib-imageformat
  • + +
  • desktop-apps
  • + +
  • desktop-locales
  • + +
  • which
  • + +
  • thermal_daemon
  • + +
  • flatpak
  • + +
  • pulseaudio
  • + +
  • polkit
  • + +
  • linux-firmware-wifi
  • + +
  • gimp
  • + +
  • fuse
  • + +
  • gstreamer
  • + +
  • alsa-utils
  • + +
  • x11-server
  • + +
  • tzdata
  • + +
  • gnome-characters
  • + +
  • pygobject
  • + +
  • hardware-printing
  • + +
  • gjs
  • + +
  • desktop-assets
  • + +
  • openssl
  • + +
  • NetworkManager-extras
  • + +
+

+ +
desktop-appsApplications for the desktop.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • libX11client
  • + +
  • xemacs
  • + +
  • gnome-disk-utility
  • + +
  • gnome-calculator
  • + +
  • evolution
  • + +
  • gedit
  • + +
  • graphviz
  • + +
  • gnome-screenshot
  • + +
  • eog
  • + +
  • gnome-weather
  • + +
  • file-roller
  • + +
  • flatpak
  • + +
  • gnome-system-monitor
  • + +
  • gvim
  • + +
  • gnome-font-viewer
  • + +
  • gnome-photos
  • + +
  • libva-utils
  • + +
  • seahorse
  • + +
  • baobab
  • + +
  • gnome-color-manager
  • + +
  • python3-basic
  • + +
  • gnome-todo
  • + +
  • evince
  • + +
  • gnome-characters
  • + +
  • gnome-logs
  • + +
  • totem
  • + +
  • gnome-music
  • + +
  • firefox
  • + +
  • cheese
  • + +
+

+ +
desktop-apps-extrasLarger set of applications for the desktop.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • atom
  • + +
  • python3-basic
  • + +
  • spice-gtk
  • + +
  • gphoto2
  • + +
  • pidgin
  • + +
  • quassel
  • + +
  • gimp
  • + +
  • thunderbird
  • + +
  • vlc
  • + +
  • Remmina
  • + +
  • virt-manager
  • + +
  • geany
  • + +
  • virt-viewer
  • + +
  • vinagre
  • + +
  • tigervnc
  • + +
  • darktable
  • + +
  • hexchat
  • + +
+

+ +
desktop-assetsImages and Icons for the desktop
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • fonts-basic
  • + +
  • common
  • + +
  • current default
  • + +
  • intended for all supported styles
  • + +
+

+ +
desktop-autostartBundle to automatically launch the GUI upon boot.
+ +

Includes bundle(s): +

    + +
  • desktop
  • + +
+

+ +
desktop-awesomeRun a minimal desktop environment with awesome WM.
+ +

Includes bundle(s): +

    + +
  • x11-server
  • + +
+

+ +
desktop-devAll packages required to build the desktop bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-babl
  • + +
  • devpkg-libXfont2
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-gimp
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-mesa
  • + +
  • devpkg-openssl
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-pangomm
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libmspack
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libdazzle
  • + +
  • devpkg-gnome-video-effects
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • devpkg-uhttpmock
  • + +
  • fontforge
  • + +
  • devpkg-cups-filters
  • + +
  • devpkg-krb5
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-popt
  • + +
  • devpkg-v4l-utils
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • devpkg-libgdata
  • + +
  • devpkg-xkbcomp
  • + +
  • devpkg-gdm
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libxkbfile
  • + +
  • devpkg-libXfont
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • desktop
  • + +
  • devpkg-gtkspell3
  • + +
  • devpkg-libpeas
  • + +
  • devpkg-libstoragemgmt
  • + +
  • devpkg-flatpak
  • + +
  • devpkg-newt
  • + +
  • devpkg-orc
  • + +
  • jq
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-cheese
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-libgsystem
  • + +
  • devpkg-libgtop
  • + +
  • devpkg-cmrt
  • + +
  • devpkg-compat-gtksourceview-soname3
  • + +
  • devpkg-libXv
  • + +
  • devpkg-libgee
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-systemd
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • xemacs
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-geocode-glib
  • + +
  • devpkg-gmime
  • + +
  • devpkg-gtkmm3
  • + +
  • devpkg-libXft
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libgweather
  • + +
  • devpkg-glib
  • + +
  • devpkg-GConf
  • + +
  • devpkg-network-manager-applet
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libsass
  • + +
  • devpkg-libidn
  • + +
  • devpkg-gsound
  • + +
  • devpkg-qpdf
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-gexiv2
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-evolution-data-server
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • git
  • + +
  • devpkg-mpg123
  • + +
  • procps-ng
  • + +
  • devpkg-libXres
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-mutter
  • + +
  • devpkg-libxkbcommon
  • + +
  • inkscape
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-gnome-menus
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gnome-desktop
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-nss
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-xf86-input-wacom
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-geoclue
  • + +
  • devpkg-gutenprint
  • + +
  • devpkg-gnome-online-accounts
  • + +
  • devpkg-libffi
  • + +
  • devpkg-libyami
  • + +
  • devpkg-libspectre
  • + +
  • gdb
  • + +
  • devpkg-libwnck3
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-grilo-plugins
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-nspr
  • + +
  • devpkg-xdg-desktop-portal
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • devpkg-gnome-settings-daemon
  • + +
  • devpkg-liboauth
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-brotli
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-libunwind
  • + +
  • devpkg-clutter-gst
  • + +
  • strace
  • + +
  • devpkg-libiscsi
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-grilo
  • + +
  • devpkg-libgphoto2
  • + +
  • devpkg-cairo
  • + +
  • devpkg-libndp
  • + +
  • devpkg-libxklavier
  • + +
  • devpkg-xorg-server
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-R
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-gegl
  • + +
  • devpkg-libexif
  • + +
  • devpkg-apr
  • + +
  • devpkg-libmypaint
  • + +
  • devpkg-gspell
  • + +
  • devpkg-ostree
  • + +
  • devpkg-opencv
  • + +
  • devpkg-gjs
  • + +
  • devpkg-acl
  • + +
  • devpkg-gnome-autoar
  • + +
  • devpkg-libgusb
  • + +
  • parallel
  • + +
  • devpkg-parted
  • + +
  • devpkg-pygobject
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-mozjs60
  • + +
  • devpkg-atkmm
  • + +
  • cryptography
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • flatpak
  • + +
  • devpkg-gnome-software
  • + +
  • net-tools
  • + +
  • devpkg-startup-notification
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-ntfs-3g
  • + +
  • devpkg-woff2
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-gnome-bluetooth
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • devpkg-libgnomekbd
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-pipewire
  • + +
  • devpkg-libmtp
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-libgd
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libical
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • gjs
  • + +
  • devpkg-compat-gegl
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-libatasmart
  • + +
  • devpkg-libmediaart
  • + +
  • patch
  • + +
  • devpkg-LibRaw
  • + +
  • devpkg-gcab
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-appstream-glib
  • + +
  • devpkg-pciutils
  • + +
  • devpkg-zstd
  • + +
  • devpkg-libnotify
  • + +
  • devpkg-freetype
  • + +
  • devpkg-libconfig
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-metacity
  • + +
  • devpkg-cogl
  • + +
  • devpkg-pixman
  • + +
  • devpkg-nautilus
  • + +
  • devpkg-libsamplerate
  • + +
  • devpkg-cairomm
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • xz
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-gst-plugins-bad
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-gcr
  • + +
  • devpkg-gnome-panel
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-libpinyin
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-fwupd
  • + +
  • devpkg-evolution
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-gfbgraph
  • + +
  • devpkg-NetworkManager
  • + +
  • sysadmin-basic-dev
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libsmbios
  • + +
  • tzdata
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • devpkg-ndctl
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-libwacom
  • + +
  • docutils
  • + +
  • diffutils
  • + +
  • scons
  • + +
+

+ +
desktop-enlightenmentRun the enlightenment desktop environment.
+ +

Includes bundle(s): +

    + +
  • x11-server
  • + +
+

+ +
desktop-gnomelibsHelper bundle with common libraries and desktop utilities.
+ +

Includes bundle(s): +

    + +
  • lib-opengl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • lib-samba
  • + +
  • perl-basic
  • + +
+

+ +
desktop-i3Run the i3 desktop environment.
+ +

Includes bundle(s): +

    + +
  • x11-server
  • + +
+

+ +
desktop-kdeApplications for the desktop from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • gpgme
  • + +
  • tzdata
  • + +
  • hardware-bluetooth
  • + +
  • ksysguard
  • + +
  • qt-basic
  • + +
  • dolphin
  • + +
  • kdiff3
  • + +
  • polkit
  • + +
  • pulseaudio
  • + +
  • konsole
  • + +
  • fuse
  • + +
  • lib-samba
  • + +
  • desktop-kde-libs
  • + +
  • libxslt
  • + +
  • alsa-utils
  • + +
  • x11-tools
  • + +
  • NetworkManager-extras
  • + +
  • x11-server
  • + +
+

+ +
desktop-kde-appsApplications for the desktop from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • kate
  • + +
  • akonadi
  • + +
  • kamera
  • + +
  • qt-basic
  • + +
  • dolphin
  • + +
  • spectacle
  • + +
  • konsole
  • + +
  • okular
  • + +
  • konqueror
  • + +
  • digikam
  • + +
  • krita
  • + +
  • syndication
  • + +
  • desktop-kde-libs
  • + +
  • yakuake
  • + +
  • konversation
  • + +
  • perl-basic
  • + +
  • kcalc
  • + +
  • gwenview
  • + +
  • ark
  • + +
  • kleopatra
  • + +
+

+ +
desktop-kde-gamesGames for the desktop from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • desktop-kde-libs
  • + +
  • qt-basic
  • + +
  • perl-basic
  • + +
+

+ +
desktop-kde-libsHelper libraries from the KDE ecosystem.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • lib-imageformat
  • + +
+

+ +
desktop-localesTranslations and documentation for desktop components.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • perl-basic
  • + +
  • glibc-locale
  • + +
+

+ +
desktop-lxqtRun the LXQt desktop environment.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • fonts-basic
  • + +
  • x11-server
  • + +
+

+ +
dev-utilsAssist application development.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloc
  • + +
  • gdb
  • + +
  • inotify-tools
  • + +
  • strace
  • + +
  • valgrind
  • + +
  • linux-tools
  • + +
  • cpio
  • + +
  • bc
  • + +
  • man-pages
  • + +
  • docutils
  • + +
  • icdiff
  • + +
  • llvm
  • + +
  • devpkg-llvm
  • + +
  • openssl
  • + +
  • perl-basic
  • + +
  • git
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
dev-utils-devAll packages required to build the dev-utils bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-openmpi
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-guile
  • + +
  • tzdata
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • perl-basic-dev
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-qttools
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-metrics-discovery
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • Sphinx
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-libmicrohttpd
  • + +
  • wget
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-subunit
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • cpio
  • + +
  • devpkg-libXxf86misc
  • + +
  • texlive
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • bc
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
dev-utils-guiAssist application development (gui components).
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • ddd
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • tcl-basic
  • + +
  • gui components
  • + +
+

+ +
developer-gpuTools and libraries for GPU application development.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • devpkg-mesa
  • + +
  • libX11client
  • + +
  • hardware-gpu
  • + +
+

+ +
devpkg-aclAll content for pkgconfig file acl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-alsa-libAll content for pkgconfig file alsa-lib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-appstream-glibAll content for pkgconfig file appstream-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-util-linux
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • libX11client
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-aprAll content for pkgconfig file apr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-apr-utilAll content for pkgconfig file apr-util.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-apr
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-at-spi2-atkAll content for pkgconfig file at-spi2-atk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-at-spi2-core
  • + +
+

+ +
devpkg-at-spi2-coreAll content for pkgconfig file at-spi2-core.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-atkAll content for pkgconfig file atk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-atkmmAll content for pkgconfig file atkmm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glibmm
  • + +
  • devpkg-atk
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-atticaAll content for pkgconfig file attica.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-attrAll content for pkgconfig file attr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-auditAll content for pkgconfig file audit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-bablAll content for pkgconfig file babl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-baseBasic pkgconfig infrastructure.
+ +

Includes bundle(s): +

    + +
  • c-basic
  • + +
+

+ +
devpkg-bluezAll content for pkgconfig file bluez.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-boostAll content for boost.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-brotliAll content for pkgconfig file brotli.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-cairoAll content for pkgconfig file cairo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pixman
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-libX11
  • + +
  • devpkg-freetype
  • + +
  • devpkg-mesa
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-cairommAll content for pkgconfig file cairomm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libsigcplusplus
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-cheeseAll content for pkgconfig file cheese.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-clutter
  • + +
  • devpkg-base
  • + +
  • devpkg-glib
  • + +
  • devpkg-gstreamer
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-clutter-gst
  • + +
+

+ +
devpkg-clutterAll content for pkgconfig file clutter.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cogl
  • + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-libxkbcommon
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libinput
  • + +
  • devpkg-systemd
  • + +
  • devpkg-wayland
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-clutter-gstAll content for pkgconfig file clutter-gst.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cogl
  • + +
  • devpkg-clutter
  • + +
  • devpkg-base
  • + +
  • devpkg-gstreamer
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-cmrtAll content for pkgconfig file cmrt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-coglAll content for pkgconfig file cogl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • devpkg-wayland
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-mesa
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-colordAll content for pkgconfig file colord.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-enchant-soname1All content for pkgconfig file compat-enchant-soname1.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-fuse-soname2All content for pkgconfig file compat-fuse-soname2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-geglAll content for pkgconfig file compat-gegl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-babl
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-compat-gtksourceview-soname3All content for pkgconfig file compat-gtksourceview-soname3.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-cryptsetupAll content for pkgconfig file cryptsetup.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-cups-filtersAll content for pkgconfig file cups-filters.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-curlAll content for pkgconfig file curl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-cyrus-saslAll content for pkgconfig file cyrus-sasl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-dbusAll content for pkgconfig file dbus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-dbus-glibAll content for pkgconfig file dbus-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
+

+ +
devpkg-e2fsprogsAll content for pkgconfig file e2fsprogs.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-elfutilsAll content for pkgconfig file elfutils.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xz
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-enchantAll content for pkgconfig file enchant.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-evolutionAll content for pkgconfig file evolution.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-gnome-desktop
  • + +
  • devpkg-evolution-data-server
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-evolution-data-serverAll content for pkgconfig file evolution-data-server.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-sqlite-autoconf
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libical
  • + +
  • devpkg-nspr
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-nss
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-exiv2All content for pkgconfig file exiv2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-expatAll content for pkgconfig file expat.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fannAll content for pkgconfig file fann.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fftwAll content for pkgconfig file fftw.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-flacAll content for pkgconfig file flac.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libogg
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-flatpakAll content for pkgconfig file flatpak.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-ostree
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-font-utilAll content for pkgconfig file font-util.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fontconfigAll content for pkgconfig file fontconfig.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-freetype
  • + +
  • devpkg-expat
  • + +
  • devpkg-base
  • + +
  • devpkg-util-linux
  • + +
+

+ +
devpkg-freeglutAll content for pkgconfig file freeglut.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-freetypeAll content for pkgconfig file freetype.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-harfbuzz
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-fribidiAll content for pkgconfig file fribidi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fuseAll content for pkgconfig file fuse.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-fwupdAll content for pkgconfig file fwupd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gcabAll content for pkgconfig file gcab.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-GConfAll content for pkgconfig file GConf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
+

+ +
devpkg-gcrAll content for pkgconfig file gcr.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-p11-kit
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gdk-pixbufAll content for pkgconfig file gdk-pixbuf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpng
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gdmAll content for pkgconfig file gdm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-geglAll content for pkgconfig file gegl.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-babl
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-geoclueAll content for pkgconfig file geoclue.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-geocode-glibAll content for pkgconfig file geocode-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gexiv2All content for pkgconfig file gexiv2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-exiv2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gfbgraphAll content for pkgconfig file gfbgraph.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-rest
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
  • devpkg-gnome-online-accounts
  • + +
+

+ +
devpkg-gflagsAll content for pkgconfig file gflags.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gimpAll content for pkgconfig file gimp.pc.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • devpkg-gtkplus
  • + +
  • devpkg-base
  • + +
  • devpkg-gdk-pixbuf
  • + +
+

+ +
devpkg-gjsAll content for pkgconfig file gjs.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-mozjs60
  • + +
  • devpkg-libffi
  • + +
  • devpkg-glib
  • + +
  • devpkg-gobject-introspection
  • + +
+

+ +
devpkg-glewAll content for pkgconfig file glew.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glu
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-glibAll content for pkgconfig file glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
  • devpkg-pcre
  • + +
  • devpkg-libffi
  • + +
+

+ +
devpkg-glibmmAll content for pkgconfig file glibmm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libsigcplusplus
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-glmAll content for pkgconfig file glm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-glogAll content for pkgconfig file glog.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gluAll content for pkgconfig file glu.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-mesa
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gmimeAll content for pkgconfig file gmime.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-autoarAll content for pkgconfig file gnome-autoar.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gnome-bluetoothAll content for pkgconfig file gnome-bluetooth.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-desktopAll content for pkgconfig file gnome-desktop.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libseccomp
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-glib
  • + +
  • devpkg-iso-codes
  • + +
+

+ +
devpkg-gnome-menusAll content for pkgconfig file gnome-menus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-online-accountsAll content for pkgconfig file gnome-online-accounts.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-panelAll content for pkgconfig file gnome-panel.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-settings-daemonAll content for pkgconfig file gnome-settings-daemon.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnome-softwareAll content for pkgconfig file gnome-software.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-appstream-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-atk
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gnome-video-effectsAll content for pkgconfig file gnome-video-effects.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gnutlsAll content for pkgconfig file gnutls.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-nettle
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-p11-kit
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gobject-introspectionAll content for pkgconfig file gobject-introspection.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libffi
  • + +
+

+ +
devpkg-googletestAll content for pkgconfig file googletest.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gperftoolsAll content for pkgconfig file gperftools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-graphiteAll content for pkgconfig file graphite.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-graphvizAll content for pkgconfig file graphviz.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-griloAll content for pkgconfig file grilo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-libxml2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-grilo-pluginsAll content for pkgconfig file grilo-plugins.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gsettings-desktop-schemasAll content for pkgconfig file gsettings-desktop-schemas.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gslAll content for pkgconfig file gsl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gsoundAll content for pkgconfig file gsound.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gspellAll content for pkgconfig file gspell.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-enchant
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gst-plugins-badAll content for pkgconfig file gst-plugins-bad.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gstreamer
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gst-plugins-baseAll content for pkgconfig file gst-plugins-base.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-orc
  • + +
  • devpkg-gstreamer
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gstreamerAll content for pkgconfig file gstreamer.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-elfutils
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-gtkAll content for pkgconfig file gtk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gtk-docAll content for pkgconfig file gtk-doc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gtk3All content for pkgconfig file gtk3.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-fontconfig
  • + +
  • libX11client
  • + +
  • devpkg-atk
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-wayland
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gtkmm3All content for pkgconfig file gtkmm3.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-cairomm
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-atkmm
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-pangomm
  • + +
+

+ +
devpkg-gtkplusAll content for pkgconfig file gtkplus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-gtkspell3All content for pkgconfig file gtkspell3.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-enchant
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-guileAll content for pkgconfig file guile.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-gutenprintAll content for pkgconfig file gutenprint.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-gtkplus
  • + +
+

+ +
devpkg-harfbuzzAll content for pkgconfig file harfbuzz.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-graphite
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-hwlocAll content for pkgconfig file hwloc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxml2
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-icu4cAll content for pkgconfig file icu4c.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ipmctlAll content for pkgconfig file ipmctl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ipsetAll content for pkgconfig file ipset.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libmnl
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-iptablesAll content for pkgconfig file iptables.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-iso-codesAll content for pkgconfig file iso-codes.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-json-cAll content for pkgconfig file json-c.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-json-glibAll content for pkgconfig file json-glib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-kmodAll content for pkgconfig file kmod.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-krb5All content for pkgconfig file krb5.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-lcms2All content for pkgconfig file lcms2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libabigailAll content for pkgconfig file libabigail.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxml2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libarchiveAll content for pkgconfig file libarchive.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libassuanAll content for pkgconfig file libassuan.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libgpg-error
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libatasmartAll content for pkgconfig file libatasmart.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcanberraAll content for pkgconfig file libcanberra.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gtk3
  • + +
  • devpkg-base
  • + +
  • devpkg-gtkplus
  • + +
+

+ +
devpkg-libcapAll content for pkgconfig file libcap.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcap-ngAll content for pkgconfig file libcap-ng.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcgroupAll content for pkgconfig file libcgroup.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libconfigAll content for pkgconfig file libconfig.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libcrocoAll content for pkgconfig file libcroco.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-libxml2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libdatrieAll content for pkgconfig file libdatrie.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libdazzleAll content for pkgconfig file libdazzle.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gtk3
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libdrmAll content for pkgconfig file libdrm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libepoxyAll content for pkgconfig file libepoxy.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-mesa
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libevdevAll content for pkgconfig file libevdev.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libeventAll content for pkgconfig file libevent.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libexifAll content for pkgconfig file libexif.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libffiAll content for pkgconfig file libffi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libfontencAll content for pkgconfig file libfontenc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgcryptAll content for libgcrypt
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgdAll content for pkgconfig file libgd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgdataAll content for pkgconfig file libgdata.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-liboauth
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
  • devpkg-gcr
  • + +
  • devpkg-gnome-online-accounts
  • + +
+

+ +
devpkg-libgeeAll content for pkgconfig file libgee.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgnomekbdAll content for pkgconfig file libgnomekbd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxklavier
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libgpg-errorAll content for pkgconfig file libgpg-error.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgphoto2All content for pkgconfig file libgphoto2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libexif
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgsystemAll content for pkgconfig file libgsystem.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgtopAll content for pkgconfig file libgtop.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgudevAll content for pkgconfig file libgudev.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgusbAll content for pkgconfig file libgusb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libusb
  • + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libgweatherAll content for pkgconfig file libgweather.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-geocode-glib
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libicalAll content for pkgconfig file libical.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-icu4c
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libidnAll content for pkgconfig file libidn.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libidn2All content for pkgconfig file libidn2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libinputAll content for pkgconfig file libinput.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libiscsiAll content for pkgconfig file libiscsi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libjpeg-turboAll content for pkgconfig file libjpeg-turbo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmediaartAll content for pkgconfig file libmediaart.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmicrohttpdAll content for pkgconfig file libmicrohttpd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gnutls
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmnlAll content for pkgconfig file libmnl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmspackAll content for pkgconfig file libmspack.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmtpAll content for pkgconfig file libmtp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libusb
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libmypaintAll content for pkgconfig file libmypaint.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-json-c
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libndpAll content for pkgconfig file libndp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_conntrackAll content for pkgconfig file libnetfilter_conntrack.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_cthelperAll content for pkgconfig file libnetfilter_cthelper.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_cttimeoutAll content for pkgconfig file libnetfilter_cttimeout.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnetfilter_queueAll content for pkgconfig file libnetfilter_queue.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnfnetlinkAll content for pkgconfig file libnfnetlink.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnftnlAll content for pkgconfig file libnftnl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnlAll content for pkgconfig file libnl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libnotifyAll content for pkgconfig file libnotify.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • libX11client
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-liboauthAll content for pkgconfig file liboauth.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-curl
  • + +
  • devpkg-base
  • + +
  • devpkg-openssl
  • + +
+

+ +
devpkg-liboggAll content for pkgconfig file libogg.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libosinfoAll content for pkgconfig file libosinfo.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpcapAll content for pkgconfig file libpcap.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpciaccessAll content for pkgconfig file libpciaccess.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpeasAll content for pkgconfig file libpeas.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-glib
  • + +
  • devpkg-gobject-introspection
  • + +
+

+ +
devpkg-libpinyinAll content for pkgconfig file libpinyin.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpipelineAll content for pkgconfig file libpipeline.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpngAll content for pkgconfig file libpng.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpslAll content for pkgconfig file libpsl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libpthread-stubsAll content for pkgconfig file libpthread-stubs.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-LibRawAll content for pkgconfig file LibRaw.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-lcms2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-librepoAll content for pkgconfig file librepo.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-openssl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-curl
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-librsvgAll content for pkgconfig file librsvg.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libsamplerateAll content for pkgconfig file libsamplerate.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsassAll content for pkgconfig file libsass.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsctpAll content for pkgconfig file libsctp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libseccompAll content for pkgconfig file libseccomp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsecretAll content for pkgconfig file libsecret.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsigcplusplusAll content for pkgconfig file libsigcplusplus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsmbiosAll content for pkgconfig file libsmbios.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsolvAll content for pkgconfig file libsolv.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsoupAll content for pkgconfig file libsoup.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-sqlite-autoconf
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libpsl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libspectreAll content for pkgconfig file libspectre.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libsrtpAll content for pkgconfig file libsrtp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libssh2All content for pkgconfig file libssh2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
  • devpkg-openssl
  • + +
+

+ +
devpkg-libstoragemgmtAll content for pkgconfig file libstoragemgmt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libtasn1All content for pkgconfig file libtasn1.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libthaiAll content for pkgconfig file libthai.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libdatrie
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libtirpcAll content for pkgconfig file libtirpc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libunwindAll content for pkgconfig file libunwind.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libusbAll content for pkgconfig file libusb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libuserAll content for pkgconfig file libuser.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libvaAll content for pkgconfig file libva.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-wayland
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libvirtAll content for pkgconfig file libvirt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libwacomAll content for pkgconfig file libwacom.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libwebpAll content for pkgconfig file libwebp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libwnck3All content for pkgconfig file libwnck3.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXres
  • + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libX11
  • + +
  • devpkg-startup-notification
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-libX11All content for pkgconfig file libX11.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXauAll content for pkgconfig file libXau.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxcbAll content for pkgconfig file libxcb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXau
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-base
  • + +
  • devpkg-libXdmcp
  • + +
+

+ +
devpkg-libXcompositeAll content for pkgconfig file libXcomposite.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXfixes
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXcursorAll content for pkgconfig file libXcursor.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXdamageAll content for pkgconfig file libXdamage.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXfixes
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXdmcpAll content for pkgconfig file libXdmcp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXextAll content for pkgconfig file libXext.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXfixesAll content for pkgconfig file libXfixes.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXfontAll content for pkgconfig file libXfont.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-freetype
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXfont2All content for pkgconfig file libXfont2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-freetype
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXftAll content for pkgconfig file libXft.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-freetype
  • + +
+

+ +
devpkg-libXiAll content for pkgconfig file libXi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-libXfixes
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXext
  • + +
+

+ +
devpkg-libXineramaAll content for pkgconfig file libXinerama.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXext
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxkbcommonAll content for pkgconfig file libxkbcommon.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxkbfileAll content for pkgconfig file libxkbfile.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxklavierAll content for pkgconfig file libxklavier.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-libxml2
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxml2All content for pkgconfig file libxml2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXmuAll content for pkgconfig file libXmu.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXt
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXpmAll content for pkgconfig file libXpm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXrandrAll content for pkgconfig file libXrandr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXext
  • + +
  • devpkg-libXrender
  • + +
+

+ +
devpkg-libXrenderAll content for pkgconfig file libXrender.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXresAll content for pkgconfig file libXres.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXScrnSaverAll content for pkgconfig file libXScrnSaver.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libxsltAll content for pkgconfig file libxslt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libgpg-error
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXtAll content for pkgconfig file libXt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXtstAll content for pkgconfig file libXtst.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXvAll content for pkgconfig file libXv.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXvMCAll content for pkgconfig file libXvMC.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXv
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXxf86miscAll content for pkgconfig file libXxf86misc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libXxf86vmAll content for pkgconfig file libXxf86vm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libXext
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libyamiAll content for pkgconfig file libyami.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libva
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-libzipAll content for pkgconfig file libzip.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-lksctp-toolsAll content for pkgconfig file lksctp-tools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-llvmAll content for pkgconfig file llvm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-luaAll content for pkgconfig file lua.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-LVM2All content for pkgconfig file LVM2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-systemd
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-lz4All content for pkgconfig file lz4.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mariadbAll content for pkgconfig file mariadb.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mediasdkAll content for pkgconfig file mediasdk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mesaAll content for pkgconfig file mesa.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libdrm
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-metacityAll content for pkgconfig file metacity.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-metrics-discoveryAll content for pkgconfig file metrics-discovery.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mozjs52All content for pkgconfig file mozjs52.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mozjs60All content for pkgconfig file mozjs60.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mpg123All content for pkgconfig file mpg123.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-multipath-toolsAll content for pkgconfig file multipath-tools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-mutterAll content for pkgconfig file mutter.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-libxkbcommon
  • + +
  • libX11client
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libinput
  • + +
  • devpkg-systemd
  • + +
  • devpkg-mesa
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libdrm
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-nautilusAll content for pkgconfig file nautilus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-gtk3
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-ncursesAll content for pkgconfig file ncurses.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ndctlAll content for pkgconfig file ndctl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nettleAll content for pkgconfig file nettle.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-network-manager-appletAll content for pkgconfig file network-manager-applet.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-gtk3
  • + +
  • devpkg-NetworkManager
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-NetworkManagerAll content for pkgconfig file NetworkManager.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • devpkg-dbus-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-newtAll content for pkgconfig file newt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nftablesAll content for pkgconfig file nftables.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nghttp2All content for pkgconfig file nghttp2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nsprAll content for pkgconfig file nspr.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-nssAll content for pkgconfig file nss.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-nspr
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-ntfs-3gAll content for pkgconfig file ntfs-3g.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-oath-toolkitAll content for pkgconfig file oath-toolkit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-open-iscsiAll content for pkgconfig file open-iscsi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-openblasAll content for pkgconfig file openblas.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • openblas
  • + +
+

+ +
devpkg-opencvAll content for pkgconfig file opencv.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-openmpiAll content for pkgconfig file openmpi.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-opensslAll content for pkgconfig file openssl.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-openvswitchAll content for pkgconfig file openvswitch.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-opusAll content for pkgconfig file opus.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-orcAll content for pkgconfig file orc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-ostreeAll content for pkgconfig file ostree.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-p11-kitAll content for pkgconfig file p11-kit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pacrunnerAll content for pkgconfig file pacrunner.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-dbus
  • + +
+

+ +
devpkg-pangoAll content for pkgconfig file pango.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-cairo
  • + +
  • devpkg-base
  • + +
  • libglib
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-freetype
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-pangommAll content for pkgconfig file pangomm.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pango
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-cairomm
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-partedAll content for pkgconfig file parted.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pciutilsAll content for pkgconfig file pciutils.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pcreAll content for pkgconfig file pcre.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pcre2All content for pkgconfig file pcre2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pipewireAll content for pkgconfig file pipewire.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pixmanAll content for pkgconfig file pixman.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pkcs11-helperAll content for pkgconfig file pkcs11-helper.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pmdkAll content for pkgconfig file pmdk.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-poptAll content for pkgconfig file popt.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-postgresqlAll content for pkgconfig file postgresql.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-procps-ngAll content for pkgconfig file procps-ng.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-protobuf-cAll content for pkgconfig file protobuf-c.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-pulseaudioAll content for pkgconfig file pulseaudio.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-pygobjectAll content for pkgconfig file pygobject.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libffi
  • + +
+

+ +
devpkg-qpdfAll content for pkgconfig file qpdf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-zlib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qt3dAll content for pkgconfig file qt3d.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtbaseAll content for pkgconfig file qtbase.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtdeclarativeAll content for pkgconfig file qtdeclarative.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtlocationAll content for pkgconfig file qtlocation.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtsvgAll content for pkgconfig file qtsvg.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qttoolsAll content for pkgconfig file qttools.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtwebchannelAll content for pkgconfig file qtwebchannel.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-qtwebengineAll content for pkgconfig file qtwebengine.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-qtwebchannel
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-qtlocation
  • + +
  • devpkg-qtbase
  • + +
+

+ +
devpkg-RAll content for pkgconfig file R.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-rdma-coreAll content for pkgconfig file rdma-core.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-readlineAll content for pkgconfig file readline.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-restAll content for pkgconfig file rest.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-SDLAll content for pkgconfig file SDL.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2All content for pkgconfig file SDL2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_gfxAll content for pkgconfig file SDL2_gfx.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_imageAll content for pkgconfig file SDL2_image.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_mixerAll content for pkgconfig file SDL2_mixer.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_netAll content for pkgconfig file SDL2_net.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL2_ttfAll content for pkgconfig file SDL2_ttf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_gfxAll content for pkgconfig file SDL_gfx.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_imageAll content for pkgconfig file SDL_image.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_mixerAll content for pkgconfig file SDL_mixer.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_netAll content for pkgconfig file SDL_net.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-SDL_ttfAll content for pkgconfig file SDL_ttf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-shared-mime-infoAll content for pkgconfig file shared-mime-info.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-sqlite-autoconfAll content for pkgconfig file sqlite-autoconf.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-startup-notificationAll content for pkgconfig file startup-notification.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-subunitAll content for pkgconfig file subunit.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-systemdAll content for pkgconfig file systemd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-tallocAll content for pkgconfig file talloc.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-tbbAll content for tbb.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-telemetrics-clientAll content for pkgconfig file telemetrics-client.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-tiffAll content for pkgconfig file tiff.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-uhttpmockAll content for pkgconfig file uhttpmock.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-libsoup
  • + +
+

+ +
devpkg-usbredirAll content for pkgconfig file usbredir.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libusb
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-userspace-rcuAll content for pkgconfig file userspace-rcu.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-util-linuxAll content for pkgconfig file util-linux.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-util-macrosAll content for pkgconfig file util-macros.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-v4l-utilsAll content for pkgconfig file v4l-utils.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-systemd
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-valaAll content for pkgconfig file vala.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-glib
  • + +
  • libglib
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-waylandAll content for pkgconfig file wayland.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-wayland-protocolsAll content for pkgconfig file wayland-protocols.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-webkitgtkAll content for pkgconfig file webkitgtk.pc.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • devpkg-base
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-glib
  • + +
+

+ +
devpkg-woff2All content for pkgconfig file woff2.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-brotli
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-xapian-coreAll content for pkgconfig file xapian-core.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xcb-protoAll content for pkgconfig file xcb-proto.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xcb-util-cursorAll content for pkgconfig file xcb-util-cursor.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-xdg-desktop-portalAll content for pkgconfig file xdg-desktop-portal.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xf86-input-wacomAll content for pkgconfig file xf86-input-wacom.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xkbcompAll content for pkgconfig file xkbcomp.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-xorgproto
  • + +
  • devpkg-libxkbfile
  • + +
  • devpkg-libX11
  • + +
  • devpkg-base
  • + +
+

+ +
devpkg-xkeyboard-configAll content for pkgconfig file xkeyboard-config.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xmlsec1All content for pkgconfig file xmlsec1.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
  • devpkg-nspr
  • + +
  • devpkg-nss
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-libxml2
  • + +
+

+ +
devpkg-xorg-serverAll content for pkgconfig file xorg-server.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-pixman
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-base
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-mesa
  • + +
+

+ +
devpkg-xorgprotoAll content for pkgconfig file xorgproto.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xtransAll content for pkgconfig file xtrans.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-xzAll content for pkgconfig file xz.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-zlibAll content for pkgconfig file zlib.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
devpkg-zstdAll content for pkgconfig file zstd.pc.
+ +

Includes bundle(s): +

    + +
  • devpkg-base
  • + +
+

+ +
dfu-utilDevice firmware upgrade utilities.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dhcp-serverRun a dhcp server.
+ +
diffoscopeTool for in-depth comparison of files, archives, and directories.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
diffutilsTools for file comparisons and differences, creating patch files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
digikamAn advanced digital photo management application.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
djangoPython model-view-template web framework.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Sphinx
  • + +
+

+ +
dnfThe dnf tool for use with mixer on Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • file
  • + +
  • pygobject
  • + +
+

+ +
docbook-utilsShell scripts to manage DocBook documents.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
docker-composeTool for defining and running multi-container Docker applications.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • containers-basic
  • + +
+

+ +
docutilsTools for converting plaintext into other formats (e.g. HTML, XML, LaTeX).
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • e.g. HTML, XML, LaTeX
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dolphinFile manager focusing on usability.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
domoticaHome Automation software collection.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • qt-basic
  • + +
  • cloud-api
  • + +
  • libglib
  • + +
+

+ +
dosfstoolsDOS filesystem, or (V)FAT, tools.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • V
  • + +
+

+ +
dovecotSecurity-focused IMAP and POP3 email server.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
doxygenDocumentation system for C++, Java, IDL, Python, and PHP.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dpdkData Plane Development Kit core.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
dtcDevice Tree Compiler used to describe non-discoverable hardware.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
duperemoveTool for finding duplicated extents and submitting them for deduplication.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
editorsRun popular terminal text editors.
+ +

Includes bundle(s): +

    + +
  • joe
  • + +
  • vim
  • + +
  • emacs
  • + +
+

+ +
editors-devAll packages required to build the editors bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • openssl
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libcap
  • + +
  • net-tools
  • + +
  • procps-ng
  • + +
  • devpkg-nettle
  • + +
  • devpkg-popt
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-audit
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-lua
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • editors
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
educationEducational applications.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • gimp
  • + +
  • libX11client
  • + +
  • education-primary
  • + +
  • education-tertiary
  • + +
  • education-secondary
  • + +
  • education-preschool
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-preschoolEducational applications for the preschool level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-primaryEducational applications for the primary school level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-secondaryEducational applications for the secondary school level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
education-tertiaryEducational applications for the tertiary school/university level.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • desktop-kde-libs
  • + +
+

+ +
elasticsearchA powerful open source search and analytics engine based on the Lucene library.
+ +

Includes bundle(s): +

    + +
  • java-runtime
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
emacsExtensible, customizable terminal text editor.
+ +
enterprise-loginEnable enterprise login systems like Active Directory.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • samba
  • + +
+

+ +
eogEye of GNOME for image viewing and cataloging.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ethtoolUtility for displaying and modifying some parameters of network interface controller.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
evinceGNOME document viewer for multiple formats (PDF, Postscript, djvu, tiff, dvi, XPS, etc).
+ +

Includes bundle(s): +

    + +
  • PDF, Postscript, djvu, tiff, dvi, XPS, etc
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
evolutionApplication for integrated email, calendar, and address book functionality.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • gnome-base-libs
  • + +
  • webkitgtk
  • + +
  • openldap
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
extremetuxracerDownhill penguin racing game featuring Tux
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
faas-cliCLI for use with OpenFaaS - a serverless functions framework for Docker & Kubernetes.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fileFile type identification utility.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
file-rollerGNOME archive manager utility.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
findutilsGNU utilities to locate files (e.g., find, xargs, and locate).
+ +

Includes bundle(s): +

    + +
  • e.g., find, xargs, and locate
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fioFlexible I/O tester, often used for load simulation.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
firefoxWeb browser with support for modern web applications from mozilla.org.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • libX11client
  • + +
  • python3-basic
  • + +
+

+ +
firmware-updateUpdate the system's firmware.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • fwupdate
  • + +
  • polkit
  • + +
  • libX11client
  • + +
  • cryptography
  • + +
+

+ +
flacFree Lossless Audio Codec (FLAC) audio format tools.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • FLAC
  • + +
+

+ +
flatpakRun sandboxed desktop application bundles, or build flatpak packages.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • git
  • + +
+

+ +
flexTool for generating programs that recognize lexical patterns in text.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fluidsynthA real-time software synthesizer based on the SoundFont 2 specifications
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
fontforgeOutline and bitmap font editor.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
fonts-basicFonts and fonts tooling.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • lib-opengl
  • + +
+

+ +
fonttoolsTools to manipulate system and user fonts.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • openblas
  • + +
+

+ +
fossilA simple, high-reliability, distributed software configuration management system.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
fuseFilesystem in Userspace (FUSE) to export a virtual filesystem to Linux kernel, or mount filesystem implementation for non-privileged users.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • FUSE
  • + +
+

+ +
fwupdateFirmware update tool for UEFI and other standards.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gamesPlay games in Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • theme, data, etc
  • + +
  • supertuxkart
  • + +
  • lib-opengl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • 32-bit
  • + +
  • p11-kit
  • + +
  • native
  • + +
  • os-core-legacy
  • + +
  • minetest
  • + +
  • extremetuxracer
  • + +
  • perl-basic
  • + +
  • NetworkManager-extras
  • + +
  • diffutils
  • + +
+

+ +
games-devAll packages required to build the games bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-SDL_ttf
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-SDL2_net
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-SDL2
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-newt
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-SDL2_gfx
  • + +
  • perl-basic-dev
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • devpkg-GConf
  • + +
  • devpkg-network-manager-applet
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-SDL_net
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-geoclue
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • gdb
  • + +
  • devpkg-SDL_gfx
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-brotli
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-libndp
  • + +
  • devpkg-cairo
  • + +
  • devpkg-SDL_image
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-gjs
  • + +
  • devpkg-acl
  • + +
  • devpkg-SDL2_ttf
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-glew
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-woff2
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libical
  • + +
  • devpkg-wayland
  • + +
  • gjs
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-libnotify
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • games
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-gcr
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-NetworkManager
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • texlive
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libgudev
  • + +
  • diffutils
  • + +
+

+ +
gdbGNU debugger with support for Ada, Assembly, C, C++, D, Fortran, Go, and more.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
geanyA fast and lightweight IDE using GTK+.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
geditGNOME text editor with full support for UTF-8 and syntax highlighting.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gftpMultithreaded FTP client for *NIX based systems.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gimpGNU Image Manipulation Program.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
gitDistributed version-control system for tracking changes.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • p11-kit
  • + +
  • less
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gjsJavaScript bindings for GObjects, GNOME.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
glibc-localeGNU/Linux locale files to support cultural conventions of a language and region.
+ +
glmark2OpenGL 2.0 and ES 2.0 benchmark.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
globalGNU GLOBAL source code tagging system.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-base-libsCommon libraries used by GNOME and related applications.
+ +

Includes bundle(s): +

    + +
  • desktop-gnomelibs
  • + +
  • libX11client
  • + +
  • libglib
  • + +
+

+ +
gnome-calculatorSoftware calculator integrated with the GNOME desktop environment.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-charactersUtility application to find and insert unusual characters.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • gjs
  • + +
+

+ +
gnome-color-managerFramework for GNOME to manage, install, and generate color profiles.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-disk-utilityApplications for managing and configuring disk drives and media.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-font-viewerFont viewer utility for GNOME.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-logsLog viewer for the systemd journal.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-musicGNOME music player application with management features.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-photosApplication for browsing, editing, and organizing photos.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gstreamer
  • + +
  • NetworkManager-extras
  • + +
+

+ +
gnome-screenshotTake screenshots of the desktop or a window and save it to a file.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gnome-system-monitorProcess viewer and system resource monitor.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-todoMinimalist personal task manager.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • desktop-gnomelibs
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • gjs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnome-weatherView current weather conditions and forecasts.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • libX11client
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gnuplotGraphing utility that outputs to X11, PostScript, PNG, GIF, and others.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
go-basicBuild and run Go language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • git
  • + +
+

+ +
go-basic-devAll packages required to build the go-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • devpkg-xz
  • + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • go-basic
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • xz
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • less
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • libxslt
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • devpkg-pcre2
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
goaccessReal-time web log analyzer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
gpartedA Partition Magic clone, frontend to GNU Parted.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gpgmeGPG encryption tools.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gphoto2Command line interface to libgphoto2.
+ +

Includes bundle(s): +

    + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
graphvizLibrary for parsing graphs in xdot format.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
gstreamerStreaming media framework with graph-based structure.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
gtk-vncA GTK2 widget for VNC clients.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • pulseaudio
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gtkwaveA wave viewer which reads LXT, LXT2, VZT, GHW and VCD/EVCD files.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gvimA highly configurable version of the vi text editor with advanced features, such as a GUI.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
gwenviewAn image viewer with simple adjustments--ideal for browsing collections.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
gzipA GNU lossless data compression/decompression utility.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
haproxyThe Reliable, High Performance TCP/HTTP Load Balancer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
hardware-bluetoothSoftware to enable use of Bluetooth hardware.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
hardware-gpuFirmware and tools for GPU support.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • lib-opengl
  • + +
  • linux-firmware-extras
  • + +
+

+ +
hardware-printingFirmware and tools for printer support.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libX11client
  • + +
+

+ +
hardware-uefiProvides bootloader tools for booting on a UEFI based system.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • os-core
  • + +
  • linux-firmware
  • + +
+

+ +
hardware-wifiFirmware and tools for basic WiFi support.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • wpa_supplicant
  • + +
  • linux-firmware-wifi
  • + +
  • NetworkManager-extras
  • + +
+

+ +
haskell-basicBuild and run Haskell language programs.
+ +

Includes bundle(s): +

    + +
  • devpkg-zlib
  • + +
  • xz
  • + +
  • p11-kit
  • + +
  • make
  • + +
  • perl-basic
  • + +
  • c-basic
  • + +
  • git
  • + +
+

+ +
hexchatA graphical IRC chat client; header and path for HexChat plugins.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • os-core-webproxy
  • + +
  • lib-openssl
  • + +
  • gnome-base-libs
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
hpc-utilsProvide userspace management programs for various HPC-related programs.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
htopInteractive text-mode process viewer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
httpdApache HyperText Transfer Protocol (HTTP) Server daemon.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • HTTP
  • + +
  • lib-openssl
  • + +
+

+ +
hugoStatic Web site generator written in Go.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
hwlocHardware locality provides a portable abstraction of the topology of modern architectures.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iasimageTool for creating Intel Automotive Service (IAS) images, a binary file format understood by Intel© Slim Bootloader.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • IAS
  • + +
+

+ +
icdiffHiglights with color, beyond diff, to show changes between similar files.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
icecreamDistributed network compilation and stream download utility.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iftopDisplay bandwidth usage on an interface.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
igt-gpu-toolsIntel graphics performance diagnostics.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
ImageMagickCreate, edit, or compose bitmap images.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
+

+ +
inkscapeProfessional vector graphics editor.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
inotify-toolsCommand line programs, with interface to inotify, to monitor filesystem events.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
intltoolUtility scripts for internationalizing XML.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iotopPer process I/O bandwidth monitor.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iperfInternet protocol tool for measuring network performance.
+ +
ipmitoolCommand-line interface to manage IPMI-enabled devices.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
iproute2Utilities for controlling TCP/IP networking and traffic control.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
iptablesShared Xtables code for extensions and iproute2.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ipvsadmIP virtual server tool to implement transport-layer load balancing inside Linux kernel.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
irssiInternet Relay Chat (IRC) text-mode client program.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • lib-openssl
  • + +
  • IRC
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
java-basicBuild and run Java language programs.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • p11-kit
  • + +
  • perl-basic
  • + +
  • which
  • + +
+

+ +
java-runtimeRuntime environment for Java language programs.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
+

+ +
java11-basicBuild and run Java 11 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • which
  • + +
  • libX11client
  • + +
  • python3-basic
  • + +
+

+ +
java9-basicBuild and run Java 9 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • which
  • + +
  • libX11client
  • + +
  • python3-basic
  • + +
+

+ +
joeGNU terminal-based text editor.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
jqLightweight and flexible command-line JSON processor.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
jupyterJupyter metapackage to install all Jupyter components at one time.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Sphinx
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
kameraAccess and manipulate pictures on a digital camera.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kateText editor that can open multiple files simultaneously.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kbdLibrary to manage the Linux keymaps.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kcachegrindFrontend visualization tool for Valgrind's cachegrind & callggrind.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
+

+ +
kcalcScientific calculator.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kde-frameworks5Common KDE Frameworks 5 libraries.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • lib-qt5webengine
  • + +
+

+ +
kde-frameworks5-devAll packages required to build the kde-frameworks5 bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-qtlocation
  • + +
  • devpkg-libXt
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-qtdeclarative
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • qt-basic-dev
  • + +
  • devpkg-libffi
  • + +
  • kde-frameworks5
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-xorg-server
  • + +
  • devpkg-cairo
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-qtwebchannel
  • + +
  • scons
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • xz
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-attica
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • gpgme
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-qtsvg
  • + +
  • devpkg-libgudev
  • + +
  • diffutils
  • + +
+

+ +
kdeconnect-kdeNo detailed summary available
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • qt-core
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kdenliveA non-linear video editor for Linux using the MLT video framework.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kdiff3Feature-rich code comparison utility.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
+

+ +
keepalivedFailover and monitoring daemon for Linux Virtual Server (LVS) clusters.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • LVS
  • + +
  • lib-openssl
  • + +
+

+ +
keepassxcCross-platform port of KeePass password manager with industry-standard AES.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kernel-awsRun the Amazon Web Services (AWS) specific kernel.
+ +

Includes bundle(s): +

    + +
  • AWS
  • + +
  • bootloader
  • + +
+

+ +
kernel-containerRun the Clear Linux OS container specific kernel.
+ +
kernel-gceRun the Google Compute Engine (GCE) specific kernel.
+ +

Includes bundle(s): +

    + +
  • GCE
  • + +
  • bootloader
  • + +
+

+ +
kernel-hypervRun the Microsoft Hyper-V specific kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
+

+ +
kernel-hyperv-ltsRun the Microsoft Hyper-V specific LTS kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
+

+ +
kernel-hyperv-miniRun the Microsoft Hyper-V mini-os specific kernel.
+ +

Includes bundle(s): +

    + +
  • kernel-hyperv
  • + +
+

+ +
kernel-installInstalls kernel, initrd, kernel config, system map, and creates a bootloader entry for the new kernel.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kernel-iot-lts2017-preempt-rtRun the Intel "PK" kernel, an enterprise-style kernel with backports, plus PREEMPT_RT support.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
+

+ +
kernel-iot-lts2018Run the Intel "PK" kernel, an enterprise-style kernel with backports.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
+

+ +
kernel-iot-lts2019Run the Intel "PK" kernel, an enterprise-style kernel with backports.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
+

+ +
kernel-kvmRun the Kernel-based Virtual Machine (KVM) specific kernel.
+ +

Includes bundle(s): +

    + +
  • qemu-guest-additions
  • + +
  • KVM
  • + +
  • bootloader
  • + +
+

+ +
kernel-ltsRun the latest long-term support native kernel.
+ +

Includes bundle(s): +

    + +
  • kernel-lts2018
  • + +
+

+ +
kernel-lts-dkmsSupport module for building/loading via Dynamic Kernel Module System (DKMS) in LTS kernel.
+ +

Includes bundle(s): +

    + +
  • DKMS
  • + +
  • kernel-lts2018-dkms
  • + +
+

+ +
kernel-lts2017Run the long-term support 4.14 native kernel.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
+

+ +
kernel-lts2018Run the long-term support 4.19 native kernel.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
+

+ +
kernel-lts2018-dkmsSupport for module building/loading via Dynamic Kernel Module System (DKMS) in LTS2018 kernel.
+ +

Includes bundle(s): +

    + +
  • c-basic
  • + +
  • DKMS
  • + +
  • linux-lts2018-dev
  • + +
+

+ +
kernel-lts2018-preempt-rtRun the Intel "PK" kernel 2018, an enterprise-style kernel with backports, plus PREEMPT_RT support.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
+

+ +
kernel-mainline-vanillaRun the mainline current vanilla kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • linux-firmware
  • + +
  • qemu-guest-additions
  • + +
  • hardware-uefi
  • + +
+

+ +
kernel-nativeRun the native kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • linux-firmware
  • + +
  • qemu-guest-additions
  • + +
  • hardware-uefi
  • + +
+

+ +
kernel-native-currentRun the mainline current native kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
  • libglib
  • + +
  • linux-firmware-extras
  • + +
  • linux-firmware
  • + +
  • qemu-guest-additions
  • + +
  • hardware-uefi
  • + +
+

+ +
kernel-native-dkmsSupport module for building/loading via Dyamic Kernel Module System (DKMS) in native kernel.
+ +

Includes bundle(s): +

    + +
  • linux-dev
  • + +
  • c-basic
  • + +
  • DKMS
  • + +
+

+ +
kernel-networktestKernel with NFS root FS support and modular network drivers.
+ +
kernel-oracleRun the Oracle Cloud specific kernel.
+ +

Includes bundle(s): +

    + +
  • bootloader
  • + +
+

+ +
kernel-pkRun the Intel "PK" kernel and enterprise-style kernel with backports.
+ +

Includes bundle(s): +

    + +
  • kernel-iot-lts2018
  • + +
+

+ +
kernel-rtRun the native kernel with preempt_rt patchset.
+ +

Includes bundle(s): +

    + +
  • linux-firmware
  • + +
  • bootloader
  • + +
  • linux-firmware-extras
  • + +
+

+ +
keychainManage SSH and GPG keys; allows one long-running ssh-agent process per system.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kleopatraCertificate Manager and Unified Crypto GUI.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kojiSet up a koji build service based on NFS mounts.
+ +

Includes bundle(s): +

    + +
  • package-utils
  • + +
  • python2-basic
  • + +
  • postgresql
  • + +
  • Sphinx
  • + +
  • web-server-basic
  • + +
  • nfs-utils
  • + +
  • git
  • + +
+

+ +
konquerorKDE file manager and Web browser.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
konsoleTerminal emulator for KDE.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
konversationInternet Relay Chat (IRC) client built on KDE platform.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • IRC
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kritaEdit and paint bitmap images.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ksysguardTrack and control the processes running in your system.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
kvm-hostRun Kernel-based Virtual Machines (KVM).
+ +

Includes bundle(s): +

    + +
  • ceph
  • + +
  • iptables
  • + +
  • polkit
  • + +
  • libX11client
  • + +
  • KVM
  • + +
+

+ +
kvm-host-devAll packages required to build the kvm-host bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-oath-toolkit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • joe
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • glibc-locale
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • devpkg-usbredir
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-libvirt
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-cairo
  • + +
  • dosfstools
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • acpica-unix2
  • + +
  • devpkg-parted
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-nettle
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-xmlsec1
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • gzip
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • devpkg-nftables
  • + +
  • devpkg-libgudev
  • + +
  • kvm-host
  • + +
  • diffutils
  • + +
+

+ +
kvm-host-extrasRun virtual machines as deployed infrastructure.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • kvm-host
  • + +
+

+ +
latte-dockA dock based on Plasma Frameworks.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lessTerminal-based file-pager for viewing text files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
letsencrypt-clientObtain and renew valid SSL certificates through Let's Encrypt's ACME service.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloud-api
  • + +
+

+ +
lftpFile transfer client for http, ftp, sftp and more.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
lib-imageformatHelpers for reading images.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-opengl
  • + +
  • libglib
  • + +
+

+ +
lib-openglHelpers for 3D graphics.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
lib-opensslToolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • TLS
  • + +
+

+ +
lib-qt5webengineRun programs that use the Qt Web Engine module.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
+

+ +
lib-sambaHelper libraries for accessing samba shares.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
libarchiveMulti-format archive and compression library.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
libglibCommon C routines used by Gtk+ and other libs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
libnlLibrary for applications that deal with netlink sockets.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libreofficeFree office productivity suite.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • openldap
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libstdcppC++ runtime support.
+ +
libva-utilsCollection of utilities and examples to exercise VA-API (Video Acceleration API)
+ +

Includes bundle(s): +

    + +
  • Video Acceleration API
  • + +
  • libX11client
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libX11clientGrouping only bundle for use in X using bundles.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • lib-opengl
  • + +
  • lib-openssl
  • + +
+

+ +
libxml2XML parsing library, version 2.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libxsltXML stylesheet transformation library for converting XML into HTML.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
libzmqZMQ tools and libraries.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lightdmLightDM login manager with GTK greeter.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
linux-devFiles for building modules against the native kernel.
+ +
linux-firmwareFirmware for kernel drivers.
+ +
linux-firmware-extrasExtra firmware for the kernel.
+ +
linux-firmware-wifiWifi adapter firmware.
+ +
linux-iot programs for developing Linux iot LTS 2018 version
linux-iot programs for developing Linux iot SOS LTS 2018 version
linux-lts-devFiles for building modules against LTS kernel.
+ +

Includes bundle(s): +

    + +
  • linux-lts2018-dev
  • + +
+

+ +
linux-lts2017-devFiles for building modules against LTS2017 kernel.
+ +
linux-lts2018-devFiles for building modules against LTS2018 kernel.
+ +
linux-toolsTools for use in Linux.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libglib
  • + +
  • binutils
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
llvmLLVM/Clang modular and reusable compiler toolchain.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lm-sensorsHardware health monitoring with access to temperature, voltage, and fan speed sensors, and their setup.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
localesMachine-readable data files, shared objects, and programs for localization and internationalization.
+ +

Includes bundle(s): +

    + +
  • glibc-locale
  • + +
+

+ +
logrotateAutomatic rotation compression and removal and mailing of log files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ltpLinux Test Project.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
lua-basicProgramming language designed for extending applications.
+ +
LyXDocument processor and WYSIWYM LaTeX editor.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • texlive
  • + +
+

+ +
lz4Fast compression algorithm to compress and decompress lz4 files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
machine-learning-basicBuild machine learning applications with a full suite of libraries.
+ +

Includes bundle(s): +

    + +
  • machine-learning-tensorflow
  • + +
  • graphviz
  • + +
  • cloud-api
  • + +
  • python-data-science
  • + +
  • devpkg-boost
  • + +
  • machine-learning-pytorch
  • + +
  • devpkg-fann
  • + +
  • machine-learning-mycroft
  • + +
  • Sphinx
  • + +
  • devpkg-glog
  • + +
  • devpkg-tbb
  • + +
  • devpkg-protobuf-c
  • + +
  • devpkg-gflags
  • + +
  • devpkg-googletest
  • + +
  • devpkg-opencv
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • computer-vision-basic
  • + +
  • c-basic
  • + +
  • python-extras
  • + +
  • openblas
  • + +
+

+ +
machine-learning-mycroftBuild machine learning applications with Mycroft, an open-source voice assistant, and more.
+ +

Includes bundle(s): +

    + +
  • python-data-science
  • + +
+

+ +
machine-learning-pytorchBuild machine learning applications with PyTorch, an optimized tensor library for deep learning.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • Sphinx
  • + +
+

+ +
machine-learning-tensorflowBuild machine learning applications using Tensorflow, a library for numerical computation using deep neural networks.
+ +

Includes bundle(s): +

    + +
  • cloud-api
  • + +
  • python-data-science
  • + +
+

+ +
machine-learning-web-uiWeb-based, interactive tools for machine learning.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloud-api
  • + +
  • python-data-science
  • + +
  • Sphinx
  • + +
  • R-extras
  • + +
  • jupyter
  • + +
+

+ +
mail-utilsProcess, read, and send email.
+ +

Includes bundle(s): +

    + +
  • notmuch
  • + +
  • mutt
  • + +
+

+ +
mail-utils-devAll packages required to build the mail-utils bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • mail-utils
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gmime
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-cyrus-sasl
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • Sphinx
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • gzip
  • + +
  • devpkg-xapian-core
  • + +
  • kbd
  • + +
  • gpgme
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-lua
  • + +
  • diffutils
  • + +
+

+ +
makeBuild automation tool that controls generation of executables and other target files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
maker-3dprinting3D printing tools for makers.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Sphinx
  • + +
  • qt-basic
  • + +
  • maker-basic
  • + +
  • openscad
  • + +
+

+ +
maker-basicBasic tools for makers and experimenters.
+ +

Includes bundle(s): +

    + +
  • inkscape
  • + +
  • libX11client
  • + +
  • python-extras
  • + +
  • minicom
  • + +
+

+ +
maker-cncCNC carving tools for makers.
+ +

Includes bundle(s): +

    + +
  • python2-basic
  • + +
  • inkscape
  • + +
  • pygobject
  • + +
  • maker-basic
  • + +
  • openscad
  • + +
  • python-extras
  • + +
+

+ +
maker-gisGIS/Mapping tools for makers.
+ +

Includes bundle(s): +

    + +
  • Babel
  • + +
  • desktop-kde-libs
  • + +
  • maker-basic
  • + +
+

+ +
man-pagesLinux man-pages to document kernel and C library interfaces for user-space programs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mariadbMariaDB Connector/C dynamic library/Database daemon.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
meldvisual file difference and merging tool, targeted at developers.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • desktop-gnomelibs
  • + +
+

+ +
memcachedhigh performance multithreaded event-based key/value cache store.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mercurialA scalable distributed software configuration management (SCM) tool.
+ +

Includes bundle(s): +

    + +
  • SCM
  • + +
  • python3-basic
  • + +
+

+ +
minetestA Voxel multi-player game inspired by minecraft.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • minetestserver
  • + +
  • libX11client
  • + +
+

+ +
minetestserverA headless game server for minetest.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
minicomA text-based serial port communications program.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mixerTool to create custom Clear Linux OS releases.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • sysadmin-basic
  • + +
  • containers-basic
  • + +
  • dnf
  • + +
  • os-installer
  • + +
  • zstd
  • + +
  • openssl
  • + +
  • git
  • + +
+

+ +
mkosiGenerate disk images.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
monoOpen source implementation of .NET platform, including runtime and compiler.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mpg123MPEG layer 1/2/3 audio player and decoder. MPEG 1.0 layer 3 known as MP3.
+ +

Includes bundle(s): +

    + +
  • pulseaudio
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
mpvMultimedia player and streamer.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
mtd-utilsMemory technology device utilities (usually flash) exposing interface between hardware drivers and upper system layers.
+ +

Includes bundle(s): +

    + +
  • usually flash
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
mtrNetwork diagnostic tool for analyzing latency, combining the functionality of the 'traceroute' and 'ping' programs.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
MuseScoreFree music composition and notation software
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
muslC standard library compiler toolchain.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
muttSmall but powerful mail client.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
nasmGeneral purpose x86 assembler.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nautilusDefault file manager for GNOME.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ncduDisk usage analyzer with ncurses interface.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
neomuttMutt mail client fork with additional features.
+ +

Includes bundle(s): +

    + +
  • gpgme
  • + +
  • notmuch
  • + +
  • libglib
  • + +
  • openldap
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
net-toolsBasic Networking Tools
+ +
netkit-telnetBasic telnet client.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
network-basicRun network utilities and modify network settings.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • iptables
  • + +
  • openvswitch
  • + +
  • ethtool
  • + +
  • wpa_supplicant
  • + +
  • curl
  • + +
  • net-tools
  • + +
  • wget
  • + +
  • znc
  • + +
  • iproute2
  • + +
  • clr-network-troubleshooter
  • + +
  • dpdk
  • + +
  • openssl
  • + +
  • perl-basic
  • + +
+

+ +
network-basic-devAll packages required to build the network-basic bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • devpkg-libnetfilter_queue
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-libnetfilter_cthelper
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • perl-basic-dev
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-pkcs11-helper
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • devpkg-libnetfilter_cttimeout
  • + +
  • dev-utils
  • + +
  • devpkg-cairo
  • + +
  • devpkg-ipset
  • + +
  • binutils
  • + +
  • devpkg-apr
  • + +
  • devpkg-acl
  • + +
  • network-basic
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • Sphinx
  • + +
  • devpkg-libnl
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-freetype
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libpcap
  • + +
  • devpkg-nftables
  • + +
  • diffutils
  • + +
+

+ +
network-monitor-nodeRun network security monitoring node.
+ +

Includes bundle(s): +

    + +
  • suricata
  • + +
+

+ +
network-security-monitoringVarious tools to test and improve network security.
+ +

Includes bundle(s): +

    + +
  • network-monitor-node
  • + +
  • nmap
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • wireshark
  • + +
  • network-basic
  • + +
+

+ +
network-time-sensitiveVarious tools and plugins to set up TSN/TCC.
+ +

Includes bundle(s): +

    + +
  • alsa-utils
  • + +
  • network-basic
  • + +
+

+ +
NetworkManagerConfigure network interfaces and maintain active network connection.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • wpa_supplicant
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
NetworkManager-basicNetworkManager plugins and desktop integration
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • NetworkManager
  • + +
  • libX11client
  • + +
+

+ +
NetworkManager-extrasNetworkManager plugins and desktop integration
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • NetworkManager
  • + +
  • wpa_supplicant
  • + +
  • libX11client
  • + +
+

+ +
nfs-utilsServer and client tooling for network file systems (NFS).
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • NFS
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nginxHTTP server, reverse proxy, IMAP/POP3 proxy server.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
nginx-mainlineLightweight HTTP server and IMAP/POP3 proxy server, mainline release.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
nloadMonitor network traffic and bandwidth usage.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nmapUtility for network device discovery and security auditing.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
nodejs-basicRun JavaScript server side for fast, scalable network applications.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
notmuchSystem for indexing, searching, reading, and tagging large collections of email messages in maildir or mh format.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
ocaml-basicBuild and run ocaml language programs.
+ +
octaveHigh-level programming language, primarily intended for numerical computations.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • openblas
  • + +
+

+ +
offlineimapSynchronize emails between two repositories via IMAP.
+ +

Includes bundle(s): +

    + +
  • python2-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
okularUniversal document viewer.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
openblasOptimized BLAS (linear algebra) library based on GotoBLAS2 1.13 BSD version.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • linear algebra
  • + +
+

+ +
openldapLightweight Directory Access Protocol (LDAP) client and server tools.
+ +

Includes bundle(s): +

    + +
  • LDAP
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
openmpiHPC tools for running on jobs on clusters.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
openqaOpenQA infrastructure, providing a significant part of release validation testing.
+ +

Includes bundle(s): +

    + +
  • web-server-basic
  • + +
  • kvm-host
  • + +
  • postgresql
  • + +
  • perl-extras
  • + +
+

+ +
openscadThe programmers solid 3D CAD modeller.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
openssh-serverRun a secure shell (SSH) server for access from remote machines.
+ +

Includes bundle(s): +

    + +
  • SSH
  • + +
  • lib-openssl
  • + +
+

+ +
opensslToolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.
+ +

Includes bundle(s): +

    + +
  • TLS
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
openstack-commonA full suite of various open-stack components.
+ +

Includes bundle(s): +

    + +
  • Babel
  • + +
  • libstdcpp
  • + +
  • cloud-api
  • + +
  • keepalived
  • + +
  • libX11client
  • + +
  • memcached
  • + +
  • haproxy
  • + +
  • devpkg-apr-util
  • + +
  • perl-basic
  • + +
  • python-extras
  • + +
  • openblas
  • + +
+

+ +
openvswitchA production quality, multilayer virtual switch--open vswitch kernel modules.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
os-clear-containersControl Clear Containers guest setup and workloads.
+ +
os-cloudguestRun any initialization processes required of a generic cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • ethtool
  • + +
  • libglib
  • + +
  • VM
  • + +
  • sudo
  • + +
  • openssh-server
  • + +
+

+ +
os-cloudguest-awsRun any initialization processes required of an AWS cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • sudo
  • + +
  • libglib
  • + +
  • VM
  • + +
+

+ +
os-cloudguest-azureRun any initialization process requried of an Azure cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ethtool
  • + +
  • VM
  • + +
  • net-tools
  • + +
  • parted
  • + +
  • sudo
  • + +
  • openssl
  • + +
  • openssh-server
  • + +
+

+ +
os-cloudguest-gceRun any initialization processes required of an Google Compute Engine (GCE) cloud guest virtual machine (VM).
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • lib-openssl
  • + +
  • GCE
  • + +
  • sudo
  • + +
  • which
  • + +
+

+ +
os-cloudguest-kvmRun any initialization processes required for qemu-kvm.
+ +

Includes bundle(s): +

    + +
  • qemu-guest-additions
  • + +
+

+ +
os-cloudguest-oracleRun any initialization processes required of an Oracle Cloud guest.
+ +

Includes bundle(s): +

    + +
  • sudo
  • + +
  • openssh-server
  • + +
  • libglib
  • + +
+

+ +
os-cloudguest-vmwareRun any initialization processes required for VMWare virtual machines (VM).
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • VM
  • + +
  • lib-openssl
  • + +
+

+ +
os-cloudguest-vmware-guiRun any initialization processes required for VMWare VMs.
+ +

Includes bundle(s): +

    + +
  • os-cloudguest-vmware
  • + +
  • libstdcpp
  • + +
  • libX11client
  • + +
+

+ +
os-clr-on-clrRun any process required for Clear Linux OS development.
+ +

Includes bundle(s): +

    + +
  • devpkg-libxcb
  • + +
  • dev-utils
  • + +
  • storage-utils
  • + +
  • global
  • + +
  • devpkg-libXfixes
  • + +
  • sysadmin-basic
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • scons
  • + +
  • go-basic
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-mesa
  • + +
  • devpkg-libzip
  • + +
  • package-builder
  • + +
  • storage-utils-dev
  • + +
  • network-basic
  • + +
  • devpkg-gtk
  • + +
  • mkosi
  • + +
  • os-core
  • + +
  • libarchive
  • + +
  • os-core-update-dev
  • + +
  • diffoscope
  • + +
  • nodejs-basic
  • + +
  • mail-utils-dev
  • + +
  • devpkg-libdrm
  • + +
  • cabextract
  • + +
  • devpkg-pmdk
  • + +
  • perl-basic
  • + +
  • devpkg-libXvMC
  • + +
  • network-basic-dev
  • + +
  • devpkg-libva
  • + +
  • mail-utils
  • + +
  • sysadmin-basic-dev
  • + +
  • mixer
  • + +
  • dnf
  • + +
  • koji
  • + +
  • devpkg-xcb-proto
  • + +
  • os-core-dev
  • + +
  • c-basic
  • + +
  • python3-basic
  • + +
  • devpkg-libXxf86vm
  • + +
  • devpkg-libXdamage
  • + +
  • devpkg-telemetrics-client
  • + +
  • devpkg-libarchive
  • + +
  • dev-utils-dev
  • + +
  • unbundle
  • + +
  • editors
  • + +
  • openssh-server
  • + +
  • kvm-host
  • + +
+

+ +
os-clr-on-clr-devAll packages required to build the os-clr-on-clr bundle.
+ +

Includes bundle(s): +

    + +
  • zip
  • + +
  • devpkg-libpipeline
  • + +
  • file
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • devpkg-libnetfilter_queue
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-libnetfilter_cthelper
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libmspack
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-openmpi
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • fontforge
  • + +
  • kvm-host-dev
  • + +
  • devpkg-krb5
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • network-basic-dev
  • + +
  • devpkg-libva
  • + +
  • devpkg-oath-toolkit
  • + +
  • devpkg-popt
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • os-clr-on-clr
  • + +
  • devpkg-font-util
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • devpkg-p11-kit
  • + +
  • unzip
  • + +
  • devpkg-guile
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libuser
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-newt
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • plzip
  • + +
  • devpkg-cmrt
  • + +
  • perl-basic-dev
  • + +
  • ccache
  • + +
  • devpkg-libXv
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-systemd
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • xemacs
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-gmime
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-libzip
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • joe
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-llvm
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-pkcs11-helper
  • + +
  • devpkg-libxkbcommon
  • + +
  • curl
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-qtdeclarative
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-usbredir
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • devpkg-libnetfilter_cttimeout
  • + +
  • Babel
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-libndp
  • + +
  • devpkg-cairo
  • + +
  • dosfstools
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-R
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-apr
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • acpica-unix2
  • + +
  • devpkg-parted
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-librepo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • cryptography
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-apr-util
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-libgd
  • + +
  • editors-dev
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-userspace-rcu
  • + +
  • devpkg-libical
  • + +
  • devpkg-libsolv
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • gjs
  • + +
  • devpkg-fuse
  • + +
  • devpkg-graphviz
  • + +
  • dev-utils-dev
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • devpkg-libmicrohttpd
  • + +
  • wget
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • which
  • + +
  • devpkg-xmlsec1
  • + +
  • devpkg-zstd
  • + +
  • devpkg-pciutils
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-hwloc
  • + +
  • go-basic-dev
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • storage-utils-dev
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • devpkg-libabigail
  • + +
  • gzip
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-subunit
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • mail-utils-dev
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-xapian-core
  • + +
  • xz
  • + +
  • devpkg-attica
  • + +
  • devpkg-expat
  • + +
  • devpkg-gcr
  • + +
  • iproute2
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • cpio
  • + +
  • devpkg-NetworkManager
  • + +
  • sysadmin-basic-dev
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • texlive
  • + +
  • devpkg-ndctl
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • bc
  • + +
  • devpkg-qtsvg
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
os-coreRun a minimal Linux userspace.
+ +
os-core-devAll packages required to build the os-core bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • net-tools
  • + +
  • procps-ng
  • + +
  • devpkg-nettle
  • + +
  • devpkg-popt
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • devpkg-procps-ng
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • gdb
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
os-core-legacyProvides basic 32 bit libs
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
+

+ +
os-core-searchProvides swupd search capability.
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
  • python3-basic
  • + +
+

+ +
os-core-updateProvides basic suite for running Clear Linux OS for IA Updater.
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
  • os-core-webproxy
  • + +
+

+ +
os-core-update-devAll packages required to build the os-core-update bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • os-core-update
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-libidn2
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
os-core-webproxyProvides basic suite for using http proxies.
+ +

Includes bundle(s): +

    + +
  • os-core
  • + +
  • libglib
  • + +
  • p11-kit
  • + +
+

+ +
os-installerRun image creation and installation for Clear Linux OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • linux-firmware-extras
  • + +
  • wpa_supplicant
  • + +
  • curl
  • + +
  • linux-firmware-wifi
  • + +
  • kbd
  • + +
  • less
  • + +
  • iproute2
  • + +
+

+ +
os-testsuiteProvides minimal functionality for core testing functions.
+ +

Includes bundle(s): +

    + +
  • file
  • + +
  • acl
  • + +
  • curl
  • + +
  • cpio
  • + +
  • binutils
  • + +
  • make
  • + +
  • sudo
  • + +
  • perl-basic
  • + +
  • git
  • + +
  • diffutils
  • + +
+

+ +
os-testsuite-0dayHelpers for the 0day kernel testing framework.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • dev-utils
  • + +
  • intltool
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-mariadb
  • + +
  • memcached
  • + +
  • llvm
  • + +
  • acpica-unix2
  • + +
  • perl-basic
  • + +
  • c-basic
  • + +
+

+ +
os-testsuite-automotiveProvides minimal functionality for automotive testing functions.
+ +

Includes bundle(s): +

    + +
  • os-testsuite-graphics
  • + +
  • os-testsuite
  • + +
  • net-tools
  • + +
+

+ +
os-testsuite-graphicsProvides minimal functionality for graphics testing functions.
+ +

Includes bundle(s): +

    + +
  • glmark2
  • + +
+

+ +
os-testsuite-phoronixRun the Phoronix test suite.
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2_gfx
  • + +
  • devpkg-cairo
  • + +
  • devpkg-SDL_image
  • + +
  • devpkg-fftw
  • + +
  • devpkg-pcre
  • + +
  • devpkg-libXv
  • + +
  • redis-native
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-glog
  • + +
  • devpkg-hwloc
  • + +
  • go-basic
  • + +
  • devpkg-openssl
  • + +
  • scons
  • + +
  • devpkg-gflags
  • + +
  • java-basic
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-SDL_mixer
  • + +
  • devpkg-SDL2_ttf
  • + +
  • devpkg-acl
  • + +
  • gnuplot
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-gtk
  • + +
  • bison
  • + +
  • devpkg-SDL_ttf
  • + +
  • devpkg-SDL2_mixer
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • fio
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-SDL2_net
  • + +
  • nasm
  • + +
  • devpkg-openmpi
  • + +
  • devpkg-SDL
  • + +
  • games
  • + +
  • devpkg-curl
  • + +
  • R-basic
  • + +
  • os-testsuite-phoronix-desktop
  • + +
  • flex
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-opus
  • + +
  • devpkg-popt
  • + +
  • desktop-apps-extras
  • + +
  • devpkg-libXvMC
  • + +
  • devpkg-libogg
  • + +
  • gimp
  • + +
  • devpkg-glu
  • + +
  • yasm
  • + +
  • devpkg-SDL_net
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libnl
  • + +
  • hwloc
  • + +
  • devpkg-flac
  • + +
  • unzip
  • + +
  • c-basic
  • + +
  • devpkg-lua
  • + +
  • python3-basic
  • + +
  • openblas
  • + +
  • devpkg-SDL_gfx
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • os-testsuite-phoronix-server
  • + +
  • octave
  • + +
  • devpkg-attr
  • + +
  • bc
  • + +
  • php-basic
  • + +
  • openmpi
  • + +
  • database-basic
  • + +
  • machine-learning-basic
  • + +
  • desktop-autostart
  • + +
  • patch
  • + +
+

+ +
os-testsuite-phoronix-desktopRun the Phoronix test suite (desktop version).
+ +

Includes bundle(s): +

    + +
  • devpkg-SDL2_gfx
  • + +
  • libstdcpp
  • + +
  • desktop version
  • + +
  • devpkg-SDL_image
  • + +
  • devpkg-cairo
  • + +
  • devpkg-fftw
  • + +
  • devpkg-pcre
  • + +
  • devpkg-libXv
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-glog
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-openssl
  • + +
  • scons
  • + +
  • devpkg-gflags
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-SDL_mixer
  • + +
  • devpkg-SDL2_ttf
  • + +
  • devpkg-acl
  • + +
  • gnuplot
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-gtk
  • + +
  • bison
  • + +
  • devpkg-SDL_ttf
  • + +
  • python2-basic
  • + +
  • nasm
  • + +
  • devpkg-SDL2_mixer
  • + +
  • devpkg-boost
  • + +
  • fio
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-SDL2_net
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-SDL
  • + +
  • games
  • + +
  • devpkg-curl
  • + +
  • flex
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • python-extras
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-opus
  • + +
  • devpkg-popt
  • + +
  • desktop-apps-extras
  • + +
  • devpkg-libXvMC
  • + +
  • devpkg-libogg
  • + +
  • gimp
  • + +
  • devpkg-glu
  • + +
  • yasm
  • + +
  • devpkg-SDL_net
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libnl
  • + +
  • unzip
  • + +
  • c-basic
  • + +
  • devpkg-lua
  • + +
  • python3-basic
  • + +
  • openblas
  • + +
  • devpkg-SDL_gfx
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • bc
  • + +
  • php-basic
  • + +
  • hardware-gpu
  • + +
  • devpkg-flac
  • + +
  • desktop-autostart
  • + +
  • patch
  • + +
+

+ +
os-testsuite-phoronix-serverRun the Phoronix test suite (server version).
+ +

Includes bundle(s): +

    + +
  • redis-native
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-glog
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-openssl
  • + +
  • go-basic
  • + +
  • scons
  • + +
  • devpkg-gflags
  • + +
  • devpkg-libpng
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • bison
  • + +
  • python2-basic
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • fio
  • + +
  • nasm
  • + +
  • devpkg-libassuan
  • + +
  • rust-basic
  • + +
  • devpkg-openmpi
  • + +
  • nodejs-basic
  • + +
  • devpkg-curl
  • + +
  • flex
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • git
  • + +
  • devpkg-opus
  • + +
  • devpkg-popt
  • + +
  • devpkg-libogg
  • + +
  • yasm
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libnl
  • + +
  • unzip
  • + +
  • c-basic
  • + +
  • devpkg-lua
  • + +
  • python3-basic
  • + +
  • database-basic
  • + +
  • openblas
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • server version
  • + +
  • octave
  • + +
  • devpkg-attr
  • + +
  • bc
  • + +
  • php-basic
  • + +
  • openmpi
  • + +
  • devpkg-flac
  • + +
  • devpkg-fftw
  • + +
  • patch
  • + +
+

+ +
os-utils-guiProvides a graphical desktop environment.
+ +

Includes bundle(s): +

    + +
  • linux-firmware-extras
  • + +
  • wpa_supplicant
  • + +
  • lib-imageformat
  • + +
  • virt-viewer
  • + +
  • xemacs
  • + +
  • darktable
  • + +
  • firefox
  • + +
  • graphviz
  • + +
  • cryptography
  • + +
  • eog
  • + +
  • flatpak
  • + +
  • tigervnc
  • + +
  • perl-basic
  • + +
  • xfce4-desktop
  • + +
  • hexchat
  • + +
  • gvim
  • + +
  • thunderbird
  • + +
  • pulseaudio
  • + +
  • linux-firmware-wifi
  • + +
  • alsa-utils
  • + +
  • x11-server
  • + +
  • python3-basic
  • + +
  • fonts-basic
  • + +
  • geany
  • + +
  • x11vnc
  • + +
  • openssl
  • + +
+

+ +
os-utils-gui-devAll packages required to build the os-utils-gui bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-xkeyboard-config
  • + +
  • devpkg-libXfont2
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-pangomm
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • xz
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • devpkg-uhttpmock
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-v4l-utils
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • devpkg-libgdata
  • + +
  • devpkg-xkbcomp
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libxkbfile
  • + +
  • devpkg-libXfont
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-libpeas
  • + +
  • devpkg-gtkspell3
  • + +
  • tzdata
  • + +
  • devpkg-newt
  • + +
  • devpkg-flatpak
  • + +
  • devpkg-orc
  • + +
  • jq
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-compat-enchant-soname1
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-gsettings-desktop-schemas
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-libgsystem
  • + +
  • devpkg-cmrt
  • + +
  • perl-basic-dev
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-webkitgtk
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • devpkg-xorgproto
  • + +
  • xemacs
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-geocode-glib
  • + +
  • devpkg-gtkmm3
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-libgweather
  • + +
  • devpkg-glib
  • + +
  • devpkg-GConf
  • + +
  • devpkg-network-manager-applet
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libsass
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • lightdm
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-llvm
  • + +
  • devpkg-evolution-data-server
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-mpg123
  • + +
  • git
  • + +
  • procps-ng
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-mutter
  • + +
  • devpkg-libxkbcommon
  • + +
  • inkscape
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libsecret
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-exiv2
  • + +
  • devpkg-gnome-desktop
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-qtdeclarative
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-geoclue
  • + +
  • devpkg-gnome-online-accounts
  • + +
  • devpkg-libffi
  • + +
  • devpkg-usbredir
  • + +
  • devpkg-libwnck3
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-xdg-desktop-portal
  • + +
  • devpkg-libvirt
  • + +
  • devpkg-attr
  • + +
  • pygobject
  • + +
  • devpkg-gnome-settings-daemon
  • + +
  • devpkg-liboauth
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-brotli
  • + +
  • p11-kit
  • + +
  • devpkg-rest
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-libgphoto2
  • + +
  • devpkg-libndp
  • + +
  • devpkg-cairo
  • + +
  • devpkg-libxklavier
  • + +
  • devpkg-xorg-server
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-R
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-libexif
  • + +
  • scons
  • + +
  • devpkg-ostree
  • + +
  • devpkg-opencv
  • + +
  • devpkg-gjs
  • + +
  • devpkg-acl
  • + +
  • devpkg-libgusb
  • + +
  • parallel
  • + +
  • devpkg-parted
  • + +
  • devpkg-pygobject
  • + +
  • devpkg-glew
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-mozjs60
  • + +
  • devpkg-atkmm
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • flatpak
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-woff2
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-gnome-bluetooth
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-pipewire
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libcanberra
  • + +
  • devpkg-libgd
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libical
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • gjs
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • spice-gtk
  • + +
  • devpkg-gcab
  • + +
  • devpkg-appstream-glib
  • + +
  • devpkg-libnotify
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-cogl
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • devpkg-cairomm
  • + +
  • gzip
  • + +
  • os-utils-gui
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-gst-plugins-bad
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-gcr
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-NetworkManager
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • bc
  • + +
  • devpkg-glibmm
  • + +
  • devpkg-libwacom
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
p11-kitLoad and enumerate PKCS#11 modules.
+ +

Includes bundle(s): +

    + +
  • findutils
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
package-builderMinimal bundle for building packages via Clear Linux OS common tooling.
+ +

Includes bundle(s): +

    + +
  • plzip
  • + +
  • package-utils
  • + +
  • Sphinx
  • + +
  • curl
  • + +
  • binutils
  • + +
  • make
  • + +
  • zstd
  • + +
  • sudo
  • + +
  • git
  • + +
  • diffutils
  • + +
+

+ +
package-utilsUtilities for creating, building, and managing packages.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • perl-basic
  • + +
  • python2-basic
  • + +
  • dnf
  • + +
+

+ +
parallelShell tool for executing jobs in parallel using one or more computers.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
partedThe GNU disk partition manipulation program.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
passStore, retrieve, generate, and synchronize passwords securely.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
patchUpdates text files according to instructions contained in a separate file.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pdnsPowerDNS authoritative name server (DNSSEC enabled).
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • DNSSEC enabled
  • + +
  • lib-openssl
  • + +
+

+ +
pdns-recursorPowerDNS recursive caching name server.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
performance-toolsRun performance and power measurements.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ethtool
  • + +
  • iotop
  • + +
  • htop
  • + +
  • linux-tools
  • + +
  • bcc
  • + +
  • procps-ng
  • + +
  • powertop
  • + +
  • sysstat
  • + +
  • iproute2
  • + +
  • net-tools
  • + +
  • perl-basic
  • + +
  • strace
  • + +
+

+ +
perl-basicRun Perl language programs.
+ +

Includes bundle(s): +

    + +
  • lib-openssl
  • + +
+

+ +
perl-basic-devAll packages required to build the perl-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • perl-basic
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
perl-extrasImprove user experience with a common set of prebuilt Perl libraries.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
+

+ +
php-basicRun PHP language programs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-openssl
  • + +
+

+ +
php-basic-devAll packages required to build the php-basic bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-mariadb
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-libzip
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libxslt
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-enchant
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-libgd
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • php-basic
  • + +
  • diffutils
  • + +
+

+ +
php-extrasVarious nonstandard PHP extensions
+ +

Includes bundle(s): +

    + +
  • php-basic
  • + +
+

+ +
pidginMulti-protocol instant messagging (IM) client.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • Remmina
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • IM
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
plzipParallel losless data compressor based on the LZMA algorithm.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pmdkPersistent Memory Development Kit tools and libraries for working with non-volatile memory.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pnp-tools-basicRun performance and power measurements.
+ +
polkitApplication development toolkit for controlling system-wide privileges.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
popplerPDF rendering library based on xpdf-3.0 code base.
+ +
postgresqlObject-relational SQL database.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
powertopDiagnose issues with power consumption and power management.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
procps-ngLibrary to control and query process state
+ +
productivityA set of console utilities for task management and communication.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • irssi
  • + +
  • mail-utils
  • + +
  • weechat
  • + +
  • perl-basic
  • + +
+

+ +
pulseaudioPulseAudio Simplified Synchronous Client Interface.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-openssl
  • + +
+

+ +
pwgenPassword generator creating easily memorable passwords, while being as secure as possible.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
pxe-serverRun a PXE server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • iptables
  • + +
  • nginx
  • + +
+

+ +
pygobjectCommon development files in the pygobject ecosystem.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
python-basicRun Python language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • python3-basic
  • + +
  • python2-basic
  • + +
+

+ +
python-basic-devAll packages required to build the python-basic bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-glib
  • + +
  • devpkg-acl
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • libxslt
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-libcap
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • Sphinx
  • + +
  • devpkg-audit
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • python-basic
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • tzdata
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
python-data-scienceThe Python data-science stack; the best of http://pydata.org.
+ +

Includes bundle(s): +

    + +
  • cloud-api
  • + +
  • c-basic
  • + +
  • python-extras
  • + +
+

+ +
python-extrasImprove user experience with a common set of prebuilt Python libraries.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • graphviz
  • + +
  • cloud-api
  • + +
  • Sphinx
  • + +
  • python3-tcl
  • + +
  • openblas
  • + +
+

+ +
python-qtRun python programs that use the Qt runtime.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
+

+ +
python-testingImprove user experience with a common set of prebuilt Python libraries for testing.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cloud-api
  • + +
  • Sphinx
  • + +
+

+ +
python2-basicRun legacy Python 2 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • openblas
  • + +
+

+ +
python3-basicRun Python 3 language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
+

+ +
python3-tclPython 3 TCL/TK support.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • tcl-basic
  • + +
+

+ +
qemu-guest-additionsA lightweight multi-platform, multi-architecture disassembly framework.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
qt-basicRun programs that use the Qt runtime.
+ +

Includes bundle(s): +

    + +
  • qt-core
  • + +
  • fonts-basic
  • + +
  • libX11client
  • + +
+

+ +
qt-basic-devAll packages required to build the qt-basic bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • qt-basic
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libgpg-error
  • + +
  • xz
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-qt3d
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-qtlocation
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-qtwebchannel
  • + +
  • scons
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-qtsvg
  • + +
  • devpkg-libgudev
  • + +
  • diffutils
  • + +
+

+ +
qt-coreRun programs that use the core Qt runtime components only.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
quaggaBGP/OSPF/ISIS/RIP/RIPNG routing daemon suite.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
quasselNext-generation distributed IRC client.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
quasselcoreQuassel IRC server.
+ +

Includes bundle(s): +

    + +
  • qt-core
  • + +
  • libstdcpp
  • + +
+

+ +
R-basicRun R language programs for statistical computing and data analysis.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • less
  • + +
  • plotting, help navigation, etc
  • + +
  • devpkg-R
  • + +
+

+ +
R-datasetsLarge datasets for R programming.
+ +

Includes bundle(s): +

    + +
  • R-basic
  • + +
+

+ +
R-extrasImprove the user experience with a common set of prebuilt R libraries.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • R-stan
  • + +
  • R-datasets
  • + +
  • R-basic
  • + +
+

+ +
R-rstudioRStudio is an integrated development environment (IDE) for the R programming language
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • lib-qt5webengine
  • + +
  • IDE
  • + +
  • qt-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
R-stanImprove the user experience with a common set of prebuilt R libraries (stan components).
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • stan
  • + +
  • R-datasets
  • + +
  • stan components
  • + +
  • R-basic
  • + +
+

+ +
rcloneCommand-line program to synchronize files and directories to and from various network and cloud providers.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
rebootmgrPerforms scheduled or immediate system reboots after the kernel or critical OS components change.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
redis-nativeAdvanced key-value database.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
redshiftAdjust the color temperature of your monitor in the evenings to reduce eye strain
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
RemminaRemote desktop that supports VNC, NX, XDMCP, SPICE, and SSH protocols.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
resticBackup program that supports multiple cloud storage providers.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
rhythmboxMusic playback and management application.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
rrdtoolRound Robin Database and graphing tool for time-series data.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • findutils
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
rsyslogReliable system and kernel logging daemon.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
ruby-basicRun Ruby language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
  • libglib
  • + +
+

+ +
runtime-libs-boostBasic C++ / Boost runtime libraries.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
rust-basicBuild and run Rust language programs.
+ +

Includes bundle(s): +

    + +
  • p11-kit
  • + +
  • libstdcpp
  • + +
  • git
  • + +
  • binutils
  • + +
+

+ +
s3fs-fuseMount Amazon S3 buckets using FUSE.
+ +

Includes bundle(s): +

    + +
  • curl
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
sambaSMB Fileserver and Active Directory (AD) Domain server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • lib-samba
  • + +
  • openldap
  • + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
  • AD
  • + +
+

+ +
scm-serverRun a source code management server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • openssh-server
  • + +
  • nginx
  • + +
  • perl-basic
  • + +
  • git
  • + +
+

+ +
sconsPython build system and replacement for make.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
seahorseGraphical interface for managing and using encryption keys.
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
service-osProvides the needed software for Service OS.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • bootloader
  • + +
  • iasimage
  • + +
  • thermal_daemon
  • + +
  • linux-firmware
  • + +
+

+ +
service-os-devAll packages required to build the service-os bundle.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • devpkg-xz
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-systemd
  • + +
  • devpkg-kmod
  • + +
  • binutils
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-acl
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • graphviz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libidn
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libseccomp
  • + +
  • linux-iot-lts2018-dev
  • + +
  • service-os
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-openvswitch
  • + +
  • xz
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • devpkg-curl
  • + +
  • doxygen
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-expat
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-json-c
  • + +
  • git
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libcap
  • + +
  • procps-ng
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • Sphinx
  • + +
  • devpkg-audit
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-libxkbcommon
  • + +
  • libxslt
  • + +
  • devpkg-libX11
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-libxml2
  • + +
  • os-core-dev
  • + +
  • intltool
  • + +
  • devpkg-readline
  • + +
  • strace
  • + +
  • unzip
  • + +
  • devpkg-libffi
  • + +
  • devpkg-libusb
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-libpciaccess
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • tzdata
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-zlib
  • + +
  • devpkg-telemetrics-client
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-libmicrohttpd
  • + +
  • devpkg-libunwind
  • + +
  • flex
  • + +
  • openssl
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
shellsRun various shells.
+ +

Includes bundle(s): +

    + +
  • zsh
  • + +
  • libstdcpp
  • + +
+

+ +
smartmontoolsHard disk diagnostic utilities, containing smarctl and smartd, for monitoring storage.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
software-defined-cockpitRun the automotive software defined cockpit which has graphic, media, sound and connectivity.
+ +

Includes bundle(s): +

    + +
  • wpa_supplicant
  • + +
  • pulseaudio
  • + +
  • libX11client
  • + +
  • v4l-utils
  • + +
  • gstreamer
  • + +
  • alsa-utils
  • + +
+

+ +
software-defined-cockpit-devAll packages required to build the software-defined-cockpit bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-SDL2_image
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • devpkg-libfontenc
  • + +
  • devpkg-mariadb
  • + +
  • devpkg-libXmu
  • + +
  • software-defined-cockpit
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-pulseaudio
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-mediasdk
  • + +
  • devpkg-SDL2
  • + +
  • fontforge
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • devpkg-libva
  • + +
  • devpkg-v4l-utils
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-font-util
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libusb
  • + +
  • devpkg-clutter
  • + +
  • devpkg-bluez
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-tbb
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-xcb-util-cursor
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-freeglut
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-dbus-glib
  • + +
  • devpkg-libsrtp
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-mpg123
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-qtdeclarative
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-gst-plugins-base
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • devpkg-gstreamer
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • devpkg-libexif
  • + +
  • scons
  • + +
  • devpkg-opencv
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • nasm
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-opus
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • fonttools
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • devpkg-libwebp
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-flac
  • + +
  • devpkg-elfutils
  • + +
  • devpkg-fftw
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-freetype
  • + +
  • devpkg-util-macros
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • devpkg-libsamplerate
  • + +
  • gzip
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-gst-plugins-bad
  • + +
  • devpkg-expat
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libogg
  • + +
  • devpkg-libXxf86misc
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-qtsvg
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
software-testingSoftware to run or create test suites.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • python-testing
  • + +
  • perl-basic
  • + +
  • Sphinx
  • + +
+

+ +
spectacleKDE screenshot capture utility.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
SphinxPython-based documentation tool supporting multiple outputs and programming languages.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • Babel
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
spice-gtkSPICE Client GLib 2.0 library.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • lib-openssl
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sqliteSQL database engine with file format that is stable, cross-platform, and backwards compatible.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
+

+ +
squidFull-featured Web proxy cache server.
+ +

Includes bundle(s): +

    + +
  • openldap
  • + +
  • perl-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ssocrOptical character recognition (OCR) for 7-segment displays.
+ +

Includes bundle(s): +

    + +
  • OCR
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
stellariumReal-time photo-realistic sky generator.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
storage-clusterRun a storage server.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • ceph
  • + +
  • parted
  • + +
  • xfsprogs
  • + +
+

+ +
storage-utilsRun disk and filesystem management functions.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • dosfstools
  • + +
  • smartmontools
  • + +
  • nfs-utils
  • + +
  • pmdk
  • + +
  • parted
  • + +
  • xfsprogs
  • + +
  • samba
  • + +
+

+ +
storage-utils-devAll packages required to build the storage-utils bundle.
+ +

Includes bundle(s): +

    + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • xz
  • + +
  • devpkg-open-iscsi
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-krb5
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libuser
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-ipmctl
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-ntfs-3g
  • + +
  • devpkg-nettle
  • + +
  • Sphinx
  • + +
  • devpkg-libnl
  • + +
  • llvm
  • + +
  • devpkg-readline
  • + +
  • devpkg-multipath-tools
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-userspace-rcu
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • storage-utils
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-ndctl
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
straceSystem call diagnostic, instructional, and debugging tool.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
stream-serverRun an audio or visual streaming server.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libstdcpp
  • + +
+

+ +
subversionVersion Control System.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sudoProvide limited super user privileges to specific users.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
supertuxkartKart racing game featuring Tux and his friends.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
suricataNetwork threat detection engine.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • Sphinx
  • + +
+

+ +
syndicationRSS/Atom parser library.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
synergyKeyboard and mouse sharing across networks.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • postgresql
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-openssl
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sysadmin-basicRun common utilities, useful for managing a system.
+ +

Includes bundle(s): +

    + +
  • file
  • + +
  • parallel
  • + +
  • acpica-unix2
  • + +
  • kernel-install
  • + +
  • libglib
  • + +
  • xz
  • + +
  • iperf
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • glibc-locale
  • + +
  • less
  • + +
  • sudo
  • + +
  • iproute2
  • + +
  • perl-basic
  • + +
  • procps-ng
  • + +
  • tmux
  • + +
  • man-pages
  • + +
  • zstd
  • + +
  • strace
  • + +
  • unzip
  • + +
  • tzdata
  • + +
  • findutils
  • + +
  • htop
  • + +
  • p11-kit
  • + +
  • minicom
  • + +
  • powertop
  • + +
  • which
  • + +
  • diffutils
  • + +
  • patch
  • + +
+

+ +
sysadmin-basic-devAll packages required to build the sysadmin-basic bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-kmod
  • + +
  • devpkg-openssl
  • + +
  • make
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • xz
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • devpkg-popt
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-libusb
  • + +
  • tzdata
  • + +
  • devpkg-libtasn1
  • + +
  • openssl
  • + +
  • perl-basic-dev
  • + +
  • devpkg-systemd
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • glibc-locale
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-libmnl
  • + +
  • intltool
  • + +
  • devpkg-libffi
  • + +
  • gdb
  • + +
  • devpkg-zlib
  • + +
  • devpkg-attr
  • + +
  • p11-kit
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • dev-utils
  • + +
  • binutils
  • + +
  • devpkg-apr
  • + +
  • devpkg-acl
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • devpkg-xz
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-nettle
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-libnl
  • + +
  • devpkg-readline
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-libmicrohttpd
  • + +
  • flex
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • patch
  • + +
  • devpkg-pciutils
  • + +
  • sysadmin-basic
  • + +
  • devpkg-libpng
  • + +
  • gzip
  • + +
  • kbd
  • + +
  • devpkg-expat
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-libidn2
  • + +
  • devpkg-libpcap
  • + +
  • diffutils
  • + +
+

+ +
sysadmin-hostmgmtUtilities and Services for managing large-scale clusters of networked hosts.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • pxe-server
  • + +
  • ansible
  • + +
  • git
  • + +
  • ipmitool
  • + +
+

+ +
sysadmin-remoteEnable the host to be managed remotely by configuration management tools.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • cockpit
  • + +
  • openssh-server
  • + +
  • sudo
  • + +
+

+ +
syslinuxKernel loader which uses a FAT, ext2/3 or iso9660 filesystem or a PXE network
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
sysstatUtilities for monitoring system performance and usage activity.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
systemd-cryptsetupDummy bundle to avoid rolling back systemd, will be removed at next format bump.
+ +
systemd-networkd-autostartEnables systemd-networkd as the default network manager
+ +
tcl-basicRun Tk/Tcl language programs.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
+

+ +
telemetricsclient and server solution used to collect data from running Clear Linux OS systems.
+ +

Includes bundle(s): +

    + +
  • findutils
  • + +
  • lib-openssl
  • + +
+

+ +
texinfoUnix-style documentation system for on-line information and printed output.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
texliveMajor TeX-related typesetting programs, macro packages, and fonts.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
texmakerCross-platfrom LaTeX editor.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
thermal_daemonThermal management.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
thunderbirdEmail and news client with RSS, chat, and integrated SPM filter support.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
tigervncA TigerVNC remote display system.
+ +

Includes bundle(s): +

    + +
  • perl-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
time-server-basicRun an network time protocol (NTP) server.
+ +

Includes bundle(s): +

    + +
  • NTP
  • + +
+

+ +
tmuxTerminal multiplexer (similar to screen).
+ +

Includes bundle(s): +

    + +
  • similar to screen
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
totemMovie player for the GNOME desktop based on GStreamer.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • libX11client
  • + +
  • gnome-base-libs
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
tzdataTimezone database.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
ugetGTK+ download manager featuring download classification and HTML import.
+ +

Includes bundle(s): +

    + +
  • libglib
  • + +
  • curl
  • + +
  • libX11client
  • + +
  • lib-openssl
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
unbundleRecursively resolves a package list from a bundle definition.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
unisonBi-directional file synchronization tool.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
unzipList, test, or extract files from a ZIP archive.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
user-basicMeta bundle capturing most console user work flows.
+ +

Includes bundle(s): +

    + +
  • dev-utils
  • + +
  • storage-utils
  • + +
  • openssh-server
  • + +
  • sysadmin-basic
  • + +
  • mail-utils
  • + +
  • shells
  • + +
  • os-core-update
  • + +
  • editors
  • + +
  • network-basic
  • + +
  • kvm-host
  • + +
+

+ +
user-basic-devAll packages required to build the user-basic bundle.
+ +

Includes bundle(s): +

    + +
  • devpkg-libpipeline
  • + +
  • valgrind
  • + +
  • devpkg-pcre
  • + +
  • devpkg-tiff
  • + +
  • devpkg-atk
  • + +
  • devpkg-gdk-pixbuf
  • + +
  • devpkg-kmod
  • + +
  • devpkg-libnetfilter_queue
  • + +
  • make
  • + +
  • devpkg-openssl
  • + +
  • devpkg-mesa
  • + +
  • devpkg-gnutls
  • + +
  • devpkg-libtirpc
  • + +
  • devpkg-ncurses
  • + +
  • devpkg-rdma-core
  • + +
  • devpkg-libnetfilter_cthelper
  • + +
  • devpkg-pango
  • + +
  • graphviz
  • + +
  • devpkg-boost
  • + +
  • devpkg-libevent
  • + +
  • devpkg-libgpg-error
  • + +
  • devpkg-iptables
  • + +
  • devpkg-gtk-doc
  • + +
  • devpkg-libassuan
  • + +
  • devpkg-libXScrnSaver
  • + +
  • devpkg-libevdev
  • + +
  • xz
  • + +
  • devpkg-libXmu
  • + +
  • devpkg-openmpi
  • + +
  • devpkg-libgudev
  • + +
  • devpkg-libdrm
  • + +
  • doxygen
  • + +
  • devpkg-libcgroup
  • + +
  • kvm-host-dev
  • + +
  • devpkg-krb5
  • + +
  • devpkg-dbus
  • + +
  • devpkg-e2fsprogs
  • + +
  • devpkg-audit
  • + +
  • devpkg-colord
  • + +
  • network-basic-dev
  • + +
  • devpkg-libva
  • + +
  • devpkg-oath-toolkit
  • + +
  • devpkg-popt
  • + +
  • yasm
  • + +
  • devpkg-LVM2
  • + +
  • devpkg-libxml2
  • + +
  • devpkg-p11-kit
  • + +
  • os-core-dev
  • + +
  • unzip
  • + +
  • devpkg-guile
  • + +
  • devpkg-libcroco
  • + +
  • devpkg-libuser
  • + +
  • devpkg-libusb
  • + +
  • user-basic
  • + +
  • devpkg-libpciaccess
  • + +
  • tzdata
  • + +
  • devpkg-orc
  • + +
  • devpkg-at-spi2-atk
  • + +
  • devpkg-libXt
  • + +
  • devpkg-libtasn1
  • + +
  • devpkg-talloc
  • + +
  • openssl
  • + +
  • devpkg-libXv
  • + +
  • devpkg-systemd
  • + +
  • devpkg-gtk3
  • + +
  • devpkg-qttools
  • + +
  • devpkg-xorgproto
  • + +
  • devpkg-libXpm
  • + +
  • devpkg-gmime
  • + +
  • devpkg-xtrans
  • + +
  • devpkg-libXft
  • + +
  • devpkg-glib
  • + +
  • texinfo
  • + +
  • joe
  • + +
  • devpkg-libidn
  • + +
  • devpkg-libseccomp
  • + +
  • devpkg-librsvg
  • + +
  • devpkg-cyrus-sasl
  • + +
  • devpkg-libxslt
  • + +
  • devpkg-SDL
  • + +
  • glibc-locale
  • + +
  • devpkg-mozjs52
  • + +
  • devpkg-llvm
  • + +
  • devpkg-libnfnetlink
  • + +
  • procps-ng
  • + +
  • git
  • + +
  • devpkg-qtbase
  • + +
  • devpkg-libXres
  • + +
  • devpkg-pkcs11-helper
  • + +
  • devpkg-libxkbcommon
  • + +
  • devpkg-libinput
  • + +
  • devpkg-vala
  • + +
  • devpkg-libX11
  • + +
  • devpkg-libgcrypt
  • + +
  • devpkg-nss
  • + +
  • devpkg-libmnl
  • + +
  • devpkg-json-glib
  • + +
  • intltool
  • + +
  • devpkg-libdatrie
  • + +
  • devpkg-libffi
  • + +
  • openblas
  • + +
  • devpkg-usbredir
  • + +
  • gdb
  • + +
  • devpkg-sqlite-autoconf
  • + +
  • devpkg-zlib
  • + +
  • devpkg-nspr
  • + +
  • devpkg-lcms2
  • + +
  • devpkg-fontconfig
  • + +
  • devpkg-attr
  • + +
  • devpkg-rest
  • + +
  • p11-kit
  • + +
  • devpkg-harfbuzz
  • + +
  • devpkg-libunwind
  • + +
  • strace
  • + +
  • devpkg-libnetfilter_cttimeout
  • + +
  • dev-utils
  • + +
  • devpkg-alsa-lib
  • + +
  • devpkg-cairo
  • + +
  • dosfstools
  • + +
  • binutils
  • + +
  • devpkg-at-spi2-core
  • + +
  • devpkg-fribidi
  • + +
  • scons
  • + +
  • devpkg-apr
  • + +
  • devpkg-libgusb
  • + +
  • devpkg-acl
  • + +
  • acpica-unix2
  • + +
  • devpkg-parted
  • + +
  • devpkg-xkeyboard-config
  • + +
  • docbook-utils
  • + +
  • bison
  • + +
  • iptables
  • + +
  • devpkg-libcap-ng
  • + +
  • devpkg-xz
  • + +
  • nasm
  • + +
  • libxml2
  • + +
  • devpkg-libnetfilter_conntrack
  • + +
  • devpkg-lz4
  • + +
  • less
  • + +
  • devpkg-curl
  • + +
  • libxslt
  • + +
  • devpkg-startup-notification
  • + +
  • net-tools
  • + +
  • devpkg-json-c
  • + +
  • devpkg-libcap
  • + +
  • devpkg-libpthread-stubs
  • + +
  • devpkg-nettle
  • + +
  • devpkg-pacrunner
  • + +
  • devpkg-libXvMC
  • + +
  • Sphinx
  • + +
  • devpkg-graphite
  • + +
  • devpkg-libssh2
  • + +
  • devpkg-glu
  • + +
  • devpkg-libthai
  • + +
  • devpkg-libXtst
  • + +
  • devpkg-libnl
  • + +
  • devpkg-xcb-proto
  • + +
  • devpkg-libXcursor
  • + +
  • devpkg-googletest
  • + +
  • llvm
  • + +
  • devpkg-pcre2
  • + +
  • devpkg-readline
  • + +
  • editors-dev
  • + +
  • devpkg-cryptsetup
  • + +
  • devpkg-libnftnl
  • + +
  • subversion
  • + +
  • devpkg-util-linux
  • + +
  • devpkg-userspace-rcu
  • + +
  • devpkg-wayland
  • + +
  • devpkg-libarchive
  • + +
  • devpkg-fuse
  • + +
  • devpkg-libmicrohttpd
  • + +
  • dev-utils-dev
  • + +
  • flex
  • + +
  • wget
  • + +
  • devpkg-elfutils
  • + +
  • which
  • + +
  • devpkg-xmlsec1
  • + +
  • devpkg-zstd
  • + +
  • patch
  • + +
  • devpkg-shared-mime-info
  • + +
  • devpkg-pciutils
  • + +
  • devpkg-postgresql
  • + +
  • devpkg-hwloc
  • + +
  • devpkg-freetype
  • + +
  • devpkg-gflags
  • + +
  • devpkg-util-macros
  • + +
  • storage-utils-dev
  • + +
  • devpkg-libpng
  • + +
  • devpkg-pixman
  • + +
  • gzip
  • + +
  • os-core-update-dev
  • + +
  • nfs-utils
  • + +
  • devpkg-nghttp2
  • + +
  • devpkg-gsl
  • + +
  • kbd
  • + +
  • mail-utils-dev
  • + +
  • devpkg-libsoup
  • + +
  • devpkg-subunit
  • + +
  • devpkg-xapian-core
  • + +
  • devpkg-expat
  • + +
  • iproute2
  • + +
  • devpkg-libjpeg-turbo
  • + +
  • devpkg-icu4c
  • + +
  • devpkg-iso-codes
  • + +
  • gpgme
  • + +
  • devpkg-compat-fuse-soname2
  • + +
  • devpkg-wayland-protocols
  • + +
  • devpkg-libidn2
  • + +
  • cpio
  • + +
  • devpkg-libXxf86misc
  • + +
  • sysadmin-basic-dev
  • + +
  • devpkg-libepoxy
  • + +
  • devpkg-gperftools
  • + +
  • texlive
  • + +
  • devpkg-ndctl
  • + +
  • devpkg-gobject-introspection
  • + +
  • devpkg-lua
  • + +
  • devpkg-libpcap
  • + +
  • bc
  • + +
  • docutils
  • + +
  • diffutils
  • + +
+

+ +
v4l-utilsUserspace tools and conversion library for Video 4 Linux.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-imageformat
  • + +
+

+ +
valgrindSuite of tools for debugging and finding memory-management problems in programs.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
vimVi Improved, a configurable, improved version of the vi text editor.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • perl-basic
  • + +
+

+ +
vinagreA VNC client for GNOME desktop.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
virt-managerVirtualization Management tool.
+ +

Includes bundle(s): +

    + +
  • python3-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • desktop-gnomelibs
  • + +
+

+ +
virt-manager-guiEnable controlling virt-manager through a GUI.
+ +

Includes bundle(s): +

    + +
  • spice-gtk
  • + +
  • libX11client
  • + +
  • gtk-vnc
  • + +
  • virt-manager
  • + +
  • virt-viewer
  • + +
+

+ +
virt-viewerVirtual Machine Viewer.
+ +

Includes bundle(s): +

    + +
  • gstreamer
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
+

+ +
vlcMultimedia player and streamer.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • lib-samba
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
vnc-serverEnable the host to be a VNC desktop server.
+ +

Includes bundle(s): +

    + +
  • tigervnc
  • + +
  • openssh-server
  • + +
  • desktop
  • + +
+

+ +
web-server-basicRun a HTTP web server.
+ +

Includes bundle(s): +

    + +
  • nginx
  • + +
  • httpd
  • + +
+

+ +
webkitgtkLegacy Web content engine for GTK+ 3.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • libX11client
  • + +
  • lib-imageformat
  • + +
  • gstreamer
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
weechatInternet Relay Chat (IRC) client, extensible with plugins and scripts.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libglib
  • + +
  • curl
  • + +
  • lib-openssl
  • + +
  • IRC
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
weston-extrasHeader files for Weston plugin development.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
wgetNetwork utility to retrieve content from web servers.
+ +

Includes bundle(s): +

    + +
  • openssl
  • + +
  • findutils
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
whichUtility to show full path of commands and locate executables.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
wineRun PE32 executables with Linux.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
wiresharkNetwork packet capture and traffic analysis tool.
+ +

Includes bundle(s): +

    + +
  • qt-basic
  • + +
  • postgresql
  • + +
+

+ +
wpa_supplicantUtility providing key negotiation for WPA wireless networks.
+ +

Includes bundle(s): +

    + +
  • linux-firmware-wifi
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
x11-serverProvide a functional X11 Server (Xorg or wayland-based).
+ +

Includes bundle(s): +

    + +
  • Xorg or wayland-based
  • + +
  • libX11client
  • + +
+

+ +
x11-toolsTools useful when running under X11.
+ +

Includes bundle(s): +

    + +
  • xterm
  • + +
  • perl-basic
  • + +
  • libX11client
  • + +
  • x11vnc
  • + +
+

+ +
x11vncA virtual network computing (VNC) server for real X displays.
+ +

Includes bundle(s): +

    + +
  • VNC
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
xemacsHighly customizable text editor, gui build.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
  • libglib
  • + +
  • lib-imageformat
  • + +
+

+ +
xfce4-desktopRun the Xfce GUI desktop environment.
+ +

Includes bundle(s): +

    + +
  • fonts-basic
  • + +
  • libX11client
  • + +
  • which
  • + +
+

+ +
xfsprogsUtilities to manage the XFS filesystem.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
xtermThe basic X.Org terminal program desktop launcher.
+ +

Includes bundle(s): +

    + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
xzCommand-line tools for XZ and LZMA compressed files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
yakuakeQuake-style terminal emulator based on KDE Konsole technology.
+ +

Includes bundle(s): +

    + +
  • kde-frameworks5
  • + +
  • libstdcpp
  • + +
  • qt-basic
  • + +
  • libX11client
  • + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
yarnFast, reliable, and secure dependency management.
+ +

Includes bundle(s): +

    + +
  • nodejs-basic
  • + +
+

+ +
yasmModular assembler with multiple syntaxes support.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
zipCompressor/archiver for .zip files.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
zncAdvanced, modular IRC network bouncer.
+ +

Includes bundle(s): +

    + +
  • libstdcpp
  • + +
  • edits outside this area will be removed automatically
  • + +
  • lib-openssl
  • + +
+

+ +
zshZ Shell, an interactive shell and powerful shell script command processor.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
zstdRealtime losless data compression/decompression tool.
+ +

Includes bundle(s): +

    + +
  • edits outside this area will be removed automatically
  • + +
+

+ +
+ + +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/bundles/openssh-server.html b/zh_CN/reference/bundles/openssh-server.html new file mode 100644 index 00000000..ff185426 --- /dev/null +++ b/zh_CN/reference/bundles/openssh-server.html @@ -0,0 +1,1138 @@ + + + + + + + + + + + openssh-server — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

openssh-server

+

The openssh-server bundle provides the OpenSSH* package needed to enable +an SSH service in Clear Linux* OS. Remote users require an SSH service to be able +to use an encrypted login shell.

+

Clear Linux OS enables the sshd.socket unit, which will listen on port 22 by default +and start the OpenSSH service as required. The first time OpenSSH starts, it +generates the server SSH keys needed for the service.

+
+

Prerequisites

+

Assure the bundle openssh-server is installed.

+

To check it it’s on your host, enter:

+
sudo swupd bundle-list
+
+
+

To add it, enter:

+
sudo swupd bundle-add openssh-server
+
+
+
+
+

Change default port

+

Perform the following steps to change the default listening port for the +OpenSSH service:

+
    +
  1. Open the sshd.socket file:

    +
    sudo systemctl edit sshd.socket
    +
    +
    +
  2. +
  3. Add the [Socket] section and ListenStream option to the sshd.socket +file as shown below. The first ListenStream entry removes the Clear Linux OS +default listen port value. The second ListenStream entry sets the new +default listen port value. In this example, we set the new default port +to 4200:

    +
    [Socket]
    +ListenStream=
    +ListenStream=4200
    +
    +
    +

    Make sure to include a new line after the last line of text in the sshd.socket file.

    +
  4. +
  5. Verify your changes:

    +
    cat /etc/systemd/system/sshd.socket.d/override.conf
    +
    +
    +

    You should see the following output:

    +
    [Socket]
    +ListenStream=
    +ListenStream=4200
    +
    +
    +
  6. +
  7. Reload the systemd daemon configurations:

    +
    sudo systemctl daemon-reload
    +
    +
    +
  8. +
  9. Restart the sshd.socket unit:

    +
    sudo systemctl restart sshd.socket
    +
    +
    +
  10. +
  11. Confirm the the sshd.socket unit is listening on your new port:

    +
    sudo systemctl status sshd.socket
    +
    +
    +
    +

    注解

    +

    Output should show Active: as active(listening).

    +
    +
  12. +
+
+
+

Enable SFTP

+

Clear Linux OS disables the SFTP subsystem by +default due to security considerations. To enable the SFTP subsystem, perform +the following configuration of the SSHD service file:

+
    +
  1. Create a systemd drop-in directory for the SSHD service:

    +
    sudo mkdir -p /etc/systemd/system/sshd@.service.d
    +
    +
    +
  2. +
  3. Create the following file: +/etc/systemd/system/sshd@.service.d/sftp.conf

    +
  4. +
  5. Add the OPTIONS environment variable to the sftp.conf file.

    +
    [Service]
    +Environment="OPTIONS=-o Subsystem=\"sftp /usr/libexec/sftp-server\""
    +
    +
    +
  6. +
  7. Reload systemd configuration:

    +
    sudo systemctl daemon-reload
    +
    +
    +
  8. +
+

Congratulations! The SFTP subsystem is enabled.

+
+
+

Enable root login

+

To enable root login via SSH, perform the following steps:

+
    +
  1. Create a ssh directory in /etc, if it does not already exist.

    +
    mkdir /etc/ssh
    +
    +
    +
  2. +
  3. Create the following file, if it does not already exist: +/etc/ssh/sshd_config

    +
  4. +
  5. Set the configuration variable in /etc/ssh/sshd_config

    +
    PermitRootLogin yes
    +
    +
    +
  6. +
+
+
+

Enable X11-forwarding

+

X11 forwarding allows you to securely run graphical applications +(i.e., X clients) over the ssh conection. This will alow for remote gui apps +without the need for full VNC/remotedesktop. To enable X11-forwarding via +SSH, perform the following steps:

+
    +
  1. Create a ssh directory in /etc, if it does not already exist.

    +
    mkdir /etc/ssh
    +
    +
    +
  2. +
  3. Create the following file, if it does not already exist: +/etc/ssh/sshd_config

    +
  4. +
  5. Set the configuration variables.

    +
    AllowTcpForwarding yes
    +X11UseLocalhost yes
    +X11DisplayOffset 10
    +X11Forwarding yes
    +
    +
    +
  6. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/collaboration/collaboration.html b/zh_CN/reference/collaboration/collaboration.html new file mode 100644 index 00000000..f4dbefa2 --- /dev/null +++ b/zh_CN/reference/collaboration/collaboration.html @@ -0,0 +1,1053 @@ + + + + + + + + + + + Documentation guidelines — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Documentation guidelines

+

See a missing topic in the documentation? Find an existing document that could +be improved? Help us out by contributing! If you haven’t contributed before, +take a moment to review our Contribution guidelines.

+

Do you have questions about the documentation that were not answered by these +guidelines? Send your question to the mailing list.

+
+

Contribution guidelines

+

The Clear Linux OS documentation is hosted in GitHub and is written using +reStructuredText. Use our guidelines and best practices to write consistent, +readable documentation.

+ +
+
+

How to contribute

+

There are multiple ways to contribute and help improve our documentation:

+
    +
  • Make a suggestion: Have a documentation suggestion but no time to write it +yourself? Send your suggestion to the mailing list.
  • +
  • Log an issue: If you find a problem in our documentation (such as typos or +out-of-date information), log an issue in the documentation repository.
  • +
  • Contribute directly via GitHub: Whether you’ve found a typo, have better +instructions or examples, or have a new page to add, submit your improvement +or addition as a pull request on the documentation repository.
  • +
  • Test documentation: Step through our instructional guides and tutorials to +verify the instructions. Log or correct any out-of-date information.
  • +
+

All contributions must follow our code of conduct.

+
+
+

Contribute via GitHub

+

Our documentation is hosted in GitHub and we follow the standard GitHub flow:

+
    +
  1. Clone the documentation repository.
  2. +
  3. Create your own fork of the repository.
  4. +
  5. Create a branch for your contribution.
  6. +
  7. Add your commits.
  8. +
  9. Open a pull request.
  10. +
  11. Discuss, review, and update your contributions.
  12. +
  13. Once the maintainer approves, your contribution is merged and published as +part of the documentation.
  14. +
+
+
+

References

+

We use the following references to guide the grammar, style, and formatting of +our documentation:

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/collaboration/structure-formatting.html b/zh_CN/reference/collaboration/structure-formatting.html new file mode 100644 index 00000000..a05aebe2 --- /dev/null +++ b/zh_CN/reference/collaboration/structure-formatting.html @@ -0,0 +1,1481 @@ + + + + + + + + + + + Structure and formatting — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Structure and formatting

+

Content should be organized to support scanning. Consistent organization, +formatting, and writing style helps readers quickly find what they need and to +understand the content more effectively. This document describes our +organization and formatting guidelines.

+

Refer to Writing guide to learn how we keep our documents clear and +concise.

+ +
+

Markup

+

Our documentation is written in the reStructuredText markup language, using +Sphinx roles and directives. We use Sphinx to generate the final documentation. +You can read more about reStructuredText and Sphinx on their respective +websites:

+ +

You can view the content directly in the .rst markup files, or generate the HTML +content by installing and building the documentation locally. To run the +documentation locally, follow the instructions found in the +documentation repository README.

+
+

New pages

+

There are a few additional steps to consider when adding a new page to the +documentation. First, identify where your new page should be located within the +existing Documentation organization. Second, make sure the new page is picked +up in the Sphinx build and easily linkable from other content.

+

Each page must be included in a Sphinx toctree in order to be included in the +documentation content tree. Typically, pages are added to the section landing +page toctree.

+

For example, the Documentation guidelines page toctree looks like:

+
.. toctree::
+   :maxdepth: 1
+
+   writing-guide
+   structure-formatting
+
+
+

Additionally, each page must include a uniquely named reST label directly before +the page title, to enable the Sphinx ref role for linking to a page.

+

For example, this page “Structure and formating” has the label +.. _structure-formatting:

+
.. _structure-formatting:
+
+Structure and formatting
+########################
+
+
+

This page can then be referenced from other pages in the documentation using the +:ref: role:

+
:ref:`structure-formatting`
+
+
+
+
+
+

Documentation organization

+

The documentation is organized into five general sections:

+
    +
  1. Concepts: Introduction and overview of Clear Linux OS specific concepts or +features.
  2. +
  3. Get started: Information about getting started with Clear Linux OS.
  4. +
  5. Guides: Detailed information and instruction on using Clear Linux OS features.
  6. +
  7. Tutorials: Step-by-step instruction for using Clear Linux OS in specific use cases.
  8. +
  9. Reference: Supplementary and reference information for Clear Linux OS.
  10. +
+
+

Page structure

+

Each page in the documentation should follow the basic format of:

+
    +
  • Overview: 1-2 sentences describing what this page shows and why it matters
  • +
  • Prerequisites: Describe any pre-work necessary to the content (if appropriate)
  • +
  • Content
  • +
  • Next steps: List links to next steps (if appropriate)
  • +
  • Related topics: List links to related content (if appropriate)
  • +
+
+
+

Headings

+

Use headings to section and organize your content for better readability and +clarity.

+
    +
  • All files must have a top level heading, which is the title for the page.
  • +
  • Up to three additional levels of headings are allowed under the title heading.
  • +
  • Each heading should be followed by at least one paragraph of content. Avoid +two or more consecutive headings.
  • +
+

Refer to the Writing guide for tips on using headings to create +scannable content.

+

To mark up headings in the .rst file:

+
    +
  • Use hash-tags to underline the file’s main title:

    +
    Main title
    +##########
    +
    +
    +
  • +
  • Use asterisks to underline the file’s first level headings:

    +
    First level heading
    +*******************
    +
    +
    +
  • +
  • Use equal signs to underline the file’s second level of headings:

    +
    Second level heading
    +====================
    +
    +
    +
  • +
  • Use dashes to underline the file’s third level of headings:

    +
    Third level heading
    +-------------------
    +
    +
    +
  • +
+
+
+

In-page navigation

+

If a page has three or more sections, provide quick links to each section. Place +the quick links after the overview section.

+

Use the standard reST contents directive with depth: 1 for quick links.

+
+
+
+

Inline text formatting

+

We use the Microsoft Writing Style Guide as our starting point for text +formatting. We apply the formatting using reST and Sphinx markup.

+

Use our quick reference for the most commonly used inline text elements:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ElementConventionreST/Sphinx
AcronymsDefine acronym when first used. After +first use and definition, use the +acronym only.

Use the :abbr: role, in +the following format:

+

:abbr:`Acronym (Def)`

+
Bundle namesBoldUse the :command: role.
Callouts Use .. note::
Code/command examplesMonospace, visually distinct +from rest of text. Use an +indented call-out box.Use .. code-block:: +with the correct language +setting.
CommandsBoldUse the :command: role.
Command flagsBoldUse the :command: role.
Console outputMonospace, visual distinction +from rest of text. Use an +indented call-out box.Use .. code-block:: +with console as the +language setting.
EmphasisItalic*strong*
Environment variablesUse the case format of the +environment variable.Use :envvar:
Example commands with +optional or replaceable +parts

Use angle brackets for swapping +in the specific name, +e.g. <package-name>.

+

Use square brackets for optional +parts, +e.g. [–build].

+
 
Example URLs (not linked)Plain text 
File extensionsLowercase 
File names, directories, pathsTitle style capitalizationUse the :file: role.
GUI labels Use :guilabel:
Inline comments Use ..
Keystrokes Use :kbd:
Local navigation .. contents:: :local: +with a depth of 1
Menu selection Use :menuselection:
New terms

Italic for first use, normal for all +subsequent uses.

+

If it is used outside of the source +of definition, link the term.

+
*term*
Product nameFollow correct trademark and +attribution guidelines. 
Tool names

Correctly capitalized, no quotes, +bold, or italics as the basic rule.

+

If the tool name is the command, like +most Linux tools, treat it like a +command.

+

If the tool name is lowercase and +used at the start of a sentence, use +bold.

+
 
+
+

White space and line length

+

Limit line length to 78 characters. The GitHub web interface forces this +limitation for readability.

+

Remove trailing whitespace from your documents.

+
+
+
+

Code blocks and examples

+

When providing example code or commands use the Sphinx code-block directive. +Select the appropriate syntax highlighting for the example command or code.

+

For example, if showing console output, use console highlighting:

+
.. code-block:: console
+
+
+

Sphinx provides other ways of marking up example code if needed.

+
+
+

Lists and instructions

+

Use a numbered list when the order or priority of the items is important, such +as step-by-step instructions.

+

Use a bulleted list when the order of the items is not important.

+

For both list types, keep all items in the list parallel. See +Parallelism.

+

Use standard reST list markup.

+
+

Numbered lists

+

Numbered lists are most frequently used for procedures. Use numbered lists to +show sequence for the items. Follow our guidelines for numbered lists:

+
    +
  • Make sure the list is sequential and not just a collection of items.
  • +
  • Introduce a numbered list with a sentence. End the setup text with a +colon. Example: “To configure the unit, perform the following steps:”
  • +
  • Each item in the list should be parallel.
  • +
  • Treat numbered list items as full sentences with correct ending +punctuation.
  • +
  • You may interrupt numbered lists with other content, if relevant, +e.g. explanatory text, commands, or code.
  • +
  • Second-level steps are acceptable; avoid third-level steps.
  • +
  • Avoid single-step procedures; the minimum number of steps in a procedure +is two.
  • +
  • Do not create numbered lists that emulate flowcharts. The reader should be +able to execute the list of steps from first to last without branching or +looping.
  • +
  • Avoid over-using numbered lists, except in procedural documents such as +tutorials and step-by-step guides.
  • +
+
+
+

Bulleted lists

+

Use bulleted lists to reduce wordiness and paragraph density, especially when +a sequence is not required. Here are some guidelines for bulleted lists:

+
    +
  • Introduce a bulleted list with a sentence. End the setup text with a +colon. Example: “To repair the unit, you will need the following items:”
  • +
  • Each item in the list should be parallel.
  • +
  • Avoid interrupting bulleted lists with other paragraph styles.
  • +
  • Second-level bullets are acceptable; avoid third-level bullets.
  • +
+

Use the correct ending punctuation for sentence style bullet lists. For example:

+

Use this:

+
When setting the user code, remember:
+
+* Use a number that has a meaning for you.
+* Change the code once a month.
+* Do not disclose the user code to anyone, including the security company.
+
+
+

Not this:

+
When setting the user code remember:
+
+* make the user code easy to remember. Use a number that has a meaning for you
+* change the code once a month
+* do not disclose the user code to anyone else. This includes the security
+  company
+
+
+
+
+

Instructions

+

When presenting instructions, such as in a tutorial, present them in a numbered +list according to these guidelines:

+
    +
  • Each step (list item) should describe one action.

    +
  • +
  • If the same steps are repeated, refer to the earlier steps rather than +repeating them.

    +
  • +
  • When a step includes a command or code block as an example, put the command +or code block after the step that includes them.

    +
  • +
  • Use supporting images where appropriate. If the series of steps is supported +by one figure, refer to the figure in the introductory text.

    +

    For example: “See Figure 15 and do the following:”

    +

    When a series of steps is supported by two or more figures, refer to the +specific figure in the relevant step and show the figure immediately after +the reference. Do not write: “See figures 15 through 22 and do the +following:”

    +
  • +
+
+
+
+

Notices

+

We use four special types of notices: notes, cautions, warnings, and dangers. +Here are some specific rules and tips regarding use of these notices:

+
    +
  • Do not use a notice directly after a heading. Notices must follow a variant of +body text.
  • +
  • Do not include more than one notice in a single notice block.
  • +
  • Avoid back-to-back notices.
  • +
  • If back-to-back notices are not avoidable, make sure each distinct notice in +the notice block is clearly defined.
  • +
+

Use the standard reST admonition directive.

+
+

Notes, cautions, and warnings

+

Use notes sparingly. Avoid having more than one note per section. If you exceed +this number consistently, consider rewriting the notes as main body text.

+

Use cautions and warnings to alert readers of potential problems or pitfalls. +Use conditional phrases in cautions and warnings, such as “If you do X, then Y +will occur.”

+

These are examples of typical notices and the conditions for their usage:

+
+

注解

+

Notes are extra bits of information that supplement the main content. Notes +should be relatively short.

+
+
+

警告

+

Cautions are low-level hazard messages that alert the user of possible +equipment, product, and software damage, including loss of data.

+
+
+

警告

+

Warnings are mid-level hazards that are likely to cause product damage.

+
+
+
+ +
+

Images

+

Use images or figures to convey information that may be difficult to explain +using words alone. Well-planned graphics reduce the amount of text required to +explain a topic or example.

+

Follow these guidelines when using graphics in support of your documentation:

+
    +
  • Keep it simple. Use images that serve a specific purpose in your document, +and contain only the information the reader needs.

    +
  • +
  • Avoid graphics that will need frequent updating. Don’t include information in +a graphic that might change with each release, such as product versions.

    +
  • +
  • Use either PNG or JPEG bitmap files for screenshots and SVG files for vector +graphics.

    +
  • +
  • Place the image immediately after the text it helps clarify, or as close as +possible.

    +
  • +
  • Use the Sphinx figure directive to insert images and figures into the +document. Include both alt text, a figure name, and caption.

    +

    For example:

    +
    .. figure:: figures/topic-1.png
    +   :alt: An image supporting the topic.
    +
    +   Figure 1: This is the figure 1 caption.
    +
    +
    +
  • +
  • Include at least one direct reference to an image from the main text, using +the figure number. For example:

    +

    Use this:

    +
    Figure 1
    +
    +
    +

    Not this:

    +
    The figure above or below
    +
    +
    +
  • +
+

Images should follow these naming and location conventions:

+
    +
  • Save the image files in a figures folder at the same level as the file +that will reference the image.
  • +
  • Name image files according to the following rules:
      +
    • Use only lower case letters.
    • +
    • Separate multiple words in filenames using dashes.
    • +
    • Name images using the filename of the file they appear on and add a number +to indicate their place in the file. For example, the third figure added to +the welcome.rst file must be named welcome-3.png.
    • +
    +
  • +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/collaboration/writing-guide.html b/zh_CN/reference/collaboration/writing-guide.html new file mode 100644 index 00000000..96c8bba8 --- /dev/null +++ b/zh_CN/reference/collaboration/writing-guide.html @@ -0,0 +1,1441 @@ + + + + + + + + + + + Writing guide — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Writing guide

+

We want our documentation to be easy to read and understand. This document +describes guidelines for writing documentation that is clear, concise, +confident, and courteous.

+

Refer to Structure and formatting for details on organizing content and how +we use reStructuredText and Sphinx.

+ +
+

Use simple English

+

Write using simple English: Be brief and communicate only the information that +is needed. Be friendly and informative. Emphasize clarity and avoid +unecessary complicated or technical terms. Make the content accessible to +non-native speakers.

+
+

Be brief

+

Use short sentences and paragraphs. Stick to the principle of one main +idea per sentence, plus one additional point if needed. Each paragraph +should address one main idea. Remember the basic structure of a paragraph: +Introduction, body, and conclusion.

+
+
+

Be friendly

+

We write for our peers and want to be familiar. Take a personal tone as if you +were speaking directly to the reader. Use “you” to address the reader and “we” +to refer to our view. Be professional, respectful, and cooperative.

+

Assume your audience has the same level of technical understanding and expertise +as you did when you first started collaborating. Do not talk down to our +readers, but also do not assume they know everything about the subject. Offer +brief explanations or summaries of common knowledge if a significant portion of +readers might benefit.

+
+
+

Use simple words

+

Use simple words to increase reader comprehension and reduce ambiguity. Follow +our tips for making good word choices:

+
    +
  • Avoid jargon: Write for your audience, using everyday language where +possible, and technical terms where appropriate. Avoid clichés, idioms, and +metaphors.

    +
  • +
  • Be consistent: Use one term for each concept or action and use it +consistently.

    +
  • +
  • Avoid “fancy” words and phrases: If there is a simpler word or phrase, +use it.

    +

    For example:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Use thisNot this
    start, begincommence
    soconsequently
    more thanin excess of
    ifin the event of
    beforeprior to
    if you wantshould one wish
    useutilize
    exampleinstance
    +
  • +
+
+
+

Avoid overuse of product name

+

Use product names only when necessary. Typically, you can rewrite sentences to +remove the product name with no change in meaning, which keeps the content +concise and scannable.

+

Avoid using the product name in page titles and headings.

+
+
+
+

Make content scannable

+

Organize your content to make it scannable for the reader, which helps them find +what they need quickly, and to understand the information more efficiently.

+
    +
  • Put the most important content first. Make sure your introduction clearly +communicates what the reader can find on the page. Present the point of the +document first, and organize supporting information towards the end of the +page.
  • +
  • Write scannable headings. Expect readers of documentation to skim and scan +the content, and to leave if they dont find what they need quickly. Good +headings add organization to your content and help the reader to find and +understand content more effectively. Follow our guidelines for writing +effective Headings.
  • +
  • Write great link text. Great link text tells the reader what they can +expect when they click on a link. It also helps make the page more scannable. +Follow our guidelines for writing Link text.
  • +
+
+

Headings

+

Use these guidelines to write effective headings:

+
    +
  • Be concise and descriptive. Use only the words necessary to describe the +section.
  • +
  • Use sentence case. Capitalize only the first word and proper nouns in a +heading.
  • +
  • Avoid punctuation. Unless your heading is a question, don’t use sentence +punctuation in headings.
  • +
  • Use parallel structure. Headings at the same level should use the same +grammatical pattern. This provides structure to the document and helps users +find information more easily. See Parallelism.
  • +
  • Use strong verbs. Strong, active verbs get to the point. Avoid -ing verbs, +such as Running, Testing, etc.
  • +
+

For example, two headings at the same level:

+

Use this:

+
Install software
+
+Configure software
+
+
+

Not this:

+
Installing the Software on the Platform
+
+Software Configuration.
+
+
+
+ +
+
+

Use strong verbs

+

Passive verbs make writing stuffy and formal. Use strong verbs to get to the +point and avoid unnecessary words and phrases.

+
+

Use imperatives

+

Commands, also called imperatives, are the fastest and most direct way of giving +someone instructions. For example:

+

Use this:

+
Send it to me.
+
+
+

Not this:

+
I would appreciate it if you would send it to me.
+
+
+
+
+

Use present tense

+

Use simple present tense instead of future tense for most text. Search for the +words “will” or “shall” to find future tense instances. Future tense is +acceptable for conditional statements, such as in a caution or a warning. For +example:

+

Use this:

+
The system operates at a nominal temperature of 180 degrees Fahrenheit.
+
+
+

Not this:

+
The system will operate at a nominal temperature of 180 degrees Fahrenheit.
+
+
+
+
+

Avoid nominalizations

+

Avoid nominalizations, which are nouns formed from verbs.

+

For example:

+ ++++ + + + + + + + + + + + + + + + + + + + +
VerbNominalization
completecompletion
provideprovision
failfailure
installinstallation
+

For example:

+

Use this:

+
We discussed the matter.
+
+
+

Not this:

+
We had a discussion about the matter.
+
+
+

Or:

+

Use this:

+
IT has installed the software.
+
+
+

Not this:

+
IT has completed the installation of the software.
+
+
+
+
+

Avoid words ending in -ing

+

Avoid using words ending in -ing unless they are part of a technical name. For +example:

+

Use this:

+
There is no way to verify this.
+
+
+

Not this:

+
There is no way of verifying this.
+
+
+
+
+

Use the active voice

+

Use active voice whenever possible to show who or what is performing an +action.

+
    +
  • Active voice follows standard English word order: SUBJECT–VERB–OBJECT +(where the OBJECT is optional).
  • +
  • Passive voice reverses the order and weakens the verb: OBJECT–be VERB–by +SUBJECT (where the OBJECT is optional).
  • +
+

For example:

+

Use this:

+
I made a mistake.
+
+
+

Not this:

+
A mistake was made. *(By whom?)*
+
+
+

Or:

+

Use this:

+
We released version 2.0 in June.
+
+
+

Not this:

+
Version 2.0 was released in June.
+
+
+
+
+
+

Avoid long noun phrases

+

Noun phrases (a noun and other words that describe or modify it) can be +difficult to understand. Try to limit the number of modifiers in a noun phrase +to two. For example:

+

Use this:

+
Integration policies for power management mechanisms.
+
+
+

Not this:

+
Power management mechanism integration policies.
+
+
+
+
+

Parallelism

+

Parallelism refers to the practice of using similar patterns of grammar, and +sometimes length, to coordinate words, phrases, and clauses.

+

Use parallel construction in lists. The table below shows some unparallel +structures and how they can be made parallel with a little rewording.

+ ++++ + + + + + + + + + + + + + + + + + + + +
Parallel (do)Unparallel (don’t)
    +
  1. Mount the panel.
  2. +
  3. Install the battery.
  4. +
  5. Wire the keypad.
  6. +
+
    +
  1. Mount the panel.
  2. +
  3. Battery installation.
  4. +
  5. Wiring the keypad.
  6. +
+
I like practicing my accordion, +reading sci-fi, and eating +peanut butter and pickle +sandwiches.I like practicing my accordion, +reading sci-fi, and to eat +peanut butter and pickle +sandwiches.
For breakfast he likes coffee +and bacon.For breakfast he likes coffee +and to fry bacon.
Apples or bananas are a good +snack.Apples or a banana are a good +snack.
+
+
+

Grammar and punctuation

+

This section covers common grammatical topics relevant to our +documentation. For detailed explanations of correct grammar and punctuation, +use one of our preferred references.

+
+

Capitalization

+

The capitalization style for all documentation is sentence case. Words should +only be capitalized when they are proper nouns or refer to trademarked product +names.

+
+

注解

+

Do not capitalize a word to indicate it is more important than other +words. Never change the case of variable, function or file names - always +keep the original case.

+
+ +
+

Software version capitalization

+

When listing software or hardware version numbers, the word “version” or letter +“v” are lowercase. The v is closed with the number (no period).

+

For example:

+
    +
  • Widget Pro version 5.0
  • +
  • Widget Master v2.1.12
  • +
+
+
+
+

Contractions

+

Avoid using contractions, such as it’s, they’re, and you’re, because they may be +unclear to non-native English-speaking audiences.

+
+
+

Quotation marks

+

Follow these guidelines for quotation marks:

+
    +
  • Restrict use of quotation marks to terms as terms.
  • +
  • Do not use quotation marks for emphasis; use italics for emphasis.
  • +
  • Avoid using single-quote marks.
  • +
+
+
+

Commas and colons

+

This section addresses common use of commas, semicolons, and colons in our +documentation. Refer to one of our preferred references +for further details.

+
+

Use the serial comma

+

When writing a series of items, use the serial comma before the final and and +or to avoid confusion and ambiguity. For example:

+

Use this:

+
Mom, Dad, and I are going to the game.
+
+
+

Not this:

+
Mom, Dad and I are going to the game.
+
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/compatible-hardware.html b/zh_CN/reference/compatible-hardware.html new file mode 100644 index 00000000..37528211 --- /dev/null +++ b/zh_CN/reference/compatible-hardware.html @@ -0,0 +1,1108 @@ + + + + + + + + + + + Compatible Hardware — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Compatible Hardware

+

This document describes hardware that has been tested and confirmed as +compatible with Clear Linux* OS. This list is not comprehensive and will continue to +grow.

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Compatible Hardware
Processor SKUPlatform
Intel® Core™ i5-6260U 
Intel® Core™ i5-6560UDell XPS* 13 9350
Intel® Celeron® J3455NUC6CAYS
Intel® Core™ i5-4250U 
Intel® Core™ i7-5557U 
Intel® Core™ i9-7900XGigabyte* X299
Intel® Core™ i3-4130Lenovo Thinkserver* TS140
Intel® Core™ i7-7567UNUC7i7BNH
Intel® Core™ i7-8809GNUC8i7HVK
Intel® Core™ i5-7260UNUC7i5BNH
Intel® Core™ i7-8650UNUC7i7DNKE
Intel® Core™ i5-7300UNUC7i5DNHE
Intel® Xeon® Gold 6138 
Intel® Xeon® E5-2699A v4Dell PowerEdge* R630
Intel® Xeon® E5-2620 v3 
Intel® Core™ i5-6600Gigabyte* Z170X-UD5
Intel® Core™ i5-4250UD54250WYK
Intel® Xeon® E5-2699 v3S2600WT2
Intel® Atom™ J3455NUC6CAYB
Intel® Xeon® Bronze 31040W23H8
Intel® Atom™ C2750SuperMicro* A1SAi
Intel® Atom™ E3825CircuitCo MinnowBoard MAX*
Intel® Core™ i7-8700Gigabyte* H370 WIFI
Intel® Core™ i7-3667ULenovo ThinkPad* X1 Carbon laptop
Intel® Core™ i5-4210UDell XPS* 13 laptop
Intel® Celeron® J3455NUC6CAYB
Intel® Core™ i7-4790Gigabyte* desktop
Intel® Core™ i5-6260UNUC6I6SYH
Intel® Core™ i7-5557UNUC5I7RYH
Intel® Core™ i7-4700MQLenovo ThinkPad* T540p
Intel® Core™ i7-5557UNUC5I7RYB
Intel® Core™ i5-6260UNUC6I5SYH
+

* Other names and brands may be claimed as the property of others.

+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/image-types.html b/zh_CN/reference/image-types.html new file mode 100644 index 00000000..ad6c9496 --- /dev/null +++ b/zh_CN/reference/image-types.html @@ -0,0 +1,1076 @@ + + + + + + + + + + + Clear Linux* OS image types — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Clear Linux* OS image types

+

Clear Linux* OS offers many types of images for different platforms and environments.

+

The naming convention of a Clear Linux OS image filename is:

+
clear-[version number]-[image type].[compression type]
+
+
+
    +
  • The [version number] field specifies the version number.
  • +
  • The [image type] field specifies the type of image and its corresponding +file format.
  • +
  • The [compression type] field specifies the compression type. Two types of +compressions are used: GNU* zip (.gz) and XZ (.xz).
  • +
+

Table 1 lists the currently available images that are platform independent. +Table 2 lists the currently available images that are platform specific.

+ + ++++ + + + + + + + + + + + + + +
Table 1: Types of platform-independent Clear Linux OS images
Image TypeDescription
live-desktop.img or live-desktop.isoImage for booting to GNOME* desktop to preview or install the OS.
live-server.img or live-server.isoImage for booting to server command prompt to preview or install the OS.
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2: Types of platform-specific Clear Linux OS images
Image TypeDescription
aws.imgImage suitable for use with Amazon* AWS*.
azure.vhdVirtual Hard Disk for use on Microsoft* Azure* cloud platform.
azure-docker.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with Docker* pre-installed.
azure-machine-learning.vhdVirtual Hard Disk for use on Microsoft Azure cloud platform with the machine-learning-basic bundle installed.
cloudguest.imgImage with generic cloud guest virtual machine (VM) requirements installed.
gce.tarImage with the Google Compute Engine (GCE) specific kernel.
hyperv.vhdxVirtual Hard Disk for use with Microsoft Hyper-V* hypervisor. Includes optimized kernel for Hyper-V.
kvm.imgImage for booting in a simple VM with start_qemu.sh. Includes +optimized kernel for KVM.
kvm-legacy.imgImage for booting in a simple VM using legacy BIOS, if using start_qemu.sh make sure to remove -bios parameter.
pxe.tarImage suitable for use with PXE server.
vmware.vmdkVirtual Machine Disk for VMware* platforms inclduing Player, Workstation, and ESXi.
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/reference.html b/zh_CN/reference/reference.html new file mode 100644 index 00000000..938cf117 --- /dev/null +++ b/zh_CN/reference/reference.html @@ -0,0 +1,1019 @@ + + + + + + + + + + + Reference — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Reference

+

This section provides additional information on the Clear Linux OS project and +features.

+ + +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/reference/system-requirements.html b/zh_CN/reference/system-requirements.html new file mode 100644 index 00000000..c9ae8063 --- /dev/null +++ b/zh_CN/reference/system-requirements.html @@ -0,0 +1,1062 @@ + + + + + + + + + + + 建议的最低系统要求 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/search.html b/zh_CN/search.html new file mode 100644 index 00000000..da109ce0 --- /dev/null +++ b/zh_CN/search.html @@ -0,0 +1,998 @@ + + + + + + + + + + + 搜索 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + +
+ +
+ +
+ +
+
+ + +
+ +
+

+ © Copyright 2019, many + + 最后更新于 7月 29, 2019. + + +

+
+ Built with Sphinx using a theme provided by Read the Docs. + +
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/searchindex.js b/zh_CN/searchindex.js new file mode 100644 index 00000000..9205caa2 --- /dev/null +++ b/zh_CN/searchindex.js @@ -0,0 +1,1591 @@ +Search.setIndex({docnames:["FAQ/faq","about","concepts/autospec-about","concepts/bundles-about","concepts/mixer-about","concepts/swupd-about","concepts/telemetry-about","disclaimers","documentation_license","get-started/bare-metal-install-desktop/bare-metal-install-desktop","get-started/bare-metal-install-server/bare-metal-install-server","get-started/bootable-usb/bootable-usb","get-started/compatibility-check","get-started/get-started","get-started/install-configfile","get-started/virtual-machine-install/gce","get-started/virtual-machine-install/hyper-v","get-started/virtual-machine-install/kvm","get-started/virtual-machine-install/virtualbox-cl-installer","get-started/virtual-machine-install/vmw-player","get-started/virtual-machine-install/vmw-player-preconf","get-started/virtual-machine-install/vmware-esxi-install-cl","get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image","guides/clear/autoproxy","guides/clear/autospec","guides/clear/compatible-kernels","guides/clear/debug","guides/clear/ister","guides/clear/mixer","guides/clear/security","guides/clear/stateless","guides/clear/swupd-guide","guides/deploy-at-scale","guides/guides","guides/kernel/kernel-development","guides/kernel/kernel-modules","guides/kernel/kernel-modules-dkms","guides/maintenance/architect-lifecycle","guides/maintenance/assign-static-ip","guides/maintenance/bulk-provision","guides/maintenance/cpu-performance","guides/maintenance/developer-workstation","guides/maintenance/download-verify-decompress","guides/maintenance/enable-user-space","guides/maintenance/fix-broken-install","guides/maintenance/hostname","guides/maintenance/increase-virtual-disk-size","guides/maintenance/query-upstream","guides/maintenance/resource-limits","guides/maintenance/restart","guides/maintenance/time","guides/maintenance/validate-signatures","guides/network/custom-clear-container","guides/network/dpdk","guides/network/ipxe-install","guides/network/network-bonding","guides/network/vnc","guides/stacks/dars","guides/stacks/dlrs/dlrs","guides/stacks/greengrass","guides/telemetrics/telem-guide","index","reference/bundle-commands","reference/bundles/bundles","reference/bundles/openssh-server","reference/collaboration/collaboration","reference/collaboration/structure-formatting","reference/collaboration/writing-guide","reference/compatible-hardware","reference/image-types","reference/reference","reference/system-requirements","tutorials/aws-web/aws-web","tutorials/azure","tutorials/docker/docker","tutorials/flatpak/flatpak","tutorials/fmv","tutorials/hadoop","tutorials/kata","tutorials/kata_migration","tutorials/kubernetes/kubernetes","tutorials/kubernetes/kubernetes-bp","tutorials/machine-learning/machine-learning","tutorials/nvidia","tutorials/redis","tutorials/smb/smb","tutorials/smb/smb-desktop","tutorials/spark","tutorials/tutorial-proxy","tutorials/tutorials","tutorials/wordpress/web-server-install","tutorials/wordpress/wordpress","tutorials/wordpress/wp-install","tutorials/yubikey-u2f"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":1,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,sphinx:55},filenames:["FAQ/faq.rst","about.rst","concepts/autospec-about.rst","concepts/bundles-about.rst","concepts/mixer-about.rst","concepts/swupd-about.rst","concepts/telemetry-about.rst","disclaimers.rst","documentation_license.rst","get-started/bare-metal-install-desktop/bare-metal-install-desktop.rst","get-started/bare-metal-install-server/bare-metal-install-server.rst","get-started/bootable-usb/bootable-usb.rst","get-started/compatibility-check.rst","get-started/get-started.rst","get-started/install-configfile.rst","get-started/virtual-machine-install/gce.rst","get-started/virtual-machine-install/hyper-v.rst","get-started/virtual-machine-install/kvm.rst","get-started/virtual-machine-install/virtualbox-cl-installer.rst","get-started/virtual-machine-install/vmw-player.rst","get-started/virtual-machine-install/vmw-player-preconf.rst","get-started/virtual-machine-install/vmware-esxi-install-cl.rst","get-started/virtual-machine-install/vmware-esxi-preconfigured-cl-image.rst","guides/clear/autoproxy.rst","guides/clear/autospec.rst","guides/clear/compatible-kernels.rst","guides/clear/debug.rst","guides/clear/ister.rst","guides/clear/mixer.rst","guides/clear/security.rst","guides/clear/stateless.rst","guides/clear/swupd-guide.rst","guides/deploy-at-scale.rst","guides/guides.rst","guides/kernel/kernel-development.rst","guides/kernel/kernel-modules.rst","guides/kernel/kernel-modules-dkms.rst","guides/maintenance/architect-lifecycle.rst","guides/maintenance/assign-static-ip.rst","guides/maintenance/bulk-provision.rst","guides/maintenance/cpu-performance.rst","guides/maintenance/developer-workstation.rst","guides/maintenance/download-verify-decompress.rst","guides/maintenance/enable-user-space.rst","guides/maintenance/fix-broken-install.rst","guides/maintenance/hostname.rst","guides/maintenance/increase-virtual-disk-size.rst","guides/maintenance/query-upstream.rst","guides/maintenance/resource-limits.rst","guides/maintenance/restart.rst","guides/maintenance/time.rst","guides/maintenance/validate-signatures.rst","guides/network/custom-clear-container.rst","guides/network/dpdk.rst","guides/network/ipxe-install.rst","guides/network/network-bonding.rst","guides/network/vnc.rst","guides/stacks/dars.rst","guides/stacks/dlrs/dlrs.rst","guides/stacks/greengrass.rst","guides/telemetrics/telem-guide.rst","index.rst","reference/bundle-commands.rst","reference/bundles/bundles.rst","reference/bundles/openssh-server.rst","reference/collaboration/collaboration.rst","reference/collaboration/structure-formatting.rst","reference/collaboration/writing-guide.rst","reference/compatible-hardware.rst","reference/image-types.rst","reference/reference.rst","reference/system-requirements.rst","tutorials/aws-web/aws-web.rst","tutorials/azure.rst","tutorials/docker/docker.rst","tutorials/flatpak/flatpak.rst","tutorials/fmv.rst","tutorials/hadoop.rst","tutorials/kata.rst","tutorials/kata_migration.rst","tutorials/kubernetes/kubernetes.rst","tutorials/kubernetes/kubernetes-bp.rst","tutorials/machine-learning/machine-learning.rst","tutorials/nvidia.rst","tutorials/redis.rst","tutorials/smb/smb.rst","tutorials/smb/smb-desktop.rst","tutorials/spark.rst","tutorials/tutorial-proxy.rst","tutorials/tutorials.rst","tutorials/wordpress/web-server-install.rst","tutorials/wordpress/wordpress.rst","tutorials/wordpress/wp-install.rst","tutorials/yubikey-u2f.rst"],objects:{},objnames:{},objtypes:{},terms:{"0 ":[8,10,11,17,18,46,52,53,58,59,63,67,83,84],"0%":31,"0)":[28,53,60,76],"0,":[53,58],"0-":[17,24,47,52,53,57,60,80,84],"0.":[18,24,40,52,56,58,73,74,77,80],"0/":[24,52,80],"00 ":18,"00-":73,"00.":53,"0000-":38,"00000":77,"00000000":38,"000000000 ":76,"000000000000 ":38,"0000:":53,"0000\n":76,"0022-":17,"00:":[39,47,53,73],"00\"":73,"00\n":47,"00bf4f8c8c0ec006633a48fd9ee746b30bb9df17\n":34,"01-":76,"018536+":73,"01:":[39,53],"01\n":47,"02.":73,"0200]":53,"02:":[39,47],"02\n":47,"03.":53,"03:":[39,47,53,73],"04 ":17,"04.":53,"04:":[39,47,73],"05,":39,"05.":52,"05/":63,"0501-":34,"0502-":34,"05:":[47,76],"06.":58,"08:":76,"08d400baffde\n":52,"09-":76,"0:":47,"0;":[60,76],"0\"":[14,53,77],"0\n":[28,34,36,47,52,53,54,57,73,76],"0c1282\n":11,"0ceae320279b\n":52,"0d-":73,"0day ":63,"0day\n":63,"0w23h8":68,"0x3 ":53,"0x402 ":17,"0xf ":53,"1 ":[2,11,12,17,18,19,20,21,22,24,31,39,41,42,46,47,52,53,54,56,59,60,66,69,71,73,77,80,85],"1)":[37,53,56,58,60,71,76,77],"1,":[17,28,39,41,46,53,56,59,60,80],"1-":[28,59,60,66],"1.":[4,28,36,37,39,42,44,47,51,53,55,56,57,58,60,63,66,67,73,77,80,82,90,92],"1/":[52,63],"10 ":[27,28,59,60,72,75],"10":[15,16,18,19,20,21,22],"10.":[10,20,28,73,80,87],"100 ":60,"100":84,"100%":[31,52],"100.":80,"1000 ":[60,84],"1000":84,"1000000 ":57,"1000000:":57,"1000000\n":76,"1001-":34,"10022 ":17,"10022":17,"100:":87,"100\"":87,"101 ":76,"1013 ":75,"1024 ":53,"1080\"":80,"10:":[9,10,22,28,56,72],"10\n":[56,64],"10]":82,"10g":17,"10gb ":17,"11 ":[63,72,76],"11":[15,18,19,20,21,22,72],"11.":[10,58,72,76],"111,":76,"112,":76,"114 ":76,"11:":[9,10,72,76],"12 ":73,"12":[15,18,20,21,22,58,67,73],"12-":73,"12.":[52,57],"122 ":60,"1234":56,"1234)":56,"127.":[52,56,58,74,80],"128mb ":[19,21,71],"12:":[9,10,72],"12_compat":58,"13 ":[47,63,68,72],"13":[15,20,21,22],"13-":0,"13.":[10,24,73,76],"13330":53,"13:":[9,10,72],"13t23:":73,"14 ":[20,63],"14":[15,20,21],"14%":52,"14.":[10,11,60,73],"14/":63,"147 ":76,"148,":76,"14:":[9,10,72],"15 ":[19,31,66,73],"15":[14,15,20,21],"15,":60,"15.":52,"150)":76,"150,":76,"15000 ":47,"15000.":47,"150m\"":14,"150mb":[9,10],"151 ":76,"1521":53,"1521\"":53,"1521]":53,"1539023189\n":60,"1539023621\n":60,"15700/":27,"15780.":73,"159,":76,"15960.":73,"15:":[9,10],"15g ":11,"15m\n":54,"15th ":65,"16 ":[11,47],"16":[15,21,54,80],"16-":58,"16050.":73,"16150.":73,"162 ":76,"162,":76,"1648877 ":82,"16500.":73,"168.":[28,39,54,55,56],"16810.":73,"16:":[9,10,76],"16e3ed0df8da\n":52,"16m\"":28,"17 ":11,"17":15,"17%":82,"17.":52,"170,":76,"173 ":76,"174,":76,"175\n":54,"17650\n":52,"17660\n":52,"17790\n":52,"177\n":56,"17820\n":52,"17850\n":52,"17870\n":52,"17:":[9,10,76],"18":15,"18.":[17,45,58],"180 ":67,"18080.":73,"181)":76,"184'":72,"184)":72,"184.":72,"18620.":73,"187 ":76,"18860.":73,"18940 ":72,"18:":[9,10,63],"19 ":63,"19":15,"19.":[9,17],"190 ":76,"19100.":72,"192,":76,"192.":[28,39,54,55,56],"195 ":76,"19600":73,"197 ":76,"197,":76,"19:":[9,10,76],"19b4411cf4bd\n":52,"1:":[4,6,9,10,23,26,30,37,39,44,53,54,58,60,66,72,73,74,75,82,85,86,90,92],"1;":60,"1<":77,"1>":50,"1\"":[53,58],"1\n":[14,32,47,54,60,66,73],"1]":59,"1e:":53,"1g ":11,"1s\n":55,"2 ":[0,11,12,14,16,17,19,20,21,22,28,42,46,53,56,60,63,66,69,71],"2)":[28,71,84],"2,":[10,28,39,46,54,56],"2-":[45,53],"2.":[9,10,15,18,28,34,47,53,54,56,57,58,63,67,72,77,82,85,89],"2/":[52,63],"20 ":[28,46,60,71,80],"20":[15,28],"20.":[10,28,34,47],"200.":[80,87],"2000x1200 ":56,"2000x1200\n":56,"2001-":34,"201/":55,"2012-":[52,73],"2012.":5,"2017 ":[52,73],"2017":73,"2017)":27,"2017-":[73,76],"2018 ":63,"2018,":63,"2019 ":[33,47],"20450 ":46,"2048 ":[18,59],"2048,":53,"2048kb/":53,"2048mb ":21,"207 ":76,"209-":72,"209.":72,"20:":10,"20gb ":46,"21 ":58,"21.":[47,76],"21000 ":47,"21000.":47,"215 ":76,"215)":76,"21:":[10,76],"22 ":[33,64,66],"22,":17,"22.":10,"222574 ":75,"2236710e4fc11e4a646ce956c7802788\n":60,"22533 ":77,"22674 ":77,"227,":59,"227]":59,"22854 ":77,"229)":76,"22:":10,"22\n":88,"23 ":58,"23.":47,"23046 ":77,"23150 ":77,"23300\n":31,"234]":[9,10],"237180 ":31,"2375 ":17,"2375-":17,"23:":10,"24.":10,"244.":80,"24430\n":31,"245 ":73,"245":73,"245'":73,"245)":73,"245\"":73,"249)":76,"24:":10,"24\n":55,"25.":[28,56],"25180\n":60,"253,":54,"255 ":9,"255.":54,"256;":76,"256]":76,"256m)":10,"256mb":[9,10],"25:":10,"26)":76,"2620 ":68,"26228 ":77,"26240 ":58,"2699 ":68,"2699a ":68,"26:":10,"27 ":76,"27)":76,"27.":10,"27000,":78,"2723b7d20716\n":52,"27550.":58,"279505430 ":76,"27:":10,"28 ":82,"28%":52,"284)":76,"28881 ":82,"28:":10,"28g ":11,"29790 ":52,"29:":10,"2:":[9,10,11,14,30,53,54,58,60,72,73,75,82,85,86,90,92],"2;":14,"2>":[50,56,80],"2\n":[14,52,56,60],"2]":82,"2aff77bd5cf1.":75,"2aff77bd5cf1\n":75,"2f070e8e71679f2b1f28794e3a6c42ee\n":60,"2g ":11,"2gb ":[19,21],"2gb":19,"2gb)":21,"2n ":73,"2nd ":[58,93],"3 ":[11,12,17,28,46,47,53,54,56,63,67,71,75,77],"3)":[58,60],"3,":[28,39,46,53,56,59],"3-":[24,38,47],"3.":[9,11,18,20,21,22,47,52,56,58,63,66,73,76,82,86,90],"3/":52,"30 ":[17,47],"30-":55,"30.":10,"300 ":46,"300.":87,"30010":14,"30010-":14,"30010/":14,"30:":10,"30;":58,"30]":60,"30g ":11,"31 ":10,"3104":68,"316 ":76,"31:":10,"31\n":9,"32 ":[11,46,58,63],"32-":63,"32.":18,"32:":10,"32bit ":63,"32gb ":19,"32m ":46,"32m\"":[14,28,46],"33 ":11,"33,":76,"333 ":76,"335.":11,"33974 ":52,"33982 ":52,"34 ":47,"34":14,"34-":72,"34.":72,"345 ":47,"346676+":73,"36 ":76,"3667u":68,"37 ":14,"37-":73,"377.":52,"381f4b604537b2cb7fb5b583a8a847a50c4ed776f8e677e2354932eb82f18898\n":58,"38792 ":73,"39-":72,"39.":72,"3:":[9,10,72,73,82,86,90,92],"3\n":[14,56,92],"3]":[59,82],"3a-":73,"3ad ":55,"3ad\n":55,"3bb7-":11,"3d ":63,"3de":29,"3dprinting\n":63,"3e634d6e0792\n":52,"3g ":11,"3g.":63,"3g\n":63,"3q4d:":52,"4 ":[11,47,52,53,58,59,60,63,71,92],"4,":[17,60],"4-":90,"4.":[8,10,18,19,34,45,47,52,56,57,58,60,63,71,72,73,76,82,90],"4/":52,"40 ":60,"400 ":72,"403 ":75,"404 ":28,"404.":60,"4096 ":[17,53],"4130":68,"42 ":63,"42%":52,"42.":76,"4200":64,"4200:":64,"4210u":68,"422":0,"423 ":31,"4250u":68,"429":0,"42b7-":11,"43gb\n":58,"44 ":76,"443\"":80,"445\"":80,"4542 ":82,"46.":47,"4650u ":60,"4661 ":75,"47 ":47,"4700mq":68,"4790":68,"48 ":11,"49 ":11,"49:":76,"4:":[9,10,17,18,56,72,82,90,92],"4\"":73,"4\n":[47,52,55,60,73],"4]":82,"4b0ca67300727477913c331ff124928a98bcf2fb12c011a855f17cd73137a890 ":51,"4d0d60207a904ebbab96680a51ac1339\n":45,"4f34-":11,"4g ":11,"4m ":11,"4m":11,"5 ":[11,21,22,46,56,59,63],"5)":76,"5,":[58,59,76],"5-":59,"5.":[9,35,36,47,56,67,72,82,83,90,92],"50 ":[11,47],"50%":31,"50-":[48,78],"50.":80,"50000\n":54,"50c212235d3c33a3c035e586ff14359d03895c7bc701bb5dfd62dbe0e91fb486":58,"51 ":[11,14],"51-":79,"512 ":[46,58],"512m ":46,"512m\"":[39,46],"528 ":47,"52\"":28,"54 ":56,"5414c3a12993 ":52,"5414c3a12993\n":52,"5557u":68,"559 ":47,"57%":52,"59)":60,"59.":73,"5900 ":56,"5900)":56,"5900.":56,"5900\n":56,"5901 ":56,"5902.":56,"5903 ":56,"5905)":56,"5924":17,"5924,":17,"59\"":73,"5:":[9,10,72,82,90,92],"5\"":56,"5class ":59,"5class.":59,"5g ":[11,46],"5g":28,"5g\"":28,"5gb ":46,"5mb\n":52,"6 ":[11,18,56,73,76,82,90],"6,":72,"6-":76,"6.":[18,21,22,56,73,82,90],"6/":31,"60,":54,"60-":80,"60000/":39,"600mb ":[21,71],"6138":68,"616mb":52,"61c178102228 ":58,"6260u":68,"628 ":47,"62gib\n":52,"63 ":[9,10,45],"631":0,"632.":45,"6357dbd072bea7287c5f0b85d31d70df344f5d8843fbfa09":58,"6379.":84,"64 ":[18,19,20,21,22,71],"64":45,"64-":[12,57,83],"6560u":68,"6600":68,"67:":53,"691544026 ":76,"696\n":34,"6:":[9,10,56,72,82,90,92],"6\"":56,"6\n":59,"6g ":11,"6h\n":54,"7 ":[11,47,56,57,73,76,85,90,92],"7,":72,"7-":[20,42,52,63],"7.":[11,73,82,90],"70":93,"70-":[38,54,93],"704f3382-":11,"7077":87,"70ghz\n":60,"71 ":75,"71%":52,"71-":60,"71b60f15003e\n":52,"723)":76,"7238f35abcd0\n":52,"7260u":68,"7300u":68,"742192751c1a\n":52,"7567u":68,"7694989e97de\n":52,"76gb":58,"777 ":28,"78 ":66,"79 ":76,"7900x":68,"7:":[9,10,56,72,82,90,92],"7g ":11,"7hz3\n":52,"7tnomss9w7gjfpjzy75hgbp+":77,"7zip ":18,"7zip":18,"8 ":[9,10,11,46,47,56,59,63,92],"8(":59,"8,":[59,76],"8-":45,"8.":[34,46,57,72,77,82],"8/":34,"80 ":74,"80)":74,"80-":54,"802":38,"802.":55,"806.":52,"8080 ":74,"8080":[74,87],"8080:":74,"8086 ":53,"8086:":53,"8192b.":60,"82757ec1648a ":58,"82757ec1648a":58,"82757ec1648a906c504e50e43df74ad5fc333deee043dbfe6559c86908fac15e\n":58,"827\n":58,"846e526765e3 ":58,"85%":52,"8650u":68,"8700":68,"88%":52,"8809g":68,"8888 ":58,"8888.":58,"8888/":58,"8888:":58,"8:":[9,10,11,46,56,72,82,90,92],"8\"":77,"8\n":[14,24,34,52],"8]":82,"8ead5f2c0c33\n":52,"8g ":[11,46],"8g\"":46,"8gb":11,"9 ":[47,55,56,63],"9(":59,"9,":72,"9.":[9,10],"9000 ":55,"9000":55,"9000<":77,"9048e5e50717ea4497b757314bad98ea3763c145)":52,"91.":73,"913802006 ":76,"924157b3b009.":75,"924157b3b009\n":75,"92\n":52,"9350":68,"94 ":[9,10],"954m ":11,"960c184f-":11,"96a8565d0ca54b0c80364a1e5e7b0f88 ":72,"97.":82,"97e+":77,"98d3514e5a984e8cbbdf46a2f0d6b397\n":45,"99 ":75,"99%":82,"9912422 ":82,"9:":[9,10,20,56,72,76],"9]":[17,24],"9a-":80,"9c2d8d184e5da67c95d601382adf14862e4f2228)":52,"9g ":11,"\u4e00\u8282\u5f15\u5bfc\u7528\u6237\u4e86\u89e3 ":13,"\u4e0a\u4f20 ":[21,22],"\u4e0a\u521b\u5efa ":15,"\u4e0a\u542f\u52a8 ":13,"\u4e0a\u5b89\u88c5 ":18,"\u4e0a\u767b\u5f55 ":15,"\u4e0a\u8fd0\u884c\u7684 ":18,"\u4e0a\u90e8\u7f72\u9884\u914d\u7f6e\u7684 ":20,"\u4e0b\u4e00\u6b65\u4e2d\u7528\u6b64\u4fe1\u606f\u4ee3\u66ff ":17,"\u4e0b\u4f8b\u5c06\u672a\u538b\u7f29\u7684\u6620\u50cf\u70e7\u5f55\u81f3 ":11,"\u4e0b\u62c9\u83dc\u5355\u65c1\u8fb9\u7684\u84dd\u8272 ":18,"\u4e0b\u8f7d ":[11,12,14,15,17],"\u4e0b\u8f7d\u4e0e\u60a8\u7684 ":20,"\u4e0b\u8f7d\u548c\u89e3\u538b\u7f29\u6700\u65b0\u7684 ":16,"\u4e0b\u8f7d\u5e76\u5b89\u88c5 ":20,"\u4e0b\u8f7d\u6700\u65b0\u7684 ":14,"\u4e0b\u8ff0\u5904\u7406\u5668\u5bb6\u65cf\u7ecf\u8fc7\u9a8c\u8bc1\u53ef\u4ee5\u8fd0\u884c ":71,"\u4e0b\u9762\u6807\u6ce8\u4e3a ":18,"\u4e0d\u4f1a\u901a\u8fc7\u542f\u7528 ":16,"\u4e0d\u5141\u8bb8\u4f7f\u7528\u7b26\u53f7 ":15,"\u4e0d\u8981\u4f7f\u7528\u6700\u521d\u672a\u8f6c\u6362\u7684 ":22,"\u4e0d\u8981\u5b89\u88c5 ":18,"\u4e0e ":12,"\u4e2a ":17,"\u4e2a\u865a\u62df ":18,"\u4e2d ":16,"\u4e2d\u542f\u7528 ":[17,19,20],"\u4e2d\u542f\u7528\u4e86 ":18,"\u4e2d\u5b89\u88c5 ":13,"\u4e2d\u6240\u8ff0\u6b65\u9aa4\u76f4\u63a5\u5728 ":22,"\u4e2d\u751f\u6210\u548c\u5b89\u88c5\u7528\u6237 ":15,"\u4e2d\u7684\u5b89\u88c5\u811a\u672c\u4e3a ":18,"\u4e2d\u7684\u6240\u6709 ":15,"\u4e2d\u9009\u62e9 ":18,"\u4e2d\u9700\u8981\u521b\u5efa\u65b0\u7684 ":18,"\u4e3a ":46,"\u4e3a\u4e86\u5f15\u5bfc ":22,"\u4e3a\u4e86\u5f15\u5bfc\u65b0\u5b89\u88c5\u7684 ":21,"\u4e3a\u5c06 ":17,"\u4e3a\u83b7\u5f97 ":19,"\u4e3a\u865a\u62df\u673a\u63d0\u4f9b ":17,"\u4e3b\u673a\u4e0a\u4e34\u65f6\u542f\u7528 ":22,"\u4e3b\u673a\u4e0a\u8fd0\u884c\u7684 ":22,"\u4e3b\u673a\u4e0a\u90e8\u7f72\u9884\u914d\u7f6e\u7684 ":22,"\u4e3b\u673a\u5ba2\u6237\u7aef\u542f\u7528 ":22,"\u4e3b\u673a\u6216\u8fde\u63a5\u5230 ":22,"\u4e5f\u53ef\u4ee5\u70b9\u51fb\u865a\u62df\u673a\u5b9e\u4f8b\u9875\u4e0a\u7684 ":15,"\u4e86\u89e3\u5173\u4e8e\u6240\u6709 ":[19,20,22],"\u4e86\u89e3\u5728 ":15,"\u4e91\u5e73\u53f0\u5e76\u5b89\u88c5 ":20,"\u4e91\u5e73\u53f0\u5e76\u9884\u5b89\u88c5 ":20,"\u4ec5\u4f7f\u7528\u6700\u65b0 ":11,"\u4ecb\u7ecd\u4e86\u5c06\u865a\u62df\u78c1\u76d8\u5206\u533a\u4ece ":46,"\u4ece ":[11,17,18,19,20,21,22,46],"\u4ece\u5de6\u4fa7\u8fb9\u680f\u9009\u62e9 ":15,"\u4ece\u5de6\u8fb9\u7684 ":18,"\u4ece\u5f39\u51fa\u83dc\u5355\u4e2d\u9009\u62e9 ":20,"\u4ece\u83dc\u5355\u4e2d\u9009\u62e9 ":14,"\u4ece\u865a\u62df\u673a ":18,"\u4ee5 ":[11,14,17],"\u4ee5\u4f7f\u7528 ":15,"\u4ee5\u4fbf\u8bbf\u95ee ":19,"\u4ee5\u53ca\u5982\u4f55\u5229\u7528 ":19,"\u4ee5\u53ca\u5982\u4f55\u5728\u8fd0\u884c ":21,"\u4ee5\u540e\u5982\u679c\u5e0c\u671b\u66f4\u6539\u5206\u914d\u7684 ":18,"\u4ee5\u5728\u673a\u5668\u4e0a\u542f\u7528\u548c\u914d\u7f6e ":16,"\u4ee5\u6258\u7ba1\u4e0a\u4e00\u6b65\u4e0b\u8f7d\u7684 ":15,"\u4ee5\u9002\u5e94 ":17,"\u4f46\u4e0d\u9002\u7528\u4e8e ":17,"\u4f7f\u7528 ":[11,13,15,22,46],"\u4f7f\u7528\u4e0b\u8f7d\u7684 ":20,"\u4f7f\u7528\u540c\u4e00 ":17,"\u4f7f\u7528\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u6216\u4e91\u63d0\u4f9b\u5546\u5b9a\u4e49\u7684\u6d41\u7a0b\u6765\u589e\u52a0 ":46,"\u4f8b\u5982 ":[11,18],"\u4f8b\u5982\u82f1\u7279\u5c14\u6838\u82af\u663e\u5361/":71,"\u4fee\u6539 ":17,"\u5141\u8bb8 ":17,"\u5173\u95ed ":18,"\u5173\u95ed\u8fd0\u884c\u7684 ":17,"\u5176\u4e2d ":[16,46],"\u5176\u4ed6 ":[19,20,21,22],"\u5176\u4f59\u4e09\u4e2a\u662f ":11,"\u517c\u5bb9\u7684 ":71,"\u518d\u6b21\u70b9\u51fb ":21,"\u51cc\u52a8\u00ae":71,"\u51fa\u73b0\u63d0\u793a\u65f6\u8f93\u5165 ":46,"\u5206\u533a\u4e3a ":46,"\u5206\u914d\u7684\u7528\u6237\u540d\u6765\u81ea\u7535\u5b50\u90ae\u4ef6\u5730\u5740 ":15,"\u5217\u8868\u4e2d\u9009\u62e9 ":20,"\u5219\u53ef\u4ee5\u6309\u7167 ":22,"\u5219\u6539\u7528\u56e0\u64cd\u4f5c\u7cfb\u7edf\u800c\u5f02\u7684 ":17,"\u5219\u8f93\u5165 ":46,"\u521b\u5efa ":[15,21,22],"\u521b\u5efa\u53ef\u5f15\u5bfc ":[9,10,13,14],"\u5220\u9664*":14,"\u5229\u7528 ":[11,13,16,17,19,20,21,22],"\u5229\u7528\u4e0a\u4e00\u6b65\u83b7\u5f97\u7684 ":15,"\u5229\u7528\u4ee5\u4e0b\u547d\u4ee4\u83b7\u53d6\u8be5\u6620\u50cf\u7684 ":20,"\u5229\u7528\u5176 ":18,"\u5229\u7528\u5b89\u88c5\u7a0b\u5e8f ":21,"\u5229\u7528\u9ed8\u8ba4\u7aef\u53e3 ":17,"\u52a1\u5fc5\u6309\u7167\u672c\u8282\u4e2d\u7684\u6b65\u9aa4\u64cd\u4f5c\u4e4b\u540e\u7981\u7528 ":22,"\u5305\u542b\u5728 ":15,"\u5305\u62ec ":20,"\u5305\u62ec\u7528\u4e8e\u865a\u62df\u673a\u7684 ":20,"\u5378\u8f7d\u4e0a\u4e00\u6b65\u4e2d\u8bc6\u522b\u7684 ":11,"\u53c2\u8003 ":18,"\u53c2\u89c1\u56fe ":18,"\u53d1\u5e03\u7684 ":20,"\u53d1\u5e03\u7684\u6bcf\u4e2a ":20,"\u53d6\u6d88\u9009\u4e2d ":[20,21,22],"\u53ea\u4e3a\u65b0\u7684\u865a\u62df\u673a\u5206\u914d ":18,"\u53ef\u4ee5\u4f7f\u7528 ":71,"\u53ef\u4ee5\u542f\u52a8\u4e00\u4e2a\u8fd0\u884c ":15,"\u53ef\u4ee5\u5728\u5355\u6838 ":71,"\u53ef\u4ee5\u5728\u56fe ":46,"\u53ef\u5229\u7528 ":20,"\u53ef\u53c2\u9605 ":21,"\u53ef\u5728\u53ea\u6709 ":19,"\u53ef\u80fd\u4f1a\u5728 ":17,"\u540d\u4e3a ":[21,22],"\u540e\u7f00\u4e3a ":20,"\u542f\u52a8 ":[14,17,19,20,46],"\u542f\u7528 ":[18,21,22],"\u547d\u4ee4\u5378\u8f7d ":11,"\u547d\u4ee4\u540e\u9762\u4e3a\u8bbe\u5907\u6807\u8bc6\u7b26/":11,"\u547d\u4ee4\u63d0\u793a\u7b26\u6216 ":18,"\u547d\u4ee4\u8bc6\u522b ":11,"\u548c ":[11,14,17,19,20,46,71],"\u56e0\u4e3a ":[15,21],"\u56e0\u4e3a\u4ee5\u5b9e\u65f6\u6a21\u5f0f\u8fd0\u884c\u6bd4\u5c06 ":71,"\u56e0\u4e3a\u5728 ":15,"\u56fa\u4ef6\u53ef\u4ee5\u652f\u6301\u8fd0\u884c ":12,"\u56fa\u4ef6\u662f\u5426\u53ef\u4ee5\u8fd0\u884c ":12,"\u56fa\u4ef6\u914d\u7f6e\u4e2d\u542f\u7528 ":16,"\u56fe ":[11,15,18,19,20,21,22,46],"\u5728 ":[13,14,16,17,19,20,21,22,46],"\u5728*":18,"\u5728\u4e3b\u673a ":17,"\u5728\u4e3b\u673a\u4e0a\u5b89\u88c5 ":17,"\u5728\u4e3b\u673a\u7cfb\u7edf\u4e0a\u4ece ":18,"\u5728\u4e3b\u673a\u7cfb\u7edf\u4e0a\u542f\u52a8 ":18,"\u5728\u5373\u5c06\u5b89\u88c5 ":18,"\u5728\u5b89\u88c5 ":14,"\u5728\u5b89\u88c5\u4e86 ":12,"\u5728\u5de6\u4fa7\u7684 ":22,"\u5728\u652f\u6301\u7684 ":[19,20],"\u5728\u65b0\u7684\u865a\u62df\u673a\u4e0a\u624b\u52a8\u5b89\u88c5 ":21,"\u5728\u672c\u5730\u4e3b\u673a\u6216\u8fdc\u7a0b\u7cfb\u7edf\u4e0a\u5b89\u88c5 ":17,"\u5728\u672c\u5730\u7cfb\u7edf\u4e0b\u8f7d\u5e76\u89e3\u538b\u7f29 ":22,"\u5728\u76d8\u7b26\u524d\u9762\u6dfb\u52a0\u4e00\u4e2a ":11,"\u5728\u7cfb\u7edf ":[19,20],"\u5728\u865a\u62df\u673a\u4e0a\u5b89\u88c5 ":13,"\u5728\u865a\u62df\u673a\u7684 ":19,"\u5728\u865a\u62df\u73af\u5883\u4e2d\u8fd0\u884c ":17,"\u5728\u975e ":12,"\u5730\u5740\u4ee5\u53ca\u4e0e ":15,"\u589e\u52a0 ":46,"\u589e\u52a0\u5185\u5b58 ":17,"\u5904\u7406\u5668 ":71,"\u590d\u5236\u5e76\u7c98\u8d34 ":15,"\u5927\u5c0f\u7684 ":19,"\u5927\u5c0f\u8bbe\u7f6e\u4e3a ":21,"\u5982 ":[18,20,22],"\u5982\u56fe ":[11,20],"\u5982\u679c\u4f7f\u7528 ":20,"\u5982\u679c\u51fa\u73b0\u5bf9\u8bdd ":18,"\u5982\u679c\u559c\u6b22\u4f7f\u7528\u9884\u914d\u7f6e\u7684 ":21,"\u5982\u679c\u56e0\u4e0d\u518d\u9700\u8981\u800c\u65ad\u5f00\u865a\u62df ":20,"\u5982\u679c\u60a8\u662f\u9996\u6b21\u5b89\u88c5 ":14,"\u5982\u679c\u60a8\u66f4\u559c\u6b22\u4f7f\u7528\u9884\u914d\u7f6e ":19,"\u5982\u679c\u6ca1\u6709\u914d\u7f6e\u6216\u53ef\u7528\u7684 ":22,"\u5982\u679c\u8fd0\u884c\u7684\u5185\u6838\u4e0d\u662f ":18,"\u5b57\u6bb5\u4e2d\u4e3a\u65b0\u865a\u62df\u673a\u547d\u540d ":[21,22],"\u5b58\u50a8 ":15,"\u5b58\u50a8\u5e93\u4e2d\u83b7\u53d6\u6700\u65b0\u7684 ":[20,21,22],"\u5b83\u7684\u7ed3\u5c3e\u5e94\u8be5\u4e3a ":18,"\u5b83\u8fd0\u884c\u4e8e ":19,"\u5b89\u88c5 ":[12,13,22,46],"\u5b89\u88c5\u4e00\u822c\u4e91\u6765\u5bbe\u865a\u62df\u673a ":20,"\u5b89\u88c5\u540e*":14,"\u5b89\u88c5\u548c\u4f7f\u7528\u9002\u7528\u4e8e ":17,"\u5b89\u88c5\u76d8\u6620\u50cf\u6587\u4ef6 ":19,"\u5b89\u88c5\u7a0b\u5e8f\u521b\u5efa ":18,"\u5b89\u88c5\u7a0b\u5e8f\u9700\u8981\u81f3\u5c11 ":71,"\u5b8c\u6210 ":18,"\u5b8c\u6574\u6587\u4ef6\u7a0d\u540e\u5c06\u4e0a\u4f20\u81f3 ":15,"\u5b9e\u7528\u7a0b\u5e8f\u4ee5\u4fbf\u5c06\u6620\u50cf\u70e7\u5f55\u81f3 ":11,"\u5bf9\u4e8e ":[21,22],"\u5bf9\u4e8e\u4e00\u822c ":71,"\u5bfb\u627e ":21,"\u5bfc\u822a\u81f3 ":18,"\u5bfc\u822a\u81f3\u5de6\u4fa7\u83dc\u5355\u7684 ":18,"\u5bfc\u822a\u81f3\u6700\u65b0\u7684 ":15,"\u5bfc\u822a\u81f3\u9876\u7ea7 ":18,"\u5c06 ":[15,17,18,20],"\u5c06\u4e0b\u8f7d\u548c\u89e3\u538b\u7f29\u7684\u9884\u914d\u7f6e ":20,"\u5c06\u5927\u5c0f\u8bbe\u7f6e\u4e3a ":19,"\u5c06\u5f15\u5bfc\u56fa\u4ef6\u8bbe\u7f6e\u4e3a ":[21,22],"\u5c06\u6620\u50cf\u6e90\u7c7b\u578b\u66f4\u6539\u4e3a ":15,"\u5c06\u6620\u50cf\u70e7\u5f55\u81f3 ":11,"\u5c06\u76ee\u5f55\u547d\u540d\u4e3a ":22,"\u5c06\u76ee\u5f55\u66f4\u6539\u4e3a ":14,"\u5c06\u7b2c\u4e09\u5206\u533a\u5927\u5c0f\u8bbe\u7f6e\u4e3a ":14,"\u5c06\u865a\u62df\u673a\u5927\u5c0f\u589e\u52a0 ":17,"\u5c06\u8fde\u63a5\u81f3 ":15,"\u5c1d\u8bd5\u5f00\u542f\u865a\u62df\u673a\u65f6 ":18,"\u5c55\u5f00 ":[15,21,22],"\u5de5\u5177\u548c\u914d\u7f6e\u6587\u4ef6\u5b89\u88c5 ":14,"\u5e10\u6237\u548c ":15,"\u5e10\u6237\u8fdb\u884c ":15,"\u5e73\u53f0\u5305\u62ec ":20,"\u5e76\u5c06 ":18,"\u5e94\u7981\u7528*":18,"\u5e94\u8be5\u4f1a\u770b\u5230\u4ee5 ":18,"\u5f00\u542f ":[19,20],"\u5f00\u7bb1\u4f53\u9a8c ":17,"\u5f15\u5bfc\u5b89\u88c5\u7a0b\u5e8f ":21,"\u5f15\u5bfc\u7ba1\u7406\u5668\u4e2d\u51fa\u73b0 ":18,"\u5f39\u51fa ":11,"\u5fc5\u987b\u5378\u8f7d ":11,"\u5fc5\u987b\u5378\u8f7d\u5b89\u88c5\u7a0b\u5e8f ":21,"\u5fc5\u987b\u542f\u7528 ":[21,22],"\u5fc5\u987b\u5728\u865a\u62df\u673a\u4e0a\u4f5c\u4e3a\u865a\u62df ":18,"\u5fc5\u987b\u5c06\u5176\u4e0a\u4f20\u81f3 ":22,"\u5feb\u901f\u5f00\u59cb\u4f7f\u7528 ":13,"\u60a8\u53ef\u4ee5\u5229\u7528\u5982\u4e0b\u6b65\u9aa4\u5728\u60a8\u7684\u865a\u62df\u673a\u4e2d\u5b89\u88c5\u8be5 ":19,"\u60a8\u53ef\u80fd\u5e0c\u671b\u5728\u865a\u62df\u673a\u4e0a\u5b89\u88c5 ":19,"\u60a8\u5fc5\u987b\u4f7f\u7528 ":15,"\u60a8\u73b0\u5728\u53ef\u4ee5\u901a\u8fc7 ":15,"\u6211\u4eec\u63a8\u8350 ":19,"\u6211\u4eec\u63a8\u8350\u4f8b ":14,"\u6211\u4eec\u63d0\u4f9b\u53ef\u5728 ":22,"\u6211\u4eec\u63d0\u4f9b\u811a\u672c\u5728 ":18,"\u6211\u4eec\u8fd8\u63d0\u4f9b\u5173\u4e8e\u4e0b\u8f7d\u548c\u9a8c\u8bc1 ":[19,21,22],"\u6216 ":[16,18,19,20,21,22],"\u6216\u66f4\u5927 ":11,"\u6216\u66f4\u9ad8 ":[21,22],"\u6216\u66f4\u9ad8\u7248\u672c ":19,"\u6216\u66f4\u9ad8\u7248\u672c\u5185\u6838 ":20,"\u6216\u8f6c\u5230 ":71,"\u6240\u4ee5\u4e0d\u518d\u9700\u8981 ":22,"\u6240\u6709\u9879\u5e94\u8fd4\u56de ":12,"\u624b\u52a8\u5b89\u88c5 ":18,"\u6253\u5f00 ":[11,46],"\u6267\u884c ":46,"\u6269\u5c55\u5206\u533a\u540e\u589e\u52a0 ":46,"\u627e\u5230 ":[15,16,46],"\u627e\u5230\u5e76\u9009\u62e9\u6b64\u524d\u89e3\u538b\u7f29\u7684 ":11,"\u62e5\u6709 ":20,"\u6302\u8f7d ":[18,21,22],"\u6307\u5357\u4e2d\u7684 ":18,"\u6307\u5357\u5b8c\u6210 ":[19,21],"\u6309\u4e0b ":[11,46],"\u6309\u4e0b\u952e\u76d8\u53f3\u8fb9\u7684 ":18,"\u6309\u7167 ":[17,18,19,21],"\u6309\u7167\u8bf4\u660e ":[12,14],"\u6309\u7167\u9002\u7528\u4e8e\u60a8\u7684\u7cfb\u7edf\u7684\u8bf4\u660e\u521b\u5efa\u53ef\u5f15\u5bfc\u7684 ":11,"\u6309\u94ae\u521b\u5efa ":15,"\u6309\u94ae\u5c06 ":15,"\u6309\u94ae\u5e76\u547d\u540d\u76ee\u5f55 ":21,"\u63a7\u5236\u5668:":18,"\u63d0\u4f9b\u4e00\u4e2a\u4e13\u4e3a\u4e91\u73af\u5883\u8bbe\u8ba1\u7684 ":19,"\u63d0\u793a ":16,"\u63d2\u5165 ":[11,18],"\u63d2\u5165\u5e76\u6302\u8f7d ":14,"\u64cd\u4f5c ":21,"\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u5728 ":11,"\u64cd\u4f5c`":21,"\u652f\u6301 ":71,"\u6570\u636e\u5b58\u50a8 ":[21,22],"\u6587\u4ef6 ":[18,21],"\u6587\u4ef6\u4e2d\u53d1\u73b0 ":17,"\u6587\u4ef6\u590d\u5236\u5230 ":14,"\u6587\u4ef6\u5e76\u70b9\u51fb ":18,"\u6587\u4ef6\u7cfb\u7edf ":46,"\u6587\u4ef6\u9002\u7528\u4e8e ":17,"\u6587\u6863 ":22,"\u65ad\u5f00 ":[20,21,22],"\u65b0 ":20,"\u65b0\u7684\u865a\u62df\u673a\u5c06\u521b\u5efa\u5b8c\u6210\u5e76\u51fa\u73b0\u5728 ":18,"\u65f6\u9009\u62e9 ":16,"\u6620\u50cf\u4ee5 ":20,"\u6620\u50cf\u5747\u6709\u4e00\u4e2a\u76f8\u5e94\u7684 ":20,"\u6620\u50cf\u6587\u4ef6 ":[20,22],"\u6620\u50cf\u6863\u6848\u6587\u4ef6\u4e0a\u4f20\u81f3\u6307\u5b9a\u7684 ":15,"\u6620\u50cf\u7684\u78c1\u76d8\u5927\u5c0f\u4e3a ":46,"\u662f ":16,"\u662f\u4e00\u4e2a ":[19,20,21,22],"\u662f\u5c06\u5728 ":46,"\u662f\u7528\u4e8e ":19,"\u663e\u793a ":18,"\u6700\u540e\u8fdb\u5165 ":17,"\u6700\u5c0f\u5b89\u88c5\u53ef\u4ee5\u5728\u4ec5\u6709 ":21,"\u6700\u5c0f\u5b89\u88c5\u53ef\u5728 ":21,"\u6700\u5c11\u9700\u8981 ":19,"\u6709 ":[19,20],"\u6709\u4e24\u79cd\u65b9\u6cd5\u53ef\u627e\u5230\u9884\u6784\u5efa ":46,"\u6709\u5173\u4f7f\u7528 ":[19,20],"\u6709\u5173\u5982\u4f55\u5728\u5176\u4e0a\u5b89\u88c5 ":19,"\u670d\u52a1\u5668\u7684 ":21,"\u672c\u4f8b\u663e\u793a ":46,"\u672c\u4f8b\u8868\u660e\u4e3b\u673a\u7684\u5904\u7406\u5668\u548c ":12,"\u672c\u6307\u5357\u4ecb\u7ecd\u4e86\u5229\u7528\u914d\u7f6e\u6587\u4ef6\u548c ":14,"\u672c\u6307\u5357\u4ecb\u7ecd\u4e86\u5728\u9700\u8981\u66f4\u591a\u5bb9\u91cf\u7684\u65f6\u5019\u5982\u4f55\u589e\u52a0\u9884\u6784\u5efa ":46,"\u672c\u6587\u622a\u56fe\u91c7\u7528\u4e86 ":20,"\u672c\u6587\u6863\u7684\u622a\u5c4f\u663e\u793a\u4e86 ":19,"\u672c\u8bf4\u660e\u4e3a ":18,"\u672c\u9875\u8bf4\u660e\u5728 ":15,"\u672c\u9875\u8bf4\u660e\u5982\u4f55\u521b\u5efa\u65b0\u7684 ":21,"\u672c\u9875\u8bf4\u660e\u5982\u4f55\u5229\u7528 ":[14,17,18],"\u672c\u9875\u8bf4\u660e\u5982\u4f55\u5728 ":[16,20,22],"\u673a\u5668 ":18,"\u6765\u5bbe\u64cd\u4f5c\u7cfb\u7edf\u7684\u5f00\u6e90 ":19,"\u67d0\u4e9b ":11,"\u67e5\u627e ":[17,20,22],"\u67e5\u770b ":[14,18,71],"\u67e5\u770b\u5668\u8fde\u63a5\u81f3 ":17,"\u67e5\u770b\u5f53\u524d\u53d1\u5e03\u7684 ":15,"\u67e5\u9605 ":18,"\u6839\u636e ":15,"\u6839\u636e\u9700\u8981\u6dfb\u52a0\u5176\u4ed6 ":14,"\u68c0\u67e5\u4e3b\u673a\u662f\u5426\u53ef\u4ee5\u5728\u4e00\u4e2a\u5bb9\u5668\u4e2d\u8fd0\u884c ":12,"\u68c0\u67e5\u4e3b\u673a\u7684\u5904\u7406\u5668\u548c ":12,"\u68c0\u67e5\u4e3b\u673a\u7cfb\u7edf\u7684\u5904\u7406\u5668\u548c ":12,"\u68c0\u67e5\u5904\u7406\u5668\u548c ":[9,10,13,14],"\u68c0\u67e5\u7528\u6765\u521b\u5efa\u9884\u6784\u5efa\u6620\u50cf\u7684 ":46,"\u68c0\u6d4b\u5230 ":11,"\u6b64\u5904\u4f7f\u7528 ":11,"\u6b64\u64cd\u4f5c\u4f1a\u91cd\u65b0\u542f\u52a8 ":19,"\u6b64\u811a\u672c\u5c06\u542f\u52a8 ":17,"\u6d4f\u89c8 ":15,"\u6d4f\u89c8\u5668 ":[21,22],"\u6d4f\u89c8\u81f3 ":46,"\u6dfb\u52a0 ":[18,46],"\u6dfb\u52a0\u663e\u5361\u9a71\u52a8\u7a0b\u5e8f ":17,"\u6dfb\u52a0\u81f3 ":17,"\u70b9\u51fb ":[11,15,18,19,20,21,22],"\u70b9\u51fb\u00b7":[19,20],"\u70b9\u51fb\u53f3\u4fa7\u7684 ":22,"\u70b9\u51fb\u5de6\u4e0a\u90e8\u5c4f\u5e55\u83dc\u5355\u4e2d\u7684 ":15,"\u70b9\u51fb\u6807\u8bb0\u4e3a ":18,"\u7136\u540e\u5c06 ":14,"\u7136\u540e\u6302\u8f7d ":21,"\u7136\u540e\u6302\u8f7d\u8f6c\u6362\u540e\u7684 ":22,"\u7136\u540e\u6309\u7167\u8bf4\u660e ":12,"\u7136\u540e\u70b9\u51fb ":[15,18],"\u7136\u540e\u70b9\u51fb\u5e95\u90e8\u7684 ":15,"\u7136\u540e\u9009\u62e9 ":[18,20,21],"\u7248 ":20,"\u7248\u672c\u4ee5\u53ca ":19,"\u73af\u5883\u4e2d\u8fd0\u884c ":16,"\u7528\u4e8e ":20,"\u7528\u4e8e\u5f15\u5bfc\u542f\u52a8\u81f3 ":20,"\u7528\u4f5c ":[13,22],"\u7528\u6237\u8eab\u4efd\u767b\u5f55 ":17,"\u7531\u4e8e\u4e0a\u4e00\u6b65\u5728 ":17,"\u767b\u5f55 ":[15,17],"\u767b\u5f55\u5e76\u786e\u8ba4 ":18,"\u767b\u5f55\u62e5\u6709 ":46,"\u7684 ":[11,17,18,19,21,46,71],"\u7684\u5185\u6838 ":18,"\u7684\u6587\u4ef6 ":18,"\u7684\u65b0\u865a\u62df\u673a\u4e0a\u624b\u52a8\u5b89\u88c5 ":21,"\u7684\u84dd\u8272 ":18,"\u7684\u9ed8\u8ba4 ":17,"\u76d8\u4e2d\u5305\u542b\u627e\u5230\u7684 ":14,"\u76d8\u63d2\u5165\u65f6\u81ea\u52a8\u6302\u8f7d ":11,"\u76ee\u5f55\u4e0b\u8f7d\u6700\u65b0\u7684\u9884\u6784\u5efa ":17,"\u76f8\u5e94\u7684 ":20,"\u786c\u76d8 ":[20,21,22],"\u786e\u4fdd\u4e3b\u673a\u7cfb\u7edf\u7684 ":18,"\u786e\u8ba4\u5c06\u5728\u5176\u4e0a\u5f00\u542f\u865a\u62df\u673a\u7684\u6258\u7ba1\u4e3b\u673a\u7684 ":17,"\u78c1\u76d8\u6620\u50cf ":16,"\u79fb\u9664\u4efb\u4f55\u7ed3\u5c3e\u4e0d\u662f ":18,"\u79fb\u9664\u9ed8\u8ba4 ":22,"\u7b2c ":16,"\u7b2c\u4e00\u79cd\u65b9\u6cd5\u662f\u5f15\u5bfc ":46,"\u7ba1\u7406 ":22,"\u7ba1\u7406\u548c\u8fd0\u884c ":[19,20,21,22],"\u7cfb\u7edf\u4e0d\u652f\u6301 ":18,"\u7ecf\u8fc7\u786c\u4ef6\u52a0\u901f\u7684\u865a\u62df\u5316*":18,"\u7f16\u8f91 ":19,"\u800c ":[11,46],"\u800c\u4e14\u5b83\u8981\u6c42\u91c7\u7528\u652f\u6301 ":71,"\u800c\u975e\u5f00\u542f\u865a\u62df\u673a\u7684\u63a7\u5236\u53f0\u4e0e ":17,"\u81f3 ":46,"\u81f3\u5f3a\u00ae":71,"\u82f1\u7279\u5c14 ":71,"\u82f1\u7279\u5c14\u00ae":71,"\u83b7\u53d6 ":11,"\u83dc\u5355\u548c\u63d0\u793a\u4e0e\u5176\u4ed6 ":19,"\u83dc\u5355\u70b9\u51fb ":18,"\u83dc\u5355\u9009\u62e9 ":18,"\u865a\u62df\u5316\u82f1\u7279\u5c14 ":[19,20],"\u865a\u62df\u673a ":[18,21,22],"\u865a\u62df\u673a\u4e0a\u6302\u8f7d ":18,"\u865a\u62df\u673a\u4e2d\u542f\u7528\u548c\u542f\u52a8 ":17,"\u865a\u62df\u673a\u4e2d\u914d\u7f6e ":17,"\u865a\u62df\u673a\u4ee5\u542f\u52a8 ":17,"\u865a\u62df\u673a\u5b9e\u4f8b\u5df2\u521b\u5efa\u5e76\u5206\u914d\u4e86\u4e00\u4e2a\u516c\u5171 ":15,"\u865a\u62df\u673a\u7684\u9ed8\u8ba4\u753b\u9762\u6bd4\u4f8b\u4e3a ":17,"\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u5728\u5b83\u4e0a\u9762\u5b89\u88c5 ":19,"\u8981\u518d\u6b21\u542f\u7528 ":18,"\u8981\u53d1\u73b0\u7248\u672c\u53f7 ":46,"\u8981\u542f\u7528 ":19,"\u8981\u5728\u53e6\u4e00\u7cfb\u7edf\u4e0a\u514b\u9686\u73b0\u6709\u7684 ":14,"\u8981\u624b\u52a8\u786e\u8ba4 ":71,"\u8981\u65ad\u5f00 ":19,"\u8981\u6dfb\u52a0\u65b0\u786c\u76d8\u5e76\u6302\u8f7d\u9884\u914d\u7f6e\u7684 ":20,"\u8981\u7981\u7528 ":18,"\u8981\u901a\u8fc7 ":17,"\u89c1\u56fe ":[11,19,20,21,22],"\u89e3\u51b3\u4e86 ":17,"\u8bbe\u5907\u6216 ":22,"\u8bbe\u7f6e ":[14,15,16,18,21],"\u8bbe\u7f6e\u4e3a ":[14,19,20],"\u8bbf\u95ee ":[19,20,21,22],"\u8be5 ":15,"\u8be5\u6587\u4ef6\u4ece\u9884\u914d\u7f6e\u7684 ":22,"\u8be5\u6587\u4ef6\u5728 ":46,"\u8be5\u6620\u50cf\u901a\u5e38\u4f4d\u4e8e ":22,"\u8be6\u60c5\u53ef\u8bbf\u95ee\u7f51\u7ad9 ":19,"\u8be6\u7ec6\u8d44\u6599\u9875\u4e0a\u7684 ":15,"\u8bf7\u4f7f\u7528 ":17,"\u8bf7\u53c2\u8003 ":15,"\u8bf7\u53c2\u9605 ":[15,16,19,21,22],"\u8bf7\u5728 ":20,"\u8bf7\u6309\u4e0b\u952e\u76d8\u4e0a\u7684 ":19,"\u8bf7\u67e5\u770b ":[19,20,21],"\u8bf7\u67e5\u770b\u6211\u4eec\u7684 ":19,"\u8bf7\u70b9\u51fb ":19,"\u8bf7\u786e\u4fdd\u5220\u9664 ":20,"\u8c03\u6574\u4e3a ":46,"\u8f6c\u5230 ":[19,21,46],"\u8f6c\u5411 ":14,"\u8f93\u5165 ":46,"\u8f93\u5165\u65b0\u7684 ":46,"\u8fd0\u884c ":[13,16,46],"\u8fd0\u884c\u9884\u914d\u7f6e\u7684 ":[13,19,21,22],"\u8fd4\u56de ":18,"\u8fd4\u56de\u4e3b ":18,"\u8fd8\u53ef\u4ee5\u53c2\u8003 ":22,"\u8fd8\u53ef\u4ee5\u5728\u56fe ":46,"\u8fd8\u63d0\u4f9b\u4e00\u4e2a\u9002\u7528\u4e8e\u684c\u9762\u73af\u5883\u7684 ":[21,22],"\u8fdb\u5165 ":15,"\u8fdb\u884c ":17,"\u8fde\u63a5 ":[21,22],"\u8fde\u63a5\u4e86 ":11,"\u8fde\u63a5\u5230 ":22,"\u9000\u51fa ":[18,46],"\u9002\u7528\u4e8e ":20,"\u9009\u4e2d ":[19,20,21,22],"\u9009\u62e9 ":[11,15,16,18,19,20,21,22],"\u9009\u62e9\u5df2\u8f6c\u6362\u7684 ":22,"\u9009\u62e9\u60a8\u559c\u6b22\u7684 ":20,"\u9009\u62e9\u6216\u521b\u5efa\u65b0\u9879\u76ee\u6765\u6258\u7ba1 ":15,"\u9009\u62e9\u6b64\u524d\u4e0a\u4f20\u81f3 ":21,"\u9009\u62e9\u73b0\u6210\u7684 ":20,"\u9009\u62e9\u89e3\u538b\u7f29\u7684 ":[19,21,22],"\u9009\u62e9\u9884\u914d\u7f6e\u7684 ":20,"\u9009\u9879\u8bbe\u7f6e\u4e3a ":[21,22],"\u901a\u5e38\u53ef\u4ee5\u5728\u5982\u4e0b\u5730\u5740\u627e\u5230 ":[19,20],"\u901a\u5e38\u6539\u53d8\u7684\u8bbe\u7f6e\u5728\u4e0b\u9762\u7684 ":14,"\u901a\u8fc7 ":22,"\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u7684\u6700\u7b80\u5355\u65b9\u6cd5\u662f\u5220\u9664 ":17,"\u914d\u7f6e ":18,"\u914d\u7f6e\u6587\u4ef6 ":14,"\u91cd\u542f ":17,"\u91cd\u65b0\u542f\u52a8 ":17,"\u9488\u5bf9 ":17,"\u9632\u6b62\u5b83\u518d\u6b21\u5f15\u5bfc ":[19,21],"\u9700\u8981 ":[19,21,22,71],"\u9700\u8981\u5378\u8f7d ":18,"\u9700\u8981\u81f3\u5c11 ":21,"\u9700\u8981\u8fd0\u884c ":71,"\u9875\u4e0a\u7684\u6700\u65b0\u53ef\u7528 ":16,"\u9875\u4e0b\u8f7d ":[11,18],"\u9884\u5b89\u88c5 ":21,"\u9884\u6784\u5efa ":46,"\u9996\u5148 ":12,"\u9996\u5148\u4ed4\u7ec6\u68c0\u67e5 ":18,"\u9a71\u52a8\u5668 ":[21,22],"\u9a8c\u8bc1\u5b89\u88c5\u7684\u5185\u6838\u4e3a ":18,"\u9ad8\u7ea7\u9009\u9879 ":18,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4e0d\u5141\u8bb8\u4f7f\u7528 ":15,"\u9ed8\u8ba4\u60c5\u51b5i":19,"_ ":[35,36,57,73],"_,":57,"_.":[66,67],"_/":[57,73],"_\\":[57,73],"__ ":[57,73],"__,":73,"__/":[57,73],"___ ":57,"___/":57,"____ ":[57,73],"_____ ":73,"_____/":57,"___|":73,"__attribute__(":76,"__future__ ":58,"_structure-":66,"_wiki ":66,"_|":73,"a ":[1,2,3,5,6,7,8,9,10,13,15,16,18,19,20,21,23,25,26,27,29,30,31,33,37,39,40,41,45,48,50,51,54,55,57,59,61,62,63,64,65,66,67,69,71,72,75,78,79,80,81,83,84,86,89,91,93],"a)":[56,59],"a,":76,"a-":59,"a.":34,"a/":[56,60],"a512 ":42,"a[":76,"a\"":34,"a]":10,"aadd(":76,"abbr:":66,"abi-":47,"ability ":[10,32,40,73,88],"able ":[5,9,23,24,31,32,36,43,58,60,66,76,85],"about ":[23,28,29,32,35,36,37,41,44,52,57,58,59,60,63,65,66,67,72,73,75,80,93],"about:":[80,93],"above ":[56,66,80,90],"above,":[10,36,59,83],"above.":[10,34,38,58,74,86],"above:":90,"absent,":60,"absolutely ":0,"abstraction ":63,"accelerated ":[59,83],"acceleration ":63,"accelerator.":63,"accelerators ":59,"accelerators.":59,"accept ":[9,10,60,73,93],"accept=":56,"acceptable ":67,"acceptable;":66,"accepted ":60,"accepted,":34,"accepting ":[56,93],"accepts ":56,"access ":[28,56,58,59,60,63,72,73,74,77,80,84,85,86,88,90,93],"access.":[63,80,90,93],"access:":75,"accessed ":[32,92],"accessible ":[39,58,67,74,86],"accessing ":[59,63],"accidental ":29,"accommodate ":[40,59],"accompanying ":27,"accomplish ":[30,92],"accomplished ":[0,56],"according ":[39,60,63,66,80],"accordion,":67,"account ":[40,43,56,59,72,73,75,85],"account,":[43,72],"account.":[59,90],"accounting.":48,"accounts ":[56,73,90],"accounts,":73,"accounts.":[59,63,73,85],"accruing ":72,"accuracy ":82,"accuracy,":82,"accurately ":67,"achieved ":2,"acl.":63,"acme ":63,"acpi ":18,"acpi)":63,"acpi-":40,"acpica-":63,"acquire ":[54,92],"acr ":73,"acronym ":66,"across ":[0,23,31,58,63,77],"acs ":73,"act ":[4,32,54,59],"action ":[10,30,54,67,84],"action.":[53,66,67,92],"action:":60,"actions ":[60,63,92],"actions.":[6,60],"activated ":26,"activated,":[73,78],"activates ":54,"active ":[40,43,53,56,60,63,73,85],"active(":64,"active.":60,"active:":64,"activities ":9,"activity.":63,"actual ":[14,26,31,54,67],"actually ":[32,80],"ad ":73,"ad)":63,"ada,":63,"adapter ":[54,63],"adapters.":54,"add ":[2,4,9,17,18,19,20,24,26,28,31,33,34,38,39,40,41,46,47,50,53,54,56,58,60,62,64,65,66,67,72,73,74,75,76,77,78,80,82,83,84,85,87,88,90,92],"add,":[28,65],"add:":[80,88],"added ":[2,28,31,58,60,66,72,73,93],"added.":[28,34,90],"adder ":52,"adding ":[2,10,28,39,40,52,53,56,66,76,80],"addition ":[34,59,65,83],"addition,":82,"additional ":[1,4,10,23,24,28,29,31,35,36,54,55,56,63,66,67,70,72,73,78,91],"additionally ":5,"additionally,":[25,31,66,74,77,87],"additions ":[18,23],"addr-":17,"addr=":53,"address ":[6,10,23,28,29,38,39,53,54,55,56,58,60,63,67,73,85,86,87,92],"address)":56,"address,":[38,39,58,85,86],"address-":17,"address.":[38,54,73,87],"address:":[10,73],"address=":[38,54,55],"address>":[39,53],"address]":56,"addressable ":63,"addresses ":[38,39,53,54,55,67],"addresses.":54,"addressing ":29,"adds ":[31,36,52,54,56,83],"adheres ":[60,80],"adjust ":63,"adjusting ":40,"adjustments-":63,"adjusts ":40,"admin ":60,"admin/":92,"administer ":73,"administration ":63,"administrative ":[9,10,60,84],"administrator ":56,"administrator,":49,"administrator.":[9,43],"administrators ":[3,5,31,45],"adminstrator ":56,"admonition ":66,"adopt.":[4,32],"advanced ":[12,38,47,63,83,84,85,93],"advanced,":63,"advanced-":83,"advancements ":76,"advantage ":[29,30,32,58,76,84],"advantages.":5,"advantages:":5,"advisor ":73,"advisor.":73,"advisories.":29,"aerror(":76,"aes)":12,"aes-":71,"aes.":63,"af1b-":11,"after ":[2,5,6,9,10,24,27,28,31,33,34,35,36,39,40,41,44,45,53,54,56,58,59,60,63,64,66,82,83,84,90,92],"after=":56,"again ":[24,28,34,73,76,90],"again,":49,"again.":[24,40,82,90],"again:":24,"against ":[26,28,29,31,32,35,36,58,63,83],"against.":34,"agent ":63,"aggregation.":55,"agile ":0,"ago ":[47,52,58],"ahead ":91,"ai ":58,"ai.":73,"aid ":38,"aim ":[32,34,40],"aiming ":74,"aims ":29,"aio=":17,"aka.":73,"aks ":73,"alert ":66,"alexnet ":[58,59],"algebra)":63,"algorithm ":63,"algorithm.":63,"algorithms ":40,"aliases ":[14,35,36],"all ":[0,1,5,9,10,11,23,24,28,29,31,32,34,35,36,38,40,42,43,46,48,49,51,55,56,60,62,63,65,66,67,73,74,75,77,79,80,81,82,90,92],"all,":[4,60],"all]":31,"allocate ":[53,60],"allocated ":[60,73,80],"allocation ":53,"allow ":[6,9,10,28,32,39,49,54,60,72,73,75,80,85,90],"allow-":[35,58],"allowed ":[0,49,60,66,90],"allowed.":[9,10],"allowing ":[5,32],"allowoverride ":90,"allows ":[0,4,5,9,14,23,24,28,29,30,31,36,40,43,56,63,64,72,74,83,90],"allowtcpforwarding ":64,"alone.":66,"along ":[28,32,72,90],"alongside ":[9,10],"alow ":64,"alphanumeric ":[9,10],"already ":[28,30,31,32,34,38,56,59,60,64,72,73,77,80,84,85,86,88,91],"already,":24,"alsa-":63,"also ":[0,3,6,9,10,23,24,26,27,28,29,31,32,34,39,40,43,45,58,59,60,67,72,73,75,83,84,85,86,90],"also,":31,"also:":[36,83],"alt ":[66,83],"alt:":66,"alt>":19,"alter ":2,"alternative ":[0,31,63],"alternatively,":[10,28,34,62,82],"although ":[2,40,47,56,83],"altogether ":[35,36],"always ":[9,28,31,36,83],"alwaysshared ":56,"am ":34,"amateur ":63,"amateur-":63,"amazon ":[15,59,63,89],"amazon*":[20,42,69],"amazon.":[59,72],"amazonaws.":72,"ambiguity ":31,"ambiguity.":67,"amd ":40,"amd-":[18,19,20],"america/":[9,50],"ami ":72,"ami)":72,"ami.":72,"amount ":[29,60,66],"amounts ":[57,77],"an ":[0,2,5,6,9,10,11,14,23,26,28,29,31,33,34,37,39,40,41,42,44,46,51,52,53,54,55,57,58,59,60,63,64,65,66,72,73,76,78,79,80,82,83,84,85,86,87,90],"analogs ":60,"analysis ":[2,24,63],"analysis,":[6,63],"analysis.":[60,63],"analytics ":[33,59,60,63,73],"analytics,":60,"analytics-":59,"analyze ":76,"analyzer ":63,"analyzer.":63,"analyzing ":[24,63],"and ":[1,2,3,4,5,6,7,9,10,11,15,16,18,19,21,22,23,24,25,26,27,30,33,37,38,39,41,45,48,49,50,51,52,54,55,57,60,61,62,63,64,65,68,69,71,77,78,79,81,82,85,86,89,91,93],"and/":24,"and:":60,"angeles.":50,"angle ":66,"annotated ":63,"announcement.":58,"anonymous ":[60,90],"another ":[6,9,10,32,53,66,72,73,82],"another.":[28,53],"ansible*":32,"answered ":65,"answers ":0,"answers.":61,"antivirus ":63,"any ":[2,4,5,9,10,23,24,26,28,30,31,32,34,35,39,41,44,47,49,51,52,56,57,58,59,60,63,65,66,72,74,77,78,79,80,82,85,87,90],"any.":32,"anyone ":[66,85,90],"anyone,":66,"anywhere,":51,"apache ":[30,63,90],"apache*":[77,89],"apache-":87,"apache.":77,"api ":[6,60,63],"api)":63,"api:":60,"apis ":87,"apiversion:":[58,80],"app ":[6,60,63,73],"app,":75,"app.":[56,75,84],"app/":53,"app:":[56,58],"appear ":[9,28,54,66,75,90,92],"appear,":[58,90],"appear.":[9,10],"appear:":74,"appears ":[9,10,46,72,77,92,93],"appears,":[9,10,72,73,77,81,90,92],"appears.":10,"append ":[10,34,83],"appending ":[36,83],"apples ":67,"applet.":63,"applicable)":27,"application ":[0,9,32,34,40,60,63,73,75,76,80,86,87,90],"application,":[32,75,84],"application-":[30,32,41,63,83],"application.":[9,53,63,76,82],"applications ":[9,31,32,43,56,60,63,88,89,93],"applications,":53,"applications.":[32,53,63,73,80],"applied ":34,"applied.":10,"applies ":48,"apply ":[5,10,31,32,34,55,58,66,76,79,80,84],"applying ":51,"appreciate ":67,"approach ":[0,4,5,26,29,32,34,76],"approach,":[4,34,35,36],"approach.":3,"approaches ":[0,5],"appropriate ":[10,24,26,30,32,38,56,66,80,83,85,86],"appropriate)":66,"appropriate.":[66,67],"appropriately ":[32,80],"appropriately.":32,"approves,":65,"apps ":[56,83],"apps-":[40,63],"apps.":73,"apps:":[6,60],"appservice ":73,"appstream-":63,"apr-":63,"apr.":63,"apt ":31,"apt-":[3,17,43,56,81],"arbitrary ":[60,63],"arbitrary-":63,"arch:":60,"arch=":76,"arch_atom.":76,"architect ":33,"architecture ":[32,37,45,57,63,76],"architecture,":29,"architecture-":[54,76],"architecture.":[6,58],"architecture:":52,"architectures ":[25,76],"architectures.":[63,76],"archive ":[31,36,63],"archive.":[34,36,63],"archive/":24,"archiver ":63,"archives ":36,"archives,":63,"archives.":63,"are ":[1,2,3,4,5,6,7,9,10,11,23,24,25,26,27,28,29,30,31,32,34,35,36,38,39,40,42,43,45,47,48,49,52,53,54,55,56,58,59,60,61,65,66,67,69,72,73,74,76,77,78,80,81,82,83,84,86,90,91,92,93],"are:":82,"area ":[63,82],"areas ":[30,32],"areas.":30,"argc,":60,"args:":58,"argument ":[9,10,58,59,60],"argument,":[9,10],"argument.":60,"arguments ":[23,31],"arguments,":[9,10,53],"arguments.":[10,23],"arguments:":76,"argv)":60,"ark.":71,"arol(":76,"around ":23,"array ":[76,82],"arrow ":9,"arrows ":10,"arrows.":10,"article ":93,"article`":67,"articles ":92,"artifact ":32,"artifacts ":37,"as ":[0,2,3,4,5,6,7,9,10,13,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47,49,51,53,54,55,56,57,58,59,60,61,63,64,65,66,67,68,72,73,74,75,76,77,78,80,81,82,83,84,85,86,88,90,92,93],"as-":59,"as.":56,"as:":[10,36],"ask-":49,"asked ":[0,29,61],"asking ":72,"asks ":[34,56],"aslr)":29,"asprintf(":60,"assembler ":63,"assembler.":63,"assembly,":63,"assets.":73,"assign ":[33,39,53,54,55],"assign,":53,"assigned ":[9,56,80],"assigning ":38,"assignment:":39,"assist ":[2,24,60,63],"assistant,":63,"associate ":48,"associated ":[5,23,28,73,83,90],"assume ":67,"assumed ":[2,32],"assumes ":[44,47,53,60,72,74,75,78,79,80,82,85,87,88,90,92,93],"assumption ":[30,81],"assurance ":37,"assure ":[10,64,81,84,86],"asterisks ":[66,92],"asub(":76,"asynchronous ":63,"at ":[0,2,3,4,5,9,10,18,23,24,26,27,28,29,30,31,33,34,40,43,45,48,49,53,54,56,57,59,60,63,66,67,72,73,74,75,80,82,83,84,85,90,92],"at-":63,"at:":[26,49,92],"atk.":63,"atkmm.":63,"atom ":63,"atom\"":76,"attaches ":60,"attacks.":[29,92],"attempt ":9,"attempting ":52,"attempts ":[2,10,24],"attica.":63,"attr.":63,"attributes ":72,"attribution ":[8,66],"audience ":67,"audience,":67,"audiences.":67,"audio ":63,"audiomodules-":47,"audit ":63,"audit.":63,"auditing.":63,"augmenting ":0,"authenticate ":[56,73],"authenticate.":73,"authenticate?":56,"authenticated ":63,"authentication ":[73,93],"authentication,":86,"authentication.":93,"authenticity ":[72,73,77],"authenticity.":29,"authoritative ":63,"authorities ":29,"authorized ":77,"auto ":[9,10],"auto-":[9,23,31],"autoar.":63,"autoconf.":63,"autoindex ":[28,54],"autoinstall=":36,"automate ":[23,32,37,80],"automated ":[2,5,24,32,34],"automatic ":[2,9,49,63],"automatical ":10,"automatically ":[2,9,10,23,24,28,29,32,35,36,40,49,51,54,60,63,74,78,81,83,93],"automatically,":[28,29,54],"automatically.":[26,49],"automating ":[32,80],"automation ":[37,63],"automotive ":63,"automotive-":63,"autoproxy ":23,"autoproxy,":23,"autoproxy.":23,"autospec ":[24,28,34],"autospec,":24,"autospec-":24,"autospecnew ":24,"autostart ":[56,59],"autoupdate ":31,"autoupdate:":14,"autproxy.":23,"aux-":77,"auxiliary ":26,"auxservices.":77,"availability ":[32,63],"availability,":60,"available ":[1,3,5,9,10,24,26,27,28,29,31,32,34,35,36,39,40,42,44,46,53,56,57,58,59,60,62,69,70,73,74,75,80,82,84,85,90,92,93],"available,":[10,72,73],"available.":[24,28,29],"available:":18,"avb-":47,"avbstreamhandler-":47,"average ":27,"avialable,":23,"avoid ":[29,32,60,63,66,80],"avoidable,":66,"avoided ":32,"avoids ":26,"avx-":58,"avx2 ":76,"avx2.":76,"avx2\"":76,"aware ":[9,32,85],"away ":[4,32],"awesome ":63,"aws ":[33,63,72],"aws)":63,"aws*":[20,42,59,69],"aws-":63,"aws.":[20,42,59,69,72],"awscleartestkey.":72,"az ":73,"az'":73,"az-":45,"azure ":[15,20,42,63,69,89],"azure*":[20,42,69,73],"azure,":73,"azure-":[20,42,63,69,73],"azure.":[20,42,63,69,73],"azurecliprod.":73,"b ":[28,52,53,56,57,58,76],"b)":59,"b,":76,"b/":60,"b26d-":11,"b[":76,"b\"":56,"b]":31,"babl.":63,"back ":[6,11,28,34,40,63,66,73,83,90],"back-":66,"backed ":[73,74],"backend ":[6,60],"backend.":60,"backend/":60,"backend:":[6,60],"background ":[23,49,56],"background.":26,"backing ":[32,52],"backports,":63,"backports.":63,"backup ":[50,63,73],"backup'":73,"backups.":73,"backward-":76,"backwards ":63,"bacon.":67,"bad ":85,"bad.":63,"balance ":40,"balancer.":63,"balancing ":63,"banana ":67,"bananas ":67,"band ":32,"bandwidth ":[55,63],"bar ":[10,15,67,72],"bar,":[9,72,93],"bar.":[9,60],"bare ":[13,18,28,47,60,61,74,75,78,80,82,87,88,90],"bare-":[53,73,82],"base ":[28,31,34,73],"base-":63,"base.":[52,63],"based ":[0,1,2,3,5,24,27,28,29,31,32,33,34,37,40,41,55,56,57,58,63,72,74,76,81,83,90,91],"based)":63,"based,":63,"baseline ":57,"baseline.":57,"basename ":18,"baseurl=":47,"bash ":57,"bash'":58,"bash/":52,"bash\"":52,"bashrc'":73,"bashrc.":73,"bashrc:":88,"basic ":[2,24,28,31,43,45,52,58,59,61,63,66,67,73,80,84],"basic,":37,"basic-":[14,53,57,58,63],"basic.":20,"basic:":73,"basics,":74,"basis ":[5,48,80],"basis,":31,"basis.":52,"batch ":[59,73],"batch.":73,"batch_size ":58,"batchai ":73,"battery ":67,"battery.":67,"bcache ":63,"bcache-":63,"bcaf-":11,"bcc)":63,"bcdedit ":18,"bdevice\"":14,"bdevice}":14,"be ":[0,2,5,6,7,9,10,15,22,23,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,42,43,44,45,48,49,50,51,52,53,55,56,57,58,59,60,61,63,64,65,66,68,71,72,73,74,76,77,79,80,82,83,85,88,90,92,93],"because ":[0,5,7,23,28,36,39,40,48,49,51,52,53,54,55,56,57,59,67,79,80],"become ":[29,30],"becomes ":93,"becomes:":58,"been ":[0,9,16,22,24,28,29,31,34,35,38,39,51,58,60,68,73,74,90,92],"before ":[6,9,10,11,24,28,29,35,36,38,39,41,42,43,47,51,54,56,58,59,60,67,72,74,77,78,79,80,81,82,83,85,87,90],"before,":[60,65],"begin ":[34,60],"begin,":[35,36],"beginners ":82,"begins ":73,"behavior ":[2,24,35,36],"behavior,":32,"behavior.":83,"behind ":[23,28,31,74,80,85,88],"being ":[7,23,24,29,32,35,36,38,49,56,60,63],"believe ":60,"believes ":29,"below ":[0,9,10,24,29,30,32,34,36,38,49,51,56,67,73,74,80,87,90],"below)":59,"below,":[24,35,40,49,51],"below.":[10,54,56,58,60,64,80,83,84,90,92],"below:":[53,60,73,74,83],"bench.":76,"bench_iodim ":76,"benchmark ":58,"benchmark.":63,"benchmarking ":58,"benchmarking.":58,"benchmarks ":58,"benchmarks,":58,"benchmarks.":58,"benchmarks/":58,"benefit ":88,"benefit.":67,"benefits ":[29,43,80],"benefits,":32,"beside ":[10,18,86,90],"best ":[4,15,25,29,31,55,58,63,65,80,89],"best-":59,"better ":66,"between ":[0,5,9,10,14,28,30,31,33,39,54,56,58,63,83],"beyond ":[32,63,91,92],"bgp/":63,"bi-":63,"big ":[63,77],"big-":[63,77,87],"billing ":73,"billing.":73,"bin ":59,"bin'":73,"bin-":[47,63],"bin/":[24,26,31,47,49,52,56,58,60,73,83],"binaries ":[26,36,54,81],"binaries,":3,"binaries.":[3,36,85],"binary ":[5,24,26,31,58,63],"binary:":52,"bind=":53,"bindcarrier=":55,"binding ":53,"bindings ":[63,83,84],"bios ":[6,9,10,17,18,19,20,40,42,44,54,60,69],"bios)":40,"bios,":[42,69],"bios.":[36,40],"bios/":16,"bios_version:":60,"biosdecode.":24,"bioses ":9,"bit ":[12,57,63],"bitmap ":[63,66],"bits ":66,"blacklist ":[2,83],"blacklist,":29,"blank ":[58,73],"blank,":80,"blank.":90,"blas ":63,"bldg2-":45,"blob.":73,"blobs,":73,"block ":[2,14,39,63,66,86,90],"block-":14,"block.":66,"block:":66,"blocked ":23,"blocks ":29,"blocks)":46,"blocks.":77,"blog ":[0,29,92],"blog.":[0,92],"blog/":92,"blogs/":0,"blue ":18,"blueprint ":32,"bluetooth ":63,"bluetooth.":63,"bluez.":63,"bmap)":63,"bmap-":63,"board_name:":60,"body ":66,"body,":67,"boinc-":63,"bold,":66,"bold.":66,"bond ":55,"bond1-":55,"bond1.":55,"bond=":55,"bond]":55,"bonded ":55,"bonding ":55,"bonds ":55,"bones ":73,"book ":63,"boost ":[40,63],"boost.":[40,63],"boot ":[9,11,28,32,35,36,39,45,52,53,54,56,83],"boot,":[28,34,54,56,74],"boot-":[18,34,35,36,52,63,83],"boot.":[10,20,30,32,35,36,54,56,63],"boot/":11,"boot=":54,"boot\"":[28,39],"bootable ":[9,10,28,32,54],"bootable.":39,"bootchart ":[39,54],"booth ":63,"booting ":[25,32,39,42,54,63,69],"booting,":54,"bootloader ":[34,36,63,83],"bootloader-":63,"bootloader.":63,"boots ":[14,39,54,63],"boots,":[9,39],"both ":[28,29,40,49,53,55,59,60,66,74,77,79,80],"both.":60,"bottom ":[66,90],"bottom)":10,"bouncer.":63,"bound ":53,"bound.":53,"bounding ":59,"box ":[10,29,59,72,85],"box)":92,"box.":[9,29,66],"bpf ":63,"bq9mg442b ":73,"brackets ":[38,66],"branch ":65,"branching ":66,"brands ":68,"break ":35,"breakage ":28,"breakfast ":67,"bridge ":[40,52],"brief ":67,"bring ":[72,76],"bringing ":76,"brings ":72,"broken ":[33,51],"bronze ":68,"brotli.":63,"browsable ":85,"browse ":28,"browser ":[0,15,22,58,60,63,72,73,82,87,90,93],"browser.":[63,92],"browser:":58,"browsing ":[63,74],"browsing,":63,"bryteise/":28,"bs=":11,"bsd ":[63,88],"bsd-":24,"btrfs ":0,"bucket ":[15,59],"bucket.":59,"bucket:":59,"buckets ":63,"buffers.":53,"bugs ":60,"bugs.":0,"build ":[0,2,27,28,31,33,37,57,63,66,73,74,76,83],"build,":2,"build.":[24,34,63,76],"build/":[24,53],"build:":60,"build\"":36,"build]":66,"builddir/":24,"builder ":28,"builder]":28,"building ":[24,28,32,34,36,37,63,66,82],"building,":63,"building.":57,"building/":63,"buildlog>":76,"buildreq_add:":24,"buildreq_ban`":2,"builds ":[2,24,28,36,58,73,81],"builds.":24,"built ":[0,28,32,34,36,52,57,63,73,83],"built)":28,"built,":[0,29],"built-":[54,56],"built.":[2,24],"built_module_location=":36,"built_module_name=":36,"bulk ":[27,32,33],"bullet ":66,"bullets ":66,"bullets.":66,"bump ":28,"bump.":[28,63],"bumps ":28,"bumps.":28,"bundle ":[0,3,4,5,14,18,20,21,25,32,34,35,36,40,41,42,43,47,49,51,52,53,54,56,57,58,59,60,64,66,69,70,73,74,75,76,81,82,83,84,85,90],"bundle(":[31,52,63],"bundle,":[0,28,45,49,62,82,85,90],"bundle-":[5,17,18,19,24,26,28,31,34,35,36,40,43,46,47,50,52,53,54,56,58,59,62,64,73,74,75,76,77,78,80,82,83,84,85,87,90],"bundle.":[10,24,25,26,27,28,29,31,34,39,43,50,53,58,63,77,78,80,84,87,90],"bundle:":[24,28,34,36,52,83],"bundles ":[0,4,5,9,26,27,28,31,32,39,41,43,47,57,62,63,73,82],"bundles,":[5,31,43,58,62,63,76,82],"bundles.":[4,9,10,27,28,31,39,52,56,63],"bundles/":28,"bundles:":[14,28,56],"bundles=":83,"bundles\"":[28,39],"burn ":[9,11,44],"burning ":11,"bursts ":60,"bus.":17,"bus/":53,"bus=":17,"busctl ":23,"business ":32,"busy.":53,"busybox ":[78,79],"but ":[0,9,10,24,25,28,31,32,44,45,60,63,65,67,72,73,92],"butter ":67,"button ":[9,10,72,82,93],"button.":[56,72,75,82],"bvlc ":59,"bvlc_alexnet.":59,"by ":[0,2,5,6,9,10,14,18,23,24,26,27,28,29,30,31,32,34,35,36,37,38,39,40,42,44,45,48,49,51,53,55,56,57,58,59,60,63,64,65,66,67,72,73,74,75,78,79,80,83,84,90,92,93],"by-":[33,34,61,66],"by:":30,"byte_burst_limit.":60,"byte_window_length ":60,"bytes ":60,"bytes)":82,"bytes.":[55,60],"c ":[24,29,36,42,52,53,54,56,58,60,63,71,76,83],"c'":58,"c)":[52,56,73],"c+":[24,63],"c,":[63,76],"c-":[14,24,63],"c.":[63,76],"c/":[56,63],"c7-":73,"c:":[19,20,76],"c[":76,"c\"":[24,56],"c\\":24,"ca-":80,"ca.":75,"cab ":63,"cables ":53,"cables.":53,"cache ":[63,73,83],"cache.":83,"cached ":31,"cachegrind ":63,"caches ":28,"caching ":[34,63,84],"cad ":63,"caffe ":59,"caffe2 ":58,"caffe2/":58,"caffemodel ":59,"cafile ":51,"cairo.":63,"cairomm.":63,"calculated ":82,"calculates ":5,"calculator ":63,"calculator,":63,"calculator.":63,"calendar,":63,"call ":[23,32,60,63],"call-":66,"called ":[3,9,28,47,54,55,60,67,85,90],"caller,":60,"callggrind.":63,"calling ":[31,52],"calloc(":60,"calls ":40,"camera.":63,"can ":[2,3,5,6,9,10,18,23,24,25,26,28,29,30,31,32,34,35,36,37,38,40,41,43,44,45,46,48,49,52,56,57,58,59,60,62,63,66,67,71,72,73,74,75,76,77,79,80,82,83,84,85,86,88,89,90,91,92,93],"can'":[72,73,77],"cancel ":10,"candidate ":76,"candidates ":76,"cannot ":[0,24,29,31,44,48,50,51,53,56,58,80,90],"capability.":[31,63],"capable ":[12,32,35,36],"capitalization ":67,"capitalize ":67,"capitalized ":67,"capitalized,":66,"caption.":66,"capture ":[6,28,63],"captures ":6,"capturing ":63,"carbon ":68,"card,":93,"card.":63,"cards ":53,"cards.":83,"care ":81,"careful ":32,"carefully ":86,"carry-":[12,71],"carving ":63,"cascade ":31,"case ":[9,10,66,67,73,81],"case,":[5,10,24,28,31],"case-":45,"case.":[0,41,67],"case/":[9,10],"case:":14,"cases ":[0,25,27,53,63,71,73],"cases,":34,"cases.":[4,66],"caset.":76,"cat ":[17,24,35,36,40,44,48,52,54,56,64,77,78,79,80],"cataloging.":63,"catalogs.":73,"catastrophic ":30,"categories,":41,"categories:":28,"category ":60,"cause ":[2,24,49,66],"cause.":[2,24],"causing ":80,"caution ":67,"cautions ":66,"cb:":53,"cd ":[14,18,24,28,34,35,36,37,53,58,82,83,90,92],"cd)":32,"cd-":18,"cd/":[19,20,21,22],"cdn ":73,"cdn.":[12,17,20,22,27,34,47,51,52,53,54],"cdns)":73,"celeron\u00ae":68,"cell ":[58,82],"cell,":58,"cell.":58,"centos ":57,"cert ":28,"cert-":80,"certain ":[2,29,35,36,40,57],"certificate ":[28,29,42,51,63],"certificate.":51,"certificates ":[59,63],"certificates.":[29,73,92],"certutil ":[20,42],"cf ":52,"cflags+":53,"cgroup ":52,"cgroup)":48,"cgroupfs-":59,"cgroups ":48,"chain ":[35,51],"chains ":29,"challenges ":32,"chance ":[0,42],"change ":[24,28,32,40,48,53,56,59,60,66,67,72,76,78,82,85],"change.":[10,63,90],"change:":80,"changed ":[5,28,34,40,90],"changed,":[30,31],"changed.":[5,28,31],"changes ":[0,5,9,10,28,30,31,54,60,63,72,73,76,79,80,88,90],"changes,":[74,81],"changes.":[9,28,34,63],"changes:":[30,60,64],"changing ":[34,40,76],"chapter ":85,"char ":60,"character ":[9,10,63],"characters ":[45,58],"characters.":[9,10,63,66],"charges ":73,"charges.":[72,73],"chassis ":45,"chat ":63,"chat,":63,"check ":[5,9,24,31,38,43,48,50,53,57,58,64,66,71,73,78,80,82,85,88,90,92],"check-":[12,28,31],"check:":47,"checkbox ":[10,86],"checking ":[12,35,36,42,44,60,74],"checking.":35,"checkout ":34,"checks ":[9,28,31,37,60],"checks,":[6,60],"checksum ":[11,42],"checksum,":42,"checksums ":29,"cheese.":63,"chevron,":10,"chicago ":65,"children:":14,"chmod ":[12,17,24,28,34,58,72,83],"choice ":[58,60,77],"choice.":10,"choices ":10,"choices.":32,"choices:":67,"choose ":[0,5,9,53,57,58,60,72,80],"choose.":51,"chooser ":63,"choosing ":60,"choosing.":73,"chose ":[56,73],"chosen ":60,"chosen,":[56,60],"chown ":28,"chrome ":0,"chroot ":28,"chroot-":28,"ci/":[32,37],"cidr ":80,"cidr_netmask]":38,"cifs ":86,"cifs)":86,"ciphers ":29,"circuitco ":68,"circumstance ":2,"city.":9,"claimed ":68,"clam ":63,"clamped ":60,"clang ":63,"clarify,":66,"clarity ":67,"clarity.":66,"class ":59,"class<":77,"classification ":[59,60,63],"classification,":[59,60],"classification:":[59,60],"classification[":60,"classifies ":59,"classify ":60,"clause ":24,"clauses.":67,"clean ":[1,31,59,60],"clean=":36,"clean\"":36,"cleaned ":24,"cleaning ":90,"cleans ":28,"clear ":[1,2,3,4,5,6,12,13,14,16,23,25,26,27,28,29,30,31,32,35,36,38,39,40,41,43,44,45,46,47,48,49,50,51,53,54,55,57,58,59,60,63,64,65,66,68,71,77,78,80,83,87,88,89,92,93],"clear,":67,"clear-":[0,9,10,11,12,14,15,16,17,18,20,21,22,42,47,51,52,54,56,60,63,69,73],"clear.":[24,53],"clear/":[14,27,44,47,51],"clear@":72,"clear]":47,"clearlinux ":31,"clearlinux)":60,"clearlinux-":[18,34,52],"clearlinux.":[0,12,14,17,20,22,24,26,27,28,31,34,47,51,52,53,54,71],"clearlinux/":[0,24,26,28,34,47,49,57,58,60,76,84],"clearlinux\"":84,"clearlinuxos-":18,"clearlinuxroot.":51,"clearlinuxuser/":85,"clearly ":[30,66],"clearresourcegroup ":73,"clearresourcegroup/":73,"clearresourcegroup\"":73,"clearvm ":73,"clearvm\"":73,"cli ":[15,63,89],"cli!":73,"cli'":73,"cli,":86,"cli?":73,"clich\u00e9s,":67,"click ":[9,42,56,58,59,67,72,75,82,85,90,92,93],"clicking ":[18,72],"client ":[6,23,26,28,39,47,52,54,63,73,81,84],"client)":[52,56],"client,":63,"client-":[54,56],"client.":[28,54,63],"client/":41,"client:":[6,60],"client;":63,"clients ":[26,28,39,54],"clients)":64,"clients.":[39,54,63],"clipboard ":73,"clipboard.":73,"clone ":[24,57,58,60,65,76,80],"clone,":63,"clone-":24,"clone_<":34,"cloneable ":32,"cloned ":[24,34,76],"clones ":[34,76],"cloning ":[22,23],"close ":[9,56,66,73,74],"closed ":67,"cloud ":[13,25,38,42,59,61,63,69,73],"cloud,":32,"cloud-":[31,39,54,58,63,80,81],"cloud.":[59,63],"cloud/":41,"cloudguest-":[19,63,73],"cloudguest.":[20,42,69],"cloudguest\"":39,"clouds.":73,"clr ":[32,59,63,85],"clr*":41,"clr-":[10,13,18,24,26,32,34,35,36,37,40,41,49,52,56,59,60,63,72,83,85],"clr.":60,"clr/":28,"clr_debug_daemon ":26,"clr_debug_daemon.":26,"clr_debug_fuse.":26,"clrtrust ":29,"cluster ":[32,58,80,81,89],"cluster,":58,"cluster.":[58,74,77,80,81,87],"clusters ":[63,74,77],"clusters.":[63,73],"clutter-":63,"clutter.":63,"cl|":60,"cmake ":24,"cmd ":52,"cmdline ":60,"cmdline.":[35,36,83],"cmrt.":63,"cnc ":63,"cnn_tf_v1.":58,"co-":[5,28,79],"cockpit ":63,"cockpit-":63,"code ":[2,3,6,7,24,26,34,35,36,63,65,73,76,82],"code)":36,"code,":[30,34,49,66,73],"code-":66,"code.":[5,25,34,35,36,59,60,63,66,76,82],"code/":66,"code:":[60,76],"codebase ":29,"codebases ":29,"codec ":63,"codes.":63,"coexist ":56,"cogl.":63,"cognitive ":73,"cognitiveservices:":73,"collaborating.":67,"collect ":[6,63],"collected.":60,"collection ":[47,60,63,66,84],"collection.":63,"collections ":63,"collections.":63,"collective ":[57,58],"collector,":[6,60],"collide ":34,"colon ":56,"colon.":[56,66],"colons ":67,"color ":63,"color,":63,"color-":63,"colord.":63,"colorful ":53,"column ":[18,38,73],"com ":72,"com,":[72,80,88],"com.":60,"com/":[0,23,24,26,28,34,47,49,57,58,59,60,76,93],"com:":[23,80],"com>":52,"com\"":[23,24,34,84],"combination ":[6,28,39,60],"combinations ":[5,31],"combine ":[31,33],"combined ":29,"combines ":55,"combining ":63,"come ":[35,36,39],"comes ":[28,31,34,35,36,73,74,93],"coming ":[49,54],"comma ":67,"command ":[2,24,28,29,31,34,35,36,38,39,40,42,43,45,49,51,52,53,56,58,59,60,63,66,69,72,73,74,76,80,83,88],"command,":[35,36,60,66],"command-":[34,36,38,63,83],"command.":[34,35,36,38,48,50,52,56,60,66,72,73,74,87],"command:":[24,26,27,40,42,45,46,47,49,50,53,55,58,60,66,73,74,75,77,78,79,80,81,82,85,86,87,90],"commands ":[24,28,30,41,43,53,55,58,59,60,63,66,73,78,80,81,82,84],"commands,":[62,66,67],"commands.":[28,31,47,59,73,74,84],"commands:":[47,52,54,56,58,73,76,80,82,90],"commands;":81,"commas,":67,"comments ":60,"commit ":34,"commits ":[5,31,34],"commits.":[34,65],"commodity ":32,"common ":[29,31,32,45,56,58,61,63,67,84,86],"common/":[24,34,47],"commonly ":[0,44,61,66],"communicate ":[23,67],"communicate.":80,"communicates ":67,"communication ":26,"communication.":63,"communications ":63,"community ":[0,36,58],"community.":0,"company-":88,"company.":66,"compare ":[5,31,42,43],"compared ":[41,51],"comparison ":63,"comparison.":34,"comparisons ":63,"compat-":63,"compat32-":83,"compatibility ":[5,9,28,31,63,71,76],"compatible ":[13,28,31,70,83],"compatible,":55,"compatible.":[28,63],"compelling ":74,"compilation ":[34,63],"compilations ":63,"compile ":[34,35,60,76],"compiled ":[3,26,34,36],"compiled,":0,"compiled.":[34,36],"compiler ":[29,34,63,76],"compiler,":60,"compiler.":63,"compiling ":[3,35,36,60,83],"complement ":32,"complete ":[1,2,3,6,9,10,24,28,34,43,49,58,59,61,72,74,85,90],"complete,":[9,44,58,60,73,76,85,90,92],"complete.":[10,60,73,92],"completed ":[11,24,67,81,90],"completed,":[24,57,73],"completely ":[4,24,28,40],"completeness.":74,"completes ":[36,73],"completes,":[24,34,53],"completes.":28,"completing ":[9,59,76],"completion ":[58,73],"completion,":56,"complex ":[34,55,60,92],"complex)":76,"complex,":23,"complexities ":0,"complexities.":0,"compliance ":31,"complicated ":67,"complications ":23,"comply ":58,"component ":[6,31,57,60],"components ":[26,29,32,58,60,63,90,92],"components)":63,"components,":[6,58,60,90],"components.":[60,63],"components:":[6,53,60],"compose ":63,"composed ":31,"composing ":5,"composition ":63,"comprehension ":67,"comprehensive ":[2,68],"compress ":[42,52,63],"compressed ":[5,42,63],"compresses ":26,"compression ":[5,20,42,63,69],"compression/":63,"compressions ":[42,69],"compressor ":63,"compressor/":63,"compromised ":29,"compromised,":29,"computation ":[63,77],"computations.":63,"compute ":[13,20,42,63,69],"compute.":72,"compute/":73,"computer ":[39,63,65],"computer-":[45,59,63],"computers ":[54,77],"computers.":63,"computes ":5,"computing ":[63,87],"concept ":[3,5,6,32,67],"concepts ":[1,41,61,66],"concert ":32,"concise ":67,"concise,":67,"concise.":[65,66],"conclusion.":67,"conditional ":[66,67],"conditions ":[49,63,66],"conditions.":40,"conection.":64,"conf ":[30,36,47,48,54,56,64,80,83,84,90],"conf.":[28,48,54,83,87,90],"conf/":[28,47,54],"conf\"":[28,78,80,83],"conference ":5,"confidence ":59,"confidence,":59,"confident,":67,"config ":[2,14,23,24,28,34,46,53,56,57,60],"config,":63,"config-":[32,83],"config.":[2,12,24,28,39,63],"config/":[14,27],"config:":[23,28],"config=":53,"config_rte_build_shared_lib=":53,"configurable ":[60,63],"configurable,":63,"configuration ":[2,23,27,28,30,34,35,36,38,39,48,53,54,55,59,61,63,64,72,74,76,77,83,85,87,88],"configuration,":[9,10,40,60,84],"configuration.":[10,30,32,53,54,55,56,60,67,73,74,77,80],"configuration:":[28,30,64],"configuration>":77,"configuration]":27,"configurations ":[30,59,72],"configurations,":38,"configurations.":[48,54],"configurations:":[30,56,64],"configure ":[3,9,23,32,39,54,55,60,63,66,67,72,73,78,79,88],"configure,":[78,80,87],"configure-":54,"configure.":60,"configured ":[10,23,28,54,56,81,83,88],"configured,":[58,82],"configured.":80,"configures ":[56,77],"configuring ":[28,53,59,63,80,93],"configuring,":77,"confirm ":[10,28,51,60,64,83],"confirm.":10,"confirmation ":[90,92],"confirmation,":10,"confirmed ":68,"confirming ":[10,90],"confirms ":51,"conflict ":83,"conflicts ":[5,24,54,83],"confusion ":67,"congratulations!":[39,44,45,50,54,64,72,73,74,76,77,78,79,80,82,87,90],"congratulations,":92,"congratulations.":9,"conjunction ":59,"connect ":[31,37,53,54,85,87,89,90,92],"connect-":88,"connected ":[10,31,44,92],"connecting ":[56,72,73,77],"connection ":[9,10,38,53,54,59,80,92],"connection-":38,"connection.":[1,9,23,38,56,63,92],"connection:":56,"connection_name]":38,"connections ":[23,38,56,60,84],"connections.":38,"connections/":38,"connectivity ":[10,23],"connectivity,":23,"connectivity.":[9,63],"connector/":63,"conscious ":29,"consecutive ":66,"consider ":[34,35,36,49,66,84],"consider:":32,"consideration ":32,"considerations.":[29,32,64],"considered ":32,"considering ":40,"consistent ":[32,66],"consistent,":65,"consistently,":66,"consistently.":67,"consists ":[6,28,31,56,60,73],"console ":[35,63,66,72,73,77,90],"console.":[24,72],"const ":76,"construct ":57,"construction ":67,"consult ":[28,80],"consults ":49,"consume ":29,"consumed ":[28,37,58],"consuming ":32,"consumption ":[26,63,73],"consumption.":59,"contact ":80,"contain ":[3,5,9,10,28,30,31,35,36,39,45,48,51,66],"contain:":59,"contained ":[63,82],"container ":[31,32,33,57,58,63,73,74,79,80],"container,":[28,58],"container.":[28,32,52,57,58,74],"container:":[28,52,58],"container;":79,"containerd ":52,"containerization ":[32,74],"containerized ":[59,80],"containers ":[31,32,57,63,73,74,78,80,88,89],"containers*":[80,89],"containers,":[57,80],"containers-":[31,52,57,58,63,73,78,79,84],"containers.":[32,57,74,79],"containers:":[28,52,58,79],"containing ":63,"contains ":[3,4,24,26,31,34,35,36,47,51,52,53,54,55,59,60,63,76,77,82,90,92],"contains,":41,"content ":[3,6,26,28,31,32,42,60,63,66,73,75,83,90],"content,":[4,28,65,66,67],"content.":[11,28,31,37,38,51,66,90],"content:":28,"contents ":[9,10,28,39,51,66,83],"contents,":[31,62],"contents.":[32,54,60,63,90],"contents:":[54,66],"contenturl ":28,"contenturl=":28,"context ":[30,52],"context-":63,"continually ":59,"continue ":[10,28,32,38,46,58,68,72,73,74,77,80,92,93],"continue,":[2,24],"continue.":[77,83,90],"continues ":[2,24,92],"continues.":7,"continuing ":79,"continuing,":[35,36,41],"continuity ":32,"continuous ":32,"continuously ":[2,24,32,84],"contractions,":67,"contrast,":81,"contributed ":65,"contributing!":65,"contribution.":65,"contributions ":65,"contributions.":65,"control ":[4,23,32,34,40,48,53,60,63,73,80,83,84,93],"control-":[26,58],"control.":[32,63],"controllable ":48,"controlled ":48,"controller ":[53,85],"controller.":63,"controlling ":63,"controls ":[60,63],"convenient ":[35,36,60],"convention ":[42,69],"conventional ":10,"conventions ":63,"conventions:":66,"conversion ":63,"converted ":[22,58],"converting ":[22,63],"converts ":63,"convey ":66,"convnet_benchmarks.":58,"cool ":73,"cooperative.":67,"coordinate ":67,"coordinated ":37,"coordinates ":59,"copied ":[72,73],"copies ":[60,63,73],"copies.":60,"copy ":[24,28,29,30,31,36,58,60,72,73,77,82,84,87,90],"copyfromlocal ":77,"copying ":63,"copyright ":[0,52,73],"core ":[32,52,59,63],"core(":[40,60],"core,":14,"core-":[14,28,39,52,63,73,77],"core.":[63,73],"core\"":[28,39],"cores=":17,"corporate ":[23,28,74,80],"corporation ":53,"correct ":[23,24,28,44,60,65,66,67],"corrective ":[6,60],"correctly ":[24,28,58,66],"correctly.":53,"correctly:":77,"corresponding ":[27,28,35,36,42,59,83,90],"corresponds ":53,"corrupted ":42,"cosmos ":73,"cosmosdb ":73,"could ":[11,49,84],"count ":63,"courteous.":67,"covered ":60,"covers ":[39,67],"covers:":[74,90],"cp ":[14,24,28,30,34,36,54,58,72,77,80,84,87,90],"cp\"":63,"cpio ":[34,63],"cpu ":[12,17,21,22,33,58,59,60,76],"cpu*":40,"cpu,":59,"cpu/":40,"cpu:":59,"cpu_model:":60,"cpufreq ":40,"cpufreq*":40,"cpufreq/":40,"cpuidle ":40,"cpuidle/":40,"cpus,":40,"cpus:":[52,53],"cpus=":[17,53],"cpus>":53,"cracklib ":29,"crash ":[6,60],"crashes ":[9,10],"crd)":58,"create ":[0,1,6,9,10,15,16,18,23,27,30,33,34,35,36,37,38,39,47,50,52,53,54,55,56,58,63,64,65,66,71,74,77,80,82,83,84,85,87,88,89,90,93],"create,":[28,63],"create.":[28,39],"create:":24,"created ":[0,2,23,24,28,30,31,38,43,51,52,58,82,85,90,92,93],"created.":[9,43,90],"created:":[60,82],"creates ":[2,24,28,34,49,51,54,58,59,60,63],"creating ":[4,18,28,32,39,48,51,56,58,59,60,63,72,73,83],"creating,":63,"creation ":[2,24,31,37,63],"creation_timestamp:":60,"creative ":8,"credentials ":[86,90],"credentials.":[56,73,86,92],"cri+":80,"crio'":80,"crio.":80,"crio/":80,"crit]":60,"critical ":[32,63],"cross-":[63,66,73],"crowdsource ":32,"crypto ":63,"cryptoprocessor-":63,"cryptsetup.":63,"csp)":32,"csps.":32,"ctl>":11,"ctrl ":83,"ctrl>":19,"cultural ":63,"culture.":29,"cumbersome.":[5,31],"cups-":63,"curates ":26,"curl ":[12,14,17,20,22,23,24,28,34,35,36,47,51,53,54,73,74,92,93],"curl*":23,"curl.":[28,63],"curl:":28,"current ":[27,31,34,40,45,46,48,60,63,72,73,76,82,90],"current/":[12,51,54],"currently ":[31,42,57,60,62,69],"currently,":47,"current}":18,"cursor.":63,"custom ":[4,10,24,27,28,29,32,33,34,35,36,37,59,60,63,73,74,87,90,93],"custom-":52,"custom.":56,"customer-":52,"customers ":32,"customizable ":[4,6,34,35,36,60,63],"customizable,":60,"customizable.":0,"customization ":[4,39],"customization.":30,"customizations ":[32,34],"customizations,":32,"customize ":[4,24,27,39,49,56,57,60,80],"customized ":[1,28,30,32,34,58,71,80],"customizes ":9,"customresourcedefinition ":58,"cut ":56,"cutting ":76,"cve)":63,"cve-":63,"cve.":29,"cves ":29,"cves)":29,"cycle ":[33,39],"cycle,":60,"cycle.":4,"cycles ":40,"cyrus-":63,"c~":76,"d ":[18,22,34,35,36,53,60,63,74,83],"d)":[16,17],"d,":63,"d-":63,"d/":[28,35,36,48,54,64,78,79,80,83,88,90,93],"d:":56,"d_type:":52,"dad ":67,"dad,":67,"daemon ":[6,23,28,40,49,50,52,56,60,63,64,74,77,78,85,87],"daemon,":[28,50],"daemon-":[28,30,56,64,78,79,80,88],"daemon.":[23,60,63,74,78,87],"daemon:":[28,60],"daemons ":[49,60,77],"daemons,":60,"daemons.":[60,77],"daily ":31,"daily,":29,"damage,":66,"damage.":66,"dangers.":66,"dars)":57,"dars.":57,"dashboard ":[60,72,73,92],"dashboard.":[72,90,92],"dashes ":66,"dashes,":45,"dashes.":66,"data ":[6,11,31,32,33,37,45,49,53,54,55,59,63,73,77,82,84,92],"data,":[26,30,63,82],"data-":[47,63,77,87],"data.":[6,31,32,57,58,59,60,63,66,77,82],"data:":60,"data_dir>":59,"data_format=":58,"data_type ":59,"data_type>":59,"database ":[6,29,47,60,63,73,82,84,90,92],"database,":90,"database-":[41,63,90],"database.":[63,90,92],"databases ":[73,84,90],"databases.":90,"datacenter ":32,"datacenters ":32,"dataset,":82,"dataset.":82,"datasets ":63,"datastore ":22,"datastore,":22,"date ":[60,65,80],"david\"":84,"day ":[32,36,83],"day,":81,"day.":[0,29],"db ":[60,73],"db/":54,"dbus ":75,"dbus-":63,"dbus.":[23,63],"dbx,":63,"dconf,":75,"dd ":11,"dd\"":63,"deal ":63,"dealing ":23,"deb)":81,"deb\"":84,"debug ":[33,52,60],"debug-":26,"debug.":[17,60],"debug/":[6,60],"debug\"":28,"debug_info_banned ":28,"debug_info_lib ":28,"debug_info_src ":28,"debugcon ":17,"debugcon.":17,"debugger ":63,"debugger,":26,"debugging ":[6,26,60,63],"debuginfo ":26,"debuginfo/":26,"dec ":73,"decide ":[4,6,34,79],"decided ":32,"decision.":32,"decisions ":60,"declarations ":[2,24],"declared ":60,"decoder.":63,"decoding,":0,"decompress ":[9,10,11,19,21,22,33,53,63],"decompresses ":82,"decompression ":63,"decrypt ":63,"decrypt,":63,"dedicated ":[54,73],"deduplicating ":63,"deduplication.":63,"deep ":[33,63],"def)":66,"default ":[2,6,27,28,29,31,32,34,35,36,38,39,40,42,49,50,52,56,58,59,60,63,73,77,78,79,80,83,87],"default":[30,77,87],"default,":[10,28,31,36,39,40,45,56,59,60,84,90],"default-":[18,78,79],"default.":[0,9,10,48,59,60,74,75,77,78,79,80,93],"default:":60,"default\"":[28,76],"defaultlimitnofile=":48,"defaults ":[30,49,60,77],"defaults,":30,"defaults.":[40,87],"defaults/":[0,30,57,60,77,80,84,87,90],"defend ":29,"define ":[34,39,40,54,60,66,76,80,90],"defined ":[27,28,30,39,40,54,59,60,63,66,73,80,87],"defined-":63,"defined.":[28,66,72],"defines ":[59,82],"defining ":[38,63],"defining,":82,"definition ":[28,31,41],"definition,":66,"definition.":[28,63],"definitions ":34,"definitions:":90,"degradation ":80,"degree ":[4,32],"degrees ":67,"del ":84,"delete ":[28,49,58,74],"deleted ":[52,58,60],"deleted.":[24,83],"deleted:":[24,58],"deletes ":60,"deleting ":[6,30,52],"delimiters ":60,"deliver ":31,"delivered ":29,"delivers ":[6,60],"delivery ":[60,73],"delivery,":31,"dell ":[36,68],"delta ":5,"delta-":28,"deltas,":31,"demand.":[31,40],"demanding ":40,"demonstrate ":82,"demonstrates ":[55,59],"density,":66,"department ":[28,80],"depend ":32,"dependencies ":[0,2,5,24,31,32,37,47],"dependencies,":[2,32],"dependencies.":[2,5,31,32],"dependencies:":24,"dependency ":[2,24,49,63],"dependency.":[2,24],"depending ":[4,32,56,57,59,78,93],"depends ":[9,10,42,53],"depicts ":39,"deploy ":[1,3,4,33,41,58,76,80],"deploy.":[59,60],"deployed ":[24,29,32,37,63],"deployed,":32,"deploying ":[5,58,80],"deployment ":[32,37,58,80],"deployment,":[32,37,63,80],"deployment.":[32,63],"deployment:":58,"deployments,":[32,58],"deployments.":73,"deploys ":58,"deprecated ":[2,79],"deprecated.":43,"depth ":[42,63,66,82],"depth:":66,"der ":51,"derivative ":[4,37],"derivative,":37,"derivative.":37,"derivatives ":37,"derived ":[57,93],"describe ":[27,31,63,66,67],"described ":[2,10,24,25,36,44,49,58,59],"describes ":[25,28,31,32,35,36,37,42,45,47,49,50,51,53,54,55,56,58,59,60,65,66,67,68,78,79,80,81,85,87,91],"describing ":[66,72],"description=":56,"descriptive ":67,"descriptive.":67,"descriptors ":48,"deselect.":10,"design ":[0,29,30,32],"design.":83,"designated ":42,"designed ":[23,28,63,77,84,90],"designing ":32,"desirable ":40,"desirable.":60,"desired ":[9,10,27,28,30,34,49,90],"desired,":10,"desired.":[9,10,29],"desktop ":[17,19,33,42,63,69,83],"desktop,":[0,86],"desktop-":[17,18,40,41,56,59,63,76],"desktop.":[9,20,42,63,69,86],"desktop=":56,"desktops.":56,"despite ":31,"desrt.":75,"dest_module_location=":36,"destination ":30,"destination.":67,"destinationtype\"":[28,39],"destined ":56,"destroy ":[9,10,11],"detail ":[57,63],"detailed ":[10,32,34,36,37,47,61,63,66,67,73,74,75,78,82,85,87,88,90,92],"details ":[1,9,10,24,28,31,32,38,53,57,58,59,67,72],"details)":48,"details,":[31,53,72],"details.":[5,23,31,39,47,48,53,55,58,63,67,85],"details:":24,"detect ":[10,23,63],"detected ":36,"detected.":[40,83],"detecting ":37,"detection ":[59,63],"detection'":59,"detection,":59,"detection.":59,"detection:":59,"detects ":[2,24,59],"detects.":31,"determine ":[28,31,35,36,37,49,51,53,83],"determined ":[40,55],"determines ":60,"determining ":0,"deterministic ":63,"dev ":[24,35],"dev-":[26,41,47,63,80],"dev/":[10,11,14,31,44,46,48,49,56,59,80,83],"dev\"":24,"devbind ":53,"developed ":58,"developer ":[26,33,38,43,59],"developer-":[14,63],"developer.":[24,34],"developers ":[5,6,47,57,58,59,60,75,76,84],"developers,":26,"developers.":63,"developing ":[10,35,41,63,73,78],"development ":[6,9,10,32,41,53,57,60,63,76,91],"development,":41,"development.":[43,63,84],"device ":[9,10,17,31,38,44,53,55,59,63,73,74,83,93],"device,":[9,10],"device-":53,"device.":[38,59],"device:":93,"device=":58,"device>":[11,53],"device\"":53,"device_id\"":53,"devicelogin ":73,"devices ":[17,59,74,83,93],"devices.":[55,63],"devices/":[40,53],"devices:":14,"devops ":63,"devpkg-":63,"devtest ":73,"df ":46,"dfi ":46,"dfs ":77,"dfs.":77,"dfu-":63,"dhcp ":[10,23,38,45,54,55,63],"dhcp-":[54,63],"dhcp.":10,"dhcp=":54,"diagnose ":63,"diagnostic ":63,"diagnostic,":63,"diagnostics.":63,"dialog ":72,"dialogue ":[9,10],"dictionary,":65,"did ":[31,67],"diff ":42,"diff,":63,"difference ":[5,63],"differences ":42,"differences,":63,"different ":[1,3,4,9,10,24,27,32,34,40,42,48,58,60,61,69,72,73,75,76,80,85,93],"differently ":5,"difficult ":[66,67,76],"diffs)":31,"dig ":23,"digital ":[29,63],"digits ":82,"dim,":76,"dir:":52,"direct ":[66,67],"direct\"":23,"directed ":[16,17,31,83],"directional ":63,"directives ":90,"directives.":[48,66],"directly ":[28,30,34,35,36,51,57,58,65,66,67,73,82,85],"directly.":[31,38],"directories ":[30,31,63,73,90,92],"directories,":66,"directories.":[31,63],"directory ":[2,24,28,30,34,35,36,38,39,42,43,48,52,53,54,55,56,59,60,63,64,72,73,76,80,82,83,85,87,88,90,92],"directory)":18,"directory,":[24,28,57,60,73,77,82],"directory.":[24,28,30,34,35,36,38,48,50,53,55,56,60,63,72,77,80,82,84,87,90,92],"directory:":[24,28,57,60,76,82,92],"directory>":90,"directs ":54,"disable ":[10,34,35,36,40,54,56,80],"disable-":[17,83],"disabled ":[0,6,23,29,40,60,83,93],"disabled,":9,"disabled.":[6,35,36,54,60,80,83],"disables ":[36,40,83],"disabling ":[31,60],"disallow ":[29,49,90],"disassembly ":63,"discarded.":49,"disclose ":66,"discouraged ":74,"discourages ":29,"discover ":89,"discoverable ":63,"discovered ":[2,24],"discovery ":[23,63],"discovery-":80,"discovery.":[63,80],"discrepancies ":5,"discuss,":65,"discussed ":[56,67],"discussion ":[0,42,67,90],"disk ":[6,18,29,39,42,54,60,63,69,71,73],"disk-":63,"disk.":[60,63],"disk\"":[28,39,46],"disks ":[22,32,39],"disks,":73,"disks.":73,"diskutil ":[10,11],"display ":[45,56,63,73,90],"displayed ":[42,80],"displayed,":[58,90],"displayed.":[42,80],"displaying ":63,"displays ":[6,49,53,58,60,73,82,85],"displays,":90,"displays.":63,"distinct ":[4,66],"distribute ":[0,32,63],"distributed ":[0,30,34,63,77],"distribution ":[34,35,36,58,75,81],"distribution,":57,"distribution-":80,"distribution.":37,"distribution/":0,"distributions ":[0,3,5,23,31,75],"distributions,":[3,5,30,31,58],"distributions.":41,"distro ":37,"distro-":[37,83],"distro:":60,"distros ":[56,81],"distros.":[1,61],"distros:":56,"divide ":[37,67],"divided ":61,"divides ":54,"djvu,":63,"dklm:":52,"dkms ":[36,83],"dkms)":[36,63,83],"dkms-":[36,83],"dkms.":83,"dla ":73,"dlpa:":52,"dlrs ":58,"dlrs-":58,"dlrs/":58,"dlrs_image=":58,"dlrs_image}":58,"dlrsalexnet ":58,"dlrsresnet50 ":58,"dls ":73,"dmax(":76,"dmidecode,":24,"dmidecode/":24,"dnf ":[17,56,63],"dnf.":47,"dnf/":47,"dnn ":58,"dnn)":58,"dnn-":58,"dnn.":58,"dns ":[38,54,80,85],"dns,":[54,86],"dns-":54,"dns=":38,"dnsmasq.":54,"dnssec ":63,"dnsstublistener=":54,"do ":[3,5,9,10,23,28,29,30,31,34,39,48,49,53,55,56,58,59,60,65,66,67,72,73,74,75,78,79,80,81,89,90],"do)":67,"doc.":63,"doc/":82,"docbook ":63,"docbook-":63,"dock ":63,"docker ":[32,33,58,63,78,79,88],"docker*":[20,28,42,52,57,58,69,78,79,84,89],"docker,":[58,78],"docker-":[52,63],"docker.":[20,28,42,52,69,74,78,79,88],"docker/":[28,74],"docker:":[58,78],"docker\"":28,"docker_default_runtime=":[78,79],"docker_image_path ":28,"docker_name>":58,"docker_service_dir/":78,"docker_service_dir=":78,"docker_service_dir\"":78,"dockerfile ":[52,57],"dockerfile.":52,"dockerfiles/":[57,58],"dockerhub ":[31,63],"dockerhub*":84,"dockerhub,":32,"dockerhub.":63,"document ":[25,28,39,63,65,66,67,68,81,90],"document,":66,"document.":[32,36,39,66],"documentation ":[5,7,16,32,34,36,39,40,53,55,58,59,60,61,63,67,70,73,74,80,81],"documentation,":[36,59,90],"documentation-":83,"documentation.":[53,58,59,61,65,66,67,81],"documentation:":[65,66,81],"documentation?":65,"documented ":60,"documentroot ":90,"documents ":[65,66],"documents.":[63,66],"documents/":87,"documents\\":[19,20],"documents]":85,"does ":[2,9,10,24,28,30,31,34,35,36,38,40,42,44,47,52,56,59,60,64,81,84,92],"does,":27,"dog ":67,"dogs,":67,"dogs:":66,"dogs`":66,"doing ":9,"domain ":[60,63,85],"domain)":[9,10],"domain.":[23,88],"domain/":60,"domain>":23,"done ":23,"done!":90,"done.":52,"done\"":58,"dont ":67,"dos ":63,"dots.":45,"double ":76,"double-":[9,93],"down ":[9,28,34,67,72,73,90],"downgrades ":[5,31],"downhill ":63,"download ":[5,9,18,24,27,28,31,34,36,42,44,51,52,53,54,58,59,63,72,74,75,82,90,93],"download,":[9,10,19,21,22,33],"download.":[12,14,17,20,22,24,26,27,28,47,51,52,53,54],"downloaded ":[5,24,29,42,52,57,72,82,90,92,93],"downloaded,":58,"downloaded.":[28,83],"downloading ":[31,52,88],"downloading,":[72,75],"downloading.":26,"downloads ":[23,28,34,73,82,83,90],"downloads,":90,"downloads/":[72,83,90],"downloads]":85,"downstream ":28,"dpdk ":33,"dpdk-":53,"dpdk.":53,"dpdk/":53,"drain ":81,"drift,":32,"drive ":[9,10,11,17,44,86],"drive,":[9,11,44,54],"drive.":[9,10,85],"drive>":14,"driver ":[34,40,53,83],"driver,":[40,74,78],"driver-":34,"driver.":[35,36,53,55],"driver:":52,"driver\"":74,"drivers ":[40,63],"drivers,":[53,83],"drivers.":[63,83],"drivers/":[36,53],"drivers?":83,"drives ":63,"drop ":57,"drop-":[48,64,90],"dropping ":90,"due ":[0,23,29,35,36,42,52,60,64],"duktape*":23,"dummy ":63,"duplicated ":63,"during ":[2,6,9,10,26,28,29,32,34,39,53,54,60],"dvd ":[19,20,21,22],"dvi,":63,"dyamic ":63,"dyem:":52,"dynamic ":[32,36,63,83,90],"dynamically ":[18,32,54],"e ":[14,71,80,84],"e.":[9,10,31,32,44,59,60,63,64,66,81],"e131dc71d339 ":58,"e2fsprogs.":63,"e3-":71,"e5-":[68,71],"e7-":71,"e8:":53,"each ":[2,3,5,10,27,28,31,40,42,53,54,55,56,57,58,59,60,66,67,73,77,80,81,90],"earlier ":[38,51,66,82],"earlier.":43,"earlier:":87,"easier ":[32,35,36,45,76],"easier.":[49,76],"easily ":[6,28,29,30,32,34,63,66,84],"easily.":67,"easy ":[29,31,66,67,74,80,84,85],"ec2 ":72,"ec2-":72,"ecdsa ":[72,77],"ecdsa)":72,"echo ":[24,35,53,54,60,78,80,83,88],"echoed ":60,"ecosystem.":[63,74],"edge ":76,"edge-":59,"edge.":59,"edit ":[10,27,28,36,47,56,57,60,63,64,77,80,87,90],"edit,":[28,63,77],"edit.":10,"edited ":28,"edited,":77,"editing ":[2,24,28],"editing,":63,"edition)":65,"editor ":[24,28,34,36,38,55,63,77,80],"editor,":[28,63,80],"editor.":[28,34,63,90],"editors ":[52,63],"editors,":52,"editors-":63,"editors.":63,"edits ":63,"edits,":28,"education-":63,"educational ":63,"effect ":[55,90],"effect,":60,"effect.":[28,40,73],"effective ":[32,67],"effective,":29,"effectively ":30,"effectively.":[29,61,66,67],"effects.":63,"efficiencies.":40,"efficiency.":[5,26],"efficient ":[26,32,49],"efficient.":31,"efficiently ":5,"efficiently,":29,"efficiently.":67,"effortlessly ":23,"efi ":[9,10,13,14,28],"efi/":18,"efi\"":[19,20,28,39,46],"egl-":83,"egl/":83,"egl_external_platform.":83,"egl_vendor.":83,"either ":[7,28,42,58,59,66,85],"either:":80,"eject ":11,"elements:":66,"elevated ":88,"elfutils.":63,"eligible ":72,"eliminates ":42,"else ":60,"else.":66,"email ":[24,34,63,84],"email,":63,"email.":63,"emails ":63,"embedded ":28,"emphasis.":67,"emphasis;":67,"emphasize ":67,"emphasizing ":63,"employ ":[32,40,48],"employing ":37,"employs ":29,"empty ":[9,10,28,42],"emulate ":66,"emulator ":[56,63],"emulator.":[50,56],"en.":66,"en_us.":14,"enable ":[0,5,6,9,10,17,19,20,23,29,33,35,36,44,50,53,54,55,56,61,63,66,73,74,80,88,89,90],"enable-":[17,54],"enable=":56,"enabled ":[0,5,6,10,16,34,35,36,40,59,60,63,80,83,93],"enabled)":63,"enabled,":60,"enabled.":[60,64],"enabled:":52,"enabled=":47,"enables ":[6,10,28,37,54,55,58,59,60,63,64,75,85,87,88],"enabling ":[60,90,93],"encapsulates ":5,"enchant-":63,"enchant.":63,"encoding/":0,"encoding=":77,"encounters ":36,"encourage ":[10,92],"encourages ":29,"encrypt ":[9,10],"encrypt'":63,"encrypt,":63,"encrypted ":[10,29,56,63,64],"encrypted.":56,"encryption ":[9,12,29,63],"encryption.":63,"end ":[6,20,27,31,35,36,45,46,56,66,67,84,92],"end;":63,"ending ":66,"endpoint ":58,"endpoints ":32,"endpoints.":32,"ends ":56,"endtime\"":73,"energy ":40,"energy,":40,"enforce ":35,"enforcement ":40,"enforces ":31,"engages ":26,"engine ":[15,20,23,42,63,69,87],"engine.":[57,63],"engineering ":36,"english ":[67,90],"english-":67,"english.":90,"english:":67,"enhancement ":[34,35,36,60],"enhancements ":5,"enjoys ":49,"enlightenment ":63,"enough ":[9,10,32,60],"enough.":80,"enp1s0.":55,"enp1s0f*":55,"enp1s0f0 ":55,"enp1s0f0-":55,"enp1s0f1 ":55,"enp1s0f2 ":55,"ensure ":[9,10,28,34,36,39,44,51,54,58,60,77,80,81,83,90],"ensured ":29,"ensures ":[37,90],"ensuring ":11,"entails,":82,"enter ":[9,10,31,40,43,50,52,56,58,59,60,72,73,75,76,77,78,80,84,85,86,90,92],"enter:":[42,43,56,58,62,64,78,87,92],"entered ":[40,56],"entered.":60,"entering ":[10,86],"enterprise ":63,"enterprise-":63,"enterprises ":57,"entire ":[31,36,59,82],"entirely ":[0,5,31],"entries ":[34,36,39,92],"entries,":28,"entries.":10,"entry ":[9,10,23,36,44,53,58,63,64,80],"entry>":53,"enumerate ":63,"env ":58,"env.":87,"environment ":[23,28,32,54,60,63,64,66,74,76,78,80,83,88],"environment,":[9,32,58,61],"environment.":[24,28,32,34,42,58,59,63,80],"environment:":78,"environment=":[28,64,78,79,80,88],"environments ":[4,32,34],"environments,":32,"environments.":[42,69],"envvar:":66,"eof ":[78,79,80],"eof'":[48,83],"ephemeral ":[30,72],"ephemeral,":32,"epoch ":28,"epoch.":28,"ept ":[19,20],"equal ":66,"equation ":23,"equipment,":66,"erases ":54,"error ":[6,24,58,60,73],"error.":[63,80],"error:":24,"error\"":73,"errors ":[2,11,24],"errors,":36,"errors.":[2,24,80],"errors:":80,"es ":63,"especially ":[26,36,40,66,83],"establish ":59,"established ":72,"established.":[72,73,77],"establishes ":60,"esxi ":[13,19,20],"esxi-":22,"esxi.":[22,42,69],"etc)":[32,63],"etc-":0,"etc.":[2,44,56,67],"etc/":[0,17,23,28,30,31,35,36,38,47,48,49,50,54,55,56,59,60,64,74,77,78,79,80,83,84,85,87,88,90,93],"etcfstab-":0,"ethernet ":53,"ethernet*":53,"ethernet/":54,"evaluate ":[40,49],"evaluated.":57,"evcd ":63,"even ":[5,49,56,71,76],"evenings ":63,"event ":[67,73],"event-":63,"event_id:":60,"eventgrid ":73,"events ":93,"events.":63,"ever-":92,"every ":[4,10,31,32,39,59,60,63,85],"everyday ":67,"everything ":[30,31,37,67,77],"evolution-":63,"evolution.":63,"evolve ":76,"evolves.":60,"evolving ":92,"ex-":58,"exact ":31,"example ":[10,32,35,36,39,40,45,47,49,50,52,54,55,56,57,58,60,66,72,74,80,85,87,90,92],"example,":[24,26,28,30,31,34,35,36,39,43,48,56,59,60,64,66,67,74,76,77,80,82,83,84,85,90],"example-":58,"example.":[2,24,34,35,36,44,47,52,55,56,58,60,66,71,76,77,80,87],"example:":[24,27,28,35,36,42,48,52,53,56,59,66,67,72,80],"example;":59,"example_file ":87,"examples ":[28,45,53,63,66,72,84],"examples,":65,"examples-":77,"examples.":[24,28,30,74],"examples/":[53,87],"examples:":[27,29,59],"exceeded ":48,"exceeded,":40,"except ":[10,60,66],"excess ":67,"excessive ":[30,60],"excluded ":[26,77],"excluding ":[9,10],"exclusions.":24,"exec ":[48,73],"execstart=":56,"execstartpre=":56,"execstop=":56,"execusion ":82,"executable ":[63,73],"executable.":[27,83],"executable:":[24,28,34],"executable?":73,"executables ":[29,63],"executables.":63,"execute ":[26,28,43,56,58,60,66,72,75,82],"execute:":76,"executed ":[27,58],"executing ":[40,63,77],"executing.":60,"execution ":[32,73,76,87],"execution,":40,"execution.":56,"executions ":28,"exercise ":63,"exercises ":84,"exercises.":1,"exist ":[5,24,32,58,74,79,84],"exist,":[2,30,38,60],"exist.":[28,56,64],"exist:":[38,64],"existing ":[4,9,10,28,32,34,35,38,39,52,54,65,66,72,73,84,86],"exists ":[2,9,24,38],"exists)":80,"exists,":[9,10,45,56,60,84],"exists.":[24,60,85],"exit ":[40,80],"exit(":60,"exit.":[9,10,44,90],"exit_failure)":60,"exiv2.":63,"expand ":[43,72,84],"expandtab:":14,"expat.":63,"expect ":[56,67],"expected ":[24,52,77,84],"expected:":52,"expects ":28,"experience ":[37,58,59,63],"experienced ":43,"experimental:":52,"experimenters.":63,"expiration ":47,"expires.":6,"explain ":[66,81],"explaining ":0,"explains ":[9,10,38,39,40,44,53,55,57,59,65,86],"explanation ":[28,60,74],"explanations ":67,"explanatory ":66,"explicitly ":[28,29,60,80,81],"exploration.":9,"explore ":[9,73,89],"explorer ":85,"explorer.":85,"exploring ":36,"exponentially.":29,"export ":[28,53,58,63,80,88],"expose ":[29,32,92],"exposed ":29,"exposes ":[6,60],"exposing ":63,"exposures ":[29,63],"expressions ":57,"ext2/":63,"ext4\"":[28,39],"ext[":[9,10],"extended,":61,"extending ":63,"extensible ":63,"extensible,":63,"extension ":[12,35,36,38,40,54,71,73],"extension,":[35,36],"extensions ":[12,63,71],"extensions.":[73,76],"extents ":63,"external ":[23,32,35,36,66],"external-":83,"external_iface ":54,"external_iface=":54,"extra ":[9,10,26,46,56,63,66],"extra-":34,"extract ":[18,24,34,42,54,63,92],"extract-":83,"extracted ":[34,36,59,82],"extracting ":[24,31,34,52],"extracts ":24,"eye ":63,"f ":[9,17,28,54,56,58,80],"f1 ":56,"f1y6sa+":77,"faas ":59,"faas)":59,"faas-":63,"fabric ":73,"factor ":93,"factory ":[37,47],"fahrenheit.":67,"fail ":28,"fail.":80,"fail:":60,"fail;":60,"failed ":[23,60],"failed,":24,"failover ":63,"failovermethod=":47,"fails ":49,"failure ":10,"failures ":[2,9,10,24,80],"failures,":[2,24],"failures.":[6,24,60],"failures:":24,"fairly ":32,"fallbackntp=":50,"false)":60,"false.":60,"false<":77,"familiar ":[23,74],"familiar.":67,"familiarity ":37,"fan ":63,"fann.":63,"faq ":61,"far ":90,"fast ":[25,61,63,87],"fast,":63,"fast-":34,"fast.":5,"faster ":[28,40],"faster.":34,"fastest ":67,"fat,":63,"fat32)":[9,10],"fatal]":24,"favor ":32,"favorite ":28,"fd ":24,"fd5155b89857 ":57,"feature ":[9,10,23,32,73],"feature-":63,"feature.":[32,88],"featured ":63,"features ":[6,29,40,60,61,74],"features,":[32,63],"features.":[34,55,63,66,70,73],"features:":87,"featuring ":63,"fedora*":[17,56],"fedora,":56,"feedback ":[60,73],"felt ":0,"fetched;":75,"fetching ":26,"few ":[3,23,38,56,58,66,67,84],"ff06fc76ec5148040acb4fcb2bc8105cc72f1963b55de0daf3a4ed664c6fe72c ":51,"ffmpeg,":0,"ffmpeg-":0,"ffmpeg.":0,"fftw)":76,"fftw,":76,"fftw-":76,"fftw.":63,"fi,":67,"fido2,":93,"field ":[10,42,59,60,69,90],"field,":[56,72],"field.":[9,10,32,56,90],"fields ":[10,90],"fifteen-":60,"figure ":[4,6,9,10,23,26,30,37,39,42,44,53,54,56,58,60,66,72,73,75,82,85,86,90,92],"figure,":66,"figure:":66,"figures ":66,"figures,":66,"figures/":66,"file ":[2,9,10,11,18,22,23,27,28,30,34,35,36,38,39,42,47,48,50,54,55,56,58,59,60,63,64,66,67,69,72,73,74,75,76,77,78,80,82,83,86,87,89,90,93],"file!":24,"file(":34,"file,":[23,28,31,34,36,39,59,60,64,90],"file-":[5,37,48,63,86],"file.":[2,10,23,24,28,31,34,36,39,42,47,48,51,53,54,56,59,60,63,64,66,73,77,83,85,87,90],"file:":[14,17,20,24,27,28,31,39,46,58,60,64,66,80,83,90,92],"file=":17,"file>":58,"filename ":[42,66,69],"filename>":34,"filenames ":66,"files ":[1,5,6,23,27,28,30,31,34,35,36,37,38,39,44,48,49,52,54,55,56,57,59,60,63,66,72,73,77,78,80,82,83,85,86,87,92],"files,":[2,23,31,39,63,66,76,80,83,86],"files-":83,"files.":[0,2,5,24,28,30,31,34,37,42,52,54,63,77,82,83,86,87],"files:":[24,28,48,52,87],"files;":63,"files\"":83,"fileserver ":63,"filesystem ":[0,5,10,24,26,30,49,63,86],"filesystem,":63,"filesystem.":[30,63],"filesystem:":52,"filesystems.":73,"filesystemtypes\"":[28,39],"fill ":28,"filter ":[59,60,63],"filters.":63,"final ":[10,28,66,67,73],"finally,":74,"find ":[23,24,27,28,39,41,44,49,56,58,61,63,65,66,67,72,73,76,82,84],"find,":63,"finding ":63,"findproxyforurl ":23,"finds ":[31,60],"fine ":45,"fingerprint ":[72,73,77],"finish ":[57,73],"finish.":73,"finished ":[72,73],"finishes ":[40,72,73],"finishing ":31,"firefox ":93,"firefox-":0,"firewall ":[0,54],"firewall.":[6,28,60],"firmware ":[19,20,24,40,54,63],"firmware,":28,"firmware-":63,"firmware.":63,"first ":[5,9,10,18,28,44,52,56,58,60,64,66,67,76,77,82,83],"first!":65,"first,":[40,66,67,74,76],"first-":28,"first.":[11,52,67],"fit ":[41,77],"five ":66,"fix ":[31,33,46,52,60,63],"fix/":46,"fixable ":29,"fixes,":[29,31],"fixes.":[5,29],"fixing ":24,"flac)":63,"flac.":63,"flag ":[53,76],"flag.":28,"flagged ":31,"flags ":80,"flags,":52,"flags.":28,"flags:":[52,60,76],"flannel ":80,"flash)":63,"flask ":[6,60],"flat ":28,"flat.":22,"flathub ":75,"flathub.":75,"flatpak ":[63,83],"flatpak*":[0,89],"flatpak.":[0,63],"flexibility ":[4,32,58],"flexible ":63,"floor ":45,"flow ":[26,28,39,54],"flow.":54,"flowcharts.":66,"flows.":63,"fly ":[26,28],"fmv-":76,"fmv.":76,"focus ":[6,32,60],"focused ":63,"focuses ":[25,74],"focusing ":[32,63],"folder ":[24,28,34,66,85,93],"folder,":[24,34],"folder.":[44,83,85],"folder]":85,"folders ":[63,85],"follow ":[9,10,24,27,28,32,34,35,36,42,48,56,58,59,65,66,67,73,74,76,77,78,80,81,82,83,84,85,88,90,92],"followed ":[31,34,42,56,60,66,92],"following ":[2,3,6,10,20,24,25,27,28,31,33,35,36,38,39,43,45,47,50,51,52,53,54,56,58,59,60,61,64,65,66,72,73,74,75,76,77,78,79,80,82,85,87,88,90],"following,":59,"following.":58,"following:":[28,56,57,58,59,60,66,72,73],"follows ":[51,67,83],"follows:":[31,39,58,73,77],"font ":63,"font-":63,"fontconfig.":63,"fonts ":63,"fonts-":63,"fonts.":63,"foo(":76,"foo.":76,"fopt-":76,"for ":[0,1,2,5,6,9,14,15,16,17,18,20,22,23,24,25,26,27,29,30,31,32,34,35,36,37,38,39,40,42,43,44,45,48,49,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,69,71,72,73,74,75,76,77,78,79,80,82,84,85,86,87,88,90,91,92],"for-":[0,34],"for.":45,"force-":83,"forces ":[40,66],"forecasts.":63,"foreign ":29,"fork ":[32,63,65],"forks ":[4,32],"form ":[0,31,32,35,36,45,74],"form,":60,"form.":10,"formal.":67,"format ":[0,5,22,59,60,63,65,66,77,80,85],"format)":59,"format-":[28,34],"format.":[28,42,63,69],"format:":[53,66,85],"format=":17,"formats ":[0,11,63,77],"formats,":5,"formatted ":[34,60],"formatting ":[65,66],"formatting,":66,"formatting.":66,"formatting:":66,"formatting`":66,"formed ":67,"fortran,":63,"forums:":0,"forward ":[5,31,54,56],"forwarded ":56,"forwarding ":[53,64,80],"forwarding.":54,"forwards ":53,"found ":[0,25,29,30,34,40,44,57,59,60,65,66,74,80,84],"found,":80,"foundation ":28,"four ":[55,59,66,82],"fp16,":59,"fp32 ":[58,59],"fpga,":59,"fpm.":90,"fqdns\"":73,"fraction ":5,"frames ":[55,59],"frames.":55,"framework ":[36,58,59,63,77],"framework,":[77,78,80,87],"framework.":[63,77],"frameworks ":63,"frameworks.":[58,63],"frameworks5 ":63,"frameworks5-":63,"free ":[9,10,58,63,72,73],"free(":60,"free-":45,"freed ":60,"freeglut.":63,"freely-":60,"frees ":60,"freetype.":63,"frequency,":40,"frequency.":40,"frequent ":66,"frequently ":[32,61,66],"frequently-":63,"freshly ":30,"fribidi.":63,"friendly ":[45,67,74],"friendly.":45,"friends ":84,"friends.":63,"from ":[1,2,4,6,10,12,13,15,17,18,19,21,23,24,26,28,29,30,31,32,33,34,35,36,38,40,42,52,53,54,57,58,59,60,61,63,66,67,73,75,76,77,79,80,82,83,85,87,88,89,90,92,93],"from:":[6,60,93],"front ":[6,60],"front-":63,"frontend ":63,"frontload ":67,"fry ":67,"fs ":63,"fs-":48,"fs.":[48,77],"fs/":48,"fstab/":0,"fstype:":14,"ftp ":63,"ftp,":63,"ftp-":88,"ftp_proxy ":88,"ftp_proxy=":88,"fulfill ":[9,10,73],"full ":[28,29,43,53,60,63,64,66,73,74],"full-":63,"fully ":[6,11,28,57,60,90,92],"fully-":56,"function ":[44,59,60,67,73,82,89],"function,":[59,76],"function-":59,"function.":[59,74],"function:":76,"functional ":[57,63,90],"functional,":[30,73],"functionalities ":59,"functionality ":[24,28,58,60,63,90],"functionality,":[2,5,35,36],"functionality.":[3,63],"functionapp ":73,"functioning ":60,"functions ":[23,30,59,60,63,76],"functions.":[54,63],"functions:":[31,54],"fundamental ":[6,60],"further ":[2,6,34,67,72,74],"furthermore,":[76,80],"fuse ":26,"fuse)":63,"fuse-":63,"fuse.":63,"future ":[60,67,74],"fwupd.":63,"g ":[28,40,43,59],"g+":28,"g.":[9,10,31,32,44,59,60,63,66,81],"gafr:":52,"gain ":76,"game ":63,"game.":67,"games ":63,"games-":63,"gaming ":84,"gateway ":38,"gateway=":38,"gateway_ip_address]":38,"gathers ":37,"gb ":[46,71],"gcab.":63,"gcc ":[53,60,76],"gcc*":53,"gcc/":53,"gce ":15,"gce)":[20,42,63,69],"gce.":[15,20,42,69],"gconf.":63,"gcr.":63,"gdb ":26,"gdb,":63,"gdb.":26,"gdk-":63,"gdm ":[17,56],"gdm.":[56,63],"gdm/":56,"gegl.":63,"gen ":60,"general ":[24,26,53,63,66,76,87],"general-":[63,87],"generally ":86,"generate ":[27,28,31,32,34,45,51,58,60,63,66,90],"generate,":63,"generate-":73,"generated ":[2,5,24,28,31,45,51,56,60,73],"generates ":[2,5,6,24,28,31,60,64,76],"generating ":[2,37,63,76],"generation ":[40,58,63],"generator ":[53,60,63],"generator.":[53,63],"generic ":[24,32,36,42,63,67,69],"generic,":67,"geoclue.":63,"geocode-":63,"geometry ":56,"geometry=":56,"get ":[1,10,17,28,30,41,42,52,54,55,56,58,61,66,67,73,76,81,83,85,90],"get.":3,"get_config/":39,"get_role/":39,"getaddrinfo:":23,"gets ":31,"getstarted/":93,"getting ":[39,58,60,66],"gexiv2.":63,"gfbgraph.":63,"gflags.":63,"ghw ":63,"gif,":63,"gigabit ":53,"gigabyte*":68,"gimp.":63,"gis/":63,"git ":[24,34,57,58,60,76],"git,":23,"git-":34,"git.":[24,34,63],"github ":[0,25,26,31,60,65,66],"github*":[0,1,25,31,34,36,37,39,49,54,57,58,63],"github.":[0,24,26,34,35,36,47,49,57,58,60,76,88],"github:":[0,93],"githubusercontent.":[24,28,34,93],"given ":[23,28,41,54,60],"gives ":60,"gjs.":63,"glance ":32,"glew.":63,"glib ":63,"glib.":63,"glibc-":63,"glibmm.":63,"glm.":63,"global ":[17,24,34,48,63],"global]":85,"glog.":63,"glu.":63,"glvnd-":83,"glvnd/":83,"gmbh|":60,"gmime.":63,"gnome ":[63,86],"gnome*":[0,20,42,69],"gnome-":[26,63,75],"gnome.":63,"gnu ":[20,42,63],"gnu*":[29,42,69],"gnu/":63,"gnutls.":63,"go ":[9,28,42,56,58,63,67,82,83,90,92,93],"go!":92,"go*":58,"go,":63,"go-":[58,63],"go.":63,"goal ":[0,30],"gobject-":63,"gobjects,":63,"goes ":[4,60,67],"goes,":67,"going ":[34,56,67,90],"gold ":68,"good ":[0,29,32,67,76],"good.":42,"google ":[0,13,20,42,63,69],"google*":15,"google.":23,"googlenet ":59,"googletest.":63,"gopath/":58,"gopath=":58,"goto ":60,"gotoblas2 ":63,"gov/":29,"governance ":32,"governor ":40,"governor.":40,"governor:":40,"governors ":40,"governors.":40,"gperftools.":63,"gpg ":63,"gpgcheck=":47,"gpl-":34,"gpt ":46,"gpu ":[63,83],"gpu)":83,"gpu,":59,"gpu-":63,"grammar ":63,"grammar,":[65,67],"grammatical ":67,"grant ":[27,90],"granular ":5,"granularity ":[3,31],"graph ":40,"graph-":63,"graphic ":66,"graphic,":63,"graphical ":[9,34,38,63,64,83],"graphical.":83,"graphics ":[63,66,83],"graphics.":[63,66],"graphing ":63,"graphite.":63,"graphs ":63,"graphs.":87,"graphviz.":63,"graphx,":87,"great ":[59,66,67],"greater ":[4,9,10,60],"greengrass*":33,"greengrass-":63,"greengrass.":[59,63],"greengrass/":59,"greengrass:":59,"greengrass_classification_sample.":59,"greengrass_lambda.":59,"greengrass_object_detection_sample_ssd.":59,"greengrass_sample_python_lambda.":59,"greengrasshelloworld.":59,"greeter.":63,"grep ":[17,18,20,22,24,34,36,50,53,54,56,57,79,83],"grid ":[45,63,73],"grid.":82,"grilo-":63,"grilo.":63,"group ":[59,72,73],"group,":[40,59,73],"group.":73,"group:":[34,40,43,59],"grouping ":63,"groupings ":73,"groups ":[48,73,80],"groups,":73,"grow.":68,"gsettings-":63,"gsl.":63,"gsound.":63,"gspell.":63,"gst-":63,"gst.":63,"gstreamer.":63,"gtk ":63,"gtk+":63,"gtk-":63,"gtk.":[63,75],"gtk/":63,"gtk2 ":63,"gtk3.":63,"gtkmm3.":63,"gtkplus.":63,"gtksourceview-":63,"gtkspell3.":63,"guarantee ":[28,58],"guaranteed ":[0,31],"guess ":90,"guest ":[13,19,20,21,25,42,63,69,85],"guest)":53,"guest-":63,"guest.":63,"gui ":[17,19,20,40,63,64,66],"gui-":[56,63],"gui.":63,"guidance ":36,"guide ":[28,32,34,35,36,37,38,39,40,41,42,43,44,45,47,49,50,51,52,53,54,55,56,57,58,59,60,61,65,74,76,79],"guide,":59,"guide.":[29,32,56,58,60],"guide:":[59,65],"guidelines ":[65,66,67,80],"guidelines.":66,"guidelines:":[66,67],"guidelines?":65,"guides ":[33,43,61,65],"guides.":66,"guilabel:":[21,66,67],"guile.":63,"gunzip ":42,"gutenprint.":63,"gz ":[42,82],"gz\"":24,"h ":[60,88],"h%":56,"h15.":45,"h264-":0,"h370 ":68,"h>":[60,76],"h\"":53,"had ":[29,67],"hadoop*":89,"hadoop-":77,"hadoop.":77,"hadoop/":77,"ham ":63,"hand ":82,"hand-":82,"handler ":59,"handler:":80,"handles ":93,"handwriting ":82,"happen ":23,"happens ":[5,26,31],"happens,":11,"hard ":[18,42,54,63,69],"harden ":[29,92],"hardening.":90,"hardware ":[10,25,34,35,36,40,59,63,67,68],"hardware-":[0,59,63,74],"hardware.":63,"hardware:":[58,59],"harfbuzz.":63,"has ":[0,2,6,9,10,16,22,24,27,29,30,31,32,34,42,49,51,53,54,57,58,60,63,66,67,68,73,74,90],"hash ":[31,80],"hash,":84,"hash-":66,"hash.":51,"hash>":80,"hashes ":[31,51,84],"hashfile ":[20,42],"haskell ":63,"haskell-":63,"hating ":73,"have ":[0,4,10,11,23,24,27,28,29,31,32,34,35,38,39,44,45,47,48,52,53,54,56,57,58,60,65,66,72,73,74,75,76,77,78,79,80,82,83,85,86,87,88,90,91,92],"have:":[54,74,93],"having ":[23,31,32,66,67,80],"hazard ":66,"hazards ":66,"hdd ":63,"hdfs ":77,"hdfs-":77,"hdfs.":77,"hdfs:":77,"he ":67,"header ":[53,60,63],"headers ":60,"headers,":[35,36,83],"heading ":[66,67],"heading,":66,"heading.":[66,67],"headings ":[66,67],"headings.":[66,67],"headings:":[66,67],"headless ":63,"health ":63,"health.":6,"healthy ":32,"heartbeat ":60,"hello/":60,"hello\\":60,"helloclear ":24,"helloclear-":24,"helloclear/":24,"helloclear\"":24,"help ":[1,24,34,57,58,60,61,63,65,67,92],"help:":34,"helper ":[31,52,63,80],"helper.":63,"helpers ":63,"helpful ":38,"helps ":[0,1,26,28,41,66,67],"here ":[1,27,36,53,60,61,66,73,74],"here'":60,"here,":[2,90],"here.":10,"here:":0,"here`":67,"hermitian ":76,"hexchat ":63,"hget ":84,"hgetall ":84,"hidden ":[56,82],"hide ":67,"hides ":54,"hierarchy ":30,"high ":[32,48,63],"high,":60,"high-":[63,87],"higher ":[4,40],"higher.":53,"highest ":60,"highlight ":[10,73,75],"highlighted ":[9,10,72],"highlighted,":10,"highlighted.":10,"highlighting ":66,"highlighting.":63,"highlighting:":66,"highly ":[10,57,63,71],"higlights ":63,"his ":63,"history ":32,"hit ":72,"hmset ":84,"hojp:":52,"hold ":[60,81,84],"holds ":59,"holistic ":0,"home ":[43,56,63],"home)":82,"home/":[19,20,28,44,56,58,60,72,73,85],"hooks ":36,"host ":[9,10,12,17,22,23,28,32,33,39,47,52,53,54,57,58,63,72,73,74,77,78,82,85,87,88,90,91,92],"host,":[32,56,64,75],"host-":[32,56,63],"host.":[53,56,58,73],"host/":93,"host:":[56,60,80,92],"host=":53,"host>":17,"host_type:":60,"hosted ":[28,32,39,60,65],"hosted>":28,"hostfwd=":17,"hosting ":[28,39,54],"hostname ":[9,10,45,56,60,80,85,87],"hostname,":[32,45],"hostname.":[45,60],"hostname:":45,"hostname>":80,"hostname]":85,"hostname`":80,"hostnamectl ":45,"hostnames ":45,"hosts ":[26,37,74,80],"hosts.":[32,63,72,73],"house ":28,"how ":[1,4,5,9,10,32,34,35,36,38,39,40,41,42,44,45,47,50,51,53,54,55,56,57,58,59,61,63,66,67,72,75,78,79,80,81,83,85,86,87,88,90,91,92],"how-":[0,1],"however ":[24,26,32,34,43,83],"however,":[0,4,9,10,23,35,41,47,58,79,81,85,93],"hpc ":63,"hpc-":63,"href=":77,"html ":[63,90],"html,":63,"html.":[63,90],"html/":[90,92],"htpcs ":63,"http ":[28,63,74,90],"http)":63,"http,":[54,63],"http-":[28,88],"http.":63,"http:":[0,10,23,28,31,34,35,36,39,54,58,63,71,72,74,80,87,88,90,92],"http_proxy ":88,"http_proxy=":[28,78,80,88],"http_proxy\"":78,"http_proxy}":80,"httpd ":30,"httpd.":[30,90],"httpd/":[30,90],"httpproxy\"":28,"https ":[10,28],"https-":88,"https:":[0,12,14,17,20,22,24,26,27,28,29,34,47,49,51,52,53,54,57,58,59,60,66,71,73,76,90,92,93],"https_proxy ":88,"https_proxy=":[28,78,80,88],"https_proxy\"":78,"https_proxy}":80,"httpsproxy\"":28,"hub ":[52,74],"hub.":28,"huge ":53,"hugepages-":53,"hugepages.":53,"hugepages/":53,"hugetlbfs ":53,"human ":26,"human-":45,"hundred,":3,"hundreds ":4,"hwloc.":63,"hybrid ":63,"hygiene.":29,"hyper-":[13,18,20,25,27,42,46,63,69],"hypertext ":63,"hyperv ":16,"hyperv-":[25,46,63],"hyperv.":[16,20,42,46,69],"hypervisor ":32,"hypervisor.":[22,24,42,69],"hypervisorlaunchtype ":18,"hyphenated ":31,"hyphens ":10,"hyphens,":9,"hyphens.":[9,10],"i ":[22,34,56,58,67,72,79,83,93],"i+":76,"i,":76,"i.":[14,56,64],"i/":[16,17,18,53,63],"i3 ":63,"i3-":68,"i350 ":53,"i5-":68,"i7-":[60,68],"i9-":68,"i;":76,"i<":76,"i=":76,"i]":76,"ia ":63,"ia;":76,"ias)":63,"ib,":76,"icis ":39,"icis.":39,"icis/":39,"icon ":[9,18,45,85],"icon.":75,"icons ":[63,75],"icu4c.":63,"id ":[45,52,56,58,60],"id,":[56,58],"id.":[56,60],"id:":[52,53,58],"id=":[17,53],"id\"":[60,73],"id]":56,"id_rsa'":73,"id_rsa.":[73,77],"ide ":63,"ide)":[19,20,63],"idea ":67,"idea.":67,"ideal ":63,"identifiable ":60,"identification ":63,"identified ":[24,60],"identifiers ":24,"identifies ":[36,49],"identify ":[0,30,34,41,45,49,60,66,83,93],"identify,":45,"identifying ":31,"idioms,":67,"idl,":63,"idle=":40,"idx1-":82,"idx3-":82,"id}":73,"if ":[0,2,4,6,9,10,11,12,14,23,24,27,28,29,30,31,32,34,37,38,39,40,42,45,48,49,51,52,54,55,56,57,58,60,61,64,65,66,67,69,72,73,74,76,77,78,79,80,81,83,84,85,86,90,91,92],"if":67,"if=":[11,17],"ifconfig.":55,"igb/":53,"ignore ":[23,31],"ignore-":[36,83],"ignore?":46,"ignored ":52,"ignored.":[31,52],"ignores ":31,"ignoring ":29,"igt-":63,"illegal ":58,"illustrated ":[4,51,60],"illustrates ":72,"im)":63,"image ":[9,10,11,13,14,19,20,21,24,28,33,39,52,53,54,57,58,59,61,63,66,70,72,73],"image)":18,"image,":[9,27,28,42,51,57,58,73,74],"image-":28,"image.":[10,27,28,39,42,44,51,52,57,58,66,72,73],"image/":[14,17,20,22,24,27,28,53],"image:":[24,52,58],"image=":58,"image>":57,"image\"":17,"images ":[4,17,20,22,24,27,28,32,38,42,53,54,57,58,59,63,66,69,73,74,80,82],"images,":[27,42,57,63,73],"images-":82,"images.":[32,57,59,63,73,82],"images:":[28,52],"imap ":63,"imap.":63,"imap/":63,"img ":[17,20,42,69],"img.":[16,17,24,51],"img\"":[28,46],"immediate ":63,"immediately ":[30,39,57,60,66],"immediately.":[10,29,90],"impact ":40,"impacted ":0,"impacted.":[6,60],"imperatives,":67,"implement ":[35,63,77],"implementation ":[26,32,54,63,78],"implementation.":[31,90],"implementations ":76,"implementations,":31,"implemented ":[23,48],"implements ":[26,49],"import ":58,"import.":63,"important ":[5,32,36,40,54,61,67,80,83],"important,":[32,66],"important.":[53,66],"imported ":82,"importing ":82,"improve ":[60,63,65,76],"improved ":[28,31,63],"improved,":63,"improved?":65,"improvements.":[0,9,10],"improving ":[0,49],"in ":[0,1,2,4,5,6,7,9,10,11,16,18,22,23,25,26,27,28,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,48,49,50,51,53,54,55,56,57,58,59,60,61,63,64,65,66,69,72,73,74,75,76,77,78,79,80,81,82,83,84,86,87,90,92],"in":[6,60,92],"in,":73,"in-":[35,36,42,59,60,63,73,82,84],"in.":[56,73,83,85],"in:":[29,90],"inclduing ":[42,69],"include ":[5,10,28,30,34,53,58,59,60,64,66,67,73,76,80,83],"include/":[53,60],"include:":32,"included ":[28,53,54,59,66,73,75,77,78,80,87,88],"includeoptional ":90,"includes ":[1,6,24,25,28,37,42,49,53,55,58,60,63,66,69,73,77,80,85,87,90],"includes.":31,"including ":[0,5,28,29,31,32,36,42,43,58,60,63,66,74,75,87,90],"including-":0,"including:":93,"inclusion ":34,"incompatible ":83,"incorporate ":[4,32,37],"incorporates ":81,"incr ":84,"increase ":[40,56,57,67,74],"increasingly ":40,"increment ":28,"increment,":28,"increment.":[28,84],"incremental ":29,"incrementally ":29,"incremented ":28,"increments ":28,"incurring ":73,"indent-":14,"indented ":66,"indentsize=":14,"independent ":73,"independent.":[42,69],"independently.":[23,88],"index.":[52,84,90],"indexing,":63,"indicate ":[9,23,66,67],"indicated ":2,"indicates ":[55,60],"indicating ":[36,42,83],"indicators ":32,"indirect ":83,"individual ":[0,5,31,34,35,36,48,73],"individually ":[0,3],"industry ":54,"industry-":63,"inetd ":56,"infer ":[2,24],"inference ":59,"inferencing ":[6,60],"influence ":[2,24],"info ":[26,33,79],"info-":76,"info.":[26,63],"info/":26,"inform ":51,"information ":[2,5,6,23,24,26,27,28,29,31,32,35,36,39,52,53,54,58,60,61,63,66,67,70,72,73,74,75,77,82,87,88,90,92],"information)":65,"information,":[9,10,26,40,47,53],"information.":[0,2,5,10,24,25,28,35,36,56,57,65,73,80,90,92],"information:":76,"informative ":7,"informative.":67,"informs ":[36,77],"infrastructure ":[4,32,37,84],"infrastructure,":63,"infrastructure.":63,"infrastucture ":37,"ing ":67,"ingestion ":[6,60],"init ":[28,32,39,52,58,80],"init*":39,"init-":54,"init=":[39,54],"initcall_debug ":[39,54],"initial ":[28,34,54,60,76,82,83,85,92],"initialization ":[28,53,63,80],"initialization,":28,"initialization.":[28,53],"initialize ":[28,34,47,56,80],"initialized,":80,"initializes ":[60,80],"initiated.":28,"initrd ":[39,54],"initrd,":63,"initrd=":[39,54],"inject ":58,"innotek ":60,"inotify,":63,"inotify-":63,"input ":[28,34,56,59,77],"input-":63,"input.":[58,59],"input_proto ":59,"input_shape ":59,"inputs ":28,"inputs,":82,"insecure ":52,"insensitive)":45,"insert ":[9,10,44,63,66,84],"inserting ":40,"inside ":[23,24,36,48,57,58,59,63,73],"insmod ":35,"inspect ":[58,82],"inspected ":[31,52],"inspection ":[2,24],"inspects ":39,"inspired ":[63,84],"install ":[3,12,13,14,16,17,18,19,21,24,26,27,28,32,33,39,42,47,49,50,52,58,60,63,67,69,79,82,85,89,92],"install,":[31,63,78,80,87],"install-":[18,24],"install.":[1,39,52,61,92],"install:":[24,60],"install?":73,"install]":56,"installation ":[1,18,27,28,31,36,39,44,47,52,58,59,60,63,67,71,73,74,75,76,78,80,82,87,88,90,92],"installation,":[32,61,74,83],"installation.":[9,29,39,67,83,90],"installation:":[9,10,60],"installations ":[38,45],"installaton ":74,"installazurecli ":73,"installed ":[3,5,9,24,28,29,30,31,34,35,36,43,44,47,52,54,58,60,62,67,73,74,75,76,77,78,79,80,81,82,83,85,87,88,90,92,93],"installed)":31,"installed,":[5,47,52,59,60,73,82,90],"installed.":[26,42,57,64,69,73,79,83],"installed:":[28,30,73],"installer ":[9,10,13,27,51,83,92],"installer,":[9,14,39],"installer-":63,"installer.":[10,14,21,51],"installers ":32,"installers,":27,"installing ":[0,9,10,14,27,28,31,41,47,52,57,60,61,66,67,73,74,78,80,82,87,88,90,92],"installing,":[75,77],"installs ":[24,36,43,47,54,56,59,63,90],"installs.":31,"instance ":[31,39,72,90],"instance,":[24,72,73],"instance.":[31,72,73],"instances ":[72,79],"instances.":[67,73],"instant ":[60,63],"instead ":[5,28,29,30,31,47,49,56,67,73,85],"instead,":[3,32,34,51],"instead.":34,"instructed ":72,"instruction ":[12,58,66],"instruction-":76,"instruction.":[10,28],"instructional ":65,"instructional,":63,"instructions ":[9,10,24,25,27,33,35,36,38,47,54,56,58,59,61,63,65,66,73,74,75,76,78,80,81,82,83,87,88,90,92,93],"instructions,":[10,66,85],"instructions.":[2,24,40,44,59,65,66,67,76,80],"instructs ":82,"instrumenting ":60,"int ":[60,76],"int8 ":58,"integral ":37,"integrate ":[32,84],"integrated ":[24,26,43,59,63,83],"integrating ":37,"integration ":[5,32,63,67],"integrity ":[5,30,35,51],"integrity,":42,"integrity.":[29,42],"intel ":[6,40,52,53,58,60,63,73,76],"intel(":60,"intel.":[60,71,84],"intel\u00a9":63,"intel\u00ae":[16,17,18,19,20,25,29,40,57,58,59,68,71,92],"intel_idle ":40,"intel_idle.":40,"intel_pstate ":40,"intel_pstate/":40,"intended ":[0,9,28,47,56,63,90],"intensive ":34,"intent ":74,"intentionally ":[48,60],"interaction ":54,"interaction.":23,"interactive ":[32,58,63,73],"interactive.":73,"interdependencies.":[35,36],"interest ":28,"interest.":32,"interesting ":76,"interface ":[10,29,34,38,55,63,66,73,83,87],"interface.":[6,10,38,55,60,63,73],"interface_name]":38,"interfaces ":[10,33,38,63],"interfaces,":55,"interfaces.":[38,54,55],"intermediary ":[0,37],"intermediate ":[52,59],"intermingled.":30,"internal ":[5,31],"internal)":57,"internal-":54,"internal_iface=":54,"internally ":[25,51],"internally.":51,"international ":8,"internationalization ":63,"internationalization.":63,"internationalizing ":63,"internet ":[9,10,41,63,73,86,87],"internet.":[63,74,88],"interrupt ":66,"interrupting ":66,"interruption ":26,"interval,":60,"into ":[2,3,4,5,6,9,10,14,23,24,26,28,29,34,35,36,37,43,44,50,54,55,57,58,59,60,61,63,66,72,77,80,82,83,84,90,91,93],"into.":73,"introduce ":66,"introduced.":28,"introduces ":[26,58,76],"introduction ":[66,67],"introduction,":67,"introductory ":66,"introspection.":63,"invite ":49,"invocation ":56,"invoked ":49,"involve ":60,"io/":[52,80],"iobase=":17,"iot ":[59,63,73],"iot)":[41,73],"iot-":63,"ip ":[10,15,17,28,33,54,55,56,58,60,63,73,80,85,86,87],"ip-":[17,56],"ip>":80,"ip_address]":38,"ip_forward ":80,"ip_forward=":54,"ipc,":75,"ipmctl.":63,"ipmi-":63,"iproute2.":63,"ipset.":63,"iptables ":54,"iptables-":54,"iptables.":63,"ipv4.":[38,54,80],"ipv4/":54,"ipxe ":[39,54],"ipxe,":54,"ipxe.":54,"ipxe/":[39,54],"ipxe_app_name.":54,"ipxe_app_name/":54,"ipxe_app_name=":54,"ipxe_boot_script.":[39,54],"ipxe_port/":54,"ipxe_port;":54,"ipxe_port=":54,"ipxe_root ":54,"ipxe_root/":54,"ipxe_root=":54,"ipxeboot,":54,"ir ":59,"ir)":59,"ir.":59,"irc ":63,"irc)":63,"is ":[1,2,4,5,6,7,8,9,10,12,18,23,24,25,26,27,28,29,30,31,32,33,34,37,39,40,42,44,45,47,48,49,51,52,53,54,55,56,57,58,59,60,61,63,64,65,66,67,68,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93],"is.":49,"is:":[31,42,53,69,73],"isa-":17,"iscsi.":63,"isis/":63,"iso ":[11,18,19,22],"iso)":19,"iso-":63,"iso.":[14,18,21],"iso9660 ":63,"iso:":14,"isohybrid ":11,"isolate ":34,"isolated ":[24,32,83],"isolation ":80,"issue ":[6,32,60,65],"issues ":[6,31,32,44,60,63,86],"issues,":[24,31,49],"issues.":[23,24,31,42,63],"issues/":0,"issuing ":34,"ister ":[27,28,39],"ister,":39,"ister-":54,"ister.":[28,33,39],"ister/":[28,39],"istercloudinitsvc\"":39,"isterconf=":39,"isvs)":73,"it ":[0,2,6,7,9,10,22,25,26,27,29,30,32,34,35,36,37,38,39,40,42,45,48,51,52,53,54,56,57,58,59,60,63,64,66,67,72,73,74,75,76,77,78,80,82,83,84,86,87,88,90,92],"it)":67,"it,":[9,10,20,26,28,34,43,56,64],"it.":[6,9,11,23,26,34,35,42,52,53,56,60,67,72,75,83],"it:":24,"it?":[18,90],"italic ":66,"italics ":66,"item ":[15,66,67,72],"item)":66,"items ":[28,66,67],"items,":[31,67],"items.":66,"items:":[66,67],"its ":[10,26,28,31,32,37,42,48,55,56,57,58,59,69,80,82,83,85,90],"itself ":[32,60],"itself,":54,"j ":[24,54],"jan ":73,"jar ":77,"java ":[57,63],"java*":87,"java,":63,"java-":63,"java11-":63,"java9-":63,"javascript ":63,"jdb,":63,"joa4:":52,"job-":58,"jobs ":[63,77],"jobs,":73,"join ":[60,80],"joining ":80,"journal ":[49,60],"journal-":32,"journal.":63,"journal:":36,"jpeg ":[59,66],"js ":63,"json ":[27,39,63],"json-":[24,52,63],"jul ":47,"jumbo ":55,"jump ":10,"june.":67,"jupyter ":63,"jupyter*":82,"jupyter,":82,"jupyter/":58,"just ":[23,28,29,30,32,43,66],"k8s.":80,"k8s_namespace=":58,"k8s_namespace}":58,"kart ":63,"kaslr)":29,"kata ":[80,89],"kata-":[74,78,79],"kb ":47,"kb.":31,"kb/":47,"kbd:":66,"kde ":63,"kde-":63,"kde.":63,"kdeconnect-":63,"keep ":[5,32,58,60,65,66,67,83,90],"keepass ":63,"keepimage:":14,"keeping ":32,"keeps ":67,"kept.":60,"kernel ":[0,18,25,28,29,31,33,39,40,45,48,49,52,54,58,60,63,82,83],"kernel,":[10,29,34,63],"kernel-":[14,18,25,28,31,34,35,36,39,53,63,73,83],"kernel.":[9,10,25,34,35,36,42,45,63,69,83],"kernel/":[18,34,35,36,53,83],"kernel:":14,"kernel;":34,"kernel>":18,"kernel_version:":60,"kerneldir=":36,"kernels ":[25,29,36,83],"kernels,":[0,34],"kernels.":34,"kernelver}":36,"key ":[6,9,29,60,63,72,73,74,77,84],"key-":[59,63],"key.":[9,10,44,56,72,77],"key/":63,"key:":84,"keyboard ":[9,10,63],"keyboard.":10,"keyboard:":14,"keyfile ":72,"keygen ":77,"keymaps.":63,"keypad.":67,"keys ":[9,10,32,64,73],"keys,":73,"keys.":[63,77],"keys:":10,"keys;":63,"keyvault ":73,"kfapp=":58,"kfapp}":58,"kflow_app\"":58,"kib ":75,"kill ":56,"kind ":32,"kind:":[58,80],"kind=":55,"kinds ":3,"kinesis ":59,"kinesis/":59,"kinesis:":59,"kit ":63,"kit.":63,"kmod.":63,"know ":[29,53,58,67],"know!":73,"knowledge ":[43,67],"known ":[0,5,28,29,32,39,40,54,63,72,73,83,86],"known,":29,"known.":34,"knows ":[2,24,28],"ko>":35,"koji ":63,"koji,":37,"konsole ":63,"kpxe ":54,"kpxe,":54,"krb5.":63,"ks ":58,"ksonnet ":58,"ksonnet/":58,"ktarget ":34,"kubeadm ":[80,81],"kubeadm,":81,"kubectl ":[58,80],"kubectl,":81,"kubectl:":58,"kubeflow.":58,"kubeflow/":58,"kubeflow\"":58,"kubeflow_src=":58,"kubeflow_src}":58,"kubeflow_tag=":58,"kubeflow_tag}":58,"kubelet ":[80,81],"kubelet)":81,"kubelet.":80,"kubernetes ":[73,89],"kubernetes*":[58,81,89],"kubernetes,":[58,80],"kubernetes.":[63,80],"kvm ":[13,24,53],"kvm'":17,"kvm)":[24,63],"kvm,":27,"kvm-":[17,20,28,42,63,69],"kvm.":[17,20,42,63,69],"kvm\"":28,"l ":[47,56,73],"l3fwd:":53,"lab ":73,"label ":[59,66,73],"label,":59,"label.":[10,90],"labels ":82,"labels-":82,"labels:":58,"labs.":73,"lacptransmitrate=":55,"ladebug,":63,"lake ":73,"lambda*":59,"lambda.":59,"lambda/":59,"lambda:":59,"lamp ":91,"lan ":54,"lan.":32,"language ":[9,63,66,67,92],"language,":[63,66],"language-":84,"language.":[10,63],"language:":14,"languages.":[63,84],"laptops.":40,"large ":[31,32,34,41,53,55,59,60,63,77],"large-":63,"larger ":[58,63],"last ":[47,52,64,66],"last.":67,"last@":52,"lastly,":39,"latency,":63,"later ":[9,24,28,36,56,60,73,87],"latest ":[9,25,28,31,34,51,52,54,57,58,59,60,63,73,74,81,83,90,92],"latest)":[51,54],"latest-":[17,20,22,24],"latest.":92,"latest\"":[28,39],"latex ":63,"latex)":63,"latte-":63,"launch ":[15,24,28,52,57,58,63,74,84,89,93],"launched,":9,"launcher.":[58,63],"launches ":[9,10,74],"launching ":[9,56,58,72],"layer ":[53,63,84,90],"layer,":[58,82],"layer3+":55,"layered ":[29,48],"layers,":82,"layers.":63,"layout ":29,"layout.":9,"lcms2.":63,"ld.":83,"ldap)":63,"ldtarball ":36,"leaderboard ":84,"leaner ":41,"learn ":[4,5,23,24,28,31,35,36,41,44,57,59,63,66,72,73,80,84,93],"learning ":[33,41,63,73,89],"learning-":[20,42,63,69,82],"learning.":[20,42,63,69],"lease ":54,"leasefile=":54,"least ":[53,54,66],"leave ":[67,73],"leaves ":6,"left ":[0,72,76,85,90],"left.":[9,15],"lefthand ":72,"legacy ":[42,63,69],"legacy,":29,"legacy.":[20,42,69],"legal.":0,"lend ":32,"length ":[9,10,60,66],"length,":67,"lenovo ":68,"less ":[12,71],"let ":[29,73],"let'":63,"lets ":74,"letsencrypt-":63,"letter ":45,"letters ":45,"letters.":66,"level ":[4,5,6,32,37,43,48,60,63,66,67,87,92],"level,":5,"level.":[5,28,31,48,63],"level:":67,"levels ":66,"leverage ":[29,61],"leveraged ":23,"leveraging ":32,"lexical ":63,"lib ":83,"lib-":[47,63,83],"lib.":[63,76],"lib/":[18,26,28,31,36,39,44,49,52,54,73,83],"lib32 ":83,"lib64 ":83,"lib64/":[59,73,83],"libabigail.":63,"libarchive.":63,"libassuan.":63,"libatasmart.":63,"libav-":0,"libbench2/":76,"libcanberra.":63,"libcap-":63,"libcap.":63,"libcgroup.":63,"libconfig.":63,"libcpu_extension.":59,"libcroco.":63,"libcurl,":23,"libcurl.":23,"libdatrie.":63,"libdazzle.":63,"libdir=":83,"libdrm.":63,"libepoxy.":63,"libevdev.":63,"libevent.":63,"libexec/":64,"libexif.":63,"libffi*":73,"libffi.":[63,73],"libfontenc.":63,"libgcrypt ":63,"libgd.":63,"libgdata.":63,"libgee.":63,"libgl.":83,"libglx-":83,"libgnomekbd.":63,"libgpg-":63,"libgphoto2.":63,"libgsystem.":63,"libgtop.":63,"libgudev.":63,"libgusb.":63,"libgweather.":63,"libical.":63,"libidn.":63,"libidn2.":63,"libinput.":63,"libiscsi.":63,"libjpeg-":63,"libmediaart.":63,"libmicrohttpd.":63,"libmnl.":63,"libmspack.":63,"libmtp.":63,"libmypaint.":63,"libndp.":63,"libnetfilter_conntrack.":63,"libnetfilter_cthelper.":63,"libnetfilter_cttimeout.":63,"libnetfilter_queue.":63,"libnfnetlink.":63,"libnftnl.":63,"libnl.":63,"libnotify.":63,"liboauth.":63,"libogg.":63,"libosinfo.":63,"libpcap.":63,"libpciaccess.":63,"libpeas.":63,"libpinyin.":63,"libpipeline.":63,"libpng.":63,"libpsl.":63,"libpthread-":63,"libraries ":[32,59,63,76,82,83,84],"libraries,":53,"libraries.":[26,63],"library ":[23,29,49,58,60,63,76,77,83],"library,":[60,63],"library-":83,"library.":63,"library/":63,"libraw.":63,"libreoffice*":75,"libreoffice.":75,"libreoffice/":75,"librepo.":63,"librsvg.":63,"librte_pmd_e1000.":53,"libs ":63,"libs-":63,"libs.":63,"libsamplerate.":63,"libsass.":63,"libsctp.":63,"libseccomp.":63,"libsecret.":63,"libsigcplusplus.":63,"libsmbios.":63,"libsolv.":63,"libsoup.":63,"libspectre.":63,"libsrtp.":63,"libssh2.":63,"libstoragemgmt.":63,"libtasn1.":63,"libtelemetry,":60,"libthai.":63,"libtirpc.":63,"libu2f-":93,"libunwind.":63,"libusb.":63,"libuser.":63,"libuuid ":24,"libuuid\\":24,"libva-":63,"libva.":63,"libvirt.":63,"libwacom.":63,"libwebp.":63,"libwnck3.":63,"libx11.":63,"libxau.":63,"libxcb.":63,"libxcomposite.":63,"libxcursor.":63,"libxdamage.":63,"libxdmcp.":63,"libxext.":63,"libxfixes.":63,"libxfont.":63,"libxfont2.":63,"libxft.":63,"libxi.":63,"libxinerama.":63,"libxkbcommon.":63,"libxkbfile.":63,"libxklavier.":63,"libxml2.":63,"libxmu.":63,"libxpm.":63,"libxrandr.":63,"libxrender.":63,"libxres.":63,"libxscrnsaver.":63,"libxslt.":63,"libxt.":63,"libxtst.":63,"libxv.":63,"libxvmc.":63,"libxxf86misc.":63,"libxxf86vm.":63,"libyami.":63,"libzip.":63,"license ":24,"license-":47,"license.":[57,58],"license:":34,"licensed ":8,"licenses ":24,"licensing ":[0,57,58],"licensing:":24,"life-":33,"lifecycle ":32,"lifecycle.":32,"light ":63,"light-":[60,63],"lightdm ":63,"lightweight ":[29,31,54,63,78],"like ":[18,23,27,28,32,39,56,58,63,66,67,73,76,84],"like:":66,"likely ":[28,34,35,36,66,83],"likes ":67,"liking.":56,"limit ":[48,66,67],"limitation ":66,"limitation.":9,"limited ":[23,26,40,63,80,83],"limited.":26,"limiting ":[48,60],"limits ":48,"limits.":48,"line ":[2,5,20,29,31,34,36,38,40,60,63,64,73,76,83,90],"line)":[35,36],"line,":60,"line.":[56,73],"line:":80,"linear ":63,"lines ":[26,47,53,63,76],"lines:":24,"link ":[28,38,54,55,66],"link,":66,"link.":67,"link/":66,"link]":55,"linkable ":66,"linked ":[24,59],"linked)":66,"linker ":83,"linking ":66,"links ":[25,31,66,67],"links.":66,"linux ":[1,4,5,6,12,13,14,16,17,23,25,26,27,28,29,30,31,33,35,36,37,38,39,41,43,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,63,64,65,66,71,74,75,77,78,80,82,83,86,87,88,89,90,91,92],"linux*":[0,2,3,4,5,6,12,13,14,16,23,24,25,26,27,28,30,31,32,33,34,35,36,38,39,40,41,43,44,45,46,47,49,50,51,53,54,55,56,57,58,59,60,63,64,68,70,71,76,77,78,79,80,81,83,85,87,89,92,93],"linux,":[75,88],"linux-":[3,5,9,10,12,14,24,25,34,35,52,56,60,63,72,73,83],"linux.":[34,63],"linux/":34,"linux:":56,"linux<":34,"linux\"":[28,39,46],"linuxapp-":53,"list ":[0,2,10,18,24,28,31,34,35,36,39,40,43,49,50,51,52,53,54,56,62,63,66,68,72,73,74,75,77,82,84,85,93],"list,":[63,84],"list-":[34,50],"list.":[63,84],"listed ":[36,39,54,55,58,72,82,90],"listen ":[54,64],"listen-":54,"listener ":54,"listening ":[56,64],"listening)":64,"listens ":[56,60],"listenstream=":[56,64],"listing ":67,"lists ":[31,42,60,69,73],"lists,":[66,84],"lists.":[66,67],"lists:":66,"little ":[1,61,67],"live ":[12,13,14,18,19,21,28,32,52,59,60,61,71,76,77,85,90,92],"live-":[9,10,14,20,42,69],"lksctp-":63,"ll ":[24,28,44,60,67,84],"llen ":84,"llvm.":63,"llvm/":63,"lm)":12,"lm-":63,"ln ":[28,54],"load ":[53,63,82,83,88],"load.":[28,35,36],"loaded ":[23,29,56,73,82,83],"loaded,":58,"loaded.":[36,83],"loaded:":88,"loader ":63,"loading ":[35,36,63],"loading.":[35,36,83],"loads ":63,"local ":[10,24,34,39,55,60,66,77,80,87],"local,":28,"local-":[28,77],"local.":[28,56],"local/":58,"local:":[24,66],"local_bundle_dir ":28,"local_repo_dir ":28,"local_rpm_dir ":28,"locale ":63,"locale/":75,"locale>":50,"localhost ":[28,56,60,77,80,87,90],"localhost,":[56,80],"localhost.":[28,77,90],"localhost/":90,"localhost:":[56,77],"localhost;":[28,54],"localhost\"":88,"localhost]":77,"locality ":63,"localization ":63,"locally ":[24,28,56,60],"locally,":[28,66],"locally-":28,"locally.":[60,66],"locally:":60,"locate ":[34,63,72,73,80],"locate)":63,"located ":[24,27,28,53,56,59,60,66,72,74,90],"located.":[28,53],"location ":[24,28,39,45,49,53,54,66,89,90],"location!":90,"location.":[28,30,58,73,90],"location\"":73,"locations ":90,"locations,":86,"lock ":73,"locked ":40,"locking-":34,"locks.":73,"log ":[2,9,17,24,28,34,40,43,49,52,54,55,56,60,63,65,75,76,77,83,85,86,90,92],"log/":83,"log4j.":87,"log:":76,"logged ":[56,72,73],"logging ":[43,52,56,58,63],"logical ":[5,55,80],"login ":[9,10,14,29,56,63,64,73,83,84,90,92],"login,":90,"login:":92,"logins ":48,"logins.":90,"logout ":73,"logout.":73,"logs ":[24,58,83],"long ":[31,45,83],"long,":45,"long-":63,"long.":60,"longer ":[27,28,33,40,60,79],"look ":[10,23,28,49,53,56,58,60,73,83],"looking ":[34,35,36],"looks ":[28,60,66,80],"lookup ":84,"lookups ":23,"lookups,":84,"loop.":60,"loopback ":74,"looping.":66,"los ":50,"lose ":76,"losless ":63,"loss ":66,"lossless ":63,"lost ":[77,80],"lost.":72,"love ":0,"loving ":73,"low ":40,"low,":60,"low-":66,"lower ":[48,66,86],"lowercase ":66,"lowercase.":67,"lowest ":[55,60],"lpop ":84,"lr.":63,"lrange ":84,"lrwxrwxrwx ":73,"lrzit5ar66ibtfia8qmiisrfbum/":72,"ls ":[34,44,54,73],"lsblk ":10,"lshw ":83,"lsmod ":[18,36,83],"lspci ":53,"ltelemetry ":60,"lts ":[17,18,35,36,63,83],"lts)":[18,83],"lts-":[18,35,36,63,83],"lts2017 ":63,"lts2017-":63,"lts2018 ":63,"lts2018-":63,"lua-":63,"lua.":63,"lucene ":63,"luks ":10,"luks.":[9,29],"lvm2.":63,"lvs)":63,"lxqt ":63,"lxt,":63,"lxt2,":63,"lz4 ":63,"lz4.":63,"lzma ":63,"m ":[17,34,36,53],"mac ":[39,53],"macaddress\"":73,"machine ":[6,19,22,24,28,32,34,37,42,45,53,58,63,69,72,73,74,77,87,89],"machine,":86,"machine-":[20,42,60,63,69,73,82],"machine.":[73,85],"machine:":[53,74],"machine_id:":60,"machines ":[25,45,53,63,73],"machines,":77,"machines.":[32,53,63,73],"macos ":[11,56],"macos*":[10,56],"macos,":56,"macos:":56,"macro ":63,"macros.":63,"macvlan ":52,"made ":[0,6,10,31,34,49,60,67,74,79,90],"made.":[9,10,67],"made:":39,"magic ":63,"mail ":63,"mail-":63,"maildir ":63,"mailing ":[63,65],"main ":[9,24,31,34,60,66,67,72,76,82,90],"main(":[60,76],"main/":87,"mainline ":63,"mainline-":63,"maintain ":[29,30,32,34,35,36,63,73],"maintained ":[45,73,83,84],"maintainer ":[36,52,65],"maintainers.":29,"maintaining ":[0,32,37],"maintains ":[0,85],"maintenance ":[0,2,24],"maj:":[11,46],"major ":[29,63],"majority ":43,"make ":[2,3,9,11,24,27,28,29,30,32,34,35,36,42,45,53,54,56,57,58,59,60,64,65,66,69,76,79,80,83,90],"make-":76,"make.":63,"make=":36,"makefile ":53,"makefile.":24,"makefiles ":53,"maker-":63,"makers ":63,"makers.":63,"makes ":[5,24,30,31,32,34,45,49,54,74],"makes,":82,"making ":[24,26,28,34,67],"malloc(":60,"malware ":63,"man ":[5,23,28,30,31,35,36,38,40,48,56,62],"man-":63,"man/":24,"man8/":24,"manage ":[3,31,38,58,60,63,73,81],"manage,":63,"manage_network_ns_lifecycle ":80,"manageable,":3,"managed ":[3,30,31,38,48,60,63,73,83],"managed,":60,"managedapp ":73,"managedby\"":73,"management ":[5,22,32,34,40,61,63,67,80],"management,":[63,74],"management-":63,"management.":[43,63],"manager ":[5,9,18,34,35,36,38,63,73,74,81,82,83,93],"manager-":63,"manager.":[63,82],"manager]":48,"managers ":[5,31],"manages ":[31,37,43,47,60],"managing ":[1,60,61,63],"manifest ":31,"manifest.":[28,51],"manifests ":[31,58],"manifests,":[28,51],"manipulate ":[38,63],"manipulation ":63,"manpage ":55,"manpage.":55,"manpages ":56,"manual ":[0,23,35,36,51,60,65,83],"manual\"":38,"manually ":[0,10,23,24,31,32,34,35,36,40,42,51,58,78,83,93],"manually,":[35,54],"manually.":[24,34,35,38,83],"manually:":0,"manufactured ":93,"manufactures ":83,"many ":[0,3,4,5,29,31,32,34,35,36,41,42,63,69,74,84],"map ":[10,63],"map,":63,"mapper ":74,"mapping ":[63,85],"mapred-":77,"mapred.":77,"mapreduce-":77,"mapreduce.":77,"mapreduce/":77,"mapreduce_shuffle<":77,"maps ":84,"march ":27,"mariadb ":[63,90,92],"mariadb!":90,"mariadb*":[90,92],"mariadb,":90,"mariadb.":63,"mark ":[9,66,81],"marked ":31,"marketplace ":[72,73],"marketplace,":73,"marketplace.":72,"marking ":66,"marks ":[9,67],"marks.":67,"marks:":67,"markup ":66,"markup.":66,"mary\"":84,"mask ":[40,80],"masked)":23,"masked.":23,"masks ":54,"master ":[31,67,77,80,81],"master-":80,"master.":87,"master/":[24,28,34,47,57,58,93],"match ":[27,31,36,42,55,80],"match.":[9,10,42],"match=":54,"match]":[38,54,55],"matches ":[31,51,60],"matching ":31,"materials ":1,"math ":58,"mathematics ":82,"matter ":0,"matter.":67,"matters ":31,"matters.":63,"max ":76,"max*":68,"max.":48,"max;":76,"max=":48,"max_cstate=":40,"maxdepth:":66,"maximum ":[9,10,40,48,60],"may ":[0,2,9,10,18,24,27,28,30,31,32,33,34,35,36,38,39,40,41,44,45,49,51,55,57,58,59,60,66,67,68,73,74,78,80,83],"mb ":[46,47,59],"mb/":47,"mdns ":45,"me ":65,"me.":67,"me/":0,"meaning ":66,"meaning,":67,"meaningful ":45,"means ":[5,31,34,51,90],"measure ":32,"measured ":29,"measurements.":63,"measures ":92,"measuring ":63,"mechanism ":67,"mechanisms ":[40,48],"mechanisms.":67,"med,":60,"media ":[0,9,10,31,63],"media,":63,"media.":[9,10,63],"media/":11,"media:":10,"mediasdk.":63,"meet ":[4,10],"meet-":93,"mem=":53,"memorable ":63,"memory ":[29,53,59,60,63,71,84],"memory-":63,"memory.":[29,53,63],"memory:":52,"memory>":53,"mentioned ":59,"menu ":[9,10,38,44,66,72,90],"menu,":[9,10,42,44,72],"menu.":[9,10,67,72,86],"menus ":34,"menus.":63,"menuselection:":[66,67],"merge ":0,"merged ":[0,65],"merging ":63,"merriam-":65,"mesa ":83,"mesa.":63,"message ":[10,36,42,52,72,73,74,83,86,90],"message-":81,"message.":[28,80],"message:":72,"messages ":[34,49,59,63,66],"messagging ":63,"met:":49,"meta ":63,"meta-":77,"metacity.":63,"metadata ":[31,47],"metadata,":[28,75],"metadata.":31,"metadata:":[58,80],"metal ":[13,18,28,32,47,53,60,74,75,76,78,80,82,87,88],"metal,":61,"metapackage ":63,"metaphors.":67,"method ":[5,9,10,24,38,47,54,60,84],"method,":56,"method.":85,"method:":[9,10],"methodologies.":32,"methods ":[1,24,56],"methods,":80,"methods.":[40,84],"methods:":31,"metrics ":32,"metrics-":63,"mget ":84,"mh ":63,"micro ":72,"micro-":32,"microsoft ":[15,20,25,42,63,65,66,69,89],"microsoft*":[18,20,25,42,69,73],"microsoft.":73,"mid-":66,"might ":[43,66,67],"migrate ":[78,89],"migrated ":79,"migration ":[32,59],"miimonitorsec=":55,"mime-":63,"min ":[11,46],"minecraft.":63,"minetest.":63,"mini ":73,"mini-":63,"minimal ":[30,60,63,71,74],"minimalist ":63,"minimize ":[5,29,49],"minimizes ":32,"minimum ":[28,32,41,58,66],"minimum,":28,"minimum:":10,"minnowboard ":68,"minor ":[23,29,81],"mint*":[17,56],"mint,":56,"minute ":[52,60],"minutes ":60,"minutes,":60,"mirror ":[9,10,28],"mirror,":10,"mismatch ":31,"mismatched.":31,"mismatches ":31,"missed ":[2,24],"missing ":[7,24,52,65,80],"missing.":26,"mistake ":67,"mistake.":67,"mit\"":24,"mitre.":29,"mix ":[4,32,34,80],"mix,":[4,28],"mix.":[4,27,28],"mix/":28,"mix:":28,"mix\"":28,"mixed ":30,"mixer ":[4,5,24,28,63],"mixer.":28,"mixer/":28,"mixer:":28,"mixer;":28,"mixer\"":28,"mixer]":28,"mixes ":28,"mixing ":28,"mkdir ":[28,30,35,36,38,47,48,50,53,54,55,56,58,60,64,77,78,79,80,82,83,87,90,93],"mkhermitian(":76,"mkl ":[57,58],"mkl)":58,"mkl-":58,"mkl:":58,"mllib,":87,"mlt ":63,"mm/":53,"mnist ":82,"mnist_example ":82,"mnist_example.":82,"mnt/":[44,53],"mo.":59,"mobilenet,":59,"mobility;":32,"mock ":[24,34],"mock.":24,"mod-":[36,83],"mode ":[52,53,55,58,63],"mode.":[55,73],"mode:":14,"mode=":55,"model ":[5,29,31,58,82,83],"model,":[58,59,82,93],"model-":63,"model.":82,"model:":59,"model=":58,"model_dir>":59,"model_location ":59,"model_location>":59,"modeller.":63,"modelling,":63,"models ":[59,63],"models.":77,"modern ":[0,40,63],"modern-":34,"modeset=":83,"modification ":[34,60],"modification.":[4,34,73],"modifications ":[30,34],"modifications,":34,"modifications.":23,"modified ":[23,24,28,30,31,34,45,46],"modified,":48,"modified.":[28,51],"modifiers ":67,"modifies ":[35,36],"modify ":[24,30,33,36,38,39,53,55,56,60,63,67,73,77,80,84,87,90],"modify.":34,"modifying ":[9,28,35,63],"modprobe ":[36,53,83],"modprobe.":[35,36,83],"modular ":63,"modular,":4,"module ":[0,29,53,59,63,83],"module-":[35,36,83],"module.":[35,36,53,63,83],"module_name}":[35,36],"modulepath ":83,"modules ":[0,29,33,34,53,63,83],"modules,":[25,35,36],"modules-":[35,36],"modules.":[35,36,53,63,83,90],"modules/":36,"modules\"":83,"mom ":51,"mom,":[51,67],"mom.":51,"moment ":65,"monitor ":[6,31,60,63,73],"monitor-":63,"monitor.":63,"monitoring ":[32,37,63],"monitors ":29,"monospace,":66,"month.":66,"more ":[0,4,5,9,10,23,24,25,27,28,29,31,32,34,35,36,38,40,41,42,44,47,52,53,57,58,59,60,63,66,67,72,73,74,75,80,82,83,85,90,93],"more.":[31,63,84],"more:":56,"most ":[23,26,30,34,45,56,60,63,66,67],"most,":4,"mostly ":31,"motd)":[36,83],"mount ":[9,10,39,53,63,67],"mount.":59,"mount\"":[28,39],"mounted ":[10,26,44],"mountpoint:":14,"mounts ":24,"mounts.":63,"mouse ":63,"move ":[5,31,53,72,82,93],"moved ":32,"movie ":63,"moving ":90,"mozilla.":63,"mozjs52.":63,"mozjs60.":63,"mp.":76,"mp3.":63,"mpeg ":63,"mpg123.":63,"ms/":73,"mtd-":63,"mtubytes=":55,"much ":[2,29,83],"multi-":[59,63,80,83,89],"multilayer ":63,"multimedia ":[0,63],"multipath-":63,"multiple ":[0,5,10,29,31,33,34,36,63,65,66,74,76,77,84],"multiplexer ":63,"multiplication ":[12,71],"multithreaded ":63,"mundane ":23,"music ":63,"must ":[2,6,9,10,22,24,28,34,36,38,39,40,45,52,53,54,55,56,58,59,60,65,66,73,76,77,80,81,83,86,88,90,92],"must:":[34,35,36],"mutt ":63,"mutter.":63,"mv ":[90,92,93],"my ":[34,67,76],"my-":[34,52],"mycroft,":63,"mynet0 ":17,"mynet0,":17,"mysql ":[73,90],"mysql*":90,"mysql_secure_installation ":90,"n ":[40,48,53,56,60,73,76,80],"n%":47,"n)":[56,73,76],"n,":76,"n/":[52,83],"n>":34,"n\"":[60,76,83],"n]":[75,90],"na)":76,"name ":[2,11,23,24,28,34,38,39,42,43,45,46,49,56,57,58,59,60,63,66,67,73,74,84,92],"name)":2,"name,":[45,59,66,67],"name.":[9,28,31,34,36,45,60,67,73,80,83],"name:":[14,34,38,52,58,73,80,90,92],"name<":77,"name=":[24,38,47,54,55,58],"name>":[24,31,34,36,58,66,77,80],"name\"":[24,34,73],"name]":[46,62],"named ":[28,36,50,54,55,59,60,66,73,82,90],"namely,":5,"namenode ":77,"namenodes ":77,"names ":[2,34,35,36,54,55,67,68],"names,":[35,36,66],"names.":67,"names:":45,"namespace ":[58,60,74,77],"name}":73,"naming ":[42,66,69],"nano ":90,"nat ":54,"nat-":54,"nat.":54,"national ":29,"native ":[10,31,35,36,63,67,73,83],"native-":[28,31,36,53,58,63,80,81,83],"native\"":39,"natively ":0,"natively.":0,"naturally ":32,"nautilus.":63,"navigate ":[9,10,24,27,34,83,90,92],"navigation ":[67,72],"navigation,":63,"nb,":76,"nbserver-":58,"ncurses ":63,"ncurses.":63,"ndctl.":63,"neatly ":41,"necessary ":[26,34,66,67,92],"necessary,":[5,36],"necessary.":[37,67,83],"need ":[1,4,10,16,24,26,28,31,32,34,35,36,48,51,53,56,57,58,59,60,61,64,66,67,72,73,74,75,76,78,79,80,88,90],"need.":31,"needed ":[1,3,23,24,28,31,40,41,48,54,56,59,60,63,64,67,80,82,87,90,92],"needed,":[24,26,28,67],"needed.":[27,28,31,57,60,66,67,83],"needed;":26,"needing ":23,"needs ":[5,20,29,30,31,34,35,36,39,49,53,93],"needs,":4,"needs.":[4,56,60,66,77,80],"negotiation ":63,"nested ":[28,78],"net ":63,"net-":[17,63],"net.":[54,80],"net/":[54,73,90],"netcat ":88,"netdev ":17,"netdev=":17,"netdev]":55,"netkit-":63,"netlink ":63,"netstat ":56,"nettle.":63,"network ":[0,1,16,23,26,33,38,39,53,58,60,63,73,74,82,85],"network,":[10,32,54,75],"network-":[41,52,53,54,56,63,73,80],"network.":[6,16,31,44,54,55,56,60,82,84,90],"network/":[38,54],"network:":[39,52],"network]":[38,54,55],"networkctl ":38,"networkd ":[38,63],"networkd-":63,"networkd.":38,"networked ":63,"networking ":[10,63,80],"networkmanager ":[38,63],"networkmanager,":[14,38],"networkmanager-":63,"networkmanager.":[49,63],"networkmanager/":38,"networkmanager:":38,"networks ":[23,58,59,73],"networks.":63,"neural ":[58,63,82],"never ":[67,77,87],"new ":[2,5,27,28,29,31,32,33,34,35,36,37,38,40,45,47,50,53,54,55,56,58,59,60,61,63,64,65,72,73,74,75,76,77,78,80,82,83,84,85,87,90,92],"new":[58,67],"new,":[4,28,58],"new-":[36,83],"newer ":76,"newer.":[40,53],"newest ":29,"newly ":[23,43,52,90],"news ":63,"news-":0,"newt.":63,"next ":[28,56,60,63,66],"next,":[10,44,58,59,90,92],"next-":63,"next.":82,"nfiles.":48,"nfs ":63,"nfs)":63,"nfs-":63,"nftables.":63,"ng.":63,"nghttp2.":63,"nginx ":[6,54,60,74],"nginx!":74,"nginx*":[28,74],"nginx-":63,"nginx.":[28,54],"nginx/":[28,54],"nic ":[53,55],"nic.":55,"nics ":55,"nics.":[53,55],"nist.":29,"nix ":63,"nm-":38,"nmcli ":38,"nmtui ":38,"nn ":53,"no ":[0,2,4,10,23,24,27,28,29,31,33,38,39,49,51,54,55,56,60,63,65,66,67,77,84],"no)":[72,73,77],"no-":[49,52,58,83],"no.":56,"no_proxy ":88,"no_proxy=":[28,80,88],"no_proxy}":80,"no_timer_check ":[39,54],"node ":[56,81,89],"node,":[53,81],"node.":[58,63,80],"node/":53,"node0/":53,"node1/":53,"nodejs-":63,"nodemanager.":77,"nodes ":[77,80,81],"nodes,":58,"nodes.":[58,77],"nodev ":53,"nofile=":57,"nographic ":17,"nominal ":67,"nominalizations,":67,"non-":[10,18,30,54,63,67,83],"none)":90,"nonstandard ":63,"noptions ":83,"noreplace-":[39,54],"normal ":[28,35,36,66,83],"normally ":23,"normally,":90,"normally.":75,"nosql ":84,"not ":[0,2,3,4,5,6,9,10,11,23,24,26,28,29,30,31,32,34,35,36,38,39,40,41,44,45,46,47,48,49,51,52,54,55,56,57,58,59,60,64,65,66,67,68,72,73,78,79,80,81,83,84,85,88,92],"not.":[34,49],"notabs=":14,"notation ":63,"note ":[56,58,60,66,73,90,92],"note:":[66,76],"notebook ":[58,82],"notebook,":[58,82],"notebook.":[58,82],"notebooks ":[58,82],"notebooks/":82,"noted ":32,"notes ":[0,66,80],"notes-":63,"notfound.":24,"nothing)":28,"notice ":[10,66],"notices ":66,"notices.":66,"notices:":66,"notification ":[36,83],"notification.":63,"nouns ":67,"nouveau.":83,"novel ":26,"now ":[19,28,43,56,60,72,73,75,80,81,84,90,92,93],"now,":[28,76],"now?":[73,90],"noyce@":84,"noyce\"":84,"nspr.":63,"nss.":63,"ntfs-":63,"ntp ":50,"ntp)":63,"ntp=":50,"nuc.":92,"nuc6i5syh ":92,"null ":[48,52,56,60,83],"null":49,"null,":[60,73],"null.":31,"null;":60,"num ":24,"num]":24,"numa ":53,"number ":[5,24,28,29,31,34,40,48,53,56,57,60,66,67,77,82],"number,":[45,56],"number.":[42,54,56,60,66,69],"number>":[9,15,28,31,48,53],"number]":[10,11,19,20,21,22,42,46,56,69],"numbered ":9,"numbers ":32,"numbers,":[9,45,67],"numbers.":45,"number}":73,"numerical ":63,"numerous ":92,"nvd.":29,"nvidia*":89,"nvidia-":83,"nvidia.":83,"nvidia/":83,"nx,":63,"o ":[12,14,17,18,20,22,24,28,34,35,36,51,53,54,60,63,64,76,92,93],"o3 ":76,"oath-":63,"objdump ":76,"object ":[59,63,67],"object-":63,"objects ":[53,59,75],"objects,":[59,63],"objects.":63,"observe ":[6,60],"observed ":80,"obtain ":[31,34,63],"obtained ":[23,29,31,58,73,80],"obtained,":34,"obtains ":26,"obvious ":90,"ocaml ":63,"ocaml-":63,"occur ":[5,24,31,83],"occur,":[2,24],"occur.":66,"occurs ":[36,83],"occurs,":[10,49,60],"occurs.":[26,32,60],"ocr)":63,"of ":[0,2,3,4,5,6,9,10,12,20,23,24,25,26,27,28,29,30,31,32,33,35,36,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,59,60,61,62,63,64,65,66,68,71,72,73,74,75,76,77,78,79,80,81,82,84,85,86,87,90,91,92,93],"of-":[0,17,32,65,81,83],"of.":29,"of:":[6,60,66],"of=":11,"off ":[24,43],"offer ":[73,78],"offer:":73,"offered ":[32,73,74],"offering ":[77,84],"offerings.":73,"offers ":[5,24,29,32,42,51,69,73,84],"office ":63,"official ":[28,74],"offload ":32,"offset:":14,"oflag=":11,"often ":[36,45,63,76,81],"ok ":[75,85],"ok,":90,"old ":[28,34],"older ":[27,29,34,58,60],"omit ":[2,51],"on ":[1,2,4,5,6,9,13,15,16,18,25,26,27,28,29,30,31,32,33,34,35,36,39,40,41,42,44,45,47,48,49,52,53,54,55,57,58,60,61,63,64,65,66,67,69,70,71,72,77,78,79,80,83,85,86,87,88,89,93],"on,":[23,80],"on-":[10,24,26,28,32,34,41,59,63,73,80,85],"on.":90,"on;":[28,54],"once ":[16,22,23,24,28,30,32,40,56,57,58,60,65,66,72,73,74,76,77,80,82,90,92],"one ":[5,6,24,28,31,32,34,35,36,41,47,53,54,56,58,59,60,63,66,67,76,80,84,87,88],"one,":[28,77],"one-":[34,93],"one.":[0,56],"ones ":[49,56,60],"online ":92,"online-":63,"only ":[2,5,9,10,24,26,27,28,30,31,32,36,40,41,44,49,54,58,60,63,66,67,73,83,84,85,90],"only)":59,"only.":[7,60,63,66,91],"onscreen ":10,"onto ":[5,24,29,34],"onto.":54,"oobe)":17,"oops,":[6,60],"opae-":24,"opae/":24,"open ":[0,3,9,10,19,24,26,28,34,35,36,42,44,48,53,56,57,58,60,63,64,65,72,73,74,75,77,78,80,83,84,85,87,90],"open-":[5,19,63],"open.":58,"openblas ":57,"openblas.":[58,63],"opencv.":63,"opened ":57,"openfaas ":63,"opengl ":[63,71],"opengl-":83,"opening ":[28,60],"openjdk ":57,"openmpi.":63,"openqa ":63,"opens ":[31,58,82],"opensource ":83,"openssh ":64,"openssh*":64,"openssh-":[29,41,52,63,70,73],"openssl ":[51,73],"openssl,":51,"openssl.":63,"openstack-":63,"openvino ":59,"openvino/":59,"openvswitch.":63,"operable,":52,"operate ":[23,40,67],"operate.":53,"operates ":[5,67],"operating ":[3,5,6,29,30,32,40,45,52,59,60,73,83,90],"operation ":60,"operation.":55,"operations ":[29,84],"operations.":[58,63,82],"operator ":58,"operator.":58,"opt ":[49,60],"opt-":[6,60],"opt.":83,"opt/":[58,83],"optical ":[18,63],"optimization ":25,"optimizations ":76,"optimize ":[31,55,59],"optimized ":[20,25,29,31,42,57,58,59,63,69,87],"optimizer ":59,"optimizer.":59,"option ":[9,10,32,39,44,49,51,54,56,59,60,64,67,75,76,90,92],"option.":[10,54,56,72,73],"option:":[54,60],"option=":54,"optional ":[0,24,28,49,56,59,66,87,90],"optional)":[53,67],"optional.":[9,10,34],"optional:":[9,10,84,86],"optionally ":[14,28,57],"optionally,":[31,90],"options ":[9,10,29,31,32,34,39,49,54,56,59,60,64,73,74,83,85],"options,":[9,10,49],"options.":[2,9,10,24,28,31,34,35,36,38,60,72],"options:":[34,49,56,60,83],"options=":64,"opts ":60,"opus.":63,"or ":[0,2,3,4,5,6,7,9,10,15,18,23,24,27,29,30,31,34,35,36,38,39,40,41,42,43,44,45,46,47,48,49,51,52,53,55,56,58,59,61,63,65,66,67,69,72,73,74,76,78,80,81,83,84,85,86,90,93],"or:":[67,80],"oracle ":[60,63,65],"orc.":63,"orchestrate ":32,"orchestrates ":37,"orchestration ":[63,80],"orchestration.":74,"order ":[5,28,32,54,57,59,60,66,67,90],"order.":[9,10,28,44],"order:":67,"ordering.":28,"org ":[53,63],"org.":[23,34,54,60,63,75,77],"org/":[0,12,14,17,20,22,23,24,26,27,28,29,34,47,51,52,53,54,66,71,92],"organization ":[66,67],"organization,":66,"organize ":[65,66,67],"organized ":66,"organizing ":[63,67],"original ":[28,31,42,67],"originally ":63,"os ":[1,4,5,12,14,25,28,31,32,33,35,36,40,41,44,60,63,70,74,77,90,92,93],"os,":[31,43,81,90],"os-":[10,14,19,24,27,28,32,34,39,41,44,45,52,59,63,73,85],"os.":[4,9,10,31,42,60,63,69],"os/":47,"os:":[10,73],"oses.":37,"ospf/":63,"oss ":58,"oss:":58,"oss@":58,"ostree.":63,"ostype:":52,"osv.":4,"other ":[1,9,23,24,28,30,31,32,40,47,48,58,59,61,63,66,67,68,72,81,82,83,84,85,86,88,90],"others,":[34,35,36],"others.":[63,68],"otherwise ":28,"otherwise,":[2,10,24,34,42,54,58,60],"otp)":93,"our ":[0,9,10,25,28,31,43,58,61,62,65,66,67,72,73,74,75,76,77,81,82,84,89,90,92],"out ":[0,24,28,29,31,34,40,43,51,60,63,65,66,73,80,92],"out-":[0,32,65,83],"out.":56,"outage ":49,"outages.":32,"outbound ":88,"outline ":63,"outlined ":24,"outlines ":39,"output ":[24,28,31,34,36,38,42,45,47,49,51,52,53,57,58,60,64,73,74,76,77,82,87],"output,":[28,66,73],"output.":[34,35,63,73],"output/":77,"output:":[31,38,47,49,52,53,56,59,64,76,84],"output_dir ":59,"output_dir>":59,"outputs ":[28,34,49,59,63],"outside ":[6,44,55,60,63,66,83,92],"over ":[9,10,23,26,28,30,33,63,64,83,84,93],"over-":66,"overhead.":0,"overheating ":40,"overlapping ":31,"overlay2\"":74,"overlayfs ":74,"overridden ":[28,40],"override ":[35,36,48,60,90],"override.":64,"overview ":[15,32,58,66,73],"overview:":66,"overwrite ":[77,83],"overwrites ":[83,87],"overwritten,":31,"ovmf ":17,"ovmf.":[17,24,28],"ovmf_code.":17,"ovmf_vars.":17,"own ":[4,6,10,27,28,29,31,34,37,54,57,58,60,65,85,90],"own.":24,"owned ":[30,60],"owner ":[60,85],"ownership ":28,"ownership.":24,"ownership:":75,"owns ":44,"p ":[17,28,35,38,46,47,48,50,53,54,55,56,58,60,64,74,77,78,79,80,83,90,93],"p'":80,"p/":0,"p0.":40,"p11-":63,"pac ":23,"pac)":23,"pac-":23,"pack ":[28,31,52],"package ":[2,3,5,24,28,31,33,34,35,36,37,57,58,63,64,76,81,83],"package,":[2,24,28],"package-":[5,24,31,63,66,80],"package.":[24,34,47,80],"package:":24,"package_name=":36,"package_name>":36,"package_version=":36,"package_version>":36,"packaged ":[0,26,34,36],"packagename>":34,"packages ":[0,2,3,5,24,29,30,31,32,34,37,41,43,47,53,58,63,73,74,82,90],"packages,":[3,5,24,47,63,74,77,78,80,82,85,87,90],"packages.":[4,31,43,47,63,79],"packages/":[24,31,34],"packaging ":[0,2,24],"packet ":[53,63],"packets ":[33,54],"packets.":53,"packs ":[28,31],"packs,":28,"packs.":[31,52],"pacrunner ":23,"pacrunner*":23,"pacrunner.":[23,63],"pacrunner/":23,"page ":[0,9,10,23,28,32,36,56,59,60,65,67,72,73,74,90],"page,":[62,66,67,90],"page.":[9,10,15,31,32,35,36,66,67,80,90],"page:":[35,36,40],"pager ":63,"pages ":[53,63,66],"pages,":61,"pages.":90,"paint ":63,"pair ":[63,72,73],"pairs ":59,"pam ":29,"pamname=":56,"panel.":[63,67,90],"pango.":63,"pangomm.":63,"paradigm.":90,"paragraph ":66,"paragraph:":67,"paragraphs.":67,"parallel ":[63,67],"parallel.":66,"parallelism ":67,"param_input_source ":59,"param_model_xml>":59,"parameter ":[34,36,39,40,57,73,83],"parameter.":[42,48,69,73],"parameter:":39,"parameter>":48,"parameters ":[34,35,39,63,83],"parameters.":[34,35,48],"parse ":[23,58],"parser ":63,"parsing ":63,"part ":[0,11,28,35,36,37,45,46,63,65,67,75,81,90],"part-":77,"parted.":63,"participate ":[9,10],"participate,":9,"particular ":[5,31,32],"partition ":[28,44,46,63],"partition,":[9,10],"partition.":[10,44,63],"partition:":[44,80],"partition\"":[28,39,46],"partitioning ":[10,32],"partitionlayout\"":[28,39,46],"partitionmountpoints\"":[28,39],"partitions ":[9,10,11,27,54],"partitions,":[9,10,27,39],"partitions.":[10,63],"partner ":73,"parts ":7,"parts,":66,"parts:":37,"party ":[29,61,63],"pary ":63,"pass ":[28,49,56,80],"pass-":54,"passed ":[34,36,59,60],"passes ":23,"passing ":80,"passive ":67,"passnic0,":53,"passnic1,":53,"passphrase ":[9,10],"passphrase.":9,"passphrases ":[9,10],"passwd ":[43,59],"passwd:":60,"password ":[10,29,43,49,56,59,60,63,77,84,85,90,93],"password)":56,"password,":[60,90],"password.":[9,10,43,56,60,92],"password:":[56,60,90,92],"password?":90,"passwords ":[29,63,85],"passwords,":63,"past.":29,"paste ":[58,72],"pasword ":24,"patch ":[31,34,63,89],"patch-":34,"patch.":[34,76],"patch/":76,"patch0501 ":34,"patch0501:":34,"patch0502 ":34,"patch0502:":34,"patch1001 ":34,"patch1001:":34,"patch2001 ":34,"patch2001:":34,"patch:":76,"patched ":[29,32],"patches ":[25,29,34,76],"patches,":76,"patches.":0,"patches:":76,"patching ":76,"patchset.":63,"path ":[27,28,32,53,56,60,63,73,83,85],"path,":44,"path-":58,"path.":[27,28,53,83],"path/":[35,60],"path:":58,"path=":[44,58,83,85],"pathname ":73,"paths.":83,"pattern ":30,"pattern.":67,"patterns ":[63,67],"patterns,":29,"paused:":52,"payload ":60,"payload)":60,"payload,":60,"payload:":60,"payload;":60,"payload_file.":60,"payload_format_version:":60,"payload_version ":60,"payload_version)":60,"payload_version:":60,"pc ":15,"pc.":63,"pci ":53,"pci,":17,"pci-":53,"pci/":53,"pciutils.":63,"pclmul)":71,"pclmulqdq)":12,"pcre.":63,"pcre2.":63,"pdf ":63,"pdf,":63,"pdns-":63,"pdt.":47,"pe32 ":63,"peanut ":67,"peers ":67,"pem ":72,"pem\"":[28,72],"penguin ":[9,63],"per ":[9,10,27,29,63,66,67],"per-":80,"perform ":[6,23,24,28,39,49,52,54,56,60,64,66,74,82,90],"performance ":[0,29,32,57,58,59,63,76,80],"performance,":[32,40],"performance-":[26,63],"performance.":[28,63],"performant ":[29,34],"performed ":39,"performed.":60,"performing ":[39,51,67],"performs ":[25,30,51,63],"period)":67,"period.":80,"perl ":[63,76],"perl*":76,"perl,":[63,84],"perl-":[52,63,73],"permanent ":73,"permanently ":[72,73],"permanently,":[48,80],"permanently:":80,"permission ":28,"permission<":77,"permissions ":[60,85,90],"permissions)":31,"permissions.":[85,88],"permissions:":75,"permit ":49,"permitrootlogin ":[17,64],"permitted ":77,"persistent ":[32,34,54,63],"persistent.":30,"personal ":[63,67],"perspective,":60,"philosophy ":[29,30,32,40],"phoronix ":63,"phoronix-":63,"photo ":63,"photo-":63,"photography ":63,"photos.":63,"php ":[63,90],"php,":90,"php-":[63,90],"php.":[63,90,92],"phpinfo(":90,"phpinfo.":90,"phpmyadmin ":92,"phpmyadmin*":[90,92],"phpmyadmin,":90,"phpmyadmin-":90,"phpmyadmin.":90,"phrase,":67,"phrases ":[66,67],"phrases,":67,"phrases.":67,"physical ":[18,32,55],"physical\"":39,"pick ":[5,34,56,60],"picks ":[56,60],"pickup ":30,"picky ":[31,44],"picky-":31,"pictures ":63,"pidfile=":56,"pie ":29,"piece ":[31,58],"pieces ":[26,28,35,36],"pim ":63,"ping'":63,"pipeline ":[32,37],"pipewire.":63,"pitfalls.":66,"pixbuf.":63,"pixman.":63,"pk\"":63,"pkcs#":63,"pkcs11-":63,"pkg ":58,"pkg-":2,"pkgconfig ":63,"pkgconfig(":2,"pkh.":0,"pktgen:":53,"pktgen>":53,"pl ":76,"pl2/":76,"place ":[60,66,73,86],"place.":67,"places ":[36,83],"plain ":66,"plaintext ":63,"plan ":[56,92],"plane ":[53,58,63,80,81],"plane.":80,"planned ":66,"plans.":[32,73],"plasma ":63,"platform ":[15,42,57,63,69,72,73],"platform*":13,"platform,":[59,63,73],"platform-":83,"platform.":[18,42,63,69],"platform:":10,"platforms ":[25,32,42,59,69,76],"platforms,":74,"platforms.":[25,40,53,59],"platfrom ":63,"play ":[19,20,63],"playback ":63,"playback.":0,"player ":[13,21,22,63],"player,":[42,69],"player-":[19,20],"please ":[0,24,39,57,58,60,74,75],"plot ":82,"plotting,":63,"plug-":63,"plugin ":[34,63,93],"plugins ":63,"plugins,":80,"plugins-":63,"plugins.":63,"plugins:":52,"plumbers ":5,"plus ":[56,63,67,84],"pm ":47,"pmdk.":63,"png ":66,"png,":63,"pnp-":63,"pod ":58,"pod-":[58,80],"pod.":58,"pods ":[58,80],"point ":[9,10,23,44,57,58,66,67,73],"point,":74,"point-":73,"point.":[34,41,67],"pointed ":60,"pointer ":[5,31,60],"pointers:":32,"points ":[28,39,49],"policies ":67,"policies.":[67,73],"policy ":73,"poll ":53,"pool ":[53,54],"pools ":54,"pop-":[42,72],"pop3 ":63,"popt.":63,"popular ":[31,32,34,63,73,83],"populate ":54,"port ":[10,23,28,53,54,55,56,58,63,64,74,84,87,88],"port)":56,"port.":10,"port/":88,"port:":64,"port=":[17,56],"port>":[23,28,80],"portable ":63,"portal.":63,"portion ":[5,67],"ports ":[55,56,58],"possible ":[2,9,24,29,31,60,67,83],"possible,":67,"possible.":[0,32,63,66],"post ":[0,9,27],"post-":[10,31,52,58],"post.":29,"postarchive:":14,"posted ":60,"postgres ":73,"postgres'":60,"postgres)":60,"postgresql ":[6,60,73],"postgresql.":63,"postreboot:":14,"postrouting ":54,"postscript,":63,"potential ":[66,84],"potentially ":[32,49],"power ":[9,10,33,39,44,54,63,67],"power,":32,"power-":39,"power.":40,"powerdns ":63,"powered ":24,"poweredge*":68,"powerful ":[32,63],"powerful,":4,"powershell*":18,"powerstate\"":73,"practical.":[29,34],"practice ":[0,67],"practice,":[3,6],"practices ":[15,29,65,80,89],"practices,":[35,36],"practicing ":67,"pre-":[5,11,28,32,36,42,56,57,59,66,69,73],"preassigned ":56,"preboot ":32,"prebuilt ":[22,32,63],"precedence ":28,"precision ":63,"precompiled ":36,"precompiled-":83,"preconfigured ":[13,19,20,21,74],"predefined ":30,"predict ":82,"predicted ":82,"prediction ":82,"prediction,":82,"prediction.":82,"predicts ":82,"preempt-":63,"preempt_rt ":63,"prefer ":58,"preferred ":[9,50,56,67,80],"prefix:":92,"prefix=":83,"preflight ":80,"preinstalled ":[27,28],"premade ":36,"premises ":[32,73],"preparations ":39,"preparations.":54,"prepares ":[6,60],"prerequisite ":59,"prerequisite.":32,"prerequisites ":9,"prerequisites:":66,"preschool ":63,"present ":[9,66,82],"present.":[2,10],"present:":58,"presentation ":45,"presented ":[5,56,80],"presenting ":66,"press ":[9,10,56,60,65,72,73,90],"pressing ":[9,10,44],"pretty ":45,"prevent ":[40,90],"prevents ":83,"preview ":[42,67,69],"preview)":73,"previous ":[10,27,28,58,59,60,73,80,83],"previously ":[32,54,72,90],"previously.":38,"pricing ":72,"primarily ":63,"primary ":[9,28,58,63],"primary_dns_ip]":38,"primitives ":58,"primitives.":58,"principals.":73,"principle ":67,"print ":67,"print(":58,"printed ":[42,63,72],"printer ":63,"printf ":83,"printf(":60,"printing ":63,"prints ":60,"prior ":[6,9,67],"prioritize ":92,"prioritized ":54,"prioritizes ":40,"priority ":66,"privacy ":60,"private ":[23,54,72,73],"privateipaddress\"":73,"privilege ":90,"privilege.":54,"privileged ":63,"privileges ":[10,63,90],"privileges,":43,"privileges.":[27,52,55,56,59,63,85],"pro ":67,"proactive ":29,"proactively ":[0,60],"probe ":60,"probe;":60,"probename ":60,"probename/":60,"probes ":[6,60],"probes,":60,"probes.":[6,60],"problem ":[23,65],"problem.":[60,76],"problems ":[23,49,63,66],"problems.":31,"proc/":[39,48,54,80],"procedural ":66,"procedure ":59,"procedure.":59,"procedures.":66,"procedures;":66,"proceed ":[9,56,72,73],"proceeding ":56,"proceeding.":[11,60],"process ":[2,24,32,34,40,41,44,47,48,51,54,63,74,77,88],"process,":[63,72],"process.":[24,27,34,44,79],"processed ":59,"processes ":[4,32,37,48,63],"processes,":32,"processes.":48,"processing ":[57,77,83],"processing.":[6,53],"processor ":[40,63,68],"processor.":[40,63],"processors ":40,"processors,":40,"procps-":63,"produce ":[27,31,32],"produce,":27,"produced ":28,"producers ":59,"produces ":27,"product ":[19,66,92],"product,":66,"production ":[32,63,74,91],"productivity ":63,"professional ":63,"professional,":67,"profile ":73,"profile-":83,"profiles.":63,"profiling ":76,"program ":[26,36,40,60,63,73,83],"program,":[26,60],"program.":[6,63],"programmers ":63,"programming ":[63,77,84],"programming.":63,"programs ":[26,30,63],"programs,":63,"programs.":63,"progress ":[7,10],"progress,":7,"progress.":83,"project ":[1,24,29,49,53,63,70,73,74,78],"project,":[24,76],"project.":[36,41,49,53,63],"project:":73,"projects ":[3,5,25,32],"projects.":[3,63],"projects/":24,"promotes ":5,"prompt ":[9,42,69,72,77],"prompt,":[10,73],"prompt.":42,"prompted ":60,"prompts ":[60,72,73,83],"proper ":[28,67],"properly ":[10,31,73,77,81],"properly.":[28,44],"properties ":48,"properties.":87,"properties\"":73,"property ":68,"property=":88,"property>":77,"proprietary ":83,"pros ":82,"proto.":63,"protobuf-":63,"protocol ":63,"protocols ":[54,93],"protocols.":[54,63],"prototxt ":59,"prototype ":58,"provide ":[3,5,10,28,30,33,34,35,36,37,40,47,48,55,58,59,61,63,66,74,80,84,93],"provide:":59,"provided ":[0,7,23,28,29,30,31,34,39,49,54,57,58,59,60,73,74,80,83],"provider ":[32,58,73],"provider,":37,"providers.":[63,73],"providers/":73,"provides ":[0,2,4,5,6,10,24,25,28,30,31,36,38,39,41,43,45,54,57,58,59,60,63,64,66,67,70,74,75,78,82,83,84,87,90],"provides.":83,"providing ":[2,63,66,82],"provision ":[31,39,73],"provision,":39,"provision.":39,"provision:":39,"provisioned ":31,"provisioning,":63,"provisioningstate\"":73,"proxies ":[23,28],"proxies,":28,"proxies.":[23,63],"proxies\"":28,"proxy ":[10,23,63,74,78,88],"proxy,":63,"proxy-":28,"proxy.":[23,28,78,80,88],"proxycommand ":88,"ps ":79,"pseudo ":38,"ptr)":60,"pub ":77,"pub'":73,"pub/":34,"public ":[29,54,72,73],"public":65,"public/":73,"publically ":74,"publicipaddress\"":73,"publish ":59,"published ":[27,28,29,52,59,65,74,83],"published.":[27,59],"publisher ":73,"publisher:":73,"publishes ":59,"publishing ":59,"pull ":[32,57,65,74,84],"pull-":72,"pulldown ":10,"pulled ":[32,34,74],"pulled.":80,"pulls ":28,"pulseaudio ":63,"pulseaudio,":75,"pulseaudio.":63,"punctuation ":[66,67],"punctuation,":67,"punctuation.":[66,67],"purpose ":[51,63,66,87],"purposes ":[7,77,91],"purposes,":[9,60],"purposes.":[6,60],"purposes:":58,"put ":[3,6,58,66,67],"puts ":[0,72],"putty ":56,"putty.":56,"pwd\"":52,"pxe ":[20,32,39,42,54,63,69],"pxe)":32,"pxe-":[52,54,63],"pxe.":[20,42,54,69],"pxe_internal_ip/":54,"pxe_internal_ip:":54,"pxe_internal_ip=":54,"pxe_subnet.":54,"pxe_subnet=":54,"pxe_subnet_bitmask=":54,"pxe_subnet_mask_ip,":54,"pxe_subnet_mask_ip=":54,"pxeclient*":54,"pxeclient,":54,"py ":[28,33,58,59,87],"pydata.":63,"pygobject ":63,"pygobject.":63,"python ":[58,63,73],"python*":[31,87],"python,":[63,84],"python-":[52,63,73],"python.":63,"python/":87,"python2-":63,"python3 ":59,"python3-":[63,73],"python3.":31,"pytorch*":58,"pytorch,":63,"pytorch-":58,"pytorch.":58,"pytorch/":58,"pytorchtest ":58,"q)":79,"qemu ":[24,28],"qemu*":17,"qemu-":[53,63],"qemu.":28,"qemu/":[24,25],"qf=":47,"qpdf.":63,"qt ":63,"qt-":63,"qt3d.":63,"qtbase.":63,"qtdeclarative.":63,"qtlocation.":63,"qtsvg.":63,"qttools.":63,"qtwebchannel.":63,"qtwebengine.":63,"quad-":55,"quake-":63,"qualified ":[56,60],"quality ":[37,48],"quality,":[56,63],"quantity ":53,"quantization ":58,"quassel ":63,"queries ":47,"queries.":6,"query ":[23,33,56,63],"question ":65,"question,":67,"question.":90,"questions ":[0,61,65,90],"quick ":[66,83,84],"quicker ":24,"quickly ":[5,6,24,32,58,60,66],"quickly,":67,"quickly.":67,"quickstart ":[15,84],"quiet ":[39,54],"quite ":31,"quota ":48,"quote ":67,"quotes,":66,"qxl ":17,"r ":[59,63],"r)":60,"r*":87,"r-":[63,77],"r.":63,"r2r.":76,"r8,":76,"r]":10,"racing ":63,"radio ":63,"ram ":[18,19,21,71],"ramdisk ":54,"ran ":[77,87,90],"rand(":58,"random ":[73,82],"randomization ":29,"range ":60,"range=":54,"rank ":76,"rank,":76,"rapidly ":29,"rare ":10,"rate-":60,"rated ":40,"rather ":[31,66,74],"raw ":[17,63],"raw.":[24,28,34,93],"raw/":47,"rax,":76,"rc ":73,"rcu.":63,"rcx,":76,"rdma-":63,"re ":[0,9,35,36],"re,":67,"re-":[31,90],"reached.":[50,60],"reaching ":[28,60],"read ":[0,30,59,60,61,65,66,67,77,80,81,85],"read,":63,"read-":59,"readability ":66,"readability.":66,"readable ":[26,63,65],"reader ":[66,67],"reader,":67,"reader.":67,"readers ":[66,67],"readers,":67,"reading ":[63,67],"reading,":63,"reading.":74,"readline.":63,"readme ":36,"readme.":66,"reads ":[40,49,63],"ready ":[9,29,34,58,60,74,77,80,84,90,92],"real ":63,"real-":[6,60,63,84],"realistic ":63,"realloc(":60,"realpath ":18,"realtime ":63,"realvnc`":56,"reaping ":43,"reasons ":60,"reasons.":[0,23,60],"reboot ":[9,10,18,30,35,44,45,55,56,83,93],"reboot,":[34,39,80],"reboot.":[9,34,36,83],"rebooted ":29,"rebooting,":[10,35],"reboots ":63,"reboots,":[10,54],"reboots.":54,"rebuild ":[2,24,35,36,83],"rebuilding ":32,"rebuilds ":34,"rebuilt ":[36,83],"recall ":[56,92],"receive ":5,"received ":[6,60],"receives ":60,"recent ":29,"recognition ":63,"recognition.":82,"recognize ":63,"recommend ":[9,10,28,35,36,41,57,76,79,83],"recommendation ":74,"recommended ":37,"recommended)":58,"recompiled ":36,"record ":[6,32,49,53,54,60,80],"record,":60,"record-":6,"record.":[49,60],"record:":60,"record_burst_limit.":60,"record_burst_window=":60,"record_format_version:":60,"record_retention_enabled ":60,"record_window_length ":60,"record_window_length=":60,"records ":6,"records,":[6,60],"records.":[6,60],"recursive ":63,"recursively ":63,"redefine ":4,"redeploying ":32,"redirect ":73,"redis ":[73,89],"redis-":63,"redis.":84,"reduce ":[28,40,63,66,67],"reduces ":58,"reducing ":40,"redundancy ":55,"redundant ":29,"ref ":66,"ref:":66,"refer ":[5,6,16,24,27,28,29,31,35,36,37,39,53,54,55,58,59,61,66,67,74,85],"reference ":[24,28,30,33,60,61,62,66,67,73,92],"reference,":60,"reference.":66,"reference:":36,"referenced ":[30,66],"references ":[32,65,66],"referencing ":73,"referred ":74,"referring ":67,"refers ":[32,56,67,90],"refresh ":28,"refused ":80,"regarding ":[24,28,66,90],"region ":[9,59,73],"region.":63,"regions ":15,"register ":80,"registered ":73,"registers ":76,"registers.":34,"registries ":58,"registries.":73,"registries:":52,"registry ":[32,58],"registry:":52,"regression-":45,"regular ":[5,31,52],"regulates ":77,"reinstallation ":83,"relate ":26,"related ":[48,60,63,66,73,77],"relational ":63,"relative ":32,"relatively ":[49,66],"relax ":90,"relay ":63,"release ":[0,4,5,9,10,15,27,28,31,32,34,53,54,58,60,63,73],"release,":[27,34,66],"release-":[9,28],"release.":[9,27,28,31,32,51,63],"release:":34,"release>":34,"released ":[42,57,67],"releases ":[0,27,28,29],"releases.":[28,31,37,63],"releases/":[14,27,47,51],"releasever/":47,"releasever=":47,"release}":47,"releasing ":0,"relevant ":[24,31,32,41,66,67],"relevant,":66,"reliability,":63,"reliable ":[39,54,63],"reliable,":63,"relies ":[35,36,39,49,54,83],"reload ":[28,30,38,64,83,90],"reload-":93,"reloaded ":93,"reloaded.":93,"reloading ":[78,90],"reluctance ":76,"rely ":30,"remain ":[0,73],"remain.":28,"remaining ":[31,74],"remains ":[9,56],"remediate ":5,"remember ":[40,67,92],"remember,":45,"remember.":66,"remember:":66,"remote ":[32,56,63,64,72,80,90],"remote-":[17,33],"remote.":32,"remotedesktop.":64,"remotely ":[56,63,83],"remotely?":90,"removal ":63,"removal.":28,"removals)":5,"removals.":31,"remove ":[2,9,10,18,23,24,28,31,34,35,36,42,44,49,58,66,67,69,73,79,83,90,92],"remove-":52,"removed ":[28,29,52,58,63],"removed,":31,"removed.":[90,93],"remover ":52,"removes ":[23,29,31,52,60,64],"removing ":[28,52,90],"rename ":[53,90,92],"renaming ":45,"rendering ":63,"rendering,":63,"renew ":63,"repair ":[24,31,44,66,83],"repaired ":44,"repairs ":31,"repeat ":28,"repeated ":74,"repeated,":66,"repeatedly ":32,"repeating ":[63,66],"replace ":[28,31,38,43,56,58,59,60,76,87,90],"replacement ":[32,63,90],"replicate ":58,"replicates ":58,"replication ":77,"replication<":77,"reply.":84,"repo ":[23,24,28,34,58],"repo,":24,"repo.":[25,34,37],"repo:":60,"repopulating ":28,"repoquery ":47,"report ":[6,47,49,60],"report,":59,"reported ":[6,60],"reporting ":[6,60],"reports ":[6,9,10,60],"repos ":[24,34],"repos.":24,"repos:":24,"repositories ":[29,47,63],"repositories.":47,"repository ":[32,34,36,37,52,58,74,75,80],"repository,":0,"repository.":[28,39,52,54,57,60,65],"repository:":58,"representation ":[59,63],"represents ":[5,31,34],"reproducible.":32,"request ":[0,26,65,86],"request.":[0,65],"requested ":60,"requests ":[0,23,34,35,36,56],"requests.":56,"require ":[5,23,28,49,55,56,58,64,83,90],"required ":[4,5,28,35,36,41,49,51,52,57,58,60,63,66,73,74,75,79,80,82,83,84,91,92],"required)":28,"required,":[2,10],"required.":[9,10,56,60,64,66,83,84],"requirements ":[2,9,10,24,42,69],"requirements,":[9,10],"requirements.":[35,36,39],"requires ":[2,4,10,24,32,36,56,58,60,80,81],"requires:":37,"requiring ":71,"requisite ":28,"requried ":63,"rescan ":10,"reservations ":73,"reservations.":73,"reserved ":60,"reset ":[10,30,50,80],"reshape ":82,"reshapes ":82,"reside:":28,"resides ":49,"resilient ":32,"resilient.":32,"resize ":17,"resize2fs ":46,"resizepart ":46,"resnet50 ":58,"resolution:":23,"resolv.":[23,54],"resolve ":[0,2,23,24],"resolve.":[23,24],"resolve]":54,"resolved ":5,"resolved.":[2,24,54],"resolves ":63,"resolving ":[23,29],"resource ":[33,34,59,63],"resource-":73,"resourcegroup\"":73,"resourcegroups/":73,"resources ":[32,36,48,59,73],"resources,":[58,71,73,80],"resources.":[53,73],"resources:":[3,43],"respected ":23,"respectful,":67,"respective ":[25,28],"respond ":[24,90],"responses ":[84,90],"responsibility ":24,"responsibility,":4,"responsible ":26,"rest ":[6,10,56,60,66,83],"rest.":[30,63],"rest/":66,"rest:":60,"rest\"":39,"restart ":[2,23,28,30,33,38,50,54,55,56,60,64,73,74,78,79,80,81,88,90],"restart.":49,"restarted ":[32,49,56],"restarted,":49,"restarted.":49,"restarting ":[49,90],"restarts ":[49,60],"restarts.":49,"restore ":[24,52,83],"restore.":54,"restored ":[30,44,83],"restrict ":[23,67],"restriction ":48,"restructuredtext ":[65,66,67],"restructuredtext.":65,"result ":[10,34,58,59,80,86],"result,":59,"result:":[31,92],"resulting ":[2,24,29,57],"results ":[24,26,31,59,60,87],"results)":59,"results,":55,"results.":[31,58],"results/":[24,76],"resumes ":[2,24],"ret ":60,"ret)":60,"ret;":60,"retained ":73,"retains ":[35,36],"retest ":82,"retrieve ":[58,63,80,86],"retrieve,":63,"retrieving ":47,"retry ":28,"return ":[5,9,23,24,31,35,40,47,59,60,72,76,83],"return,":32,"returned ":[10,60],"returned.":[31,84],"returns ":[23,31,47,60],"retype ":[43,60],"reusable ":63,"reuse ":[0,37],"reused ":77,"reverse ":[60,63,74],"reverses ":67,"revert ":[9,10,49],"reverts ":28,"review ":[10,31,36,41,49,65,72,83],"review,":65,"revised ":7,"rewording.":67,"rewrite ":67,"rewriting ":66,"rf ":30,"rich ":63,"right ":[0,9,60],"right,":18,"right-":[18,42,56],"right.":9,"rights ":[9,10],"rip/":63,"ripng ":63,"risk!":93,"risk.":29,"risks ":86,"rm ":[11,24,30,46,58,74,83,90,92],"rmdir ":90,"rmi ":58,"ro ":[11,46],"roadblocks ":76,"robert ":84,"robert.":84,"robin ":63,"robust ":58,"rogue ":48,"role ":[39,41,73],"role,":66,"role.":66,"role:":66,"role>":39,"roles ":[39,66,73],"roles,":39,"roll ":32,"rolling ":[0,5,27,29,31,57,63],"rom ":18,"root ":[2,9,11,14,15,16,17,24,28,29,43,46,52,54,55,56,57,60,63,73,80,85,90,92],"root,":[43,63],"root.":55,"root/":77,"root:":80,"root=":54,"root@":[17,57],"rotate ":76,"rotated ":60,"rotation ":63,"round ":63,"route ":54,"routed ":56,"router,":54,"router.":54,"routine,":2,"routines ":[2,63],"routing ":[54,63],"rpm ":[2,28,34,37,47],"rpm.":[24,34],"rpm/":81,"rpm2cpio ":34,"rpm:":24,"rpms ":[24,28,34,37],"rpms.":[24,28],"rpms/":34,"rpop ":84,"rpush ":84,"rsa ":73,"rsa)":73,"rss,":63,"rss/":63,"rst ":66,"rstudio ":63,"rte_config.":53,"rte_sdk=":53,"rte_target=":53,"ruby ":63,"ruby,":84,"ruby-":63,"rufus ":11,"rule.":66,"rules ":66,"rules.":[0,93],"rules:":66,"run ":[13,15,18,19,20,21,23,24,27,28,31,34,36,38,40,41,44,52,54,55,56,57,60,63,64,66,71,72,76,81,83,88,89,90,92],"run-":83,"run.":32,"run/":[11,28,75,80],"run:":[43,44,80],"run`":83,"runc ":[52,78],"running ":[9,12,14,24,25,28,30,31,32,35,36,40,43,52,53,56,59,60,63,72,73,75,77,78,79,80,83,85,87,90],"running!":[77,92],"running,":[52,60,84,90,92],"running.":[34,52,56,72,73,77,84,90,93],"running:":[23,52],"running\"":73,"runs ":[24,28,31,58,77,82,84,92],"runs.":59,"runtime ":[2,5,63,77,78,79,80,83],"runtime'":79,"runtime-":63,"runtime.":[45,58,63,74,78,79,80,83],"runtime/":58,"runtime:":[52,79],"runtime\"":[78,79],"runtime]":80,"runtimeclass ":80,"runtimes,":80,"runtimes:":52,"rusf:":52,"rust ":63,"rust-":63,"rv ":36,"rw ":[39,54],"rwsem-":34,"rwx ":28,"rwxr-":73,"s ":[20,22,23,24,27,28,29,31,32,35,36,40,44,47,48,53,58,60,63,64,66,72,74,76,80,82,84,87,88,92],"s#":80,"s)":[31,34,40,52,63],"s,":67,"s.":56,"s3 ":[59,63],"s3.":59,"s3fs-":63,"s\\":60,"safe ":[49,73],"safeguard ":73,"safely ":[9,10],"said ":77,"sake ":74,"sally-":45,"samba ":[63,85],"samba*":89,"samba.":85,"samba/":85,"same ":[2,5,9,10,18,24,27,28,31,36,51,53,55,56,60,63,66,67,73,76,79,80,83,85,86],"sample ":[36,38,47,49,53,60],"sample.":59,"samples ":59,"samples.":59,"samples:":59,"sandbox ":24,"sandboxed ":63,"sandwiches.":67,"sandy ":40,"sanitized ":34,"sasl.":63,"satisfied ":[9,10],"save ":[9,34,39,44,51,53,54,60,63,66,74,76,80,82,86,92],"save.":54,"saved ":[10,83],"saved.":[10,83],"saves ":[54,60],"saving ":28,"sbin/":87,"scala ":57,"scala*":87,"scala>":57,"scalable ":[34,35,36,58,63],"scalable,":32,"scale ":[32,63,73,77],"scale.":32,"scale:":32,"scaled ":32,"scaled.":32,"scaling,":80,"scan ":[2,63,67],"scannable ":[66,67],"scannable.":67,"scanned ":29,"scanning ":63,"scanning.":[2,66],"scans ":24,"scenario.":28,"scenarios ":[32,38,60],"scenarios.":80,"scenes ":23,"scenes,":31,"scheduled ":63,"schema:":86,"schemas.":63,"schemes,":29,"school ":63,"school/":63,"sci-":67,"science ":63,"scientific ":63,"scm)":63,"scm-":63,"scope ":[32,55,92],"scratch.":28,"screen ":[42,56,63,73,80,83,90,92],"screen)":63,"screen.":[90,92],"screenshot ":[56,63],"screenshots ":[63,66],"script ":[6,17,23,24,27,34,39,53,54,56,58,59,60,63,73,76,78,80,90],"script,":[27,28,54,58],"script.":[24,27,34,53,56],"script:":[24,34,56,58,76],"scripts ":[60,63,80,83],"scripts.":[31,52,60,63],"scripts/":58,"scroll ":9,"scsi)":20,"sda ":[11,46],"sda1 ":[11,46],"sda2 ":[11,46],"sda3 ":[11,44,46],"sda3/":44,"sda4 ":11,"sda5 ":11,"sda6 ":11,"sda7 ":11,"sda8 ":11,"sda\"":[14,39],"sda`":[10,46],"sdb ":11,"sdb1 ":11,"sdc ":11,"sdc1 ":11,"sdd ":11,"sdd1 ":11,"sdd2 ":11,"sdd3 ":11,"sdk ":[24,59],"sdk-":24,"sdk.":24,"sdk/":24,"sdk\"":24,"sdl.":63,"sdl2.":63,"sdl2_gfx.":63,"sdl2_image.":63,"sdl2_mixer.":63,"sdl2_net.":63,"sdl2_ttf.":63,"sdl_gfx.":63,"sdl_image.":63,"sdl_mixer.":63,"sdl_net.":63,"sdl_ttf.":63,"seamless ":59,"seamlessly ":[23,26,80],"search ":[9,24,31,35,36,41,62,63,67,72,75,83,93],"search.":31,"searches ":31,"searching ":24,"searching,":63,"second ":[9,10,45,64,66,91],"second,":66,"second-":66,"second.":[28,59],"secondary ":[63,83],"secondary_dns_ip]":38,"seconds ":58,"seconds,":60,"secrets,":73,"section ":[10,28,34,35,36,48,53,56,58,59,60,61,64,66,67,70,72,80,83,90,91],"section,":[56,90],"section.":[36,53,61,66,67,73,83],"sections ":[58,74],"sections,":66,"sections:":[61,66,91],"secure ":[16,22,34,35,36,54,59,63,90,91],"secure,":[73,90],"secure-":34,"secure.":[31,86,90],"securely ":64,"securely.":[63,72],"security ":[0,5,9,23,28,31,56,59,63,64,66,72,78,80,86,92,93],"security,":[9,10,56,90],"security-":[29,63],"security.":[31,35,63,93],"security/":48,"securitytypes=":56,"sed ":80,"see ":[3,9,10,24,25,28,31,32,34,35,36,38,39,40,42,45,48,49,50,53,55,56,57,58,59,60,62,64,65,66,67,72,73,76,79,80,82,85,90,92,93],"seeking ":0,"seen ":[51,67,92],"segment ":63,"select ":[10,15,18,27,28,42,44,56,58,59,60,63,66,67,72,75,76,82,86,90,92],"selected ":[9,10,59,67,72,83],"selected.":[9,10,72],"selecting ":[10,72,90],"selection ":[9,10,72,92],"selection.":[67,86],"selections ":[9,10],"selections.":9,"semicolons,":67,"send ":[6,33,49,60,63,65,67],"sending ":[52,60],"sends ":[6,49,60,84],"sense ":[6,32,60],"sense.":60,"sensibly ":29,"sensing ":[6,60],"sensitive ":29,"sensors,":63,"sent ":[6,15,49,60],"sentence ":[66,67],"sentence,":[66,67],"sentence.":66,"sentences ":[66,67],"separate ":[32,36,54,55,63,66],"separated ":[26,30],"separation ":0,"separation,":30,"seperate ":48,"sequence ":66,"sequential ":66,"serial ":63,"serie1.":34,"series ":[63,66,67],"serve ":[32,37,54,66,84],"server ":[6,14,16,23,26,31,32,38,39,42,50,52,54,57,63,64,69,77,78,80,82,83,84,85,86,91,92],"server)":52,"server,":[5,28,32,54,60,63,74,77,80,85,90,91],"server-":[6,52,60,63],"server.":[6,10,14,18,20,28,31,38,42,54,56,60,63,69,74,77,80,84,90,92],"server:":[60,84],"server;":60,"server=":60,"server>":50,"server\\":64,"server]":28,"server_name ":[28,54],"server_state_dir ":28,"serverless ":63,"servername/":86,"servers ":[50,54,77],"servers,":32,"servers.":[31,32,63,73],"servers:":38,"service ":[23,29,30,31,49,50,59,63,64,73,74,84,90],"service,":[60,77,90],"service-":[49,63],"service.":[28,49,50,60,63,64,73,78,79,80,84,88],"service:":[23,38,49,56,60,64,80,88],"service\"":78,"service]":[28,56,64,78,79,80,88],"services ":[29,33,48,56,59,60,63,72,73,80,81,88],"services*":59,"services,":[49,56,60],"services.":[49,58,60,73,78,79,80],"services<":77,"services=":80,"services[":80,"session ":[26,73,80],"session,":56,"session.":[26,56],"session?":56,"sessions ":56,"sesssion?":56,"set ":[6,9,10,12,14,18,23,24,29,30,31,33,35,36,39,40,41,43,44,47,48,54,55,58,59,63,64,67,72,73,75,76,78,80,81,83,84,86,89,91],"set,":[3,23,78],"set-":[18,34,45,50,83],"set.":[58,82],"set:":[38,54],"sets ":[28,40,45,56,60,64,77,82],"sets,":84,"setting ":[24,28,32,34,45,55,56,58,66,72,74,77,80,89,90],"setting,":60,"setting.":[31,55,56,66],"setting?":46,"settings ":[10,18,23,28,40,55,56,80],"settings,":[9,10,35,44,60,80],"settings-":63,"settings.":[9,10,56,60,63,80,93],"settings:":[40,60,88],"settings?":56,"setup ":[9,10,28,32,34,38,43,44,53,54,63,66,77,85,91],"setup,":[60,90,92],"setup.":[24,34,58,63,92],"setups ":58,"several ":[3,6,56,60,73,92],"severe ":23,"severity ":60,"severity,":60,"severity.":60,"severity:":60,"sf ":[28,54,73],"sftp ":[63,64],"sftp-":64,"sftp.":64,"sh ":[12,17,19,20,24,28,42,56,58,60,69,87],"sh.":[42,69,87],"sha-":29,"sha256 ":51,"sha256:":[58,72,73,77],"sha256sum ":51,"sha512 ":[20,42,51],"sha512sum ":[42,51],"sha512sum.":51,"sha512sums ":42,"sha512sums.":51,"shape ":59,"shard,":59,"share ":[5,49,85,86,92],"share.":[85,86],"share/":[0,24,28,30,36,44,53,54,57,58,59,60,77,80,82,83,84,87,90],"shared ":[0,53,58,63,83,85,89],"shared-":63,"shares ":85,"shares.":[63,85],"sharing ":[63,86,89],"sharing,":85,"shasum ":42,"sheer ":29,"shell ":[17,22,57,58,60,63,73,78,80],"shell,":63,"shell.":[64,73],"shell/":73,"shell`":73,"shells.":63,"shift+":10,"shiftwidth=":14,"shipped ":29,"short ":[23,49,67],"short,":49,"short.":66,"shortcut ":10,"shot ":59,"should ":[2,10,24,28,30,31,32,36,39,45,51,56,58,59,60,64,66,67,72,73,74,77,82,83,87,90,93],"show ":[9,10,36,45,61,63,64,66,67,83,88],"showing ":[66,72,82],"showing:":49,"shown ":[6,9,10,35,36,37,42,44,47,51,53,54,55,56,60,64,72,73,74,80,81,82,85,86,90,92],"shown.":80,"shown:":73,"shows ":[2,9,10,24,28,34,36,38,39,41,49,53,54,56,66,67,73,76,81,82,83,88,90,92],"shuffle.":77,"shufflehandler<":77,"shut ":[9,72],"shutdown ":[18,28],"shuts ":73,"side ":[6,15,23,60,63,67],"side)":56,"side,":[26,47,60],"side.":[47,60],"sidebar ":85,"sig ":51,"sig.":[36,83],"sig_unenforce\"":35,"sign ":[28,63,72,73],"signature ":[29,35,36,51,83],"signature,":51,"signature.":28,"signatures ":[29,35,36],"signed ":[29,35,51,73],"signed.":[51,54],"significant ":[63,67],"significantly ":[35,36,40],"signing ":51,"signs ":[28,66],"simd ":[12,71],"similar ":[0,5,31,45,52,57,58,60,63,67,73,76,77,80,81,84,90],"simple ":[10,24,29,31,34,42,49,58,60,63,69,76,77,87,89],"simple,":[29,63,90],"simple.":66,"simpler ":67,"simplicity,":56,"simplicity.":80,"simplified ":63,"simplifies ":41,"simplify ":10,"simply ":[28,29,30,40,60],"simulation.":63,"simultaneously,":81,"simultaneously.":63,"since ":[31,56,60,73,77,87],"single ":[5,10,31,36,55,60,66,75,87,89],"single-":[59,66,67],"site ":[28,63,91,92],"site-":31,"site.":[77,80],"situation.":0,"size ":[9,10,11,28,46,51,59,60,77],"size,":[56,59],"size:":14,"size\"":[28,39,46],"skim ":67,"skip ":[9,52,77,91],"skipped ":52,"sku ":73,"sku:":73,"sky ":63,"slave ":[55,77],"slave.":87,"sleep ":[40,58],"slice ":[56,84],"slightly ":[3,40],"slim ":63,"slot.":[9,10,44],"slow ":63,"slowing ":76,"small ":[5,26,31,32,34,42,51,63],"smaller ":28,"smallest ":31,"smarctl ":63,"smart ":93,"smartd,":63,"smb ":63,"smb)":86,"smb.":85,"smb:":86,"smbpasswd ":85,"smime ":51,"smoother ":90,"smoothly ":23,"smp ":[17,39,54],"snack.":67,"snapshot ":73,"snapshots.":73,"snippet ":58,"so ":[5,9,24,28,30,31,32,35,36,53,56,58,60,74,80,83,90,93],"so$":24,"so,":[39,78,80],"so-":3,"so.":[30,73,81,83],"socket ":[26,56,60,64],"socket,":56,"socket.":64,"socket=":80,"socket]":[56,64],"sockets ":63,"sockets.":[56,63],"sockets=":17,"socks-":88,"socks_proxy=":[80,88],"socks_proxy}":80,"soft ":48,"software ":[4,6,10,24,26,28,29,31,32,34,35,36,37,41,49,52,54,57,58,59,60,63,66,70,73,74,77,80,90],"software,":31,"software-":63,"software.":[0,3,4,5,9,31,59,63,67],"solid ":63,"solution ":[0,6,32,60,63],"solution,":32,"solution.":[58,60,74],"solution:":0,"solutions ":[49,58,73],"solutions,":58,"some ":[1,5,9,10,27,29,31,32,34,36,40,48,60,63,66,67,73,78,80,83,84,90],"someone ":[67,90],"something ":58,"sometimes ":[0,67],"soname1.":63,"soname2.":63,"soname3.":63,"soon ":[29,79],"sorted ":84,"sos ":63,"sound ":63,"soundfont ":63,"source ":[0,2,3,24,25,26,30,31,35,36,53,56,59,60,61,63,74,78,80,90],"source,":[0,35,36],"source.":[9,60],"source/":47,"source0 ":34,"source0:":34,"source1:":34,"source2:":34,"source:":[24,34,60],"source>":[35,36],"source?":83,"source\"":34,"source]":47,"source_with_dkms>":36,"sourcecode>":76,"sourced ":[0,73],"sources ":[28,34,47],"sourcing,":29,"space ":[9,10,29,31,45,46,60,63],"space,":[9,10,71],"space.":[10,58],"spaces.":[9,10],"sparingly.":66,"spark*":89,"spark-":[57,87],"spark.":87,"spark/":[57,87],"spark:":87,"spark_master_host=":87,"spdx ":24,"speakers.":67,"speaking ":67,"spec ":[2,34],"spec.":2,"spec:":58,"special ":[35,36,66,80,81],"specialized ":[6,60,76],"specific ":[6,24,25,28,30,31,32,34,41,54,56,60,63,66,67,73,76,84,85],"specific.":[42,69],"specifically ":[0,36],"specifically,":59,"specifications ":63,"specifics ":92,"specified ":[34,49,56,58,59,63],"specified,":85,"specified:":60,"specifies ":[42,52,56,60,69],"specify ":[9,28,56,58,59,60,86],"specifying ":73,"speed ":[31,34,63,78],"speed.":[32,76],"speedstep\u00ae":40,"sphinx ":66,"sphinx.":[65,67],"spi2-":63,"spice ":[17,63],"spice,":63,"spice-":63,"spice:":17,"spin-":34,"splash ":74,"split ":[3,91],"spm ":63,"spool ":60,"spool.":60,"spooled ":60,"spooling.":60,"spools ":[6,60],"sprintf(":60,"sql ":[63,73],"sql,":87,"sqlite-":63,"square ":66,"squeezenet ":59,"squeezenet,":59,"squeezenetssd-":59,"src/":[26,28,36,58,87],"srpms)":34,"srpms/":47,"srv/":54,"ss ":23,"ssd ":[59,63],"ssd)":59,"ssd300.":59,"sse ":71,"sse4_1)":12,"sse4_2)":12,"ssh ":[15,22,32,63,64,72,73,80],"ssh)":[22,63],"ssh,":64,"ssh-":[63,73,77,88],"ssh.":[83,88],"ssh/":[17,64,73,77,88],"sshd ":64,"sshd.":64,"sshd@":64,"sshd_config ":17,"ssl ":63,"ssl)":63,"ssse3)":[12,71],"stability ":60,"stability.":60,"stable ":[57,75],"stable,":63,"stack ":[32,63],"stack,":[5,58],"stack.":[0,57,58,84],"stack:":59,"stack;":63,"stacks ":43,"stacks-":58,"stacks/":[57,58],"stage.":9,"stan ":63,"standalone ":[25,89],"standard ":[2,12,24,54,63,65,66,67,74],"standarderror=":56,"standardinput=":56,"standards ":29,"standards.":[29,63],"start ":[9,10,17,24,26,28,34,40,41,42,45,52,53,54,57,58,59,60,64,66,67,72,73,74,75,77,78,82,83,85,90],"start,":[2,24,60,67],"start-":[77,87],"start.":[2,24,28,73,83],"start_qemu.":[17,20,24,28,42,53,69],"started ":[1,39,41,48,56,58,60,61,66,67],"started,":[41,56],"starting ":[31,34,41,56,66,73,77,78],"starts ":[26,28,40,56,60,82],"starts,":64,"starttime\"":73,"startup ":[54,56],"startup,":56,"startup-":63,"startup.":53,"state ":[24,28,38,40,52,63],"state.":[5,40,58,72],"statedir ":52,"stateless ":[0,30,77,80,83,87,90],"stateless,":30,"stateless.":32,"statelessness ":32,"statements ":72,"statements,":67,"states,":40,"states.":[9,40],"static ":[10,33,45,54,63,76,90],"static":[39,45],"static-":60,"static.":[38,54],"static/":39,"stating ":72,"statistical ":[6,60,63],"status ":[26,53,55,58,64,84,90],"status,":50,"status.":55,"status=":11,"status\"":73,"stdin ":60,"stdio.":[60,76],"stdlib.":[60,76],"stdout.":60,"step ":[0,2,24,26,28,33,34,52,53,59,61,65,66,72,73,87,90],"step,":[56,60],"step-":[33,61,66],"step.":[24,28,56,73,77,90],"step:":80,"steps ":[10,23,24,27,28,34,35,36,39,42,43,51,52,54,56,58,59,64,66,67,72,75,82,83,85,88,90,91,92],"steps,":[2,24,90],"steps.":[9,44,58,66,72,80],"steps:":[2,24,28,42,56,58,64,66,92],"stick ":67,"stick.":61,"still ":[28,56,58,86],"stock ":28,"stop ":[2,23,54,56,58,60,74,84,90],"stop.":73,"stopped ":83,"stopped:":52,"stops ":[24,60],"stops,":73,"storage ":[15,18,26,52,58,59,60,63,72,73,74,78,86],"storage,":[72,73],"storage-":[46,63,73,74,85],"storage.":[63,77],"storage:":59,"store ":[59,60,63,73,80,84,90],"store,":[29,63],"store.":63,"stored ":[0,28,38,59,73],"stored.":[28,52,59],"stores ":[28,60],"storing ":[57,59],"straightforward ":90,"straightforward,":57,"straightforward.":60,"strain ":63,"strategies ":32,"strategy ":[32,60],"strategy,":32,"stream ":[28,59,63],"stream,":59,"stream-":63,"streamed ":59,"streamer.":63,"streaming ":[12,63,71],"streaming,":0,"streaming.":87,"streaming:":59,"streams ":59,"streams.":59,"strerror(":60,"strictly ":5,"stride)":76,"string ":[45,52,60,73,84],"string,":31,"string.":60,"string>":60,"strings,":84,"strong ":80,"strong*":66,"strong,":67,"strongly ":[28,74,92],"struct ":60,"structure ":[28,59,65,67,84,90],"structure-":66,"structure.":[28,63,67],"structures ":[67,84],"stub ":54,"stub/":53,"stubs.":63,"stuffy ":67,"style ":[2,32,63,65,66,67],"style,":65,"style.":2,"styles.":66,"stylesheet ":[63,77],"sub-":[3,60],"subcommand,":5,"subdirectories.":59,"subdirectory ":31,"subfolders ":[24,34],"subject ":67,"subject.":67,"submenu.":9,"submenus ":9,"submenus.":9,"submit ":[0,65,87],"submitting ":[34,35,36,63],"subnet.":54,"subscribe,":59,"subscription ":[59,73],"subscriptions.":73,"subscriptions/":73,"subsequent ":66,"substitute ":56,"subsystem ":[40,64],"subsystem,":64,"subsystem=":64,"subsystems ":29,"subunit.":63,"succeeded\"":73,"success!":90,"success.":[10,60],"success:":[12,52],"successful ":[24,31,36,55,82,83,90],"successful,":[35,53,73,90],"successful.":73,"successfully ":[2,9,24,31,36,39,44,45,50,52,54,56,60,73,74,76,77,78,79,80,82,83,87,88,90,92],"successfully!":90,"successfully,":60,"successfully-":24,"successfully.":36,"such ":[3,6,10,23,25,26,28,29,32,34,35,36,37,38,49,54,55,56,59,60,63,65,66,67,80,81],"such,":40,"sudo ":[10,11,17,18,19,20,24,26,27,28,30,31,34,35,36,38,40,43,44,45,46,47,48,49,50,52,53,54,55,56,58,60,62,64,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87,88,90,92,93],"sudoedit ":30,"sufficient ":32,"suffix ":42,"suggest ":63,"suggested ":90,"suggestion ":65,"suggestions ":84,"suggests ":60,"suit ":[32,34,80],"suit.":32,"suitable ":[28,42,69],"suite ":63,"suite,":0,"suite.":63,"suites.":63,"suits ":56,"sum ":51,"sum.":51,"summaries ":67,"summary ":63,"summary:":34,"super ":63,"superengi9eer\"":84,"supermicro*":68,"supplement ":66,"supplemental ":[12,71],"supplementary ":66,"supply ":[56,60],"supplying ":56,"support ":[4,20,34,42,54,55,58,59,63,66,80,83,93],"support-":0,"support.":[36,54,63],"support:":36,"supported ":[9,10,25,48,53,56,58,60,63,66,78,80],"supported.":33,"supporting ":[63,66,67],"supports ":[9,10,40,52,53,57,63,74,87],"sure ":[11,24,28,31,34,36,42,45,56,59,60,64,66,67,69,72,73,74,77,83,88],"surrounding ":67,"suspicious ":29,"sustainable ":32,"svg ":66,"swap ":[46,80],"swap#":80,"swap,":63,"swap\"":[28,39,46],"swap]":[11,46],"swapoff ":80,"swaps)":80,"swarm.":74,"swarm:":52,"switch ":[14,54,55,74,80,83],"switch-":63,"switches ":74,"switching ":34,"swupd ":[0,5,17,18,19,24,26,28,29,31,32,34,35,36,40,43,44,46,47,50,51,52,53,54,56,58,59,62,63,64,72,73,74,75,76,77,78,80,82,83,84,85,87,90],"swupd,":60,"swupd-":[31,52,73],"swupd.":28,"swupd:":[4,28,70,80],"swupd]":28,"swupd_root.":[28,51],"symbol ":26,"symbolic ":[28,54],"symlink ":[28,31,49],"symlinks,":31,"sync ":11,"synchronization ":63,"synchronize ":[50,63,73],"synchronizer ":63,"synchronous ":63,"syntax ":[36,53,55,58,63,66,84],"syntax,":[10,74],"syntax.":55,"syntaxes ":63,"synthesizer ":63,"sys/":[40,48,53,54,76],"sysadmin-":[32,43,50,63,73],"sysconfig-":83,"sysctl ":48,"sysctl.":[48,54,80],"syslog.":56,"syslogging ":32,"system ":[0,3,5,6,11,16,24,26,28,32,33,34,35,36,37,41,43,44,45,48,50,52,53,54,57,58,60,61,63,67,71,72,73,74,77,80,82,83,86,89,90],"system'":63,"system,":[9,31,35,44,47,57,58,59,60,73,74,75,77,78,80,82,87,88,90],"system-":[6,17,29,38,53,56,60,63],"system.":[5,6,9,10,18,29,31,35,44,45,47,48,49,50,52,54,56,57,58,60,63,72,73,74,75,76,78,79,82,83,85,87,88,90,91,92,93],"system/":[28,31,36,40,53,56,64,78,79,80,83,88],"system:":[10,24,34,43,52,58,59,82,93],"system_name:":60,"systemctl ":[17,19,23,26,28,30,31,38,40,49,50,52,54,55,56,58,64,74,78,79,80,83,84,85,88,90],"systemd ":[23,40,48,52,55,63,64,74,78,79],"systemd)":88,"systemd,":[48,63],"systemd-":[32,39,50,54,55,63,80],"systemd.":[48,55,63],"systemd/":[28,31,36,38,39,48,49,50,54,55,56,64,78,79,80,83,88],"systemic ":29,"systems ":[3,5,26,28,29,31,32,36,48,60,63,80,83],"systems,":[30,32,39,74,90],"systems.":[5,23,24,32,44,63,77,91],"s}":80,"t ":[9,24,27,32,52,53,54,56,58,60,65,66,67,72,73,77,80,83],"t)":67,"t/":0,"t0 ":52,"t10k-":82,"t2.":72,"tab ":73,"tab,":90,"tab-":14,"tab.":[56,90],"table ":[0,6,28,60,67,92],"tables ":90,"tables,":90,"tables.":90,"tablet,":17,"tabs ":10,"tabs-":14,"tabs:":10,"tabsize=":14,"tabstop=":14,"tag ":[34,52,58,73],"tag/":34,"tag:":54,"tag_name>":34,"tagged ":52,"tagging ":63,"tags ":[28,66],"tags,":72,"tags.":73,"tags\"":73,"take ":[0,28,31,34,40,53,55,56,57,58,63,65,67,73,76,82,92],"taken ":[29,60],"takes ":[0,3,72,76],"talk ":67,"talloc.":63,"tallow.":49,"tar ":[34,35,36,52,53,54,63,90,92],"tar.":[15,24,34,35,36,52,54,90,92],"tarball ":[2,24,52,59],"target ":[5,9,24,32,42,53,56,59,63,74,76,83],"target.":83,"target>":34,"target_clones(":76,"targeted ":[32,63],"targetmedia:":14,"targets ":37,"targets.":[1,10],"task ":[32,63],"taskbar,":86,"tasks ":[6,32,43,60,61,92],"tasks,":23,"tasks.":92,"tasks:":72,"tbb.":63,"tcc.":63,"tcl ":63,"tcl-":63,"tcl/":63,"tcp/":63,"tcp:":17,"team ":[0,9,10,28,29,49,55,60,80],"technical ":[65,67],"techniques ":29,"technologies ":40,"technology ":[5,16,17,63,76],"technology)":59,"technology.":63,"tee ":[35,40,48,60,77,78,79,80,83],"telem-":6,"telem_ref ":60,"telemctl ":60,"telemetrics ":[6,49,60],"telemetrics-":[6,60,63],"telemetrics.":60,"telemetrics/":60,"telemetry ":[6,32,45,49],"telemetry,":[0,6,49,60],"telemetry-":45,"telemetry.":60,"telemetry:":[14,60],"telemetryui,":[6,60],"telempostd ":60,"telempostd,":60,"telempostd.":60,"telemprobd ":[6,60],"telemprobd(":60,"telemprobd,":60,"tell ":32,"tells ":[28,49,52,56,67],"telnet ":63,"temperature ":[40,63,67],"temperature,":63,"temperatures ":40,"template ":[28,58,63,73,87],"template-":27,"template:":30,"template=":39,"templates ":[32,87],"temporarily ":[40,54,83],"temporarily:":80,"temporary ":[10,24,34,48],"tenant ":80,"tends ":34,"tense ":67,"tensor ":63,"tensorflow ":82,"tensorflow*":[58,89],"tensorflow,":63,"tensorflow.":58,"tensorflow/":[58,82],"term ":[32,63,67,83],"term*":66,"term,":31,"term.":[31,66],"term>":31,"terminal ":[34,44,50,56,63,72,73,80,83,84],"terminal,":72,"terminal-":63,"terminal.":42,"terminal:":[40,88],"terminating ":60,"terms ":[57,58,67],"terms.":67,"tertiary ":63,"test ":[32,34,45,58,60,63,65,82,90],"test,":63,"test-":[45,74],"test.":60,"tested ":[24,68,92],"tested.":31,"tester,":63,"testing ":[10,24,37,63,74,90,91],"testing,":[23,35,36,58],"testing.":[24,34,63],"testing;":24,"tests.":[24,58],"tests/":76,"testsuite-":63,"tex-":63,"text ":[10,38,55,63,64,67,72,73,90,92],"text,":66,"text-":[34,63],"text.":[50,63,66,67],"text/":77,"tf-":58,"tf_cnn_benchmarks.":58,"tf_cnn_benchmarks/":58,"tfjob ":58,"tfjob.":58,"tfjob/":58,"tfjobs ":58,"tftp ":54,"tftp,":54,"tftp-":54,"tftp_root/":54,"tftp_root=":54,"than ":[5,31,35,36,40,42,60,66,67,74],"thanks ":90,"that ":[1,2,3,4,5,6,7,9,10,23,24,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,47,49,51,53,54,55,56,57,58,59,60,61,63,65,66,67,68,69,71,72,73,74,76,78,79,80,81,83,84,85,86,87,88,90,92],"that:":79,"the ":[1,2,3,4,5,6,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30,31,32,33,39,40,41,44,45,46,48,49,51,55,58,61,62,63,64,65,66,68,69,70,78,79,80,85,86,88,89,91,92,93],"the-":[0,26,28,81,93],"their ":[2,3,25,28,29,30,32,37,42,45,54,56,62,63,66,73,75,85],"them ":[6,24,28,34,39,54,57,58,59,60,63,66,67,77,80,82,92],"them,":[9,42,53,73],"them.":[2,28,31,34,36,42,66,80],"theme ":53,"theme,":63,"themselves ":[28,88],"then ":[3,6,9,10,23,24,28,34,38,49,51,55,56,58,60,66,72,73,78,80,84,85,90],"theory ":36,"there ":[0,4,7,23,24,29,31,32,45,51,56,59,60,61,65,66,67,72,86],"there,":82,"thermal ":63,"thermald ":40,"thermald.":40,"thermalmonitor,":40,"these ":[2,3,5,9,10,23,24,25,27,28,29,30,34,39,40,41,42,44,48,51,52,54,56,58,59,60,66,67,72,73,76,77,80,81,82,83,84,88,92,93],"they ":[24,28,29,31,32,36,42,56,58,60,66,67,72,76,85,92,93],"things ":[41,73,90],"think ":32,"thinkpad*":68,"thinkserver*":68,"third ":[29,66],"third-":[61,63,66],"this ":[0,2,3,4,5,6,7,8,9,10,11,23,24,25,26,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,47,48,49,50,51,52,53,54,55,56,57,59,60,63,64,66,67,68,70,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,90,91,92,93],"this,":[60,90],"this.":67,"this:":[56,58,66,67],"thoroughly ":32,"those ":[2,3,28,35,36,39,53,54,73,77,79,84,87,91,92],"though ":[9,56,88],"thoughts,":49,"thousands ":77,"thousands,":3,"threads ":24,"threads,":17,"threat ":63,"three ":[45,49,56,58,60,66,67,73],"threshold ":60,"thresholds ":40,"thresholds.":40,"through ":[0,2,6,26,29,30,32,35,54,60,63,65,66,72,73,74,75,77,79,93],"throughout ":[29,92],"thumb-":14,"thus,":[23,76,77,90],"ti ":[78,79],"ticketing ":17,"tie ":31,"tier.":72,"tiff,":63,"tiff.":63,"tigervnc ":[56,63],"time ":[6,10,23,28,29,35,50,56,63,64,65,73,83,84,93],"time,":[26,60],"time-":63,"time.":[0,30,34,50,60,63,73,76,85],"time:":28,"time]":50,"timed-":80,"timedatectl ":50,"timer ":31,"times ":[0,29,73,82],"times.":[54,63],"timestamp ":59,"timesyncd.":50,"timezone ":[50,63],"timezone.":10,"timezones ":50,"tips ":[66,67],"title ":66,"title,":66,"title:":66,"titled ":75,"titles ":67,"tk ":63,"tk/":63,"tls)":63,"tm)":60,"tm_create_record(":60,"tm_free_record(":60,"tm_handle ":60,"tm_handle)":60,"tm_handle,":60,"tm_handle:":60,"tm_send_record(":60,"tm_set_payload(":60,"tmp/":54,"to ":[0,1,3,4,5,6,9,14,15,16,18,20,22,23,25,26,27,29,30,31,32,33,34,37,38,39,40,41,42,45,46,47,48,49,50,51,52,54,55,57,58,59,61,62,63,64,66,67,69,71,73,74,76,77,78,80,82,83,84,85,87,88,89,91,92,93],"to,":[4,31],"to-":[0,1,35,36,58,66,80],"to.":[28,56],"to/":[35,60,63],"to:":[4,31,32,41,45,55,59,73,76,77,80,90,92],"toctree ":66,"toctree.":66,"toctree:":66,"together ":28,"together.":31,"token ":[80,93],"token-":80,"token=":58,"token>":80,"tolerance ":32,"tone ":67,"too.":30,"tool ":[2,4,5,15,24,27,28,32,34,38,41,47,49,56,60,63,66,73,90],"tool,":[28,63],"tool.":[4,5,10,24,27,28,31,32,34,49,63],"toolchain ":28,"toolchain,":37,"toolchain.":63,"tooling ":[24,41,63],"tooling.":[0,34,63],"toolkit ":[59,63],"toolkit,":59,"toolkit.":[59,63],"tools ":[1,3,19,23,24,34,38,53,61,63,73,76,87],"tools)":19,"tools,":[0,66],"tools-":63,"tools.":[1,32,61,63,73,82],"tools/":[24,76],"top ":[9,23,25,31,34,66,72,92],"top-":[59,92],"top.":85,"topic ":[59,65,66],"topic-":66,"topic.":66,"topics ":[4,59,67,73],"topics:":66,"topology ":63,"topology.":54,"torch.":58,"total ":52,"touch ":[54,59,60,74,80],"towards ":67,"tpm)":63,"traceroute'":63,"track ":[5,34,37,60,63],"tracked ":[5,28,31,36],"tracking ":[34,63],"tracking,":[5,31],"trademark ":66,"trademarked ":67,"tradeoff ":40,"traditional ":[56,81],"traffic ":[0,53,54,63],"traffic,":56,"trailing ":66,"train-":82,"trained ":[59,82],"training ":[1,82],"training,":1,"transfer ":63,"transferred ":75,"transfers ":55,"transform ":2,"transformation ":63,"transformed ":2,"transient ":45,"transient":45,"transition ":28,"translations ":63,"transmithashpolicy=":55,"transparent ":74,"transparently ":29,"transparently.":32,"transport ":63,"transport-":63,"treat ":[32,66],"tree ":[0,34,63,83],"tree)":[35,36],"tree,":[35,36],"tree.":[36,66],"tree/":[57,58],"tries ":[23,60],"trigger ":83,"triggers ":37,"trimmed>":47,"troubleshoot ":[23,28],"troubleshooting ":40,"troubleshooting,":40,"troubleshooting.":63,"true":[50,60,80,93],"true)":60,"true,":59,"true.":59,"true:":[14,72],"true;":58,"true\"":28,"truly ":56,"trust ":35,"trust,":[29,51],"trust.":[29,35,36,51],"trusted ":[51,63],"trusted,":51,"trusted.":51,"trustworthy ":51,"trustworthy.":51,"try ":[2,24,28,67,80],"try-":49,"trying ":23,"tsc=":[39,54],"tsn/":63,"tue ":47,"tui ":14,"tunnel,":56,"tunnel.":[34,56],"turbo.":63,"tutorial ":[58,72,73,74,75,76,77,78,80,81,82,85,86,87,88,90,91,92,93],"tutorial,":[66,73,76,77,84,87,90,92],"tutorial.":[73,87,91,92],"tutorial/":90,"tutorial:":31,"tutorial\"":90,"tutorials ":[61,65,66,89],"tutorials.":43,"tux ":63,"twice ":[67,82],"two ":[5,6,10,24,28,31,42,45,53,54,56,57,59,60,63,66,67,69,76,82,83,91],"two.":[66,67],"type ":[9,10,11,27,38,42,46,57,63,69,72,73,75,90,93],"type,":[27,45,56,84],"type.":[42,69,84],"type:":[14,60,90],"type=":[56,77],"type>":58,"type\"":[28,39,46],"type]":[11,20,42,69],"types ":[6,27,36,45,59,60,66,80],"types,":66,"typesetting ":63,"typical ":[23,66],"typically ":[0,26,34,40,74],"typically,":[9,66,67],"typing ":[9,60],"typo,":65,"typos ":65,"u ":[9,10,13,14,34],"u+":58,"u/":56,"u2f ":89,"u2f)":93,"u2f.":93,"ubuntu ":[17,36],"ubuntu*":[17,56,59],"ubuntu,":56,"ubyte.":82,"udev/":93,"udevadm ":93,"uefi ":[9,10,16,17,21,22,35,40,44,63,71],"uefi.":10,"uefi/":[36,40],"uefi_bios}":17,"ugam76u8bdr6yjc.":72,"uhttpmock.":63,"uint32_t ":60,"ulee:":52,"ulimit ":[48,57],"ultimately ":32,"umount ":[11,44],"umountdisk ":11,"unable ":[0,23,24,30,52],"unallocated ":10,"uname ":[18,34,35,36,83],"unauthorized ":90,"unavailability ":23,"unbind ":53,"unbound ":53,"uncheck ":9,"unclear ":67,"uncomment ":56,"uncompressed ":53,"undefined ":60,"under ":[2,8,28,30,35,36,40,56,63,66,73,77,83,87,93],"underline ":66,"underlying ":[6,55,60],"underneath ":[35,36],"underscores.":[9,10],"understand ":[28,32,40,41,48,66,67],"understand.":67,"understanding ":[24,52,67,74,80],"understood ":63,"undesired ":2,"undionly.":54,"undrain ":81,"unecessary ":67,"unexpected ":28,"unhandled ":[6,60],"unified ":[29,63],"uninformative ":67,"uninstall ":58,"uninstalled ":83,"uninstaller ":83,"unique ":[5,28,32,56,58,60,67,74],"unique-":73,"unique.":[30,67],"uniquely ":66,"unit ":[23,32,48,49,64,78,84],"unit,":[64,66],"unit.":[5,49],"unit:":64,"unit]":56,"united ":9,"units ":[48,80,83],"universal ":[63,93],"university ":[63,65],"unix ":60,"unix,":63,"unix-":63,"unknown ":31,"unless ":[0,28,56,67,81],"unlike ":31,"unmask ":23,"unmount ":44,"unmounted ":11,"unmounting ":11,"unnecessary ":[29,67],"unneeded,":29,"unpack ":63,"unparallel ":67,"unprivileged ":[24,34,79],"unset ":23,"unsigned-":35,"unstructured)":60,"untagged:":58,"until ":[2,6,10,24,55,60,81,92],"untracking ":52,"unusual ":63,"unxz ":[17,24,42],"up ":[6,11,23,24,31,32,39,42,49,50,54,55,58,59,63,66,72,73,74,78,80,81,86,89,91],"up,":28,"up-":80,"up.":[39,90],"up/":10,"update ":[3,4,10,18,28,29,31,34,35,36,47,49,52,58,63,65,73,74,77,78,80,82,83,85,87,90],"update,":[14,28,29,52],"update-":63,"update.":[5,28,31,49,51,80],"update/":[28,51],"update:":59,"update\"":[28,39],"updated ":[2,24,28,29,32,52,60,63,72,83,84,90],"updated)":49,"updated,":82,"updated.":[60,81],"updated:":63,"updater ":[59,77,87],"updater,":28,"updater.":63,"updates ":[0,1,5,10,29,30,31,32,34,43,54,63,83],"updates,":[9,10,28,29],"updates.":[0,23,28,31,34,35,36],"updating ":[5,28,31,37,52],"updating.":66,"upgrade ":[36,63,81,83],"upgraded ":35,"upgrades ":81,"upgrades.":81,"upload,":59,"uploaded ":[22,59],"uploading ":59,"upon ":[0,9,10,53,56,58,63,76],"upower.":49,"upper ":[48,63],"upstream ":[0,4,5,24,29,31,32,33,35,36,37,43],"upstream)":[35,36],"upstream,":[0,28],"upstream-":28,"upstream.":34,"upstream/":47,"upstreaming ":0,"url ":[10,23,24,28,31,34,52,73,93],"url,":28,"url-":[35,36],"url.":[10,63],"url:":[10,23,34,88],"url=":24,"url>":28,"urllib3/":31,"urls ":[28,39,66],"urls:":58,"urn ":73,"us ":[65,73],"us-":72,"usability.":63,"usable ":[22,93],"usage ":[26,29,57,58,60,63,74],"usage.":[29,63],"usage:":66,"usb ":[9,10,11,17,44,61,93],"usb-":[14,17],"usb.":44,"usbredir.":63,"use ":[2,3,4,6,9,10,14,18,23,24,25,27,28,29,31,32,33,34,35,36,38,39,40,41,42,44,46,49,50,51,52,54,55,56,57,59,60,63,64,65,66,69,71,73,74,78,79,83,85,86,88,89],"use,":[66,80],"use-":[4,5],"use.":[23,24,28,35,36,40,51,60,83],"use:":28,"use;":32,"used ":[0,1,2,6,10,24,25,26,27,28,29,30,31,32,34,36,37,38,39,40,45,51,52,53,54,57,58,59,60,61,63,66,71,73,74,76,80,82,85,86,88,90],"used,":[46,49],"used.":[28,31,55,56,66],"used:":[42,69],"used;":29,"useful ":[2,3,5,26,28,32,34,35,36,43,48,60,63,70,83,84,90],"user ":[0,2,9,10,18,23,24,28,29,32,33,34,35,36,38,40,45,60,63,66,72,73,75,84,85,87,88,90,92],"user)":56,"user,":[9,10,17,43,60,79],"user-":[24,30,34,48,56,63,80],"user.":[9,10,24,30,34,43,45,56,59,83,84,85,90],"user/":77,"user1/":11,"user:":[16,24,34,43,48,60,75,84],"user=":56,"user>":40,"user\"":28,"user]":73,"useradd ":[43,59],"userid ":90,"userid>":[43,59],"usermod ":[28,40,43,59],"username ":[24,29,34,56,72,73,92],"username/":[19,20],"username:":92,"username>":28,"username\\":[19,20],"username]":56,"users ":[0,6,28,30,43,45,48,56,60,64,67,85,92],"users,":[10,32],"users.":[47,56,63],"users?":90,"users\\":[19,20],"userspace ":63,"userspace-":63,"userspace.":63,"usersusernamedocumentsvirtual ":20,"uses ":[5,10,23,24,25,27,28,29,30,34,38,40,45,50,52,53,54,55,56,57,58,59,60,63,72,78,80,81,82,83,85,90],"uses.":[66,84],"using ":[0,2,3,5,6,9,10,14,15,18,22,24,25,26,27,28,29,31,33,34,35,36,37,39,40,42,43,44,45,47,49,51,52,53,54,58,59,60,63,65,66,67,69,72,74,77,79,80,81,83,84,86,89,90,92,93],"using:":[59,87],"usr/":[0,18,24,26,28,30,31,36,39,44,47,49,53,54,56,57,59,60,64,73,77,80,82,83,84,87,90],"usually ":[63,88],"utc ":63,"utf-":[14,63,77],"utf8 ":45,"util-":[24,63],"util.":[63,76],"util/":31,"utilities ":63,"utilities,":63,"utilities.":[45,63],"utility ":[43,55,58,59,60,63],"utility-":83,"utility.":63,"utilization ":40,"utilize ":5,"utils ":[63,85],"utils-":63,"utils.":63,"utils\"":24,"utils`":46,"uuid ":38,"v ":[16,17,18,24,25,36,46,52,63,67],"v)":[34,63],"v*":[13,20,25,42,46,69],"v,":27,"v.":[25,42,69],"v/":[19,20],"v0.":58,"v1.":[24,58],"v1/":52,"v2.":[58,67],"v2/":60,"v3.":[53,58],"v4.":[12,34],"v4l-":63,"va-":63,"vala.":63,"valgrind'":63,"valid ":[2,10,24,40,51,60,63,85],"valid.":51,"validate ":[18,32,33,36,93],"validated ":58,"validates ":51,"validating ":51,"validation ":[32,51,63],"validation.":51,"validity ":31,"valuable,":32,"valuable.":32,"value ":[2,28,42,48,53,55,59,60,63,76,84],"value)":60,"value,":84,"value.":[39,40,56,60,64,82,84],"value:":60,"value>":77,"values ":[0,9,10,28,30,34,40,48,60,76,80,82,84],"values,":[80,84,90],"values.":[2,32,38,48,80,90],"values:":28,"vanilla ":63,"var":[30,32,44],"var/":[28,52,54,83,90,92],"variable ":[28,34,53,59,60,64,73,80,87,90],"variable,":[28,67,76],"variable.":[53,59,66,87],"variables ":[24,28,36,38,54,59,60,78,80],"variables,":80,"variables.":[26,64,80],"variables:":60,"variant ":[34,35,36,66,83],"variation.":28,"varies.":10,"variety ":92,"various ":[0,28,49,63],"vary.":[9,10,44],"vasprintf(":60,"vbox ":18,"vbox-":18,"vbx_gas_6.":18,"vcd/":63,"vdi ":18,"ve ":[65,74,78,79,80,90],"vec ":76,"vector ":[58,63],"vectorization:":76,"vectorized ":76,"vectors ":29,"vendor ":[35,36,53],"vendor:":53,"vendors ":73,"vendors.":32,"verb:":67,"verbose ":34,"verbs ":67,"verbs,":67,"verbs.":67,"verifiable ":[5,29],"verification ":[29,35,36,42,51,83],"verification,":42,"verification.":28,"verified ":31,"verified,":90,"verified.":60,"verifies ":92,"verify ":[9,10,11,26,28,29,30,34,36,38,39,44,49,51,52,53,56,58,59,60,63,64,65,67,73,74,79,80,84,88,90,92],"verify,":[9,10,19,21,22,33,76],"verify-":76,"verify:":56,"verifying ":[31,52,67],"versa.":56,"version ":[5,10,11,18,19,20,21,22,27,28,29,31,32,34,42,51,52,57,59,60,63,69,72,73,74,78,81,83,89,90,92],"version)":[58,63],"version,":[27,28,34,54,88],"version-":63,"version.":[5,28,58,60,63,73],"version:":[14,28,34,52,73],"version=":77,"version>":[17,18,28,34,36,83,90],"version\"":[28,39],"versioning ":[5,31,41],"versions ":[4,5,10,28,31,32,35,57,58,73,78],"versions,":38,"versions.":[28,36,66],"versions:":58,"versions_path ":28,"versionurl ":28,"versionurl,":28,"versionurl=":28,"version}":47,"very ":[23,28,31,32,53,84],"vfat(":[9,10],"vfat\"":[28,39],"vfio-":53,"vfs.":75,"vga ":17,"vi ":63,"vi:":14,"via ":[6,28,40,54,60,63,64,74,86],"vice ":56,"video ":[59,63],"video-":63,"view ":[2,9,24,28,40,43,57,59,60,62,63,66,67,72,80,83,85,87,90],"view-":[56,63],"view.":67,"viewable ":[6,60],"viewed ":24,"viewer ":[17,63],"viewer.":[56,63],"viewing ":[28,63],"views ":[6,34,60],"vim]":14,"virt ":[31,63,79],"virt-":[17,63],"virtio,":17,"virtio-":17,"virtual ":[16,18,19,20,22,25,28,31,42,55,61,63,69,74,83,90],"virtual\"":28,"virtualbox*":[13,25],"virtualbox|":60,"virtualization ":[0,16,17,18,63,78],"virtualization,":78,"virtualmachines/":73,"viruses,":63,"visibility.":26,"vision ":63,"vision-":[59,63],"vision.":63,"visit ":[5,9,10,24,32,72,73,75,82,90,92],"visit:":5,"visual ":[59,63,66],"visualization ":[6,60,63],"visualize ":6,"visually ":[40,66],"vm ":[13,18,19,24,28,32,42,69,78],"vm)":[18,20,42,63,69],"vm,":[25,57,73],"vm-":19,"vm.":[24,28,73],"vm:":[24,28,73],"vmdk ":22,"vmdk.":[20,22],"vmfs/":22,"vmkfstools ":22,"vmn}":17,"vmovdqu ":76,"vms ":32,"vms.":[63,78],"vmss ":73,"vmss)":73,"vmware ":63,"vmware)":[20,22],"vmware*":[13,42,69],"vmware-":[19,20,63],"vmware.":[20,22,27,42,69],"vnc ":63,"vnc)":63,"vnc,":[56,63],"vnc-":63,"vnc.":56,"vnc/":[56,64],"vncauth,":56,"vncserver ":56,"vncserver(":56,"vncserver.":56,"vncserver@":56,"vncviewer ":56,"vnni ":58,"vnni)":58,"voice ":[63,67],"void ":76,"volatile ":63,"voltage,":63,"voltages ":40,"voltages,":40,"volume:":52,"volumes ":63,"volumes/":22,"volunteer ":63,"voxel ":63,"vpaddd ":76,"vpddecode.":24,"vpn-":34,"vsphere ":22,"vsprintf(":60,"vswitch ":63,"vt)":[16,17,18],"vt-":[16,17,18,19,20],"vulnerabilities ":[29,63],"vulnerabilities,":29,"vulnerability ":[29,32],"vzt,":63,"w ":48,"w5ff:":52,"wacom.":63,"wait.":31,"waiting ":29,"waits ":60,"walks ":[72,77],"want ":[6,9,10,14,28,41,43,45,56,60,67,72,73,74,77,80],"want,":27,"wanted ":0,"wantedby=":56,"wanting ":73,"warehouses.":73,"warn ":56,"warning ":[10,42,52,72,74],"warning.":[56,67],"warning:":[31,46,52,72,73],"warnings ":66,"warnings,":66,"was ":[0,5,10,28,38,49,51,56,58,60,67,82,83],"wasted ":23,"wasteful ":40,"watch ":[39,54],"watched ":31,"watcher ":37,"wave ":63,"way ":[5,28,32,51,63,67,76,90],"way,":28,"wayland,":75,"wayland-":63,"wayland.":63,"ways ":[24,32,60,65,66,85],"ways.":92,"we ":[0,3,9,10,23,24,27,28,35,36,37,41,42,49,51,56,57,58,60,64,65,66,67,72,73,74,76,77,81,82,83,84,90,92],"weakens ":67,"weather ":63,"web ":[0,6,15,32,37,39,41,58,59,60,63,66,73,82,84,87,89,91,93],"web-":[54,63,82],"web_root/":54,"web_root;":54,"web_root=":54,"webapp ":73,"webauth.":93,"webcam ":63,"webcam,":59,"webkitgtk.":63,"webm ":59,"webpage.":62,"webserver-":41,"webservers ":32,"website ":[72,73,90,92,93],"website.":[73,93],"websites ":[88,93],"websites:":66,"webster ":65,"week ":27,"week,":0,"weeks ":58,"weight ":63,"weights.":59,"welcome ":[57,61,73,74,92],"welcome-":66,"welcome.":66,"well ":[28,31,32,34,39,60,75],"well-":[0,29,31,32,66],"well.":[60,73],"were ":[24,28,31,36,52,56,58,65,67,82,83],"west-":72,"weston ":63,"weston-":63,"westus\"":73,"wgetrc ":88,"what ":[4,31,36,39,49,60,66,67,72,73,89],"whatprovides ":47,"wheel ":59,"when ":[2,4,5,9,10,23,25,26,28,29,30,31,32,35,36,40,49,51,53,56,58,59,60,63,66,67,72,73,76,77,80,81,83,85,90,92,93],"when:":28,"whenever ":[0,26,30,67],"where ":[2,5,24,26,28,31,32,36,42,52,53,54,56,59,60,66,67,73,76,77,80,83],"where-":0,"whether ":[9,10,31,32,60,65,79,80],"which ":[0,3,4,5,6,9,14,24,27,28,29,31,32,34,35,36,37,39,40,45,47,49,53,54,56,58,60,63,64,66,67,73,74,76,77,81,83,84,85,86,88,90,93],"while ":[0,3,5,9,10,29,34,40,41,43,57,58,59,60,63,80,81,84],"while.":[31,34],"white ":31,"whitelist ":49,"whitelist=":31,"whitelisted ":49,"whitelisted.":49,"whitespace ":66,"who ":[31,56,67,92],"whole ":[5,82],"whom?":67,"why ":[49,66,83],"wide ":[29,63],"widget ":[63,67],"width:":14,"wifi ":63,"wiki ":[36,66,67],"wiki/":66,"wikipedia.":66,"wildcard ":55,"wildcard-":55,"will ":[0,1,2,4,7,9,10,11,15,16,23,24,27,28,29,30,32,34,36,42,43,45,52,54,56,57,58,60,63,64,66,67,68,72,73,74,75,76,77,78,79,80,82,83,86,87,88,90,92,93],"window ":[60,63],"window,":72,"window.":[44,60,73],"windows ":[11,16,18,19,20,42,56,73,85],"windows*":[10,18,19,20,56,89],"windows,":56,"windows.":73,"windows:":56,"wire ":67,"wired ":[9,10,38],"wireguard-":34,"wireless ":[10,38,63],"wiring ":67,"wisdom.":76,"wish ":[9,10,18,24,60,84],"with ":[0,1,2,3,4,5,9,13,18,22,23,26,27,28,30,31,33,35,37,38,39,40,41,42,43,45,46,47,48,49,51,53,57,58,59,61,63,66,67,68,69,71,72,73,76,78,80,82,83,84,87,88,89,90,93],"with":57,"with-":52,"with:":[31,48,58,73],"within ":[28,29,39,40,57,58,60,66,73,82,90],"without ":[9,23,26,30,31,40,54,60,64,66,67,73,78,83,90],"wm.":63,"woff2.":63,"word ":[6,60,67,77],"wordcount.":87,"wordiness ":66,"wordpress ":90,"wordpress*":[89,90],"wordpress-":92,"wordpress.":92,"wordpress:":92,"wordpressuser ":90,"words ":66,"words,":[32,40,67],"words.":67,"work ":[0,7,8,23,28,29,47,49,56,57,58,63,66,80],"work,":[36,57,58],"work.":[28,52,54],"work:":24,"worker ":80,"workflow ":[37,60,63],"workflow,":34,"workflow.":[28,37],"working ":[34,53,58,60,63,74,83],"working,":58,"working:":60,"workload ":58,"workload.":40,"workloads ":[40,58,80],"workloads,":74,"workloads.":[58,63],"works ":[24,32,34,49,51,90],"works!":[28,90],"works,":24,"workspace ":[24,28,34],"workspace,":28,"workspace.":[28,34],"workspace:":24,"workstation ":[13,17,21,22],"workstation,":[42,69],"world ":92,"world,":92,"world.":92,"world\"":60,"would ":[18,32,56,58,67,73],"wp-":[90,92],"wpa ":63,"wpad ":23,"wpad,":23,"wpad.":23,"write ":[30,39,63,65,67],"writing ":[60,65,66,82],"writing-":66,"written ":[30,63,65,66,82,92],"www ":28,"www.":[0,23,34,90,93],"www/":[28,90,92],"wysiwym ":63,"x ":[12,17,18,19,20,21,22,24,28,34,58,63,64,73,76,82,83],"x)":58,"x+":76,"x,":[66,76],"x-":83,"x.":63,"x/":[18,19,20,34],"x1 ":68,"x11 ":[63,64],"x11,":[63,75],"x11-":63,"x11.":63,"x11/":83,"x11displayoffset ":64,"x11forwarding ":64,"x11uselocalhost ":64,"x86 ":[40,63,71],"x86-":45,"x86_64 ":[17,59],"x86_64-":[53,83],"x86_64.":[19,20,34],"x86_64/":[47,75],"x;":76,"x<":76,"x=":76,"x]":[10,56],"xapian-":63,"xargs,":63,"xauth:":56,"xauthority ":56,"xcb-":63,"xdg-":[63,75],"xdmcp,":63,"xdmcp]":56,"xdot ":63,"xeon\u00ae":[58,68],"xf86-":63,"xfce ":63,"xfce4-":63,"xfs ":63,"xjf ":54,"xkbcomp.":63,"xkeyboard-":63,"xml ":[59,63,77],"xml,":[59,63],"xml-":77,"xml.":63,"xml>":59,"xmlsec1.":63,"xnvc.":56,"xorg ":[63,83],"xorg-":63,"xorg.":83,"xorg/":83,"xorgproto.":63,"xpdf-":63,"xps*":68,"xps,":63,"xqhj:":52,"xr-":73,"xsl\"":77,"xtables ":63,"xtrans.":63,"xvf ":[34,35,36],"xvnc ":56,"xvnc(":56,"xvnc.":56,"xvnc@":56,"xx.":[35,36,83],"xxxx ":71,"xxxx-":16,"xxxxx ":16,"xxxxx-":16,"xz ":[18,20,24,42,51,52,54,63,69],"xz-":51,"xz.":63,"xzvf ":[90,92],"y ":28,"y)":76,"y/":[56,73,75,90],"y;":76,"yaml ":[14,58],"yaml-":58,"yann ":82,"yarn-":77,"yarn.":77,"yarn<":77,"yes,":[0,72],"yes/":[72,73,77],"yet ":[28,29],"ymm0,":76,"you ":[1,2,4,6,9,10,11,14,16,18,23,24,26,27,28,29,31,32,34,35,36,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,66,67,72,73,74,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,93],"you.":[4,32,36,61,66],"you:":81,"you@":[24,34],"your ":[1,4,5,6,9,11,16,18,20,23,24,27,28,29,31,34,35,37,38,39,40,41,42,43,44,47,49,50,53,54,55,57,58,59,61,63,64,65,66,67,74,76,78,79,81,82,84,85,86,87,88,90,92,93],"your-":88,"your.":[23,88],"your_website>":92,"yourself?":65,"yubico ":93,"yubico.":93,"yubico/":93,"yubikey ":89,"yubikey*":93,"yubikey.":93,"yubikey/":93,"yubikey:":93,"yum ":[28,43],"yum,":31,"yum-":28,"yum_conf ":28,"yy-":[35,36,83],"z ":63,"z170x-":68,"z]":80,"zero-":[28,34],"zeroedthick ":22,"zfcopipu.":77,"zfs ":0,"zip ":[20,42,47,59,63,69],"zip-":47,"zlib.":63,"zmq ":63,"zone.":[9,50],"zones,":50,"zones\"":73,"zstd ":47,"zstd-":47,"zstd.":63,"zx2c4.":34,"zzzz.":[35,36,83],__ +:57,___ +:73,_gnu_source +:60,a +:[2,5,10,23,25,28,29,31,34,39,40,45,48,49,52,53,54,55,56,58,60,66,67,71,73,74,77,78,80,82,84,85,90,91],a1sai:68,able +:[60,64],abort:24,about +:[4,29,57],about:[61,71],access +:86,access:59,accessible +:84,accompanying +:27,according +:31,account:90,accounts +:63,accurate +:60,acl +:63,acpi +:63,acronym:66,action +:42,action:72,activ:[9,53],active +:[56,60],ad +:63,ad28a3390ecc +:52,add +:[0,24,31,41,59,72],add:[10,38,43,56],adding +:2,additional +:[35,36,54,90],additions +:63,address:[33,55],adds +:28,administr:[9,10,41,56],administrative +:59,adminstr:56,advanced +:[61,93],after +:[10,27,29,66],after:[9,10],again +:11,agile +:32,akonadi +:63,alexnet:58,algebra +:63,all +:[51,54,60,66,77],all:62,alloc:18,allocated +:60,allows +:[0,90],already +:[35,36,56,78],also +:[10,40],alternative +:0,altogeth:56,always +:67,alwaysshar:56,an +:[9,10,27,28,30,35,36,39,48,49,58,66,67,73,80,88,90],analyt:6,analyzing +:2,and +:[0,2,6,10,23,24,28,29,30,31,32,34,35,36,37,39,40,51,53,54,55,59,60,66,67,70,72,73,74,75,76,77,80,82,83,84,92],and:[29,59,67],ani:51,announc:58,another +:73,ansible +:63,any +:[26,28,32,60],aoe:54,api +:63,apic:18,app:75,appear +:[9,10,90],appeared +:76,applet +:63,applic:[53,75],application +:[32,84],applications +:64,apps +:[63,64],apr +:63,architectur:[58,80],architecture +:52,architectures +:25,are +:[2,4,7,24,29,30,31,32,34,48,58,59,60,72,80,83,92],aren:[24,83],argument +:52,argument:[9,10],ark +:63,array +:60,arrow +:10,arrows +:10,as +:[2,4,10,24,29,32,34,54,56,60,65,66,67,68,73,75,83],assert:17,assets +:63,assist:22,assure +:10,at +:[26,34,59,60],atk +:63,atkmm +:63,atom +:63,atom:68,attica +:63,attr +:63,attribut:[18,56],attribute +:76,audacious +:63,audience +:32,audit +:63,authent:86,authentication +:93,authoritative +:54,authorized_kei:77,auto:18,autoar +:63,autoconf +:63,automat:9,automatically +:[2,31,36,63,83],automation +:32,automotive +:63,autoproxi:[10,33,88],autospec +:24,autospec:[28,31,33,34,41,70],autospecnew:24,autostart +:63,autostart:[17,18,41,56],autoupd:31,available +:[5,28,29,34,58,73],avoid +:[66,67],avoided +:83,avx2:76,aw:72,aware +:28,awesome +:63,aws +:[59,63,72],awscleartestkei:72,axel +:63,az:73,azur:25,azure +:[63,73],b +:56,babel +:63,babl +:63,back +:49,backend +:60,backend:60,background:74,bad +:63,bad_signatur:51,baobab +:63,bar:67,bare +:76,base +:63,base:52,based +:[31,63],baselin:57,baseurl:47,bash +:52,bash:[58,73],bashrc:[28,73],basic +:[28,52,53,63,73],basic:[20,41,42,43,50,52,56,58,59,69,72,73,74,77,80,81,82,84,87,90],battery +:40,bc +:63,bcc +:63,be +:[0,9,24,28,30,34,36,38,39,46,49,59,60,66,67,74,80,93],because +:[52,78],been +:[34,60],befor:[41,67],before +:[32,66],begin:[67,81],behavior +:60,behind +:28,being +:29,below +:87,below:66,bench:58,benchmark:57,benchmarks +:58,better +:65,between +:[32,45,59],bijiben +:63,bin +:58,bin:60,binari:36,binaries +:36,bind +:53,bindcarri:55,binding +:53,binutils +:63,biosdecode +:24,bison +:63,bit +:63,bit:83,blank +:58,blender +:63,blind +:29,block +:77,blog:92,bluetooth +:63,bluez +:63,bmap +:63,bold:66,bond +:55,bond1 +:55,bond1:55,bond:33,bonded +:55,boost +:63,boot +:[9,10,11,14,35,36,40,54,83],boot:[9,10,16,34,39],bootable +:[9,54],bootloader +:[63,73],borgbackup +:63,both +:49,box +:59,box1:45,bq9mg442b:73,brotli +:63,browser +:9,browser:72,bucket:15,build +:[2,24,28,76],build:[24,28,34],builder +:63,builder:[28,33],buildreq_add:[2,24],buildreq_ban:2,bump:28,bundl:[0,4,18,19,20,25,31,39,41,44,46,58,62,70,79],bundle +:[28,41,52,60,63,73],bundles +:[28,31,52,59,63],busctl:23,but +:[0,60,76],button +:72,button:9,by +:[2,28,38,48,56,58,59,60,64,67,73,85,86,90],byte +:60,byte_burst_limit:60,byte_window_length:60,c +:[60,63],c2750:68,c9 +:53,c9:53,c_libraries +:24,cabextract +:63,caffemodel +:59,caffemodel:59,cairo +:63,cairomm +:63,calc +:63,calculator +:63,call +:6,called +:[34,59,60],callout:66,can +:[24,32,60,61,67,71,82,84,90],can:[4,72],cancel:[9,10,72],capable +:39,capit:66,card +:83,casync +:63,categori:56,cause +:11,cb9aab +:11,ccach:34,ccache +:63,ce +:52,center:26,ceph +:63,cert:28,certificate +:51,cflag:53,cgroupfs +:52,change +:[27,32,60],changed +:[35,45],characters +:63,chardetect +:31,check:80,checked +:29,checking +:23,checksum +:42,cheese +:63,chmod:[72,85],chown:85,ciao:39,cinnamon:17,cjson_library +:24,clamav +:63,class +:59,classif:59,classification +:59,clear +:47,clear:[1,60,72],clearlinux +:[24,34],clearlinux:[24,34],clearlinuxus:85,clearlinuxuser +:85,clearly +:67,clearresourcegroup:73,clearvm:73,cli +:63,cli:[22,73,84],click +:18,client +:[28,56,60,63],client:[22,23,60,74,77],clients +:31,cloc +:63,clock +:40,clone_dmidecod:24,clone_linux:34,close +:73,cloud +:[59,80],cloud:[31,59],cloudguest +:63,cloudguest:[32,39],clr +:[60,63],clr:[10,24,34,60],clr_debug_daemon:26,clrtrust:29,cluster +:63,clutter +:63,cmdline +:34,cmdline:[34,39],cmrt +:63,cnc +:63,cockpit +:63,code +:[26,36],code:66,codes +:63,coffee +:67,cogl +:63,collat:90,collect +:60,collector:60,colord +:63,colorlevel:56,columbiad +:63,com +:88,com:[71,72],combination +:5,comes +:29,command +:[43,56,66],command:[3,5,10,66,70,90],commenc:67,comment:66,common +:[58,63],common:[24,34],commons +:8,compani:66,compile +:3,complet:[18,58,67],complete +:[9,10,28,73,90],completed +:92,completing +:[9,10,24],complexity +:58,components +:63,compose +:63,computed +:42,computers +:[45,54],computing +:76,concept:[66,74],concis:67,conduct:65,conf +:[28,36,39,54,78,79,83,87,90],conf:[2,23,30,35,39,47,48,50,54,56,60,64,80,83,84,85,87,88,90],config +:[14,34,53,56,63],config:[34,56,88,93],config_rte_build_shared_lib:53,configur:[38,78,79,81],configuration +:[2,77,80],configure +:[2,16],configures +:77,configuring +:60,confirm:[9,10],confirms +:53,conky +:63,connect +:56,connect:[9,38,56,72,84,86],connection +:56,connector:59,consequ:67,consider +:[41,86],consist:67,consol:[15,66,72],consumed +:28,contain +:36,contain:[12,28,31,58,74,80],container +:[52,58,63,74],containers +:[63,80],contains +:34,content +:[28,31,67,90],content:66,contenturl +:28,contenturl:28,continu:[72,92],control +:[2,63],convent:66,converting +:59,cool:40,cooling +:40,copy +:34,core +:[63,73],core:[45,68],corporation +:[52,60,73],correct +:[2,56,58],corresponding +:[42,69,83],cost +:5,could +:65,cpio +:63,cpu:[18,21,22,40,59,71],creat:90,create +:[36,37,43,55,66],created +:[28,90],creation +:[27,60],credenti:85,cri:80,crio +:80,crio:80,cronie +:63,cryptography +:63,cryptsetup +:63,cryptsetup:[10,29],ctrl:[18,90],cumulative +:[6,60],curl +:[28,63],curl:[28,73,74],current +:[58,63,90],current:[31,47],current_driv:40,cursor +:63,custom +:[6,27,28,37,60],custom:32,custom_modul:36,custom_module +:36,customize +:[57,72],cve +:63,cve:29,cycl:37,cycle +:37,d +:[35,54,83],d54250wyk:68,d6ee7903e14d +:52,d73d6040afd7693cccdfece479df9795 +:60,daemon +:[49,60,63],daemons +:49,dar:57,darktable +:63,dashboard:72,dat +:23,data +:[0,6,32,57,60],data:59,databas:39,database +:90,datadir:59,datanod:77,datanode +:77,datasets +:63,datasheet:73,datastore1:22,days +:60,db +:54,dbus +:63,dcd9adb40611 +:52,dconf +:75,dd:11,ddd +:63,deallocating +:73,debug +:26,debug:26,debugging +:26,decisions +:29,decompress +:90,deep +:58,default +:[0,30,31,58,60,63,64,74,90],defined +:[60,66,72],definition +:28,delet:10,deliver +:58,deliveri:6,delta:[5,28],demo:82,depicts +:54,deploy:59,deployed +:32,deploying +:32,deployment +:[28,58],describe +:67,descript:[2,42,56,69],description +:[63,73],desired +:[9,10,30,60],desktop +:[45,63],desktop:[12,13,44,59,68,71,75,76,77,85,89,90,92],destin:56,detailed +:80,detect +:[2,24],detection +:59,dev +:[58,63],dev:[24,35,53,57,76],develop:33,development +:[6,7,9,60],devic:[17,38],device +:[14,38,53,59],devicelogin:73,devops +:63,dhcp +:54,dhcp:10,diagnos:[5,31],dialog +:72,dialogu:10,dictionari:65,different +:54,diffoscope +:63,diffutils +:63,digikam +:63,direct:[23,66],directives +:31,directly +:82,directory +:[39,60,73,90],disabl:[9,31,64],disclaim:7,disconnect:38,discovered +:2,discovery +:63,disk +:[11,14,46],disk2:11,disk:[10,18,46],diskpart:10,displai:[17,83],distinct +:66,distinction +:66,distro:[37,60],django +:63,dkm:[33,35],dkms +:63,dkms_binaries_onli:36,dkms_source_tre:36,dlrsalexnet:58,dlrsresnet50 +:58,dmidecod:24,dnf +:[47,63],dnn:58,dnsmasq +:54,dnsmasq:54,do +:80,doc +:63,dock +:63,docker +:[28,52,74,78],docker:[52,57,58,74,79,84,88],docker_image_path:28,dockerfil:57,document +:67,document:[19,20,31,65,66,74,80,81,82],documentation +:[58,59],documentroot +:90,documentroot:90,documents +:85,docutils +:63,does +:[56,74],doesn:[24,32,60],dog:66,dolphin +:63,domain:23,domotica +:63,don:[9,32,56,60,66,67],done:[79,80],dosfstools +:63,dovecot +:63,down:[9,10],download:[9,10,11,14,16,18,19,32,71,72,90],downloads +:85,doxygen +:63,dpdk +:63,dri +:75,drive:[18,32,85],driver +:[53,83],driver:[55,74,89],drivers +:83,drop:60,drv:53,dtc +:63,duperemove +:63,during +:[9,10,39,73],dvd:21,e1000:53,e2fsprogs +:63,e3825:68,e47ecc039d48409b1c62e5ba874921d7f640243a4c3115bb41b3e1009ecb48e4 +:58,each +:[32,60,73,76],easily +:34,eat +:67,eating +:67,ec23189ef954 +:52,ec2:72,ec5064287c60 +:52,echo:40,edit +:77,edited +:[34,38],editing +:59,editor:[28,41],editors +:[28,63,73],education +:63,efa893350647 +:52,effects +:[23,63],efi +:11,efi:[18,21,22],eigen:58,either +:10,elasticsearch +:63,element:66,elfutils +:63,emacs +:63,email:84,emphasi:66,enabl:[31,40,53],enable +:64,enable_iot_cloud_output:59,enable_kinesis_output:59,enable_s3_jpeg_output:59,enabled +:[35,63],enables +:59,enabling +:60,enchant +:63,encrypted +:63,encryption +:29,end +:34,ending +:66,endpoint:32,endsection +:83,engin:13,english:[90,92],enlightenment +:63,eno1 +:54,eno2 +:54,enp1s0f3 +:55,enp1s0f3:55,ensure +:[5,28],ensuring +:31,enter +:[31,56,85],enter:[10,56,60,72,73],entered +:40,environ:[10,27,37,53],environment +:32,eof +:[17,52,54,56,78,80,88],eof:[17,48,52,54,56,78,79,80,83,88],eog +:63,epoch:28,error +:63,esc:10,esxi +:22,esxi:[19,20,21,22],etc +:[30,63],etc:[30,32,44,60,64,80,93],ethernet +:38,ethernet:53,etherneten01:38,ethtool +:63,even +:56,events +:32,evince +:63,evolution +:63,exampl:[41,67,76,82,90],example +:[36,58,90],examples +:28,exceed +:66,exclud:24,execstart:56,executing +:26,exist +:56,existing +:[11,52,58],exit:[9,43,73,80],exiv2 +:63,expat +:63,expert:56,expertise +:67,explain +:66,explan:28,ext4 +:14,extens:66,extfs +:52,extra:40,extract +:24,extracts +:83,extras +:[40,63],extremetuxracer +:63,f10:[9,44],f2:[9,10,44,83],faa:59,facilitates +:36,factori:37,fail:67,failur:67,fals:[52,60],false +:[14,52],fanci:67,fann +:63,faq:61,fast +:[25,53],fast:55,fcoe:54,fd +:[17,28],fd:17,features +:[29,40],ffffffff +:60,ffmpeg:0,fft:76,fftw +:63,fg +:56,fields +:84,figur:66,figure +:[72,73],file +:[5,24,28,39,52,55,63,66,74,76,82,83,90],file:[28,31,36,41,60,66,67,86],filenam:2,files +:[0,2,30,31,34,52],filesystem:[9,10],filters +:63,final +:28,find +:67,findproxyforurl:23,findutils +:63,finger:29,fio +:63,firefox +:63,firmwar:12,firmware +:63,first +:[10,24,28,82],fix:46,fixes +:29,flac +:63,flag:66,flannel:[58,80],flash +:63,flathub +:75,flatpak +:63,flex +:63,flow:[23,39,65],fluidsynth +:63,fmv:76,folder:[15,85,93],folders +:59,follow +:[9,44,59,67,74,78],following +:[26,28,39,43,47,59,76,80,90],fontconfig +:63,fontforge +:63,fonttools +:63,foo +:76,foo:76,for +:[0,4,7,24,25,26,27,28,29,31,32,34,35,37,39,43,48,53,56,58,60,67,73,74,76,80,82,85],format:[28,67,77],formatting +:66,forum:0,forward:34,fossil +:63,found +:[0,28],found:28,four +:53,framework:41,frameworks5 +:63,freeglut +:63,freetype +:63,frequency +:40,fribidi +:63,friend:84,from +:[18,28,37,54,56,59,60,77],fstab:59,ftp_proxy +:88,fullfil:31,function_handl:59,fuse +:63,fuse:26,future +:34,fwupd +:63,fwupdate +:63,g +:76,games +:63,gb:[18,46,71],gcab +:63,gcc +:76,gcc:[53,76],gce +:63,gce:15,gconf +:63,gcp:15,gcr +:63,gdb +:63,gdm +:63,gdm:17,geany +:63,gear:9,gedit +:63,gegl +:63,gen:6,gener:89,geoclue +:63,get:43,gexiv2 +:63,gfbgraph +:63,gflags +:63,gftp +:63,gimp +:63,gis +:63,git +:[60,63,76,88],git:[5,31,58,60],github +:25,github:1,giving +:67,gjs +:63,glew +:63,glib +:63,glibmm +:63,glm +:63,glmark2 +:63,global +:63,glog +:63,glu +:63,gmime +:63,gnomelibs +:63,gnuplot +:63,gnutls +:63,go +:58,go:90,goaccess +:63,good +:67,googletest +:63,gparted +:63,gperftools +:63,gpgme +:63,gphoto2 +:63,gpu +:63,granted +:[86,90],graphic:83,graphical +:83,graphics +:63,graphite +:63,graphviz +:63,greater:18,greengrass +:59,greengrass:59,greengrasssdk +:59,greengrasssdk:59,grilo +:63,group +:[40,48,59,73],group:28,growing +:29,gsl +:63,gsound +:63,gspell +:63,gst +:63,gstreamer +:63,gtk +:63,gtk3 +:63,gtkmm3 +:63,gtkplus +:63,gtkspell3 +:63,gtkwave +:63,gui +:63,guid:[24,43,47,53,59,61,65,66,75,83,85,87,88],guide +:[27,66],guidelin:[66,70],guile +:63,gunzip:42,gutenprint +:63,gvim +:63,gwenview +:63,gz +:[35,36],gz:[15,16,20,36,42,69,82,90,92],gzip +:63,h15 +:45,h15:45,hadoop +:77,handwrit:82,haproxy +:63,harddisk:18,harden +:92,hardwar:70,hardware +:[6,60],harfbuzz +:63,has +:[5,23,28,54],hash:80,have +:[28,30,31,32],haven:65,hdf:77,heading +:66,hello:60,help:[31,60,62,73],helper +:63,heof +:60,heof:60,here +:51,here:[18,42,60,67,75],heredoc:60,hexchat +:63,hget:84,hgetal:84,highlight +:10,hmset:84,home +:11,home:[30,32,60,72,74,76,82],host +:[56,63,80,88],host:[12,17,23,28,53,58,80],hostmgmt +:63,hostmgmt:32,hostnam:[33,80],hostname +:23,hostnamectl:45,hosts +:90,how +:[67,80,90],how:32,however +:24,html +:[58,66,90],html:[0,90,92],htop +:63,http +:63,http_proxi:80,http_proxy +:[80,88],httpd +:63,httpd:[30,90],https_proxi:[60,80],https_proxy +:[80,88],hub:[57,58],huge:53,hugepag:53,hugo +:63,hwloc +:63,hyperv +:[63,73],hyperv:25,hypervisor:25,i +:56,i3 +:63,ias +:63,iasimage +:63,icdiff +:63,icecream +:63,ich9:18,ici:[39,54],icon:9,icu4c +:63,id:[18,53,56,58],ide +:63,if +:[2,3,10,23,38,49,53,60,67,73,80],ifconfig:[80,86],iftop +:63,igb_uio:53,ignore +:56,im +:63,imag:[11,15,17,19,20,21,22,28,33,46,74],image +:[27,51,57,58,74],imageformat +:63,imagemagick +:63,images +:[54,59],img:[17,20,24,28,42,53,69],immediately +:9,impacted +:49,important +:[1,24],improv:29,improvement +:65,in +:[5,10,24,25,27,28,31,34,38,42,47,49,54,56,58,59,60,66,72,77,80,86,90,92],inactive +:52,includ:80,include +:[24,26,28],includes +:[42,69],including +:45,incomplet:9,incurring +:73,indic:23,indicates +:42,individual +:[5,55],infinity +:48,influence +:2,info +:[28,63],info:[26,31,52,78],information +:[26,29,34,37],init +:[34,52],init:[28,39,80],initdb:47,initial +:54,initialized +:60,initrd +:[39,54],initrd:54,inkscape +:63,input:77,input_model +:59,input_proto +:59,inserted +:[35,36],inside +:52,insmod:35,instal:[0,14,18,24,27,33,39,43,52,58,60,67,83,92],install +:[0,60,63],installation +:39,installations +:32,installed +:[30,90],installer +:[14,63,83],instanc:[25,39,67,84],instruct:[18,58,74],intel +:[40,58],intel_pst:40,interface +:[38,73],internal_iface +:54,interval +:59,intltool +:63,into +:[4,34,56],introspection +:63,invalid +:51,invite +:84,invoke +:58,io:84,iot +:63,iot:59,iotop +:63,ip:80,ip_forward:54,iperf +:63,ipmctl +:63,ipmitool +:63,iproute2 +:63,ipset +:63,iptabl:0,iptables +:63,ipvsadm +:63,ipx:33,ipxe +:[39,54],ipxe_app_name +:54,ipxe_root +:54,ipynb:82,irc +:63,irssi +:63,is +:[0,9,10,24,25,27,28,30,31,32,38,47,53,54,56,58,59,60,67,72,73,77,82,83,84],iscsi +:63,iscsi:54,isn:80,iso:[9,10,20,42,69],issu:[0,65],issues +:24,ister +:39,ister:39,istercloudinitsvc:39,isterconf:39,it +:[0,2,24,28,32,34,58,64,65,67,93],it:[60,64,67,84],ital:[66,67],its +:[24,31],j3455:68,jargon:67,jobtrack:77,joe +:63,joe:28,journal:60,jp:77,jps +:77,jq +:63,json +:27,json:[28,39,74],jupyter +:[63,82],just +:56,kamera +:63,kata +:80,kata:31,kate +:63,kbd +:63,kcachegrind +:63,kcalc +:63,kde +:63,kdenlive +:63,kdiff3 +:63,keepalived +:63,keepassxc +:63,kei:[9,59,73],kernel +:[6,10,18,34,35,36,83],kernel:[3,5,13,20,28,42,69],kernels +:34,key +:60,keychain +:63,keystrok:66,keyword:67,kflow +:58,kill:56,kit +:63,kit:53,kleopatra +:63,kmod +:63,known +:29,ko:[35,36],koji +:63,konqueror +:63,konsole +:63,konversation +:63,kpxe:54,krb5 +:63,krita +:63,ks:58,ksonnet +:58,ksysguard +:63,kube:31,kubeadm:[58,81],kubectl:80,kubeflow +:58,kubernet:31,kubernetes +:81,kvm +:63,kvm:[25,28],l +:73,l3fwd:53,lab:45,label +:[66,73],label:[9,10,66],lambda +:59,lamp:[90,91,92],landing +:66,languag:9,language +:66,laptop:68,large +:57,later:73,latest +:[28,58],latest:[52,73],latex +:63,launch:72,lcms2 +:63,ldap +:63,ldconfig:83,ldtarbal:36,learning +:58,leas:54,leases +:54,lecun:82,legacy +:63,legal +:0,less +:63,less:76,let:92,letter +:[9,67],level +:5,lftp +:63,lga:18,lib +:63,lib32:83,lib64:53,lib:83,libabigail +:63,libarchive +:63,libassuan +:63,libatasmart +:63,libcanberra +:63,libcap +:63,libcgroup +:63,libconfig +:63,libcroco +:63,libdatrie +:63,libdazzle +:63,libdrm +:63,libepoxy +:63,libevdev +:63,libevent +:63,libexif +:63,libffi +:63,libffi:73,libfontenc +:63,libgcrypt +:63,libgd +:63,libgdata +:63,libgee +:63,libglib +:63,libgnomekbd +:63,libgphoto2 +:63,libgsystem +:63,libgtop +:63,libgudev +:63,libgusb +:63,libgweather +:63,libical +:63,libidn +:63,libidn2 +:63,libinput +:63,libiscsi +:63,libmediaart +:63,libmicrohttpd +:63,libmnl +:63,libmspack +:63,libmtp +:63,libmypaint +:63,libndp +:63,libnetfilter_conntrack +:63,libnetfilter_cthelper +:63,libnetfilter_cttimeout +:63,libnetfilter_queue +:63,libnfnetlink +:63,libnftnl +:63,libnl +:63,libnotify +:63,liboauth +:63,libogg +:63,libopa:24,libopae +:24,libosinfo +:63,libpcap +:63,libpciaccess +:63,libpeas +:63,libpinyin +:63,libpipeline +:63,libpng +:63,libpsl +:63,library +:[24,58],libraw +:63,libreoffice +:[63,75],libreofficeipc0 +:75,librepo +:63,librsvg +:63,libs +:63,libsamplerate +:63,libsass +:63,libsctp +:63,libseccomp +:63,libsecret +:63,libsigcplusplus +:63,libsmbios +:63,libsolv +:63,libsoup +:63,libspectre +:63,libsrtp +:63,libssh2 +:63,libstdcpp +:63,libstoragemgmt +:63,libtasn1 +:63,libtelemetri:6,libthai +:63,libtirpc +:63,libunwind +:63,libusb +:63,libuser +:63,libuuid_libraries +:24,libva +:63,libvirt +:63,libwacom +:63,libwebp +:63,libwnck3 +:63,libx11 +:63,libx11client +:63,libxau +:63,libxcb +:63,libxcomposite +:63,libxcursor +:63,libxdamage +:63,libxdmcp +:63,libxext +:63,libxfixes +:63,libxfont +:63,libxfont2 +:63,libxft +:63,libxi +:63,libxinerama +:63,libxkbcommon +:63,libxkbfile +:63,libxklavier +:63,libxml2 +:63,libxmu +:63,libxpm +:63,libxrandr +:63,libxrender +:63,libxres +:63,libxscrnsaver +:63,libxslt +:63,libxt +:63,libxtst +:63,libxv +:63,libxvmc +:63,libxxf86misc +:63,libxxf86vm +:63,libyami +:63,libzip +:63,libzmq +:63,licens:[8,24],license +:24,licensing +:0,lightdm +:63,like +:[32,66],limit +:[48,59],limit:33,limiting +:40,limits +:48,line +:[28,39],link +:67,linux +:[25,34,35,36,48,52,63,83],linux:[0,18,19,20,21,22,25,34,54,93],list +:28,list:[10,11,24,25,38,56,58,62,64,65,73],listed +:56,listenstream:64,live +:44,llvm +:63,load +:[56,82],local +:[26,34,52,60,77],local:[0,24,28],local_bundle_dir:28,locale +:63,locales +:63,localhost +:[56,60,88],localhost:[60,77,80,90,92],locat:86,locate +:63,located +:[2,60],log +:40,log:[17,24,56,76],logical +:55,login +:[56,63],login:[9,10,73],logrotate +:63,logs +:63,longer +:[28,60],los_angel:[9,50],lowercas:66,ls:58,lsblk:[11,44],lsusb:93,lt:[17,18,25,36,83],ltp +:63,lts +:[18,60,63],lts2017 +:63,lts2018 +:63,lts2018:18,lts2019 +:63,lua +:63,luk:29,lvm2 +:63,lvs +:63,lxqt +:63,lyx +:63,lz4 +:63,machin:[18,19,20],machine +:[45,60,77],machines +:[31,32],maco:56,macros +:63,main +:67,mainline +:63,maintain +:34,maintain:[29,79],make +:[6,49,60,63],make:57,makefil:[2,24,34],makes +:60,making +:76,manag:[16,18,34],manage +:[37,38],management +:63,manager +:63,manages +:[28,77],managing +:29,manifest +:31,manner +:59,manual:[9,18,33,34,36],manually +:[36,55,56,78],many +:[83,84],mapreduc:77,mapreduce_shuffl:77,mariadb +:[63,90],marketplac:72,masquerade +:54,master +:60,master:[57,80,87],match +:31,matter:66,max:48,maximum +:48,may +:[10,35,36,40,55,80],mb:[18,46],me:92,mean +:30,mechanism +:35,mediasdk +:63,meet +:[9,10],meld +:63,memcached +:63,memory +:52,menu:[9,44],menuconfig:34,menus +:63,mercurial +:63,mesa +:63,messag:90,metacity +:63,metal +:90,method +:10,micro:72,microsoft +:25,might +:83,minetest +:63,minetestserver +:63,mini +:63,minicom +:63,minimum +:41,mint +:11,missing +:52,mix +:28,mix:[37,47],mix_vers:28,mixbundl:28,mixer +:[28,63],mixer:[2,5,27,31,32,33,34,35,36,37,41,70],mixin:33,mixvers:28,mkl:57,mkosi +:63,mktarbal:36,mnist +:82,mnist:82,mnt:44,mock:[2,24,34],mode +:53,model +:[58,59],modeldir:59,models +:[59,63],modify +:28,modprob:[35,36],modul:0,module +:[35,36],modules +:[35,36,83],mom +:51,mom:[28,51],monitor +:63,monitoring +:63,mono +:63,month +:66,more +:[0,25,28,34,38,41,60],more:67,most +:[5,67],mostly +:[24,34],motd:81,mountpoint +:[11,46],mountpoint:11,mous:9,move:73,movidiu:59,mozjs52 +:63,mozjs60 +:63,mpg123 +:63,mpv +:63,mtr +:63,mtubyt:55,multiple +:[27,74],musescore +:63,music +:63,musl +:63,must +:[23,24,35,58,60,92],must:[28,80],mutt +:63,mutter +:63,mycroft +:63,myhost:80,mysql +:90,mysql_secure_instal:90,n +:56,name +:63,name:[9,10,59,63,66,72,74,84],named +:[34,55,83],namenod:77,namenode +:77,names +:58,nasm +:63,nat:[39,54],nativ:[9,25,28,34,35,36,53,83,84],native +:[14,28,45,52,61,63,80],nautilus +:63,ncdu +:63,ncurses +:63,ndctl +:63,necessary +:76,need +:60,neomutt +:63,nested +:78,netdev:55,netstat:56,nettle +:63,network +:[10,38,53,54,59],network:[10,16,38,55],networkd:[54,55],networkmanager +:63,networktest +:63,new +:[28,36,60,64,83],new_id +:53,newly +:28,newt +:63,next:9,nfs +:63,nftables +:63,ng +:63,nghttp2 +:63,nginx +:[28,54,63,74],nginx:[28,54,74],nhwc:58,ni:71,nic:53,nil +:14,nil:84,nist:29,nload +:63,nmap +:63,nmcli:38,nmconnect:38,nmtui:10,no +:[2,31,48,54,60,79,85],no:[9,60],no_proxi:[80,88],no_turbo:40,nobody +:56,node +:63,node:80,nodemanag:77,nodes +:77,nofil:57,none +:[56,90],normal +:48,not +:[3,28,30,32,35,40,51,53,60,74],not:[9,30,42,60,74],note:58,notebook +:82,notebooks +:82,notes +:66,notification +:63,notmuch +:63,nouveau +:83,now:18,nr_hugepag:53,nr_hugepages +:53,nspr +:63,nss +:63,ntp +:63,ntp:50,nuc5i7ryb:68,nuc5i7ryh:68,nuc6cai:68,nuc6cayb:68,nuc6i5syh:68,nuc6i6syh:68,nuc7i5bnh:68,nuc7i5dnh:68,nuc7i7bnh:68,nuc7i7dnk:68,nuc8i7hvk:68,null +:[73,80],number +:[56,66],numbered +:66,numbers +:57,nvidia +:83,nvidia:83,objdump:76,object +:[67,73],object:67,oci:80,ocr +:63,octave +:63,of +:[0,2,5,9,10,23,24,28,29,31,32,42,43,48,51,58,60,65,66,67,69,72,74,77,80,81,85,92],of:67,off:18,offer +:67,offers +:4,official +:52,offlineimap +:63,ok:42,okular +:63,old +:28,on +:[2,23,24,26,28,31,32,34,40,42,47,54,56,57,58,59,60,76,80,86,87],once +:26,one +:[28,53,54],onli:[59,83],only +:[5,28,31,56,60],onto +:24,open +:29,open:56,openbla:[57,58],openblas +:63,opencv +:63,opengl +:63,opengl:83,openldap +:63,openmpi +:63,openqa +:63,openscad +:63,openssl +:63,openvino:33,openvswitch +:63,oper:[58,74],operate +:40,operating +:[26,29,30,72],operator +:58,opt +:58,optimized +:58,option +:[32,39,60],option:83,optional +:66,options +:49,opus +:63,or +:[9,10,31,32,34,36,40,42,59,60,65,66,83,90],or:[36,67,83],oracle +:63,orc +:63,orchestr:25,order +:30,org:[31,34],organ:32,original +:42,os +:[12,14,28,44,45,52,60,63,73,81],os:[0,1,2,3,4,5,6,9,10,11,12,13,14,15,16,19,20,23,24,25,26,27,28,29,30,31,32,33,34,35,36,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,64,65,66,68,69,70,71,72,76,77,78,79,80,83,85,86,87,88,89,92,93],oss:58,ostree +:63,osv:32,other +:[5,9,28,31,36,67,73],our +:[25,39,66,67,73,77],out +:28,out:[51,60],outlines +:39,output +:[36,51,59,73,83],output:[66,77],output_dir +:59,overlay +:52,overlay2:74,overview:73,own +:[31,32,56,60],ownership +:24,p1 +:34,p1:34,pacdiscoveri:23,packag:[3,28,36,53],package +:[5,24,26,43],packaged +:34,packages +:3,pacrunn:23,pacrunner +:[23,63],page +:90,page:[5,28,30,38,48,92],pages +:63,pair:72,pam +:48,panel +:63,pango +:63,pangomm +:63,paragraph +:67,parallel +:63,parallel:66,param_cpu_extension_path:59,param_devic:59,param_input_sourc:59,param_model_xml:59,param_num_top_result:59,param_output_directori:59,part +:[11,14,46],part:[46,66],parted +:63,particular +:5,partitionlayout:46,partitions +:54,pass +:[24,63],pass:9,passphras:9,passwd:[43,56],password +:29,password:[9,10,28],past_vers:28,patch +:[34,63],patch:34,path:[59,66],patriot_usb +:11,payload +:60,pc:85,pci:53,pciutils +:63,pcre +:63,pcre2 +:63,pdns +:63,pem:[51,72],per +:[31,35,36],perform +:[24,43,51,64],perform:33,performance +:58,phoronix +:63,photos +:63,php +:90,phpmyadmin +:92,phrase +:67,physical +:55,picked +:66,picki:24,pickle +:67,pid +:56,pidgin +:63,piece +:57,pii:60,ping:84,pipelin:37,pipewire +:63,pixbuf +:63,pixman +:63,pk +:63,pkg:34,pkgconfig_add:2,pkgconfig_ban:2,pktgen:53,pl:76,place +:66,placing +:32,plant:56,platform +:[58,67],platform:[15,33,58,68],platforms +:59,player:[19,20,21,22],plugins +:63,plzip +:63,pmdk +:63,png +:66,png:66,pod +:58,point +:[28,82],point:[9,10,82],pointer +:60,polici:60,policy +:31,polkit +:63,poll +:53,poll:40,pong:84,pool +:54,poppler +:63,popt +:63,port +:[56,58,64,88],port:56,portal +:63,portal:73,possible +:66,postgr:60,postgresql +:63,postgresql:60,postnonchroot:27,postpon:81,postrouting +:54,power +:40,poweroff +:24,poweroff:[17,28],powersav:40,powertop +:63,practic:36,preinstal:28,prerequisit:[11,18],prerequisite +:28,preschool +:63,press:65,pretti:45,previou:72,previous +:24,primary +:63,primer:66,print_function +:58,printing +:63,priority +:47,privileg:90,privileges +:56,proactively +:6,probe:[6,60],procedure +:66,process +:51,process:39,procf:49,produce +:27,product +:67,product:[32,72],productivity +:63,profil:80,program +:5,program:60,progress:11,project:[24,29,34,35,36,53,83,90],prompt +:14,prompts +:43,proper +:76,properly +:[49,93],properti:[56,87],proto +:63,protocols +:63,prototxt +:59,prototxt:59,provid:67,provide +:[28,36],provided +:[30,80],provides +:[1,34,54],providing +:24,provis:[27,32,33,67],proxi:[9,89],proxy +:23,ptr:60,publishes +:59,pull:[74,88],pulls +:28,pulseaudio +:63,push +:59,pushing +:83,putti:56,pwgen +:63,pxe +:[39,54],pxe:54,pxe_internal_ip +:54,pxe_subnet_bitmask +:54,py +:31,py:[27,58,59],pygobject +:63,python +:58,python:31,pytorch +:63,qpdf +:63,qt +:63,qt3d +:63,qt5webengine +:63,qtbase +:63,qtdeclarative +:63,qtlocation +:63,qtsvg +:63,qttools +:63,qtwebchannel +:63,qtwebengine +:63,quagga +:63,qualified +:56,quassel +:63,quasselcore +:63,questions +:34,quiet:[34,40],quilt:34,r +:[18,28,35,36,63,83],r630:68,radio +:63,ram:[19,71],range +:55,rate_limit_en:60,rate_limit_strategi:60,rather +:31,rc4:29,rclone +:63,rcu +:63,rdisk2:11,readily +:32,readline +:63,readm:[2,24,35,36,57],reads +:60,reboot:[10,17,18,34,35,36,44,45,83],rebootmgr +:63,recommend +:[10,56],record +:60,record_burst_limit:60,record_expiri:60,record_retention_en:60,record_server_delivery_en:60,record_window_length:60,records +:60,recursor +:63,redi:84,redshift +:63,refer:[61,66,67],referenced +:74,reflect +:81,regarding +:[28,60],releas:[27,28,29,37,46,59],release +:[44,47,51],relevant +:24,reload +:[28,56,78,79,80,88],reload:[28,64],remain +:83,remmina +:63,remote +:[56,63],remove +:90,remove_id:53,removed +:[30,52],rename +:45,renders +:30,repair:[5,83],replaceable +:66,replaced +:[5,52],repo:[28,63],repoadd +:24,reporting_interv:59,repos +:24,repositori:[33,65,66],repository +:60,repostatu:24,representation +:59,required +:[23,36],requirements +:53,requires_add:2,requires_ban:2,requiring +:4,reset:10,resize2f:46,resolv:54,resourcemanag:77,resourcemanager +:77,respective +:66,responsibility +:32,rest +:63,restart +:50,restart:49,restarts +:24,restic +:63,result:[24,87],resulting +:24,reusing +:34,review +:79,rhythmbox +:63,right:10,rm:74,rmi:58,rngd:49,role +:39,role:[39,66],roller +:63,root +:[14,28,90],root:[2,9,10,14,16,17,24,58,59],rooted +:29,rpm +:[0,34,37],rpm2cpio:34,rpm:34,rpmbuild:[2,24],rrdtool +:63,rsa:77,rst:66,rstudio +:63,rsyslog +:63,rt +:63,rte_sdk:53,rte_target:53,rufu:11,rule:93,run +:[2,73,74],run:[58,67,74,83],runc +:[52,80],runc:[58,74],running +:[23,34,72,81],runtim:[74,79],runtime +:[2,63,74],runtimeclass +:80,rvi:[19,20],s +:28,s2600wt2:68,s3 +:59,samba +:63,same +:[10,67],sampl:59,sandbox +:56,sasl +:63,scale +:32,scale:[4,33],scaling_driv:40,scaling_governor:40,scan +:67,schemas +:63,scheme:28,science +:63,scm +:63,scons +:63,scope +:91,scratch +:52,screen +:[63,72,90],screenshot +:63,script +:[39,60],script:60,sda +:14,sda3:46,sda:[10,11,14],sdb:11,sdc:11,sdd2 +:11,sdd3:11,sdd:11,sdk +:63,sdk:24,sdl +:63,sdl2 +:63,sdl2_gfx +:63,sdl2_image +:63,sdl2_mixer +:63,sdl2_net +:63,sdl2_ttf +:63,sdl_gfx +:63,sdl_image +:63,sdl_mixer +:63,sdl_net +:63,sdl_ttf +:63,seahorse +:63,search +:[31,45,63],search:[0,23,35,36],secondary +:63,secondarynamenode +:77,seconds +:75,section +:83,secur:[5,15,33,35,36,70,93],security +:[29,31,32,35,36,66,74,90,92],see +:[24,28,32,44,53,56,66,67,78],select +:[9,10,42,67,72,90],select:[11,15,66,72],selected +:9,sensitive +:63,sensors +:63,sent +:60,sentence +:67,separate +:[28,32],separated +:30,separately +:60,serve +:25,server +:[28,37,52,54,60,63,73],server:[13,18,28,29,32,41,52,54,56,60,70,71,74,86,90,91],server_state_dir:28,servernam:86,servic:[15,23,26,32,36,49,50,54,56,78,80,83,89,90],service +:[40,49,54,56,73,90],services +:[49,60],session +:56,set +:[5,24,39,40,59,60,73],set:[9,56,60,93],sets +:56,setup +:[24,34,74],setup:[10,80],several +:90,sftp:29,sh +:[28,87],sh:[12,17,20,24,28,34,53,54,59,60,77,78,79,87],sha512 +:42,sha512:[20,42],sha512sum:[20,42],shall:67,share:86,shell +:[57,60],shell:73,shells +:63,ship +:32,shorten +:31,should +:[2,60,67],show +:82,show:38,shown +:[9,73,90],shows +:[39,56],side +:72,sig +:51,sig_unenforc:[36,83],sign +:[28,73],signatur:[18,33],signature +:[35,36,51],silent:83,simple +:[53,56],size +:[32,52,58],size:[9,10],skip +:10,sku:[68,73],slice:56,smartmontools +:63,smb +:85,smb:85,smbpasswd:85,so +:[9,24],so:[53,59,67,83],sock +:28,sock:80,socket +:[56,64],socket:[56,64],socket_path:60,socks_proxy +:88,softwar:[9,67],software +:[0,3,4,31,37,47,49,60,63,67,73,74,77,87],solution +:6,some +:[29,44,61],soname1 +:63,soname2 +:63,soname3 +:63,sound +:40,source +:[5,34,36,66,73],sources +:[28,47],space:[10,33],spacebar:10,spark +:[57,87],spark_master_host:87,spec +:[24,34],spec:[24,34],specialized +:60,specific +:[31,34,80],specify +:59,spectacle +:63,speed +:31,sphinx +:63,sphinx:66,spice:17,spool:60,spool_dir:60,spool_process_tim:60,sqlite +:63,squid +:63,src +:47,src:47,srpm:47,ssd:59,ssh +:[29,63],ssh:[17,22,56,64,72,73],sshd +:17,sshd:[17,64],sshd_config:64,sslv3:29,ssocr +:63,stack:59,stage:37,stan +:63,standard +:74,start +:[34,59],start:[60,66],starting +:34,starts +:58,state:[28,40,72],statedir:52,stateless:[33,70,74,80,90],statu:[36,38,50,53,72],stdin +:60,stdin:60,stellarium +:63,step:20,steps +:[57,58,77,91],stop +:[72,73],stop:[60,72,74],storag:15,store:[0,84],strace +:63,structure +:82,stubs +:63,studi:73,styles +:63,subdirectory +:83,subject:67,submit:92,subunit +:63,subversion +:63,success:[12,31,51,52],successfulli:60,successfully +:52,such +:[27,44,59,66],sudo +:63,sudo:[43,59,60,88],sudoer:60,suggest:65,supertuxkart +:63,supply +:56,support +:58,support:[36,89],supported +:66,suricata +:63,svc:54,swap +:14,swap:[9,10],swapping +:66,swarm:74,swupd +:[36,43,51,83],swupd:[0,3,5,6,9,23,24,27,28,29,30,33,35,36,37,41,43,44,47,49,51,52,57,58,59,62,72,73,74,81,83],syndication +:63,synergy +:63,syntax:14,sysctl:80,syslinux +:63,syslog +:56,sysstat +:63,system +:[6,32,49,52,56,60,85,90],system:[18,28,33,35,40,49,58,80,82],systemctl +:26,systemd +:[54,63],systemd:[36,49,83,84],systems +:40,t +:72,t540p:68,tab:[9,10],tabl:73,table +:28,take +:[28,32,90],talloc +:63,tallow:[29,49],tar:[20,42,52,69],tarball +:2,target +:[42,56,76],target:[56,83],targetmedia:14,task +:61,tasktrack:77,tbb +:63,tcl +:63,tcpwrapper:29,team +:6,technolog:[5,16,17,18,40],telemctl:60,telemetr:[9,10,26,32,33,70],telemetri:[0,6],telemetrics +:[60,63],telemetry +:60,telempostd:[6,60],telemprobd +:60,telemprobd:[6,60],tells +:49,telnet +:63,templat:34,templates +:30,tensorflow +:63,tensorflow:58,term:66,termin:[38,75],tertiary +:63,test +:28,test:[45,67,90],test_telem +:60,test_telem:60,tested +:10,testi:82,testing +:[60,63],testsuite +:63,testx:82,texinfo +:63,texlive +:63,texmaker +:63,text +:66,text:66,tfjob +:58,tftp +:54,tftp_root +:54,than +:[31,66,85],than:67,that +:[24,34,35,40,44,49,57,60,67,73,92,93],that:4,the +:[0,2,3,4,6,9,10,16,18,20,23,24,25,26,27,28,29,31,32,34,35,36,37,38,39,40,41,42,43,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,64,66,67,72,73,74,75,76,77,78,80,81,82,83,84,85,87,90,93],thei:[9,67],their +:[31,32,48,75],them +:54,then +:73,there +:28,there:31,thermal_daemon +:63,thermald +:40,thermald:40,thermalmonitor:40,these +:[3,28,37,40,58,65],they +:[73,80],thi:67,this +:[5,10,24,25,28,31,32,41,44,47,58,59,66,74,83,85,90],those +:[32,76],through +:[0,36,56],thunderbird +:63,tiff +:63,tigervnc +:63,tigervnc:56,time +:[28,40],time:33,timer:40,times +:77,timesyncd:50,title +:66,tls +:63,tlsvnc +:56,tmux +:63,to +:[0,1,5,6,9,10,16,23,27,28,29,31,32,34,35,36,37,39,40,41,42,49,52,53,54,56,57,58,59,60,65,66,67,68,72,73,74,75,76,77,80,82,85,87,90],to:[67,90],toctre:66,todo +:63,token +:80,token:80,tool +:[32,63],tool:[19,24,26,38,58,71],toolkit +:63,toolkit:33,tools +:63,topics +:59,torch +:58,totem +:63,tpm +:63,train:58,traini:82,trainx:82,tree:[28,36],trigger +:[36,83],trigger:93,triggers +:52,troubleshooter +:63,true +:[14,52,56],ts140:68,tty1:83,turbo +:63,tutori:[43,58,61,66,72,73,78,80,82,84,90],tutorial +:90,tutorials +:82,tweaks +:34,two +:[31,37,82],txt:[39,60],type:[19,20,21,22,32,56,59,70,72],tzdata +:63,u2f +:93,u2f:93,ud5:68,udev:93,uefi +:[54,63],uefi:[10,19],uget +:63,uhttpmock +:63,ui +:[63,82],ui:[60,82],uint32_t +:60,ulimit:48,umount:11,unbind +:53,unbundle +:63,uncomment +:56,under +:[27,36,82,83],understand +:32,uninstal:83,uninterrupted +:83,unison +:63,unix2 +:63,unmanag:38,unparallel +:67,untrusted +:80,unzip +:63,up +:[6,24,32,80,82],up:[9,67],updat:[4,9,28,33,35,36,41,43,47,51,52,70,72,74,77,78,80,81,82,83,85,87,90],update +:[5,18,28,32,35,36,63,73,83],updated +:[83,90],updates +:[31,81],upstream +:[28,47],upstreamvers:28,url:[9,52],urn:73,us +:[14,49],us:[9,57,58,67,74],usb +:[10,93],usb:17,usbredir +:63,use +:[23,28,35,36,60,66,80,83],used +:51,useful +:82,user +:[30,43,56,58,60,85,90],user:[56,59,83,85],username +:92,users +:67,uses +:58,using +:[24,26,28,34,36,39,58,60,65,66,67,72,73,75,81,87,92],usr:[24,30,44,83],usually +:26,utc:[9,10],utf8_unicode_ci:90,util +:63,util:[26,41,46,67,85],utility +:63,utils +:[63,73],utilslib +:24,v +:63,v1 +:58,v1beta1 +:80,v3:68,v4:68,vala +:63,valgrind +:63,valid +:[24,80],valid:[37,42,81],valu:[59,93],values +:60,vanilla +:63,variabl:[28,66],variable +:[47,53],vbox:18,vboxguest:18,vboxsvga:18,vboxvideo:18,vcli:22,vec:76,vector +:66,vector:76,vectorized +:76,verification +:31,verify +:[28,31],version +:[27,28,31,36,58,63,73],version:[32,51,52,60,67,73,74],versions_path:28,versionurl:28,vertical +:9,vfat +:14,vga:17,vhd:[20,42,69],vhdx:[16,20,42,69],via +:[31,56,64],video0:59,view +:9,viewer +:63,viewer:[17,56],vim +:63,vinagre +:63,virt +:[31,63],virt:[31,78],virtual +:[25,53,55],virtual:16,virtualbox +:60,virtualbox:[18,25],visit +:[24,47,63,75,87,88],visualize +:60,vlc +:63,vm +:63,vm:[15,18,19,20,21,22,24,31,46,73,78],vma:22,vmdk:[20,22,42,69],vmkfstool:22,vmware +:[19,63],vmware:[19,20,22],vmx:[19,20],vnc +:[56,63],vnc:33,vncpasswd:56,vncserver:56,vnni:58,volum:59,vpddecode +:24,vt:[19,20],wacom +:63,want +:28,want:67,warn:56,warning +:56,was +:[30,38,49],wayland +:63,we +:[0,76,79],we:[24,28,44,60,67],weather +:63,web +:[32,90],web:39,webcam:59,webkitgtk +:63,webproxy +:63,websit:[24,75,82,83,92],websites +:93,weechat +:63,westu:73,wget +:63,what:32,wheel:[43,59],when +:[23,25,40,50,60,66],where +:[28,67,73],which +:[4,5,9,38,43,45,49,54,60,63,74,83,85],while +:32,whitelist +:49,whole +:32,wifi +:63,wifi:68,wiki:24,wikipedia:82,will +:[2,24,28,56,60],will:67,window:[19,20,56,86],wine +:63,wireguard +:34,wireshark +:63,wish +:10,wish:67,with +:[23,24,25,28,29,34,35,36,39,47,48,49,54,56,58,59,60,66,73,77,80,81,85,87],within +:[39,60],without +:24,woff2 +:63,won:58,wordcount:77,wordpress +:92,wordpress:[90,92],wordpressus:[90,92],work:44,workload +:32,workstat:[33,43],worrying +:23,would +:39,wp_:92,wpa_supplicant +:63,wpad:23,write:[59,66],writing +:67,www +:54,www:28,x +:83,x11vnc +:63,x299:68,x86_64 +:[47,52,60],x86_64:[47,53],xconfig:34,xemacs +:63,xf:[9,10],xfsprogs +:63,xkbcomp +:63,xml:77,xmlsec1 +:63,xorgproto +:63,xstartup +:56,xstartup:56,xterm +:63,xtightvncview:56,xtrans +:63,xz +:[34,42,51,54,63],xz:[14,17,18,20,21,22,24,34,42,69],y +:[66,75],yakuake +:63,yaml +:14,yaml:[10,14,58],yarn +:63,yarn:77,yasm +:63,ye:[9,36,46,56,64,72,73,77,85],yes +:[17,56,64,73,85],ymm0 +:76,you +:[4,10,15,24,28,53,56,58,60,66,67,72,73,80,82,90,92],you:[0,9,28,35,36,56,65,67,74,78,79,80,84,90],your +:[6,18,23,28,32,34,41,55,56,58,72,73,77,79,90],yubico +:93,yubico:93,yum:3,yum_conf:28,zip +:[42,63],zip:[20,42,47,59],zlib +:63,znc +:63,zsh +:63,zstd +:63,zstd:47},titles:["FAQ","About","Autospec","Bundles","Mixer","swupd: software updater","Telemetrics","<no title>","<no title>","Install Clear Linux* OS from the live desktop","Install Clear Linux* OS on bare metal with live server","\u521b\u5efa\u53ef\u5f15\u5bfc U \u76d8","\u68c0\u67e5\u5904\u7406\u5668\u548c EFI \u56fa\u4ef6\u7684\u517c\u5bb9\u6027","\u5f00\u59cb\u4f7f\u7528","\u5229\u7528 clr-installer \u548c\u914d\u7f6e\u6587\u4ef6\u5b89\u88c5","\u5728 Google Cloud Platform* \u4e0a\u542f\u52a8 Clear Linux* OS Compute Engine","\u4f7f\u7528 Hyper-V*","\u8fd0\u884c Clear Linux* OS\uff0c\u7528\u4f5c KVM \u6765\u5bbe\u64cd\u4f5c\u7cfb\u7edf","\u5728 VirtualBox* \u4e2d\u5b89\u88c5 Clear Linux* OS \u865a\u62df\u673a","\u5b89\u88c5 Clear Linux* OS \u7528\u4f5c Vmware* Workstation Player \u6765\u5bbe\u64cd\u4f5c\u7cfb\u7edf","\u8fd0\u884c\u9884\u914d\u7f6e\u7684 Clear Linux* OS \u6620\u50cf\uff0c\u7528\u4f5c VMware* Workstation Player \u6765\u5bbe\u64cd\u4f5c\u7cfb\u7edf","\u5b89\u88c5 Clear Linux* OS\uff0c\u7528\u4f5c VMware* ESXi \u6765\u5bbe\u64cd\u4f5c\u7cfb\u7edf","Run preconfigured Clear Linux* OS image as a VMware* ESXi guest OS","Autoproxy","autospec","Kernels","Debug system","ister.py image builder","mixer","OS Security","Stateless","swupd","Deploy at Scale","Guides","Kernel development","Add kernel modules manually","Add kernel modules with DKMS","Architect the life-cycle of Clear Linux* OS","Assign a static IP address","Bulk provision","CPU Power and Performance","Developer Workstation","Download, verify, and decompress a Clear Linux* OS image","Create and enable a new user space","Fix a broken installation","Modify hostname","\u589e\u52a0\u56fe\u50cf\u7684\u865a\u62df\u78c1\u76d8\u5927\u5c0f","Query package info from upstream repository","Resource limits","Restart system services after an OS update","Set the time","Validate signatures","Build a custom Clear Linux* OS based Docker container image","Use DPDK to send packets between platforms","Install over the network with iPXE","Combine multiple interfaces with network bonding","Remote-desktop to a host using VNC","Data Analytics Reference Stack","Deep Learning Reference Stack","Enable AWS Greengrass* and OpenVINO\u2122 toolkit","Telemetrics","Clear Linux* project","Useful bundle commands","Available bundles","openssh-server","Documentation guidelines","Structure and formatting","Writing guide","Compatible Hardware","Clear Linux* OS image types","Reference","\u5efa\u8bae\u7684\u6700\u4f4e\u7cfb\u7edf\u8981\u6c42","Create and launch Clear Linux* OS from Amazon Web Services","Run Clear Linux* OS using Microsoft Azure CLI 2.0","Run Docker* on Clear Linux* OS","Use Flatpak* to install applications on Clear Linux* OS","Use the function multi-version patch generator","Set up a single node cluster with Hadoop*","Install Kata Containers*","Migrate Clear Containers to Kata Containers*","Run Kubernetes*","Kubernetes Best Practices on Clear Linux OS","TensorFlow* machine learning on Clear Linux* OS","Install NVIDIA* Drivers","Run Redis on Clear Linux* OS","Enable simple file sharing with a Windows* machine using Samba*","Connect to Windows* shared location from Clear Linux* OS desktop","Set up a standalone cluster system using Apache* Spark*","Setting up proxy","Tutorials","Set up a LAMP web server on Clear Linux* OS","WordPress* on Clear Linux* OS","Set up WordPress* on a LAMP web server","Enable YubiKey U2F Support"],titleterms:{"0 ":73,"1.":[2,9,10,41,59,68],"1:":[20,24,28,31,42,56,69,84],"2.":73,"2:":[20,24,28,31,42,56,69,84],"3:":[24,28,31,56],"4:":24,"\u4e0a\u4f20\u81f3 ":21,"\u4e0a\u521b\u5efa\u53ef\u5f15\u5bfc ":11,"\u4e0a\u542f\u52a8 ":15,"\u4e0a\u5b89\u88c5 ":15,"\u4e0b\u8f7d\u5e76\u89e3\u538b\u7f29 ":18,"\u4e0b\u8f7d\u6700\u65b0\u7684 ":[19,20,21,22],"\u4e2d\u5b89\u88c5 ":18,"\u4ece\u865a\u62df\u673a\u65ad\u5f00 ":19,"\u4ee5\u5f15\u5bfc\u65b0\u5b89\u88c5\u7684 ":21,"\u4f7f\u7528 ":16,"\u4f8b ":14,"\u521b\u5efa\u53ef\u5f15\u5bfc ":11,"\u521b\u5efa\u65b0\u7684 ":18,"\u5229\u7528 ":[14,18],"\u5378\u8f7d ":18,"\u542f\u7528 ":[16,19,20],"\u5728 ":[11,15,18],"\u5728\u865a\u62df\u673a\u4e0a\u68c0\u67e5 ":46,"\u5b89\u88c5 ":[17,18,19,20,21],"\u5b89\u88c5\u7a0b\u5e8f ":[18,19,21],"\u5b89\u88c5\u7a0b\u5e8f\u5b89\u88c5 ":18,"\u5c06 ":[11,19,21,22],"\u5f15\u5bfc ":[21,22],"\u6302\u8f7d\u5b89\u88c5 ":18,"\u6302\u8f7d\u9884\u914d\u7f6e\u7684 ":20,"\u6620\u50cf\u4e0a\u4f20\u81f3 ":22,"\u6620\u50cf\u70e7\u5f55\u81f3 ":11,"\u6620\u50cf\u8f6c\u6362\u4e3a ":22,"\u68c0\u67e5\u5904\u7406\u5668\u548c ":12,"\u68c0\u67e5\u7528\u6765\u6784\u5efa\u6620\u50cf\u7684 ":46,"\u6dfb\u52a0 ":17,"\u7279\u5b9a\u4e8e\u5e73\u53f0\u7684 ":20,"\u72ec\u7acb\u4e8e\u5e73\u53f0\u7684 ":20,"\u7528\u4f5c ":[17,19,20,21],"\u786e\u8ba4 ":20,"\u865a\u62df\u673a\u4e0a\u5b89\u88c5 ":18,"\u8868 ":20,"\u89e3\u538b\u7f29 ":20,"\u8fd0\u884c ":17,"\u8fd0\u884c\u9884\u914d\u7f6e\u7684 ":20,"\u901a\u8fc7 ":17,"a ":[0,4,22,24,28,32,34,35,36,38,42,43,44,47,49,52,53,56,58,60,73,74,76,77,82,85,87,88,90,92],"a)":53,"a:":53,"about ":78,"accept ":56,"active ":67,"add ":[0,10,35,36,43,52,59],"add-":80,"additional ":[30,62,74,83],"adopt ":32,"advanced ":[9,10],"after ":49,"agile ":32,"all ":47,"already ":[35,36],"also ":25,"alternative ":83,"amazon ":72,"an ":[24,27,32,35,36,49,56,74],"analytics ":57,"and ":[0,28,29,31,32,34,35,36,40,42,43,44,47,53,56,58,59,66,67,72,73,74,75,76,80,83,84,87,88,90,92],"another ":0,"apache ":[77,87],"apache*":87,"app ":56,"appendix ":53,"application ":53,"applications ":75,"architect ":37,"are ":0,"as ":[22,79],"assign ":[9,10,38],"at ":[32,35,36],"attack ":29,"authentication ":56,"automated ":29,"automatic ":[10,31],"automatically ":56,"automation ":80,"autospec ":2,"available ":[0,63],"available?":0,"avoid ":67,"aws ":59,"azure ":73,"b)":53,"back-":60,"backup ":32,"bare ":[10,25,32,76],"base ":52,"based ":[52,92],"basic ":[49,72,74,90],"be ":[34,67],"before ":[75,92],"best ":81,"between ":53,"binary ":47,"bind ":53,"blocks ":66,"boot ":[10,34,44],"broken ":44,"build ":[24,34,35,36,52,53],"build,":[35,36],"builder.":28,"building ":57,"bulk ":39,"bulleted ":66,"bundle ":[9,10,28,31,62,63],"bundles ":52,"c-":40,"can ":0,"cautions,":66,"change ":[34,64,90],"changes ":34,"check ":[35,36],"checking ":[9,48],"choose ":10,"chrome*":0,"clear ":[0,9,10,11,15,17,18,19,20,21,22,24,33,34,37,42,52,56,61,69,70,72,73,74,75,76,79,81,82,84,85,86,90,91],"cli ":[73,84],"client ":[56,60],"clock ":40,"clone ":34,"cloud ":[15,32,80],"cloud-":32,"clr-":14,"cluster ":[77,87],"code ":[60,66],"collect ":60,"combine ":55,"command ":[10,47,75],"commas ":67,"compatible ":[25,68],"compiled ":29,"complete ":92,"components ":56,"compute ":15,"config.":46,"configuration ":[10,32,56,60,79,80,90],"configure ":[10,28,35,36,47,56,59,76,77,80,83,87],"connect ":[56,72,86],"connection ":56,"considerations ":32,"container ":[28,52],"containers ":79,"containers*":[31,74,78,79],"containers-":74,"content ":[37,51,67],"contribute ":65,"contribution ":65,"control ":[2,24,81],"convert ":59,"copy ":[0,34],"core ":41,"correct ":31,"cpu ":40,"create ":[4,24,28,32,43,59,60,72,73,92],"creating ":74,"cri ":80,"cri-":80,"current ":[43,47],"custom ":52,"customization ":80,"customize ":34,"customized ":79,"cve ":29,"cycle ":37,"dars ":57,"data ":[57,60,90],"deallocate ":73,"debug ":26,"debugging ":83,"decompress ":42,"deep ":[58,59],"default ":[0,9,10,30,64,90],"default":[49,79],"defined ":24,"delete ":10,"delta ":31,"deploy ":[28,32,59],"desktop ":[9,44,56,88],"destructive ":[9,10],"detect ":76,"developer ":41,"development ":[24,34],"did ":0,"directly ":24,"disable ":[31,60,83],"disk ":[9,10],"display ":17,"distribution ":32,"distro?":0,"distros ":0,"distros?":0,"dkms.":36,"dnf ":47,"do ":0,"docker ":[28,52,57,74,84],"docker)":88,"docker*":74,"documentation ":[65,66],"does ":0,"download ":[10,83,92],"download,":42,"dpdk ":53,"drive ":85,"driver ":0,"drivers ":[53,83],"edge ":59,"effective ":29,"efi ":12,"enable ":[28,31,43,59,60,64,79,85,93],"encrypt ":56,"encryption ":10,"end ":60,"ending ":67,"environment ":[24,53,59],"establish ":56,"esxi ":[21,22],"etc ":0,"example ":[24,28,31,53,76,82,84],"existing ":[24,36],"ffmpeg ":0,"fft ":76,"file ":[24,31,85],"file-":30,"files ":[0,2,24],"find ":31,"finish ":[9,10],"firewall?":0,"fix ":44,"flatpak ":75,"flatpak*":75,"fmv ":76,"for ":[10,28,41,47,53,83,93],"format ":28,"frequency ":40,"from ":[0,9,44,47,56,72,74,86],"fstab?":0,"fullfiles,":31,"function ":76,"function":59,"gcp ":15,"gdm)":17,"generate ":[24,76],"git ":88,"gnome ":[17,75],"google ":15,"google*":0,"grammar ":67,"greengrass ":59,"greengrass*":59,"guest ":[18,22],"hadoop ":77,"hadoop*":77,"host ":[56,75,76],"how ":[0,2,23,24,28,31,49,60,65],"hugepages ":53,"hyper-":16,"i ":0,"identify ":38,"idle ":40,"if ":[35,36],"image ":[22,27,32,42,44,51,56,69,74],"improvements?":0,"in ":[24,29,47,52,67,85,88,93],"in-":66,"included ":34,"independent ":[42,69],"info ":47,"information ":[47,78],"inline ":66,"install ":[0,9,10,31,34,35,36,43,44,53,54,56,59,73,74,75,76,77,78,80,83,84,87,90],"install,":[35,36],"installation ":[9,10,83],"installed ":0,"installer ":14,"installing ":75,"instances ":32,"instrument ":60,"integration ":74,"integrity ":42,"interfaces ":55,"into ":[56,73],"ip ":38,"is ":[0,35,36,38],"is-":60,"iso ":21,"ister.":27,"it ":[23,24,28,31,49],"its ":43,"jupyter ":[58,82],"kata ":[31,74,78,79],"kata-":80,"kernel ":[9,10,34,35,36,53],"ksonnet*":58,"kubeflow ":58,"kubernetes ":[58,80,81],"kubernetes*":80,"kvm ":17,"l3fwd ":53,"lambda ":59,"lamp ":[90,92],"latest ":[10,29],"launch ":[9,10,56,72,75],"learning ":[58,59,82],"level ":30,"libreoffice ":75,"libtelemetry ":60,"life-":37,"like ":0,"line ":66,"link ":67,"linux ":[0,9,10,11,15,18,19,20,21,22,24,32,34,40,42,56,69,70,72,73,76,81,84,85,93],"linux*":[9,10,11,15,17,18,19,20,21,22,29,37,42,52,61,69,72,73,74,75,82,84,86,90,91],"list ":47,"lists ":66,"live ":[9,10,44],"live-":18,"load ":[35,36],"local ":[28,59],"locate ":59,"locate,":72,"location ":86,"log ":73,"logging ":32,"logins ":56,"long ":67,"loop ":76,"machine ":[60,82,85],"macos*":[11,42],"main ":10,"maintain ":28,"make ":[0,67],"manage ":[9,10,52,90,92],"manager ":17,"managing ":38,"manual ":10,"manually ":[28,56,79],"map ":85,"mapreduce ":77,"master ":87,"meaningful ":32,"menu ":67,"metal ":[10,25],"method ":56,"microsoft ":73,"migrate ":79,"minimized ":29,"minimum ":[9,10],"misc.":56,"mix ":28,"mix)":32,"model ":59,"modify ":[9,10,28,34,45],"module ":[35,36],"modules ":[35,36],"monitor ":49,"more ":78,"mount ":44,"mozilla ":93,"ms ":73,"multi-":[56,58,76],"multiple ":55,"n ":49,"native ":[32,80],"need?":0,"network ":[9,10,54,55,80],"new ":[10,24,43,66],"next ":[3,6,43,73,80,84,90],"nginx ":28,"nics ":53,"node ":[58,77],"notes,":66,"noun ":67,"nouveau ":83,"numbered ":66,"nvidia ":83,"nvidia*":83,"o ":80,"obtain ":36,"of ":[34,37,42,58,67,69,83],"of-":[35,36],"often ":0,"on ":[0,10,24,56,59,73,74,75,76,81,82,84,90,91,92],"only ":[47,56],"openssh-":64,"optional)":[9,28,74,80],"optional:":[35,36,56],"options ":[35,36],"or ":[28,32,60],"orchestration ":32,"os ":[0,9,10,11,15,18,19,20,21,22,24,29,34,42,43,49,52,56,59,69,72,73,76,84,85,86],"os?":0,"other ":[0,41],"out-":[35,36],"output ":59,"over ":[54,88],"overriding ":[30,48],"overuse ":67,"own ":32,"p-":40,"package ":[0,47,59,80],"packaged ":24,"packets ":53,"packs,":31,"page ":66,"partition ":[9,10],"partition,":44,"pass-":53,"patch ":76,"per-":48,"performance ":40,"phpmyadmin ":90,"physical ":53,"pick ":32,"pktgen ":53,"platform ":53,"platform*":15,"platform-":[42,69],"platforms ":53,"player ":[19,20],"pod ":80,"power ":40,"practices ":81,"pre-":24,"preconfigured ":22,"preliminary ":9,"present ":67,"product ":67,"program ":38,"programs ":88,"project ":76,"provide ":24,"proxy ":[9,28,80],"pull ":[28,34],"pulling ":74,"py ":27,"pytorch ":58,"qemu-":17,"query ":47,"quick ":31,"quotation ":67,"realvnc ":56,"recommended ":10,"record-":60,"records ":60,"recreate ":27,"redis ":84,"redis-":84,"reference ":[57,58],"related ":[2,4,24,27,28,31,34,35,36,58,74,80,82,93],"release ":[37,47],"remote-":56,"remove ":52,"request ":[34,35,36],"required ":[9,10,59],"required?":0,"resource ":[48,73],"resources ":41,"restart ":49,"results ":58,"root ":[10,44,64],"rpm ":24,"rpms ":[0,47],"rules ":93,"run ":[22,53,58,59,73,74,75,77,78,79,80,82,84,87],"run-":60,"running ":[58,74],"safe ":[9,10],"samba*":85,"sample ":59,"save ":10,"saving ":[40,60],"scaling ":40,"scanning ":29,"secure ":29,"security ":[29,90],"see ":0,"select ":9,"select,":72,"send ":53,"serial ":67,"server ":[10,18,28,56,60,87,90],"server-":[56,90],"service ":[48,56,88],"services ":49,"session ":56,"set ":[28,34,45,50,53,56,60,77,82,85,87,90,92],"setting ":88,"setup ":[24,80],"shared ":86,"sharing ":85,"shells ":88,"show ":47,"simple ":[28,67,85],"single ":[58,77],"skip ":10,"software ":[0,5,9,30,43,67,83],"source ":[34,47],"space ":66,"spark ":87,"spark*":87,"spec ":24,"specific ":[42,47,69],"specified ":47,"specify ":[35,36],"ssh ":[17,56,77],"stack ":[57,58],"standalone ":87,"start ":[56,84,87],"start/":60,"stateless ":32,"states ":40,"states)":40,"static ":[38,60],"stop ":[72,73,79],"stop/":60,"strong ":67,"structure ":66,"submit ":[35,36],"successful ":92,"supported ":59,"swap ":10,"swarm ":74,"swupd ":[10,41,81],"swupd:":5,"system ":[9,10,29,30,31,49,56,87,88],"system-":48,"systemd ":56,"systemd-":38,"table ":[2,9,10,41,42,56,59,68,69],"target ":[10,44],"telem-":60,"telemetry ":[0,60],"tensorflow ":58,"tensorflow*":82,"terminate ":56,"test ":[10,24],"text ":66,"that ":0,"the ":[0,9,10,29,34,35,36,37,38,42,43,47,50,52,53,54,56,57,59,60,67,72,73,74,75,76,77,81,82,83,84,87,90],"thermal ":40,"this ":58,"through ":[53,56],"time ":[9,60],"to ":[2,10,24,28,35,36,43,44,53,56,60,65,72,75,79,81,86,90],"tooling ":34,"traffic ":56,"tree ":[35,36],"try ":84,"tunnel ":56,"turbo ":40,"types ":[42,69],"u ":11,"u2f ":93,"udev ":93,"uefi ":[19,20],"under ":0,"uninstalling ":83,"up ":[28,34,53,56,60,77,82,85,87,88,90,92],"update ":[5,32,43,51,72,81],"update?":0,"updated?":0,"updater ":9,"updates ":28,"updating ":83,"upstream ":[27,28,47],"usage ":[32,47],"use ":[0,53,58,67,75,76,80,81,84,90],"useful ":62,"user ":[30,43,48,56,59],"using ":[38,56,57,73,75,76,85,87],"usually ":0,"v*":16,"validate ":51,"variables:":59,"vectorization ":76,"verified ":29,"verify ":[31,42],"verify,":[42,44],"version ":[47,58,67,76],"versioning ":32,"via ":[56,65],"view ":45,"viewer ":56,"virtual ":[24,32,53,73],"virtualbox ":18,"virtualbox*":18,"vm ":[25,73],"vmware ":[19,20,21,22],"vmware*":[19,20,21,22],"vnc ":56,"vnc-":56,"web ":[28,72,90,92],"web-":[90,92],"what ":0,"wheel ":43,"where ":0,"which ":38,"white ":66,"why ":0,"wide ":48,"windows ":86,"windows*":[11,42,85,86],"with ":[10,24,25,29,32,34,36,54,55,56,60,74,77,85,86,92],"without ":36,"wordcount ":[77,87],"wordpress ":92,"wordpress*":[91,92],"words ":67,"worker ":[81,87],"workstation ":[19,20,41],"writing ":67,"x11-":64,"you ":[0,75,92],"your ":[10,32,45,56,60,72,73,75,77,80],"yubikey ":93,"zfs*":0,about:1,account:[59,73],activ:60,addit:18,address:38,alias:[35,36],allow:49,ami:72,apach:90,api:60,app:56,applic:32,architectur:[6,60],area:30,autoproxi:23,autospec:[2,24],avail:[0,35,36],background:26,begin:[75,92],benchmark:58,bond:55,boost:40,boot:[35,36],brief:67,builder:27,bundl:[3,5,28,43,52,59,63,74,84,90],candid:76,capit:67,client:56,cluster:[74,80,81],code:[34,82],codebas:29,colon:67,comma:67,command:[62,84],compat:58,concept:[41,70],conclus:49,conf:[28,36],configur:[9,10,28,30,34,39,54,59,60,74],consumpt:59,contain:[32,52,78,79],contract:67,contribut:65,daemon:[77,87],databas:90,depend:2,descript:[23,24,27,28,31,35,36,37,59],design:29,desktop:[9,86],develop:[34,41],devic:59,directori:[90,92],disallow:49,dkm:[36,83],dnf:47,docker:[28,78],driver:[40,83],effici:5,encrypt:[9,10],engin:15,english:67,environ:34,exampl:[24,27,28,31,35,36,47,49,60,66,77,87],faq:0,featur:58,fftw:76,file:[2,24,47,79],firefox:93,fix:44,format:66,forward:64,framework:34,friendli:67,gdm:56,gen:60,gener:[0,76],github:65,governor:40,group:[43,59,73],gui:92,guid:[33,58,67],guidelin:65,hadoop:77,harden:90,hardwar:68,head:[66,67],host:56,hostnam:[9,10,45],hub:74,id:60,imag:[9,10,27,42,44,52,57,58,66,69,75,84],imper:67,implement:[26,37],info:28,inform:[30,62],infrastructur:32,ing:67,instal:[9,10,44],instanc:[72,79],instruct:66,integr:5,interfac:[10,38],ipx:54,iso:[18,19,21],json:46,kei:77,kernel:[25,33,34],keyboard:[9,10],kubectl:58,kubeflow:58,kubernet:80,kvm:17,languag:10,length:66,libreoffic:75,limit:48,line:[10,75],link:66,linux:[33,83],list:[63,66],local:60,localhost:56,login:[64,92],lsblk:46,machin:[24,32,53,73],mainten:33,manag:[32,40],manifest:31,manual:35,mariadb:90,mark:67,markup:66,mechan:40,media:[9,10],menu:10,metal:[32,76],method:56,methodolog:32,mirror:10,mismatch:31,mix:[4,28],mixer:[4,28],model:59,modul:[35,36],name:67,nautilu:86,navig:[9,10,66],network:[33,58],networkd:38,networkmanag:38,node:81,nomin:67,notebook:[58,82],notic:66,on:80,onli:25,openvino:59,optim:59,option:[9,10,29,49,60],organ:66,os:[17,18,21,22,37,73,74,75,81,82,84,90,91],overview:[32,34,35,36,39,40,44,45,47,49,51,53,54,58,59,60],pack:31,packag:[0,24,34],page:66,parallel:67,paramet:34,partit:10,passphras:10,patch:76,path:83,perform:40,php:90,phpmyadmin:90,phrase:67,plane:81,platform:[53,59],port:64,prerequisit:[9,24,28,31,35,36,37,39,44,47,52,53,54,58,60,64,72,74,77,78,80,81,82,83,84,85,86,87,88,93],profil:41,project:61,provis:39,proxi:[10,88],punctuat:67,qualiti:56,record:60,refer:[24,28,31,59,60,65,70],releas:[47,57],remedi:29,repositori:47,requir:[9,10],reset:30,resourc:[59,73,83],restart:60,rpm:24,runtim:80,scale:[32,40],scannabl:67,scenario:60,schema:[9,10],script:56,search:[31,41],secur:29,select:[9,10],separ:30,server:[10,64,84,92],servic:72,session:[56,88],set:10,setup:[28,41,58],sftp:64,share:85,signatur:51,softwar:[24,29,75],sourc:[24,34,36],space:43,spark:87,ssh:88,stack:[33,57,58],stateless:30,step:[3,6,9,42,43,73,80,84,90],strategi:32,structur:66,support:93,surfac:29,swupd:31,system:[10,26,32,44,56,75],target:28,telemetr:[6,60],telemetri:[9,10,32,49,60],tens:67,termin:88,text:67,tfjob:58,time:50,timezon:10,toolkit:59,topic:[2,4,24,27,28,31,34,35,36,58,74,80,82,93],train:1,troubleshoot:[10,23,78,80],trust:29,tunnel:56,tutori:89,type:[42,69],uninstal:58,up:28,updat:[5,10,29,31,49],us:60,usag:26,user:[9,10,43],valid:51,verb:67,version:[5,28,31,34,43],vm:25,vnc:56,voic:67,warn:66,wget:88,window:85,word:67,work:[2,23,24,28,31,49],workflow:37,workstat:41,yubikei:93,zone:9}}) \ No newline at end of file diff --git a/zh_CN/tutorials/aws-web/aws-web.html b/zh_CN/tutorials/aws-web/aws-web.html new file mode 100644 index 00000000..97495a97 --- /dev/null +++ b/zh_CN/tutorials/aws-web/aws-web.html @@ -0,0 +1,1236 @@ + + + + + + + + + + + Create and launch Clear Linux* OS from Amazon Web Services — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Create and launch Clear Linux* OS from Amazon Web Services

+

This tutorial walks you through creating and launching a Clear Linux OS +AMI instance from the +AWS console and complete the following tasks:

+
    +
  1. Locate and select the Clear Linux OS OS Basic AMI in the AWS Marketplace.
  2. +
  3. Create a new public and private key pair to allow you to connect to your +Clear Linux OS instance securely.
  4. +
  5. Launch the new Clear Linux OS instance and connect to it.
  6. +
  7. Update your instance of Clear Linux OS using the swupd command.
  8. +
  9. Stop the Clear Linux OS instance.
  10. +
+
+

Prerequisites

+

This tutorial assumes the following statements are true:

+
    +
  • You are using a linux-based system to access AWS and can run SSH +to access the remote Clear Linux OS AWS image.
  • +
  • Your browser puts downloaded files in the $HOME/Downloads +directory.
  • +
  • You have already set up an AWS user account and logged into the AWS +console.
  • +
+
+

注解

+

This tutorial uses a Clear Linux OS AMI t2.micro instance that is eligible for the +AWS free tier. To learn more about AWS and setting up an account, visit the +AWS website at http://aws.amazon.com.

+
+
+
+

Locate, select, and launch the Clear Linux OS Basic AMI

+
    +
  1. Start from your main AWS services console menu in your browser and select the +EC2 text as shown in figure 1:

    +
    +AWS Console +

    Figure 1: AWS Console

    +
    +

    This selection brings up your EC2 Dashboard menu.

    +
  2. +
  3. To create a new Clear Linux OS instance from the EC2 Dashboard menu, +select the Launch Instance button as shown in figure 2:

    +
    +EC2 Dashboard +

    Figure 2: EC2 Dashboard

    +
    +

    This selection takes you to the +Step 1: Choose an Amazon Machine Image (AMI) menu.

    +
  4. +
  5. To find the Clear Linux OS Basic AMI in the +Step 1: Choose an Amazon Machine Image (AMI) menu, do the +following:

    +
      +
    1. In the lefthand navigation window, select the +AWS Marketplace menu item to bring up the search bar to +Search AWS Marketplace Products.

      +
    2. +
    3. In the search bar, type “clear linux os” and hit the Enter key to +search for and locate the Clear Linux OS Basic AMI.

      +
    4. +
    5. Select the Clear Linux OS Basic AMI by clicking on the +Select button as shown in figure 3:

      +
      +Step 1: Choose AMI +

      Figure 3: Step 1: Choose AMI

      +
      +
    6. +
    7. A pop-up dialog box appears showing you more information about the +Clear Linux OS Basic AMI along with the pricing details for running +Clear Linux OS on different platform configurations as shown in figure 4. Select +the Continue button.

      +
      +Clear Linux OS Basic +

      Figure 4: Clear Linux OS Basic

      +
      +
    8. +
    +
  6. +
  7. The Choose Instance Type menu appears as shown in figure 5.

    +
    +Choose an Instance Type +

    Figure 5: Choose an Instance Type

    +
    +

    Select the t2.micro type by clicking the box on the left side +of the instance and then select the Review and Launch button to +move to the Step 7: Review the Instance Launch menu.

    +
    +

    注解

    +

    You can configure the instance details, add additional storage, add +tags, and configure the security group before selecting the +Review and Launch button if you want to further customize +this Clear Linux OS instance.

    +
    +
  8. +
  9. The Step 7: Review the Instance Launch menu, shown in figure 6, +allows you to +Cancel the process, return to the Previous screen +to change the configuration or Launch the instance defined.

    +
    +Step 7: Review the Instance Launch +

    Figure 6: Step 7: Review the Instance Launch

    +
    +
      +
    1. Select the Launch button. A dialog box appears, as shown in +figure 7, asking you to +Select an existing key pair or create a new pair.

      +
      +Select an existing key pair or create a new pair +

      Figure 7: Select an existing key pair or create a new pair

      +
      +
        +
      1. Select the Create a new key pair option.

        +
      2. +
      3. For the Key pair name field, enter AWSClearTestKey.

        +
      4. +
      5. Select the Download Key Pair button to download the +AWSClearTestKey.pem to your browser’s defined +Downloads directory.

        +
      6. +
      7. When the file finishes downloading, select the +Launch Instances button to proceed to the +Launch Status menu shown in figure 8.

        +
        +Launch Status +

        Figure 8: Launch Status

        +
        +
      8. +
      +
    2. +
    3. Once the Launch Status page changes to what is shown in +figure 9, select the View Instances button to view your +Instances dashboard.

      +
      +View Instance +

      Figure 9: View Instance

      +
      +
    4. +
    +
  10. +
+
+
+

Connect to your Clear Linux OS Basic instance

+

Your Instances Dashboard is shown in figure 10 with the new Clear Linux OS +OS basic instance already selected and in the running state. If there are +other instances available, they are also listed but not selected.

+
+Instance Dashboard +

Figure 10: Instance Dashboard

+
+
    +
  1. To connect to your running instance, click the Connect button +located at the top of your dashboard. AWS brings up the pop-up dialog +box shown in figure 11 describing how to connect to your running instance.
  2. +
+
+Connect to Your Instance +

Figure 11: Connect to Your Instance

+
+
    +
  1. Open a terminal on your system. You should be in your $HOME +directory.

    +
  2. +
  3. Copy the previously downloaded keyfile from the Downloads +directory to the current directory.

    +
    cp Downloads/AWSClearTestKey.pem .
    +
    +
    +
  4. +
  5. Change the attributes of the AWSClearTestKey.pem using the +chmod command as instructed in the dialog box shown in figure +11.

    +
    chmod 400 AWSClearTestKey.pem
    +
    +
    +
  6. +
  7. Copy the text highlighted in the Example: section that is +shown in figure 11. Paste the copied text into your +terminal, change the text before the @ sign to the username clear, and +press the Enter key to execute the command.

    +
    ssh -i "AWSClearTestKey.pem" clear@ec2-34-209-39-184.us-west-2.compute.amazonaws.com
    +
    +
    +
  8. +
  9. A message appears on the terminal stating the authenticity of the host can’t +be established and prompts you with the message:

    +
    The authenticity of host 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com (34.209.39.184)' can't be established.
    +ECDSA key fingerprint is SHA256:LrziT5Ar66iBTfia8qmiIsrfBUm/UGam76U8bDR6yJc.
    +Are you sure you want to continue connecting (yes/no)?
    +
    +
    +
  10. +
  11. Type yes and hit the Enter key. Another warning is printed to the +terminal and you are now at the command prompt of your new Clear Linux OS instance.

    +
    Warning: Permanently added 'ec2-34-209-39-184.us-west-2.compute.amazonaws.com,34.209.39.184' (ECDSA) to the list of known hosts.
    +clear@clr-96a8565d0ca54b0c80364a1e5e7b0f88 ~ $
    +
    +
    +
  12. +
+
+
+

Update the Clear Linux OS instance

+

Run the sudo swupd update command to update the operating +system as shown in figure 12:

+
+sudo swupd update +

Figure 12: sudo swupd update

+
+

In this example we updated from version 18940 to 19100.

+
+
+

Stop the Clear Linux OS instance

+

When you are finished using your AWS Clear Linux OS instance you need to stop it using +the Instances dashboard to stop accruing charges. Complete the +following steps from the Instances dashboard to stop your AWS Clear Linux OS +instance from running.

+
    +
  1. Select the Actions button to bring up a pull-down menu.

    +
  2. +
  3. Select the Instance State menu item to expand the options.

    +
  4. +
  5. Select Stop menu item to shut down the running instance.

    +

    Figure 13 illustrates these steps.

    +
    +Stop Instance +

    Figure 13: Stop Instance

    +
    +
  6. +
  7. A pop-up dialog box appears warning you that any ephemeral storage of +your instance will be lost. Select the Yes, Stop button to stop +your Clear Linux OS instance.

    +
  8. +
+
+Stop Instances +

Figure 14: Stop Instances

+
+

Congratulations! You are up and running with Clear Linux OS on AWS. To see what you +can do with your Clear Linux OS instance, visit our tutorials +section for examples on using your Clear Linux OS system.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/azure.html b/zh_CN/tutorials/azure.html new file mode 100644 index 00000000..7cd0f470 --- /dev/null +++ b/zh_CN/tutorials/azure.html @@ -0,0 +1,1447 @@ + + + + + + + + + + + Run Clear Linux* OS using Microsoft Azure CLI 2.0 — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Clear Linux* OS using Microsoft Azure CLI 2.0

+

Clear Linux* OS is available for you to use in the Microsoft* Azure* marketplace and +is offered with three different images, also known as a +SKU.

+
    +
  • Clear Linux OS Basic - This SKU consists of a bare-bones system which can be used as a +starting point for those wanting to explore and build out a system with +additional software bundles of their choosing.
  • +
  • Clear Linux OS Containers - This SKU comes with the containers-basic software bundle +already installed.
  • +
  • Clear Linux OS Machine-learning - This SKU comes pre-loaded with popular open source +tools for developing machine learning applications.
  • +
+

You can access these images directly from your MS Azure dashboard through the +Azure portal or by using the MS Azure CLI +2.0. If you do not already have an account set up with MS Azure, you can sign +up for a MS Azure free account to access the Clear Linux OS +VM images.

+

The Azure CLI offers the ability to create and manage resources in MS Azure +from the command line. In this tutorial you learn to:

+
    +
  1. Install the latest MS Azure CLI on your Clear Linux OS machine.
  2. +
  3. Log into MS Azure using the CLI 2.0 interface.
  4. +
  5. Create a MS Azure resource group.
  6. +
  7. Locate the Clear Linux OS images.
  8. +
  9. Create and log into the Clear Linux OS virtual machine.
  10. +
  11. Stop and deallocate the Clear Linux OS VM and resources.
  12. +
+

To use the MS Azure CLI 2.0 on your Clear Linux OS system, your system must have the +following packages installed:

+
    +
  • Python 2.7 or later
  • +
  • libffi
  • +
  • OpenSSL 1.0.2
  • +
+

You can check to see what versions you have installed on your system by +running the individual commands as follows:

+
python --version
+
+
+
python 2.7.12
+
+
+
openssl version
+
+
+
OpenSSL 1.0.2n 7 Dec 2017
+
+
+
ls -l /usr/lib64/libffi*
+
+
+
lrwxrwxrwx 1 root root    15 Jan 12  2017 /usr/lib64/libffi.so.6 -> libffi.so.6.0.4
+-rwxr-xr-x 1 root root 38792 Jan 12  2017 /usr/lib64/libffi.so.6.0.4
+
+
+

If you do not have these packages installed on your Clear Linux OS system, install the +sysadmin-basic software bundle using the swupd command:

+
sudo swupd bundle-add sysadmin-basic
+
+
+
+

注解

+

These instructions are for installing the MS Azure CLI 2.0 tools on a Clear Linux OS +system. If you are installing the CLI on another platform, follow the +instructions in the MS Azure Install Azure CLI tutorial for your +specific operating system.

+
+
+

Install MS Azure CLI 2.0 on Clear Linux OS

+
    +
  1. To install the MS Azure CLI 2.0 on Clear Linux OS, use the curl command as +follows:

    +
    curl -L https://aka.ms/InstallAzureCli | bash
    +
    +
    +

    If you get an error message from curl related to the -L +parameter or an error message is generated that includes the text “Object +Moved”, use the full URL instead of the aka.ms redirect address:

    +
    curl https://azurecliprod.blob.core.windows.net/install | bash
    +
    +
    +
  2. +
  3. The installation script begins and prompts you several times during +execution for information.

    +
    +

    注解

    +

    The console output from the script displays your username instead of the +[user] variable shown on this tutorial.

    +
    +
    ===> In what directory would you like to place the install? (leave blank to use '/home/[user]/lib/azure-cli'):
    +
    +
    +

    Press the Enter key to accept the default or you can chose another +directory to install the MS Azure CLI 2.0 tools into.

    +
    ===> In what directory would you like to place the 'az' executable? (leave blank to use '/home/[user]/bin'):
    +
    +
    +

    Press the Enter key to accept the default or you can chose another +directory to install the az executable in.

    +
  4. +
  5. The installation downloads and builds all required tools and when complete +prompts you with:

    +
    ===> Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): Y
    +
    +
    +

    Type Y and press the Enter key to allow this modification.

    +
    ===> Enter a path to an rc file to update (leave blank to use '/home/[user]/.bashrc'):
    +
    +
    +

    Press the Enter key to accept the default or enter the pathname to +your .bashrc file. The installation completes with the final output +shown below:

    +
    -- Backed up '/home/[user].bashrc' to '/home/[user]/.bashrc.backup'
    +-- Tab completion set up complete.
    +-- If tab completion is not activated, verify that '/home/[user]/.bashrc' is sourced by your shell.
    +--
    +-- ** Run `exec -l $SHELL` to restart your shell. **
    +--
    +-- Installation successful.
    +-- Run the CLI with /home/[user]/bin/az --help
    +
    +
    +
  6. +
  7. The installation program finishes and you must restart your shell for +the changes to take effect. When the installation is successful, run the +following command to restart your shell.

    +
    exec -l $SHELL
    +
    +
    +
  8. +
+

With the MS Azure CLI 2.0 executable successfully built and installed, run +the az command.

+
az
+
+
+

The output from the az command is shown below:

+
     /\
+    /  \    _____   _ _ __ ___
+   / /\ \  |_  / | | | \'__/ _ \
+  / ____ \  / /| |_| | | |  __/
+ /_/    \_\/___|\__,_|_|  \___|
+
+
+Welcome to the cool new Azure CLI!
+
+Here are the base commands:
+
+    account          : Manage Azure subscription information.
+    acr              : Manage Azure Container Registries.
+    acs              : Manage Azure Container Services.
+    ad               : Synchronize on-premises directories and manage Azure Active Directory
+                       resources.
+    advisor          : (PREVIEW) Manage Azure Advisor.
+    aks              : Manage Kubernetes clusters.
+    appservice       : Manage App Service plans.
+    backup           : Commands to manage Azure Backups.
+    batch            : Manage Azure Batch.
+    batchai          : Batch AI.
+    billing          : Manage Azure Billing.
+    cdn              : Manage Azure Content Delivery Networks (CDNs).
+    cloud            : Manage registered Azure clouds.
+    cognitiveservices: Manage Azure Cognitive Services accounts.
+    configure        : Display and manage the Azure CLI 2.0 configuration. This command is
+                       interactive.
+    consumption      : Manage consumption of Azure resources.
+    container        : (PREVIEW) Manage Azure Container Instances.
+    cosmosdb         : Manage Azure Cosmos DB database accounts.
+    disk             : Manage Azure Managed Disks.
+    dla              : (PREVIEW) Manage Data Lake Analytics accounts, jobs, and catalogs.
+    dls              : (PREVIEW) Manage Data Lake Store accounts and filesystems.
+    eventgrid        : Manage Azure Event Grid topics and subscriptions.
+    extension        : Manage and update CLI extensions.
+    feature          : Manage resource provider features.
+    feedback         : Loving or hating the CLI?  Let us know!
+    find             : Find Azure CLI commands.
+    functionapp      : Manage function apps.
+    group            : Manage resource groups and template deployments.
+    image            : Manage custom virtual machine images.
+    interactive      : Start interactive mode.
+    iot              : (PREVIEW) Manage Internet of Things (IoT) assets.
+    keyvault         : Safeguard and maintain control of keys, secrets, and certificates.
+    lab              : Manage Azure DevTest Labs.
+    lock             : Manage Azure locks.
+    login            : Log in to Azure.
+    logout           : Log out to remove access to Azure subscriptions.
+    managedapp       : Manage template solutions provided and maintained by Independent Software
+                       Vendors (ISVs).
+    monitor          : Manage the Azure Monitor Service.
+    mysql            : Manage Azure Database for MySQL servers.
+    network          : Manage Azure Network resources.
+    policy           : Manage resource policies.
+    postgres         : Manage Azure Database for PostgreSQL servers.
+    provider         : Manage resource providers.
+    redis            : Access to a secure, dedicated Redis cache for your Azure applications.
+    reservations     : Manage Azure Reservations.
+    resource         : Manage Azure resources.
+    role             : Manage user roles for access control with Azure Active Directory and service
+                       principals.
+    sf               : Manage and administer Azure Service Fabric clusters.
+    snapshot         : Manage point-in-time copies of managed disks, native blobs, or other
+                       snapshots.
+    sql              : Manage Azure SQL Databases and Data Warehouses.
+    storage          : Manage Azure Cloud Storage resources.
+    tag              : Manage resource tags.
+    vm               : Provision Linux or Windows virtual machines.
+    vmss             : Manage groupings of virtual machines in an Azure Virtual Machine Scale Set
+                       (VMSS).
+    webapp           : Manage web apps.
+
+
+
+
+

Log into your Microsoft Azure account

+
    +
  1. With the az command properly installed and functional, login to +your MS Azure account using the az login command shown below:

    +
    az login
    +
    +
    +

    The output from this command is:

    +
    To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code BQ9MG442B to authenticate.
    +
    +
    +
  2. +
  3. Open your browser and enter the page https://aka.ms/devicelogin as shown +in figure 1:

    +
    +Microsoft Device Login +

    Figure 1: Microsoft Device Login

    +
    +
  4. +
  5. Enter the code BQ9MG442B to authenticate your device as shown in figure +2. The code BQ9MG442B is a random authentication code generated for each +session login and will be different each time you log into MS Azure using +the az login command.

    +
    +Microsoft Device Login - Azure CLI +

    Figure 2: Microsoft Device Login - Azure CLI

    +
    +
  6. +
  7. Once you enter the authentication code, the website changes to a screen to +enter your existing Microsoft Azure credentials.

    +
  8. +
  9. Log in with your existing MS Azure account credentials. Once complete, the +browser screen changes again as shown in figure 3. The screen shows you +have signed into the Microsoft Cross-platform Command Line Interface +application on your device and you can close the window.

    +
    +Microsoft Azure Cross-platform CLI +

    Figure 3: Microsoft Azure Cross-platform CLI

    +
    +
  10. +
+

The MS Azure CLI 2.0 interface is now active using your existing MS Azure +account credentials.

+
+
+

Create a MS Azure resource group

+

To learn more about MS Azure resource groups, visit the +Azure Resource Manager overview for an overview and detailed description +of resources within MS Azure.

+
    +
  1. To create our new resource group, run the az group create ... +command shown below to create a resource group named ClearResourceGroup +using the -n parameter and locate it in the westus region using the +-l parameter.

    +
    az group create -n ClearResourceGroup -l westus
    +
    +
    +
  2. +
  3. When the command has completed, the output from this command is similar to +the following:

    +
    {
    +  "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup",
    +  "location": "westus",
    +  "managedBy": null,
    +  "name": "ClearResourceGroup",
    +  "properties": {
    +    "provisioningState": "Succeeded"
    +  },
    +  "tags": null
    +}
    +
    +
    +
  4. +
+
+
+

Create and log into the Clear Linux OS virtual machine

+

For this tutorial, we are using the Clear Linux OS Basic SKU for our VM.

+
    +
  1. To locate the available Clear Linux OS Basic VM SKU images in the MS Azure +marketplace, run the az vm image ... command:

    +
    az vm image list --offer clear-linux --sku basic --all --output table
    +
    +
    +

    This command may take some time to finish. The output lists all available +Clear Linux OS Basic images available in the Microsoft Azure marketplace as shown +below:

    +
    Offer           Publisher            Sku               Urn                                                            Version
    +--------------  -------------------  ----------------  -------------------------------------------------------------  ---------
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:15780.0.0             15780.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:15960.0.0             15960.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16050.0.0             16050.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16150.0.0             16150.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16500.0.0             16500.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:16810.0.0             16810.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:18080.0.0             18080.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:18620.0.0             18620.0.0
    +clear-linux-os  clear-linux-project  basic             clear-linux-project:clear-linux-os:basic:18860.0.0             18860.0.0
    +
    +
    +
    +

    注解

    +

    The output list shows current offerings. New versions are added to the +MS Azure marketplace all the time. To reference the latest version of an +image, you can use the version label latest when specifying an image.

    +
    +
  2. +
  3. The information shown in the Urn column lists the +Publisher:Offer:Sku:Version for each image available and this is the +information we want to create the Clear Linux OS Basic VM. Since we are creating a +Clear Linux OS Basic VM, highlight the clear-linux-project:clear-linux-os:basic: +string and copy it to your clipboard. Use the label +latest instead of referencing a specific version.

    +
  4. +
  5. Create the new Clear Linux OS Basic VM. Run the az vm create ... +command using the URN :clear-linux-project:clear-linux-os:basic:latest +that we copied to the clipboard on the previous step.

    +
    az vm create --resource-group ClearResourceGroup --name ClearVM --image clear-linux-project:clear-linux-os:basic:latest --generate-ssh-keys
    +
    +
    +
    +

    注解

    +

    If you have already defined your public/private SSH key pair and they +are stored in your $HOME/.ssh directory, you do not need to +include the –generate-ssh-keys option.

    +
    +

    Your output from this command will look similar to this output, where +[user] is your user name:

    +
    SSH key files '/home/[user]/.ssh/id_rsa' and '/home/[user]/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage, back up your keys to a safe location.
    +
    +running...
    +
    +{
    +  "fqdns": "",
    +  "id": "/subscriptions/{unique-id}/resourceGroups/ClearResourceGroup/providers/Microsoft.Compute/virtualMachines/ClearVM",
    +  "location": "westus",
    +  "macAddress": "00-0D-3A-37-C7-59",
    +  "powerState": "VM running",
    +  "privateIpAddress": "10.0.0.4",
    +  "publicIpAddress": "13.91.4.245",
    +  "resourceGroup": "ClearResourceGroup",
    +  "zones": ""
    +}
    +
    +
    +

    Take note of the public IP address from the output.

    +
  6. +
  7. Login into the new Clear Linux OS Basic VM, run the ssh command with the +public IP address obtained from the previous step as shown:

    +
    ssh [user]@13.91.4.245
    +
    +
    +

    You may see the following message about the authenticity of the host. If +this appears, type yes to proceed connecting to your new Clear Linux OS VM.

    +
    The authenticity of host '13.91.4.245 (13.91.4.245)' can't be established.
    +RSA key fingerprint is SHA256:{unique-number}.
    +Are you sure you want to continue connecting (yes/no)? yes
    +Warning: Permanently added '13.91.4.245' (RSA) to the list of known hosts.
    +
    +[user]@ClearVM ~ $
    +
    +
    +

    You are now logged into your new Clear Linux OS VM as [user], where [user] is your +user name. To check which software bundles are included with +this VM image, run the sudo swupd bundle-list command inside the VM:

    +
    sudo swupd bundle-list
    +
    +
    +

    The output shown should be similar to:

    +
    swupd-client bundle list 3.14.1
    +   Copyright (C) 2012-2017 Intel Corporation
    +
    +bootloader
    +editors
    +kernel-hyperv
    +network-basic
    +openssh-server
    +os-cloudguest-azure
    +os-core
    +os-core-update
    +perl-basic
    +python-basic
    +python3-basic
    +storage-utils
    +sysadmin-basic
    +Current OS version: 19600
    +
    +
    +

    When you are finished using your new Clear Linux OS VM, type exit to close +the SSH terminal and logout.

    +
  8. +
+
+
+

Stop and deallocate the Clear Linux OS VM and resources

+

When you finish using your new Clear Linux OS instance, you must stop the VM and +deallocate the resources in your resource group. If you only stop a VM, the OS +image shuts down but the resources associated with it in your resource group +remain allocated and incurring charges. For instance, if you stop and then +later start the VM using the az vm start... without deallocating +the resources, the IP address is retained and you can access the VM using that +same IP address. To release the resources associated with the VM and stop +incurring charges for them, you must deallocate the resources as well.

+
    +
  1. At the command prompt, enter the az vm stop... command as +follows:

    +
    az vm stop --resource-group ClearResourceGroup --name ClearVM
    +
    +
    +

    This will stop the VM and then output text similar to:

    +
    {
    +  "endTime": "2017-12-13T23:04:02.346676+00:00",
    +  "error": null,
    +  "name": "{unique-name}",
    +  "startTime": "2017-12-13T23:03:59.018536+00:00",
    +  "status": "Succeeded"
    +}
    +
    +
    +
  2. +
  3. Once the VM stops, deallocate the VM resources to stop incurring +charges for the Clear Linux OS instance. Enter the following command:

    +
    az vm deallocate --resource-group ClearResourceGroup --name ClearVM
    +
    +
    +
  4. +
+

Congratulations!

+

You are up and running with Clear Linux OS on MS Azure using the Azure +CLI 2.0 command line tools.

+
+
+

Next steps

+

To see use cases you can fulfill with your Clear Linux OS instance, visit our +tutorials section.

+

For additional information visit the Clear Linux OS +Azure Partner Mini Case Study and the Azure Partner Datasheet.

+

To learn more about the MS Azure CLI 2.0 tool and options that are available, +visit the MS Azure documentation and tutorials website.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/docker/docker.html b/zh_CN/tutorials/docker/docker.html new file mode 100644 index 00000000..7f1c403a --- /dev/null +++ b/zh_CN/tutorials/docker/docker.html @@ -0,0 +1,1192 @@ + + + + + + + + + + + Run Docker* on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Docker* on Clear Linux* OS

+

Clear Linux* OS supports multiple containerization platforms, including a Docker +solution. Clear Linux OS has many unique features including a minimal default +installation, which makes it compelling to use as a host for container +workloads, management, and orchestration.

+

This tutorial covers:

+ +
+

注解

+

This tutorial focuses on the installaton of the Docker ecosystem. +If you want to use Clear Linux OS as a Docker container image, refer to the +official Clear Linux OS container image +published on Docker* Hub +and our guide to Build a custom Clear Linux* OS based Docker container image.

+
+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, follow +the bare metal installation instructions.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+

Additionally, you should have:

+
    +
  • A basic understanding of Linux* and Docker.
  • +
  • Clear Linux OS environment that has transparent network access to the Internet. +If you are behind a HTTP proxy server, in a corporate setting for example, +please refer to the Docker proxy instructions .
  • +
+
+
+

Install the containers-basic bundle

+

Software in Clear Linux OS is offered in the form of bundles to provide a +complete function. The containers-basic provides all the required software +packages to run Docker images as containers.

+
    +
  1. First, install the containers-basic bundle by running this +swupd command:

    +
    sudo swupd bundle-add containers-basic
    +
    +
    +
  2. +
  3. Start the Docker daemon through systemd manager by running this command:

    +
    sudo systemctl start docker
    +
    +
    +

    If you want Docker to start automatically on boot, enable the +systemd service by running this command:

    +
    sudo systemctl enable docker
    +
    +
    +
  4. +
  5. Finally, verify docker has been installed by running this +command and checking the version output for both client and server:

    +
    sudo docker version
    +
    +
    +
  6. +
+

Congratulations! At this point, you have a working installation of Docker +on Clear Linux OS. You are ready to start using container images on your system.

+
+
+

Integration with Kata Containers* (optional)

+

Kata Containers, is an open source project aiming to increase security +of containers by using a hardware-backed virtual machine container runtime +rather than software namespace containers that are provided by the standard +Docker runc runtime.

+

Clear Linux OS provides easy integration of the kata-runtime with Docker. +More information on installing and using the kata-runtime may be found at Install Kata Containers*.

+
+

注解

+

The remaining sections of this tutorial are standard to Docker setup +and configuration. If you are familiar with Docker basics, you do not +need to continue reading. The following sections are provided here for +sake of completeness.

+
+
+
+

Additional Docker configuration

+

Perform additional Docker daemon configuration via a configuration file +typically located at /etc/docker/daemon.json. Clear Linux OS features a +Stateless system so the configuration file daemon.json does +NOT exist by default.

+
    +
  1. Create the daemon.json by running this command:

    +
    sudo touch /etc/docker/daemon.json
    +
    +
    +
    +

    注解

    +

    Refer to the Docker documentation on daemon configuration for the +full list of available configuration options and examples.

    +
    +
  2. +
  3. For production systems, we follow Docker’s recommendation to use the +OverlayFS storage driver overlay2, shown below:

    +
    {
    +   "storage-driver": "overlay2"
    +}
    +
    +
    +
    +

    注解

    +

    A testing version is found in Docker Device Mapper storage driver. +If using this storage driver, a warning message may appear: “usage of +loopback devices is strongly discouraged for production use”.

    +
    +
  4. +
  5. Save and close daemon.json.

    +
  6. +
  7. Once you’ve made any required changes, be sure to restart the +Docker daemon through systemd manager by running this command:

    +
    sudo systemctl restart docker
    +
    +
    +
  8. +
+
+
+

Pulling and running an image from Docker Hub

+

Docker Hub is a publically available container image repository which +comes preconfigured with Docker. In the example below we will pull and run +an the official Docker image for nginx*, an open source reverse proxy server.

+
    +
  1. First, pull a container image from Docker Hub using the +docker pull command. Download the latest nginx* Docker +container image by running this command:

    +
    sudo docker pull nginx
    +
    +
    +
  2. +
  3. Create and launch a new container using the docker run +command. Launch a nginx container by running this command:

    +
    sudo docker run --name test-nginx -d -p 8080:80 nginx
    +
    +
    +
    +

    注解

    +

    Below is an explanation of switches used in the command above. For +detailed docker run switches and syntax, refer to the +Docker Documentation .

    +
      +
    • The –name switch lets you provide a friendly name to +target the container for future operations
    • +
    • The -d switch launches the container in the background
    • +
    • The -p switch allows the container’s HTTP port (80) to be +accessible from the Clear Linux OS host on port 8080
    • +
    +
    +
  4. +
  5. You can access the Welcome to Nginx! splash page running in the container +by browsing to http://127.0.0.1:8080 or by running this curl +command from your Clear Linux OS machine:

    +
    curl 127.0.0.1:8080
    +
    +
    +
  6. +
  7. Finally, stop and delete the nginx container by running the +docker stop and docker rm commands.

    +
    sudo docker stop test-nginx
    +sudo docker rm test-nginx
    +
    +
    +
  8. +
+

Congratulations! At this point, you have successfully pulled a nginx +container image from Docker Hub and have run an example container.

+
+
+

Creating a Docker swarm cluster

+

Clusters of Docker hosts are referred to as swarms.

+

The process in this tutorial can be repeated to install Docker on multiple +Clear Linux OS hosts with the intent to form a Docker swarm cluster.

+

The Docker documentation on swarm key concepts and +Docker documentation on creating a swarm can be referenced +for further instructions on setting up a swarm.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/flatpak/flatpak.html b/zh_CN/tutorials/flatpak/flatpak.html new file mode 100644 index 00000000..fec62155 --- /dev/null +++ b/zh_CN/tutorials/flatpak/flatpak.html @@ -0,0 +1,1067 @@ + + + + + + + + + + + Use Flatpak* to install applications on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use Flatpak* to install applications on Clear Linux* OS

+

This tutorial provides all the required steps to install Flatpak as well as +downloading, installing, and running LibreOffice* on Clear Linux* OS.

+

Please visit the Flatpak website for more information about Flatpak and +how to use it. You can also download it here.

+
+

Before you begin

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +our bare metal installation guide.

+
+

Install Flatpak on your host system

+

Flatpak is included as part of the bundle desktop. To install the +application, log in to your user account and enter the following command:

+
sudo swupd bundle-add desktop
+
+
+
+
+

Install and run the LibreOffice Flatpak image

+

Application developers have the option to bundle their applications using +Flatpak to allow the installation of a single distribution of their +application on different distributions of Linux, including Clear Linux OS. +Flatpak provides a list of applications available through Flathub.

+

Clear Linux OS enables the Flathub repository by default.

+
+

Installing using gnome software

+

All you need to do is to launch gnome software, search for the LibreOffice +app, and click the install button.

+
+install libreoffice step by step +

Figure 1: Installing LibreOffice using gnome-software

+
+
+
+

Installing using the command line

+

Open the gnome-terminal and type the following command to install the +LibreOffice app.

+
flatpak install --user flathub org.libreoffice.LibreOffice
+Installing in user:
+org.libreoffice.LibreOffice/x86_64/stable        flathub 2aff77bd5cf1
+  permissions: ipc, network, pulseaudio, wayland, x11, dri
+  file access: host, xdg-run/dconf
+  dbus access: ca.desrt.dconf, org.gtk.vfs.*
+  dbus ownership: org.libreoffice.LibreOfficeIpc0
+org.libreoffice.LibreOffice.Locale/x86_64/stable flathub 924157b3b009
+Is this ok [y/n]: y
+Installing for user: org.libreoffice.LibreOffice/x86_64/stable from flathub
+[####################] 403 metadata, 4661 content objects fetched; 222574 KiB transferred in 99 seconds
+Now at 2aff77bd5cf1.
+Installing for user: org.libreoffice.LibreOffice.Locale/x86_64/stable from flathub
+[####################] 10 metadata, 71 content objects fetched; 1013 KiB transferred in 3 seconds
+Now at 924157b3b009.
+
+
+
+
+
+

Launch LibreOffice

+

A new set of icons will appear in your Gnome applications list titled LibreOffice. To +execute the application, highlight the application and click on the LibreOffice icon. +LibreOffice will start normally.

+
+Opening LibreOffice app +

Figure 2: Select LibreOffice app

+
+
+

Using the command line

+
flatpak run org.libreoffice.LibreOffice
+
+
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/fmv.html b/zh_CN/tutorials/fmv.html new file mode 100644 index 00000000..6343db82 --- /dev/null +++ b/zh_CN/tutorials/fmv.html @@ -0,0 +1,1285 @@ + + + + + + + + + + + Use the function multi-version patch generator — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use the function multi-version patch generator

+

CPU architectures often gain interesting new instructions as they evolve but +application developers find it difficult to take advantage of those +instructions. The reluctance to lose backward-compatibility is one of the +main roadblocks slowing developers from using advancements in newer computing +architectures. FMV, which first appeared +in GCC 4.8, is a way to have multiple implementations of a function, each +using a different architecture specialized instruction-set extensions. GCC +6 introduces changes to FMV to make it even easier to bring architecture- +based optimizations to the application code.

+

In this tutorial we will use FMV on general code and on +FFT library code (FFTW). Upon completing the +tutorial, you will be able to use this technology on your code and use the +libraries to deploy architecture-based optimizations to your application code.

+
+

Install and configure a Clear Linux OS host on bare metal

+

First, follow our guide to Install Clear Linux* OS from the live desktop. Once the bare +metal installation and initial configuration are complete, add the +desktop-dev bundle to the system. desktop-dev: contains the necessary +development tools like GCC and Perl*.

+

To install the bundles, run the following command in the $HOME +directory:

+
sudo swupd bundle-add desktop-dev
+
+
+
+
+

Detect loop vectorization candidates

+

Now, we need to detect the loop vectorization candidates to be cloned for +multiple platforms with FMV. As an example, we will use the following +simple C code:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
 #include <stdio.h>
+ #include <stdlib.h>
+ #include <sys/time.h>
+ #define MAX 1000000
+
+ int a[256], b[256], c[256];
+
+ void foo(){
+     int i,x;
+     for (x=0; x<MAX; x++){
+         for (i=0; i<256; i++){
+             a[i] = b[i] + c[i];
+         }
+     }
+ }
+
+
+ int main(){
+     foo();
+     return 0;
+ }
+
+
+

Save the example code as example.c in the current directory and build +with the following flags:

+
gcc -O3  -fopt-info-vec  example.c -o example
+
+
+

The build generates the following output:

+
example.c:11:9: note: loop vectorized
+example.c:11:9: note: loop vectorized
+
+
+

The output shows that line 11 is a good candidate for vectorization:

+
for (i=0; i<256; i++){
+    a[i] = b[i] + c[i];
+
+
+
+
+

Generate the FMV patch

+

To generate the FMV patch with the make-fmv-patch project, we +must clone the project and generate a log file with the loop vectorized +information:

+
git clone https://github.com/clearlinux/make-fmv-patch.git
+gcc -O3  -fopt-info-vec  example.c -o example &> log
+
+
+

To generate the patch files, execute:

+
perl ./make-fmv-patch/make-fmv-patch.pl log .
+
+
+

The make-fmv-patch.pl script takes two arguments: <buildlog> and +<sourcecode>. Replace <buildlog> and <sourcecode> with the proper +values and execute:

+
perl make-fmv-patch.pl <buildlog> <sourcecode>
+
+
+

The command generates the following example.c.patch patch:

+
--- ./example.c 2017-09-27 16:05:42.279505430 +0000
++++ ./example.c~    2017-09-27 16:19:11.691544026 +0000
+@@ -5,6 +5,7 @@
+
+ int a[256], b[256], c[256];
+
++__attribute__((target_clones("avx2","arch=atom","default")))
+ void foo(){
+     int i,x;
+     for (x=0; x<MAX; x++){
+
+
+

We recommend you use the make-fmv-patch script to add the attribute +generating the target clones on the function foo. Thus, we can have the +following code:

+
#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#define MAX 1000000
+
+int a[256], b[256], c[256];
+
+__attribute__((target_clones("avx2","arch=atom","default")))
+void foo(){
+    int i,x;
+    for (x=0; x<MAX; x++){
+        for (i=0; i<256; i++){
+            a[i] = b[i] + c[i];
+        }
+    }
+}
+
+
+int main(){
+    foo();
+    return 0;
+}
+
+
+

Changing the value of the $avx2 variable, we can change the target +clones when adding the patches or in the make-fmv-patch.pl script:

+
my $avx2 = '__attribute__((target_clones("avx2","arch=atom","default")))'."\n";
+
+
+

Compile the code again with FMV and add the option to analyze the objdump +log:

+
gcc -O3 example.c -o example -g
+objdump -S example | less
+
+
+

You can see the multiple clones of the foo function:

+
foo
+foo.avx2.0
+foo.arch_atom.1
+
+
+

The cloned functions use AVX2 registers and vectorized instructions. To +verify, enter the following commands:

+
vpaddd (%r8,%rax,1),%ymm0,%ymm0
+vmovdqu %ymm0,(%rcx,%rax,1)
+
+
+
+
+

FFT project example using FFTW

+

To follow the same approach with a package like FFTW, we must use the +-fopt-info-vec flag to get a build log file similar to:

+
~/make-fmv-patch/make-fmv-patch.pl results/build.log fftw-3.3.6-pl2/
+
+patching fftw-3.3.6-pl2/libbench2/verify-lib.c @ lines (36 114 151 162 173 195 215 284)
+patching fftw-3.3.6-pl2/tools/fftw-wisdom.c @ lines (150)
+patching fftw-3.3.6-pl2/libbench2/speed.c @ lines (26)
+patching fftw-3.3.6-pl2/tests/bench.c @ lines (27)
+patching fftw-3.3.6-pl2/libbench2/util.c @ lines (181)
+patching fftw-3.3.6-pl2/libbench2/problem.c @ lines (229)
+patching fftw-3.3.6-pl2/tests/fftw-bench.c @ lines (101 147 162 249)
+patching fftw-3.3.6-pl2/libbench2/mp.c @ lines (79 190 215)
+patching fftw-3.3.6-pl2/libbench2/caset.c @ lines (5)
+patching fftw-3.3.6-pl2/libbench2/verify-r2r.c @ lines (44 187 197 207 316 333 723)
+
+
+

For example, the fftw-3.3.6-pl2/tools/fftw-wisdom.c.patch file +generates the following patches:

+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
    --- fftw-3.3.6-pl2/libbench2/verify-lib.c   2017-01-27 21:08:13.000000000 +0000
+    +++ fftw-3.3.6-pl2/libbench2/verify-lib.c~  2017-09-27 17:49:21.913802006 +0000
+    @@ -33,6 +33,7 @@
+
+     double dmax(double x, double y) { return (x > y) ? x : y; }
+
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+     static double aerror(C *a, C *b, int n)
+     {
+         if (n > 0) {
+    @@ -111,6 +112,7 @@
+    }
+
+    /* make array hermitian */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void mkhermitian(C *A, int rank, const bench_iodim *dim, int stride)
+    {
+         if (rank == 0)
+    @@ -148,6 +150,7 @@
+    }
+
+    /* C = A + B */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void aadd(C *c, C *a, C *b, int n)
+    {
+         int i;
+    @@ -159,6 +162,7 @@
+    }
+
+    /* C = A - B */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void asub(C *c, C *a, C *b, int n)
+    {
+         int i;
+    @@ -170,6 +174,7 @@
+    }
+
+    /* B = rotate left A (complex) */
+    +__attribute__((target_clones("avx2","arch=atom","default")))
+    void arol(C *b, C *a, int n, int nb, int na)
+    {
+         int i, ib, ia;
+    @@ -192,6 +197,7 @@
+         }
+    }
+
+
+

With these patches, we can select where to apply the FMV technology making +bringing architecture-based optimizations to application code even easier.

+

Congratulations!

+

You have successfully installed an FMV development environment on Clear Linux OS. +Furthermore, you used cutting edge compiler technology to improve the +performance of your application based on Intel Architecture technology and +profiling of the specific execution of your application.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/hadoop.html b/zh_CN/tutorials/hadoop.html new file mode 100644 index 00000000..4564739f --- /dev/null +++ b/zh_CN/tutorials/hadoop.html @@ -0,0 +1,1219 @@ + + + + + + + + + + + Set up a single node cluster with Hadoop* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set up a single node cluster with Hadoop*

+

This tutorial walks you through the process of installing, configuring, and +running Apache* Hadoop on Clear Linux* OS. The Apache Hadoop software library is a +framework for distributed processing of large data sets across clusters of +computers using simple programming models. It is designed to scale up from +single servers to thousands of machines, with each machine offering local +computation and storage.

+
+

Prerequisites

+

Before following this tutorial, you should follow the +Install Clear Linux* OS from the live desktop to ensure you have installed Clear Linux OS.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+

For the purposes of this tutorial, we will install Hadoop in a single machine +running both the master and slave daemons.

+
+
+

Install Apache Hadoop

+

Apache Hadoop is included in the big-data-basic bundle. To install the +framework, enter the following command:

+
sudo swupd bundle-add big-data-basic
+
+
+
+
+

Configure Apache Hadoop

+
    +
  1. To create the configuration directory, enter the following command:

    +
    sudo mkdir /etc/hadoop
    +
    +
    +
  2. +
  3. Copy the defaults from /usr/share/defaults/hadoop to +/etc/hadoop with the following command:

    +
    $ sudo cp /usr/share/defaults/hadoop/* /etc/hadoop
    +
    +
    +
    +

    注解

    +

    Since Clear Linux OS is a stateless system, you should never modify the +files under the /usr/share/defaults directory. The software +updater will overwrite those files.

    +
    +
  4. +
+

Once all the configuration files are in /etc/hadoop, we must edit +them to fit our needs. The NameNode server is the master server. It manages +the namespace of the files system and regulates the clients’ access to files. +The first file we edit, /etc/hadoop/core-site.xml, informs the Hadoop +daemon where NameNode is running.

+

In this tutorial, our NameNode runs in our localhost. Follow these steps +to set it up correctly:

+
    +
  1. Open the /etc/hadoop/core-site.xml file using the editor of your +choice and modify the file as follows:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    +<configuration>
    +<property>
    +<name>fs.default.name</name>
    +<value>hdfs://localhost:9000</value>
    +</property>
    +</configuration>
    +
    +
    +
  2. +
  3. Edit the /etc/hadoop/hdfs-site.xml file. This file configures the +HDFS daemons. This configuration +includes the list of permitted and excluded data nodes and the size of +said blocks. In this example, we are setting the number of block +replication to 1 from the default of 3 as follows:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    +<configuration>
    +<property>
    +<name>dfs.replication</name>
    +<value>1</value>
    +</property>
    +<property>
    +<name>dfs.permission</name>
    +<value>false</value>
    +</property>
    +</configuration>
    +
    +
    +
  4. +
  5. Edit the /etc/hadoop/mapred-site.xml file. This file configures +all daemons related to MapReduce: JobTracker and TaskTrackers. With +MapReduce, Hadoop can process big amounts of data in multiple systems. In +our example, we set YARN as our +runtime framework for executing MapReduce jobs as follows:

    +
    <?xml version="1.0" encoding="UTF-8"?>
    +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    +<configuration>
    +<property>
    +<name>mapreduce.framework.name</name>
    +<value>yarn</value>
    +</property>
    +</configuration>
    +
    +
    +
  6. +
  7. Edit the /etc/hadoop/yarn-site.xml file. This file configures all +daemons related to YARN: ResourceManager and NodeManager. In our +example, we implement the mapreduce_shuffle service, which is the +default as follows:

    +
    <?xml version="1.0"?>
    +<configuration>
    +<property>
    +<name>yarn.nodemanager.aux-services</name>
    +<value>mapreduce_shuffle</value>
    +</property>
    +<property>
    +<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    +<value>org.apache.hadoop.mapred.ShuffleHandler</value>
    +</property>
    +</configuration>
    +
    +
    +
  8. +
+
+
+

Configure your SSH key

+
    +
  1. Create a SSH key. If you already have one, skip this step.

    +
    sudo ssh-keygen -t rsa
    +
    +
    +
  2. +
  3. Copy the key to your authorized keys.

    +
    sudo cat /root/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys
    +
    +
    +
  4. +
  5. Log into the localhost. If no password prompt appears, you are ready to +run the Hadoop daemons.

    +
    sudo ssh localhost
    +
    +
    +
  6. +
+
+
+

Run the Hadoop daemons

+

With all the configuration files properly edited, we are ready to start the +daemons.

+

When we format the NameNode server, it formats the meta-data related to +data nodes. Thus, all the information on the data nodes is lost and the nodes +can be reused for new data.

+
    +
  1. Format the NameNode server with the following command:

    +
    sudo hdfs namenode -format
    +
    +
    +
  2. +
  3. Start the DFS in NameNode and DataNodes with the following command:

    +
    sudo start-dfs.sh
    +
    +
    +
  4. +
  5. The console output should be similar to:

    +
    Starting namenodes on [localhost]
    +The authenticity of host 'localhost (::1)' can't be established.
    +ECDSA key fingerprint is
    +SHA256:97e+7TnomsS9W7GjFPjzY75HGBp+f1y6sA+ZFcOPIPU.
    +Are you sure you want to continue connecting (yes/no)?
    +
    +
    +

    Enter yes to continue.

    +
  6. +
  7. Start the YARN daemons ResourceManager and NodeManager with the +following command:

    +
    sudo start-yarn.sh
    +
    +
    +
  8. +
  9. Ensure everything is running as expected with the following command:

    +
    sudo jps
    +
    +
    +
  10. +
  11. The console output should be similar to:

    +
    22674 DataNode
    +26228 Jps
    +22533 NameNode
    +23046 ResourceManager
    +22854 SecondaryNameNode
    +23150 NodeManager
    +
    +
    +
  12. +
+
+
+

Run the MapReduce wordcount example

+
    +
  1. Create the input directory.

    +
    sudo hdfs dfs -mkdir -p /user/root/input
    +
    +
    +
  2. +
  3. Copy a file from the local file system to the HDFS.

    +
    sudo hdfs dfs -copyFromLocal local-file /user/root/input
    +
    +
    +
  4. +
  5. Run the wordcount example.

    +
    sudo hadoop jar /usr/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount input output
    +
    +
    +
  6. +
  7. Read output file “part-r-00000”. This file contains the number of times +each word appears in the file.

    +
    sudo hdfs dfs -cat /user/root/output/part-r-00000
    +
    +
    +
  8. +
+

Congratulations!

+

You successfully installed and setup a single node Hadoop cluster. +Additionally, you ran a simple wordcount example.

+

Your single node Hadoop cluster is up and running!

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/kata.html b/zh_CN/tutorials/kata.html new file mode 100644 index 00000000..5cb2e9db --- /dev/null +++ b/zh_CN/tutorials/kata.html @@ -0,0 +1,1090 @@ + + + + + + + + + + + Install Kata Containers* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+
+
+

Install Kata Containers*

+

This tutorial describes how to install, configure, and run Kata Containers +on Clear Linux* OS. Kata Containers is an open source project developing a +lightweight implementation of VMs that offer the +speed of containers and the security of VMs.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, follow +the bare metal installation tutorial.

+

If you have Clear Containers installed on your Clear Linux OS system, then follow the +migrate Clear Containers to Kata Containers tutorial.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Install Kata Containers

+

Kata Containers is included in the containers-virt bundle. +To install the framework, enter the following command:

+
sudo swupd bundle-add containers-virt
+
+
+

Restart the Docker* and Kata Containers systemd services.

+
sudo systemctl daemon-reload
+sudo systemctl restart docker
+
+
+
+
+

Run Kata Containers

+
sudo docker run -ti busybox sh
+
+
+
+

注解

+

If you use a proxy server and your proxy environment variables are already +set, run the following commands as a shell script to configure Docker:

+
docker_service_dir="/etc/systemd/system/docker.service.d/"
+sudo mkdir -p "$docker_service_dir"
+cat <<EOF | sudo tee "$docker_service_dir/proxy.conf"
+[Service]
+Environment="HTTP_PROXY=$http_proxy"
+Environment="HTTPS_PROXY=$https_proxy"
+EOF
+echo "Reloading unit files and starting docker service"
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+sudo docker info
+
+
+
+

Congratulations!

+

You’ve successfully installed and set up Kata Containers on Clear Linux OS.

+
+
+

More information about Docker

+

Docker on Clear Linux OS provides a docker.service file to start the Docker +daemon. The daemon will use runc or kata-runtime depending on the +environment:

+
    +
  • If you are running Clear Linux OS on bare metal or on a VM with Nested +Virtualization activated, Docker uses kata-runtime as the +default runtime.
  • +
  • If you are running Clear Linux OS on a VM without Nested Virtualization, +Docker uses runc as the default runtime.
  • +
+

You do not need to manually configure the runtime for Docker, because +it automatically uses the runtime supported by the system.

+
+

Troubleshooting

+
    +
  • To change the Docker storage driver, see +Additional Docker configuration.

    +
  • +
  • For some Clear Linux OS versions before 27000, you may need to manually +configure Docker* to use Kata Containers by default.

    +

    To do so, enter:

    +
    sudo mkdir -p /etc/systemd/system/docker.service.d/
    +cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/50-runtime.conf
    +[Service]
    +Environment="DOCKER_DEFAULT_RUNTIME=--default-runtime kata-runtime"
    +EOF
    +
    +
    +
  • +
  • To check the version of Clear Linux OS on your system, enter:

    +
    sudo swupd info
    +
    +
    +
  • +
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/kata_migration.html b/zh_CN/tutorials/kata_migration.html new file mode 100644 index 00000000..c879dcc5 --- /dev/null +++ b/zh_CN/tutorials/kata_migration.html @@ -0,0 +1,1056 @@ + + + + + + + + + + + Migrate Clear Containers to Kata Containers* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Migrate Clear Containers to Kata Containers*

+

Clear Containers and Kata Containers can co-exist in the same system. +Both can be installed through the containers-virt bundle. However, we +recommend that you migrate to Kata Containers because Clear Containers is no +longer maintained and will soon be deprecated on Clear Linux* OS.

+

This guide describes how to migrate to Kata Containers and assumes that:

+ +
+

Stop Clear Containers instances

+

As an unprivileged user, stop all running instances of Clear Containers:

+
for container in $(sudo docker ps -q); do sudo docker stop $container; done
+
+
+
+
+

Manually migrate customized configuration files

+

If you have made changes to your Clear Containers configuration, review +those changes and decide whether to manually apply those changes to your +Kata Containers configuration.

+

Make any required changes before continuing this process.

+
+

注解

+

You do not need to manually remove any Clear Containers packages.

+
+
+
+

Enable Kata Containers as default

+
    +
  1. Configure Docker to use the Kata Containers runtime by default.

    +
    sudo mkdir -p /etc/systemd/system/docker.service.d/
    +cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/51-runtime.conf
    +[Service]
    +Environment="DOCKER_DEFAULT_RUNTIME=--default-runtime kata-runtime"
    +EOF
    +
    +
    +
  2. +
  3. Restart the Docker systemd services.

    +
    sudo systemctl daemon-reload
    +sudo systemctl restart docker
    +
    +
    +
  4. +
  5. Verify Docker is using Kata Containers.

    +
    sudo docker info | grep -i 'default runtime'
    +Default Runtime: kata-runtime
    +
    +
    +
  6. +
+
+
+

Run Kata Containers

+

Use the following command:

+
sudo docker run -ti busybox sh
+
+
+

Congratulations!

+

You’ve successfully migrated from Clear Containers to Kata Containers.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/kubernetes/kubernetes-bp.html b/zh_CN/tutorials/kubernetes/kubernetes-bp.html new file mode 100644 index 00000000..d362de30 --- /dev/null +++ b/zh_CN/tutorials/kubernetes/kubernetes-bp.html @@ -0,0 +1,1065 @@ + + + + + + + + + + + Kubernetes Best Practices on Clear Linux OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Kubernetes Best Practices on Clear Linux OS

+
+

Use swupd to update clusters

+

This tutorial shows you how to manage your Kubernetes cluster while using +swupd to update Clear Linux* OS.

+

In our tutorial Run Kubernetes*, we explain how to set up a Kubernetes +cluster on Clear Linux OS using kubeadm. Kubeadm documentation often builds on the +assumption that the distribution uses a traditional package manager (e.g., +RPM/DEB).

+

In contrast, Clear Linux OS uses swupd to update the OS, which in this case updates +all of the kubernetes node and client binaries simultaneously, as part of +the cloud-native-basic bundle (e.g., kubectl, kubeadm, kubelet). Running +sudo swupd update requires special care to ensure the OS +incorporates the latest Kubernetes upgrades.

+

This document describes best practices to manage cluster upgrades with +kubeadm on a Clear Linux OS-based cluster.

+
+
+

Prerequisites

+

Assure that you:

+ +
+

注解

+

Other Linux* distros shown in Kubernetes upgrade documentation reflect +apt-get update, apt-mark hold kubeadm, and similar commands; however, such commands are not valid on Clear Linux OS.

+
+
+
+

Update the control plane

+
    +
  1. Read kubernetes documentation before you begin.

    +
  2. +
  3. On your master node, run the command:

    +
    sudo swupd update
    +
    +
    +
    +

    注解

    +

    If the minor version of Kubernetes changes, Clear Linux OS shows a message-of-the-day, or motd. When the motd appears, you must postpone a kubelet restart on master and nodes until the control plane is properly updated. swupd update does not restart services automatically unless explicitly configured to do so.

    +
    +
  4. +
  5. Now follow these instructions in kubernetes documentation.

    + +
  6. +
+
+
+

Update worker nodes

+
    +
  1. On each worker node, run the command:

    +
    sudo swupd update
    +
    +
    +
  2. +
  3. Now follow these instructions in kubernetes documentation:

    + +
  4. +
+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/kubernetes/kubernetes.html b/zh_CN/tutorials/kubernetes/kubernetes.html new file mode 100644 index 00000000..a394eb0f --- /dev/null +++ b/zh_CN/tutorials/kubernetes/kubernetes.html @@ -0,0 +1,1333 @@ + + + + + + + + + + + Run Kubernetes* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Kubernetes*

+

This tutorial describes how to install, configure, and run the +Kubernetes container orchestration system on Clear Linux* OS using CRI+O and +kata-runtime.

+

Kubernetes* is an open source system for automating deployment, scaling, and +management of containerized applications. It groups containers that make up +an application into logical units for easy management and discovery.

+

Kata Containers* kata-runtime adheres to +OCI guidelines and work seamlessly with +Kubernetes. Kata Containers provide strong isolation for untrusted +workloads or multi-tenant scenarios. Kata Containers can be +allocated on a per-pod basis so you can mix and match both on the same host +to suit your needs.

+ +
+

Prerequisites

+

This tutorial assumes you have already installed Clear Linux OS. For detailed +instructions on installing Clear Linux OS on a bare metal system, follow the +bare metal installation tutorial. +Learn about the benefits of having an up-to-date system for cloud +orchestration on the swupd: software updater page.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Install Kubernetes and CRI runtimes

+

Kubernetes, a set of supported CRI +runtimes, and networking plugins, are included in the cloud-native-basic +bundle.

+

To install this framework, enter the following command:

+
sudo swupd bundle-add cloud-native-basic
+
+
+
+

注解

+

For more on networking plugins, see Install pod network add-on.

+
+
+
+

Configure Kubernetes

+

This tutorial uses the basic default Kubernetes configuration for simplicity. +You must define your Kubernetes configuration according to your specific +deployment and your security needs.

+
    +
  1. Enable IP forwarding to avoid kubeadm preflight check errors:

    +

    Create (or edit if it exists) the file /etc/sysctl.d/60-k8s.conf +and include the following line:

    +
    net.ipv4.ip_forward = 1
    +
    +
    +

    Apply the change:

    +
    sudo systemctl restart systemd-sysctl
    +
    +
    +
  2. +
  3. Enable the kubelet service:

    +
    sudo systemctl enable kubelet.service
    +
    +
    +
  4. +
  5. Disable swap using one of the following methods, either:

    +
      +
    1. Temporarily:

      +
      sudo swapoff -a
      +
      +
      +
      +

      注解

      +

      Swap will be enabled at next reboot, causing failures in +your cluster.

      +
      +
    2. +
    +

    or:

    +
      +
    1. Permanently:

      +

      Mask the swap partition:

      +
      sudo systemctl mask $(sed -n -e 's#^/dev/\([0-9a-z]*\).*#dev-\1.swap#p' /proc/swaps) 2>/dev/null
      +sudo swapoff -a
      +
      +
      +
      +

      注解

      +

      On systems with limited resources, some performance degradation may +be observed while swap is disabled.

      +
      +
    2. +
    +
  6. +
  7. Switch to root to modify the hosts file:

    +
    sudo -s
    +
    +
    +
  8. +
  9. Create (or edit if it exists) the hosts file that Kubernetes will read to +locate the master’s host:

    +
    echo "127.0.0.1 localhost `hostname`" >> /etc/hosts
    +
    +
    +
  10. +
  11. Exit root:

    +
    exit
    +
    +
    +
  12. +
+
+
+

Configure and run Kubernetes

+

This section describes how to configure and run Kubernetes with CRI-O and +kata-runtime.

+
+

Configure and run CRI-O + kata-runtime

+
    +
  1. Enable the CRI-O service:

    +
    sudo systemctl enable crio.service
    +
    +
    +
  2. +
  3. Enter the commands:

    +
    sudo systemctl daemon-reload
    +sudo systemctl restart crio
    +
    +
    +
  4. +
  5. Initialize the master control plane with the command below and follow the +displayed instructions to set up kubectl:

    +
    sudo kubeadm init --cri-socket=/run/crio/crio.sock
    +
    +
    +
  6. +
  7. Register kata-runtime as a RuntimeClass handler:

    +
    cat << EOF | kubectl apply -f -
    +kind: RuntimeClass
    +apiVersion: node.k8s.io/v1beta1
    +metadata:
    +    name: native
    +handler: runc
    +---
    +kind: RuntimeClass
    +apiVersion: node.k8s.io/v1beta1
    +metadata:
    +    name: kata-containers
    +handler: kata
    +EOF
    +
    +
    +
  8. +
+
+
+
+

Install pod network add-on

+

You must choose and install a pod network add-on to allow your pods to +communicate. Check whether or not your add-on requires special flags when you +initialize the master control plane.

+

Notes about flannel add-on

+

If you choose the flannel add-on, then you must add the following to the +kubeadm init command:

+
--pod-network-cidr 10.244.0.0/16
+
+
+

Furthermore, if you are using CRI-O and flannel and you want to use +Kata Containers, edit the /etc/crio/crio.conf file to add:

+
[crio.runtime]
+manage_network_ns_lifecycle = true
+
+
+
+
+

Use your cluster

+

Once your master control plane is successfully initialized, instructions on +how to use your cluster and its IP, token, and hash values are +displayed. It is important that you record the cluster values because they +are needed when joining worker nodes to the cluster. Some values have a valid +period. The values are presented in a format similar to:

+
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash>
+
+
+

Congratulations!

+

You’ve successfully installed and set up Kubernetes in Clear Linux OS using CRI-O and +kata-runtime. You are now ready to follow on-screen instructions to deploy a +pod network to the cluster and join worker nodes with the displayed token +and IP information.

+
+ +
+

Cloud native setup automation (optional)

+

Clone the cloud-native-setup repository on your system and follow the +instructions. This repository includes helper scripts to automate configuration.

+
+
+

Package configuration customization (optional)

+

Clear Linux OS is a stateless system that looks for user-defined package configuration +files in the /etc/<package-name> directory to be used as default. If +user-defined files are not found, Clear Linux OS uses the distribution-provided +configuration files for each package.

+

If you customize any of the default package configuration files, you must +store the customized files in the /etc/ directory. If you edit any of +the distribution-provided default files, your changes will be lost in the +next system update.

+

For example, to customize CRI-O configuration in your system, run the +following commands:

+
sudo mkdir /etc/crio
+sudo cp /usr/share/defaults/crio/crio.conf /etc/crio/
+sudo $EDITOR /etc/crio/crio.conf
+
+
+

Learn more about Stateless in Clear Linux OS and view the Clear Linux OS documentation.

+
+
+

Proxy configuration (optional)

+

If you use a proxy server, you must set your proxy environment variables and +create an appropriate proxy configuration file for both CRI-O services. Consult your IT department if you are behind a corporate proxy for +the appropriate values. Ensure that your local IP is explicitly included +in the environment variable NO_PROXY. (Setting localhost is not enough.)

+

If you have already set your proxy environment variables, run the following +commands as a shell script to configure all of these services in one step:

+
services=('crio')
+for s in "${services[@]}"; do
+sudo mkdir -p "/etc/systemd/system/${s}.service.d/"
+cat << EOF | sudo tee "/etc/systemd/system/${s}.service.d/proxy.conf"
+[Service]
+Environment="HTTP_PROXY=${http_proxy}"
+Environment="HTTPS_PROXY=${https_proxy}"
+Environment="SOCKS_PROXY=${socks_proxy}"
+Environment="NO_PROXY=${no_proxy}"
+EOF
+done
+
+
+
+ +
+

Troubleshooting

+
    +
  • <HOSTNAME> not found in <IP> message.

    +

    Your DNS server may not be appropriately configured. Try adding an +entry to the /etc/hosts file with your host’s IP and Name.

    +

    For example: 100.200.50.20 myhost

    +

    Use the commands hostname and hostname -I to retrieve them.

    +
  • +
  • Images cannot be pulled.

    +

    You may be behind a proxy server. Try configuring your proxy settings, +using the environment variables HTTP_PROXY, HTTPS_PROXY, and NO_PROXY +as required in your environment.

    +
  • +
  • Connection refused error.

    +

    If you are behind a proxy server, you may need to add the master’s IP to +the environment variable NO_PROXY.

    +
  • +
  • Connection timed-out or Access Refused errors.

    +

    You must ensure that the appropriate proxy settings are available from the +same terminal where you will initialize the control plane. To verify the +proxy settings that Kubernetes will actually use, run the commands:

    +
    echo $HTTP_PROXY
    +echo $HTTPS_PROXY
    +echo $NO_PROXY
    +
    +
    +

    If the displayed proxy values are different from your assigned values, the +cluster initialization will fail. Contact your IT support team to learn how +to set the proxy variables permanently, and how to make them available for +all the types of access that you will use, such as remote SSH access.

    +

    If the result of the above commands is blank, you may need to add a +profile to the /etc directory. To do so, follow these steps.

    +
      +
    1. Create a profile in /etc

      +
      sudo touch profile
      +
      +
      +
    2. +
    3. With a preferred editor, open profile, and enter your proxy settings. +Example shown below.

      +
      export "HTTP_PROXY=http://proxy.example.com:443"
      +export "HTTPS_PROXY=http://proxy.example.com:445"
      +export "SOCKS_PROXY=http://proxy.example.com:1080"
      +export "NO_PROXY= site.com,.site.com,localhost,127.0.0.1,<master IP>
      +
      +
      +
      +

      注解

      +

      <master IP> can be obtained by running ifconfig.

      +
      +
    4. +
    5. Save and exit the profile.

      +
    6. +
    7. Run:

      +
      sudo source profile
      +
      +
      +
    8. +
    9. To ensure your system isn’t running previous session variables, run:

      +
      sudo kubeadm reset --cri-socket=/run/crio/crio.sock
      +
      +
      +
    10. +
    11. Continue below while passing -E in the command as shown.

      +
    12. +
    +
  • +
  • Missing environment variables.

    +

    If you are behind a proxy server, pass environment variables by adding -E +to the command that initializes the master control plane.

    +
    /* Kubernetes with CRI-O + kata-runtime */
    +sudo -E kubeadm init --cri-socket=/run/crio/crio.sock
    +
    +
    +
  • +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/machine-learning/machine-learning.html b/zh_CN/tutorials/machine-learning/machine-learning.html new file mode 100644 index 00000000..44a07378 --- /dev/null +++ b/zh_CN/tutorials/machine-learning/machine-learning.html @@ -0,0 +1,1175 @@ + + + + + + + + + + + TensorFlow* machine learning on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

TensorFlow* machine learning on Clear Linux* OS

+

This tutorial will demonstrate the installation and execusion of a TensorFlow* +machine learning example on Clear Linux* OS. It uses a Jupyter* Notebook and MNIST +data for handwriting recognition.

+

The initial steps will have you set up a Jupyter kernel and run a Notebook +on a bare-metal Clear Linux OS system.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. For +detailed instructions on installing Clear Linux OS on a bare metal system, follow the +bare metal installation tutorial.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+

Once your system is updated, add the following bundles to your system:

+
    +
  • machine-learning-web-ui: This bundle contains the Jupyter application.
  • +
  • machine-learning-basic: This bundle contains TensorFlow and other useful +tools.
  • +
+

To install the bundles, run the following commands in your $HOME +directory:

+
sudo swupd bundle-add machine-learning-web-ui
+
+sudo swupd bundle-add machine-learning-basic
+
+
+
+
+

Set up a Jupyter notebook

+

With all required packages and libraries installed, set up the file structure +for the Jupyter Notebook.

+
    +
  1. In the $HOME directory, create a directory for the Jupyter +Notebooks named Notebooks.

    +
    mkdir Notebooks
    +
    +
    +
  2. +
  3. Within Notebooks, create a directory named Handwriting.

    +
    mkdir Notebooks/Handwriting
    +
    +
    +
  4. +
  5. Change to the new directory.

    +
    cd Notebooks/Handwriting
    +
    +
    +
  6. +
  7. Copy the MNIST_example.ipynb file into the Handwriting +directory.

    +
    +

    注解

    +

    After installing the machine-learning basic bundle, you can find the +example code under +/usr/share/doc/tensorflow/MNIST_example.ipynb.

    +
    +
  8. +
+

The example code downloads and decompresses the MNIST data directly into the +./mnist directory. Alternatively, download the four files directly +from the Yann LeCun’s MNIST Database website and save them into a +mnist directory within the Handwriting directory.

+

The files needed are:

+ +
+
+

Run the Jupyter machine learning example code

+

With Clear Linux OS, Jupyter, and TensorFlow installed and configured, we can +run the example code.

+
    +
  1. Go to the ($HOME)/Notebooks directory and start Jupyter with the +following commands:

    +
    cd ~/Notebooks
    +
    +jupyter notebook
    +
    +
    +

    The Jupyter server starts and opens a web browser showing the Jupyter file +manager with a list of files in the current directory, see figure 1.

    +
    +Jupyter file manager +

    Figure 1: The Jupyter file manager shows the list of available files.

    +
    +
  2. +
  3. Click on the Handwriting directory. The MNIST_example.ipynb +file created earlier should be listed there, see figure 2.

    +
    +Example file within the Jupyter file manager +

    Figure 2: The example file within the Jupyter file manager.

    +
    +
  4. +
  5. To run the hand writing example, click on the MNIST_example.ipynb +file to load the notebook, see figure 3.

    +
    +The loaded MNIST_example notebook +

    Figure 3: The loaded MNIST_example notebook within the Jupyter file +manager.

    +
    +
  6. +
  7. Click the run-cell button to execute the code in the current cell and +move to the next.

    +
  8. +
  9. Select the In [2] cell and click the run-cell button to load +the MNIST data. The successful output is shown on figure 4.

    +
    +Successful import of MNIST data +

    Figure 4: Output after successfully importing the MNIST data.

    +
    +

    After the MNIST data was successfully downloaded and extracted into the +mnist directory within the ($HOME)/Notebooks/Handwriting +directory, four .gz files are present and the four data sets were created: +trainX, trainY, testX and testY.

    +
  10. +
  11. To inspect the imported data, the function in In [3] first +instructs Jupyter to reshape the data into an array of 28 x 28 images and to +plot the area in a 28 x 28 grid. Click the run-cell button twice to show +the first two digits in the trainX dataset, see figure 5.

    +
    +Function to reshape data. +

    Figure 5: A function reshapes the data and displays the first two +digits in the trainX dataset.

    +
    +
  12. +
  13. The In [4] cell defines the neural network. It provides the +inputs, defines the hidden layers, runs the training model, and sets up +the output layer, see figure 6. Click the run-cell button four times to +perform these operations.

    +
    +Defining, building and training the neural network model +

    Figure 6: Defining, building and training the neural network model.

    +
    +
  14. +
  15. To test the accuracy of the prediction the system makes, select the +In [8] cell and click the run-cell button. In this example, +the number 6 was predicted with a 99% accuracy, see figure 7.

    +
    +Prediction example +

    Figure 7: The system predicts a number providing the accuracy of the +prediction.

    +
    +
    +

    注解

    +

    To retest the accuracy of a random data point’s prediction, run the +cell In [8] again. It will take another random data point +and predict its value.

    +
    +
  16. +
  17. To check the accuracy for the whole dataset, select the In [10] +cell and click the run-cell button. Our example’s accuracy is +calculated as 97.17%, see figure 8.

    +
    +System's accuracy +

    Figure 8: The system’s accuracy for the entire data set.

    +
    +
  18. +
+

For more in-depth information on the model used and the mathematics it entails, +visit the TensorFlow tutorials +TensorFlow MNIST beginners demo and TensorFlow MNIST pros demo.

+

Congratulations!

+

You have successfully installed a Jupyter kernel on Clear Linux OS. In addition, you +trained a neural network to successfully predict the values contained in a +data set of hand-written number images.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/nvidia.html b/zh_CN/tutorials/nvidia.html new file mode 100644 index 00000000..16714eca --- /dev/null +++ b/zh_CN/tutorials/nvidia.html @@ -0,0 +1,1321 @@ + + + + + + + + + + + Install NVIDIA* Drivers — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Install NVIDIA* Drivers

+

NVIDIA manufactures graphics processing units (GPU), also known as +graphics cards.

+

NVIDIA devices on Linux* have two popular device driver options: the +opensource drivers from the nouveau project or the proprietary drivers +published by NVIDIA. The nouveau drivers are built into the Clear Linux* OS +kernel and are loaded automatically at system boot if a compatible card +is detected.

+

These instructions show how to use the proprietary NVIDIA drivers, which +require a manual installation.

+
+

警告

+

Software installed outside of swupd is not updated +with Clear Linux OS updates and must be updated and maintained manually.

+

For example, the file /usr/lib/libGL.so conflicts with the file +provided by the mesa package in Clear Linux OS and the file NVIDIA provides. If a Clear Linux OS +update overwrites these files, a reinstallation of the NVIDIA driver might +be required.

+
+ +
+

Prerequisites

+
    +
  • A Clear Linux OS system with a desktop installed
  • +
  • An NVIDIA device installed
  • +
+
+
+

Install DKMS

+

The Dynamic Kernel Module System (DKMS) allows the NVIDIA kernel modules to be automatically +integrated when kernel updates occur in Clear Linux OS.

+

Install the appropriate DKMS bundle using the instructions below:

+
+

注解

+

The Long Term Support (LTS) kernel variant is more likely to remain +compatible between updates with NVIDIA drivers.

+
+

The kernel-native-dkms bundle provides the dkms program and +Linux kernel headers, which are required for compiling kernel modules.

+

The kernel-native-dkms bundle also:

+
    +
  • Adds a systemd update trigger +(/usr/lib/systemd/system/dkms-new-kernel.service) to automatically +run DKMS to rebuild modules after a kernel upgrade occurs with swupd +update.
  • +
  • Disables kernel module signature verification by appending a kernel +command-line parameter (module.sig_unenforce) from the +/usr/share/kernel/cmdline.d/clr-ignore-mod-sig.conf file.
  • +
  • Adds a notification to the Message of the Day (MOTD) indicating kernel +module signature verification is disabled.
  • +
+
+

警告

+

We recommend that you always review the swupd update output +to make sure kernel modules were successfully rebuilt against the new +kernel. This is especially important for systems where a successful boot +relies on a kernel module.

+
+

Install the kernel-native-dkms or kernel-lts-dkms +bundle:

+
    +
  1. Determine which kernel variant is running on Clear Linux OS. Only the native +and lts kernels are enabled to build and load out-of-tree kernel modules +with DKMS.

    +
    $ uname -r
    +5.XX.YY-ZZZZ.native
    +
    +
    +

    Ensure .native or .lts is in the kernel name.

    +
  2. +
  3. Install the DKMS bundle corresponding to the installed kernel. Use +kernel-native-dkms for the native kernel or +kernel-lts-dkms for the lts kernel.

    +
    sudo swupd bundle-add kernel-native-dkms
    +
    +
    +

    or

    +
    sudo swupd bundle-add kernel-lts-dkms
    +
    +
    +
  4. +
  5. Update the Clear Linux OS bootloader and reboot.

    +
    sudo clr-boot-manager update
    +reboot
    +
    +
    +
  6. +
+
+
+

Download and install the NVIDIA drivers

+
+

Download the NVIDIA drivers for Linux

+
    +
  1. Identify the NVIDIA GPU model that is installed.

    +
    sudo lshw -C display
    +
    +
    +
  2. +
  3. Go to the NVIDIA Driver Downloads website . Search for and download the +appropriate driver based on the NVIDIA GPU model you have with Linux +64-bit selected as the Operating System .

    +
  4. +
  5. Open a terminal and navigate to where the +NVIDIA-Linux-x86_64-<VERSION>.run file was saved. In this +example, it was saved in the Downloads folder.

    +
    cd ~/Downloads/
    +
    +
    +
  6. +
  7. Make the NVIDIA-Linux-x86_64-<VERSION>.run file executable.

    +
    chmod +x :file:`NVIDIA-Linux-x86_64-<VERSION>.run`
    +
    +
    +
  8. +
+
+
+

Disable the nouveau driver

+

The proprietary NVIDIA driver is incompatible with the nouveau driver and +must be disabled before installation can continue.

+
    +
  1. Disable the nouveau driver by creating a blacklist file under +/etc/modprobe.d and reboot.

    +
    sudo mkdir /etc/modprobe.d
    +
    +printf "blacklist nouveau \noptions nouveau modeset=0 \n" | sudo tee --append /etc/modprobe.d/disable-nouveau.conf
    +
    +
    +
  2. +
  3. Reboot the system and log back in. It is normal for the graphical +environment not to start without the NVIDIA driver loaded.

    +
  4. +
+
+
+

Configure alternative software paths

+

The NVIDIA installer is directed to install files under +/opt/nvidia as much as possible to keep its contents isolated from the +rest of the Clear Linux OS system files under /usr. The dynamic linker and X +server must be configured to use the content under +/opt/nvidia.

+
    +
  1. Configure the dynamic linker to look for and to cache shared libraries under +/opt/nvidia/lib and /opt/nvidia/lib32 in addition to the +default paths.

    +
    echo "include /etc/ld.so.conf.d/*.conf" |  sudo tee --append /etc/ld.so.conf
    +
    +sudo mkdir /etc/ld.so.conf.d
    +printf "/opt/nvidia/lib \n/opt/nvidia/lib32 \n" | sudo tee --append /etc/ld.so.conf.d/nvidia.conf
    +
    +
    +
  2. +
  3. Reload the dynamic linker run-time bindings and library cache.

    +
    sudo ldconfig
    +
    +
    +
  4. +
  5. Create a Xorg configuration file to search for modules under +/opt/nvidia in addition to the default path.

    +
    sudo mkdir -p /etc/X11/xorg.conf.d/
    +
    +sudo tee /etc/X11/xorg.conf.d/nvidia-files-opt.conf > /dev/null <<'EOF'
    +Section "Files"
    +        ModulePath      "/usr/lib64/xorg/modules"
    +        ModulePath      "/opt/nvidia/lib64/xorg/modules"
    +EndSection
    +EOF
    +
    +
    +
  6. +
+
+
+

Install the NVIDIA drivers

+
    +
  1. A terminal not running on /dev/tty1 is useful to view uninterrupted +installation progress. Switch to a secondary virtual terminal by pushing +CTRL + ALT + F2 or remotely login over SSH.

    +
  2. +
  3. Navigate to the directory where the NVIDIA installer was downloaded.

    +
    cd ~/Downloads/
    +
    +
    +
  4. +
  5. Run the installer with the advanced options below.

    +
    sudo ./NVIDIA-Linux-x86_64-<VERSION>.run \
    +--utility-prefix=/opt/nvidia \
    +--opengl-prefix=/opt/nvidia \
    +--compat32-prefix=/opt/nvidia \
    +--compat32-libdir=lib32 \
    +--x-prefix=/opt/nvidia \
    +--x-module-path=/opt/nvidia/lib64/xorg/modules \
    +--x-library-path=/opt/nvidia/lib64 \
    +--x-sysconfig-path=/etc/X11/xorg.conf.d \
    +--documentation-prefix=/opt/nvidia \
    +--application-profile-path=/etc/nvidia \
    +--no-precompiled-interface \
    +--no-nvidia-modprobe \
    +--no-distro-scripts \
    +--force-libglx-indirect \
    +--glvnd-egl-config-path=/etc/glvnd/egl_vendor.d \
    +--egl-external-platform-config-path=/etc/egl/egl_external_platform.d  \
    +--dkms \
    +--silent
    +
    +
    +
  6. +
  7. The graphical interface may automatically start after the NVIDIA driver +is loaded. Return to the working terminal and log back in if necessary.

    +
  8. +
  9. Confirm that the NVIDIA kernel modules are loaded.

    +
    lsmod | grep ^nvidia
    +
    +
    +
  10. +
  11. Run a Clear Linux OS system verification to restore files that the NVIDIA installer +likely deleted.

    +
    sudo swupd repair --quick --bundles=lib-opengl
    +
    +
    +
  12. +
+
+

注解

+

The NVIDIA software places some files under the /usr subdirectory +that are not managed by Clear Linux OS and conflict with the Clear Linux OS stateless design.

+

Although a limited version of swupd repair is run above, +other uses of the swupd repair command should be avoided +with the proprietary NVIDIA drivers installed.

+
+
+
+
+

Updating the NVIDIA drivers

+

The proprietary NVIDIA drivers are installed manually outside of swupd and must be updated manually when needed.

+

Updating the NVIDIA drivers follows the same steps as initial installation, +however the desktop environment must first be stopped so that the drivers are +not in use.

+
    +
  1. Follow the steps in the Download the NVIDIA Drivers for Linux section +to get the latest NVIDIA drivers.

    +
  2. +
  3. Temporarily set the default boot target to the multi-user, which is +a non-graphical runtime.

    +
    sudo systemctl set-default multi-user.target
    +
    +
    +
  4. +
  5. Reboot the system and log back in. It is normal for the graphical +environment not to start.

    +
  6. +
  7. Follow the steps in the Install the NVIDIA Drivers section to update +the NVIDIA drivers. This installation will overwrite the previous NVIDIA +drivers and files.

    +
  8. +
  9. Set the default boot target back to the graphical target.

    +
    sudo systemctl set-default graphical.target
    +
    +
    +
  10. +
  11. Reboot the system and log back in.

    +
  12. +
  13. Trigger a flatpak update that will download the runtime corresponding +with the new NVIDIA drivers for the flatpak apps that require it.

    +
    flatpak update
    +
    +
    +
  14. +
+
+
+

Uninstalling the NVIDIA drivers

+

The NVIDIA drivers and associated software can be uninstalled and nouveau +driver restored with the instructions in this section.

+
    +
  1. Remove the modprobe.d file that prevents nouveau from loading.

    +
    sudo rm /etc/modprobe.d/disable-nouveau.conf
    +
    +
    +
  2. +
  3. Remove the xorg.conf.d file that adds a search path for X modules.

    +
    sudo rm /etc/X11/xorg.conf.d/nvidia-files-opt.conf
    +
    +
    +
  4. +
  5. Run the sudo /opt/nvidia/bin/nvidia-uninstall

    +
  6. +
  7. Follow the prompts on the screen and reboot the system.

    +
  8. +
+
+
+

Debugging installation of NVIDIA drivers

+
    +
  • The NVIDIA driver places installer and uninstaller logs under +/var/log/nvidia-install and /var/log/nvidia-uninstall.
  • +
  • NVIDIA-Linux-x86_64-<VERSION>.run --advanced-options shows many +parameters to control installation behavior.
  • +
  • NVIDIA-Linux-x86_64-<VERSION>.run --extract-only extracts +installation files into a directory named +NVIDIA-Linux-x86_64-<VERSION>.
  • +
+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/redis.html b/zh_CN/tutorials/redis.html new file mode 100644 index 00000000..61ea6c31 --- /dev/null +++ b/zh_CN/tutorials/redis.html @@ -0,0 +1,1173 @@ + + + + + + + + + + + Run Redis on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Run Redis on Clear Linux* OS

+

Redis is an in-memory key:value store designed for quick lookups, accessible +over the network. In this tutorial, you’ll install redis and launch a +redis-server on Clear Linux OS, plus learn a few basic redis commands. We also invite +you to pull our Clear Linux Redis instance on dockerhub* for application +or infrastructure development.

+

While the redis data structure store can serve as a NoSQL database for a Web application, it’s also easy to integrate in an existing stack. For example, you could use the Redis caching layer for real-time responses on a leaderboard in a gaming app. Redis offers many client libraries with language-specific bindings for Python, Perl, Ruby, and more.

+ +
+

Prerequisites

+
    +
  • Install the redis-native bundle in Clear Linux OS
  • +
  • Install the containers-basic bundle in Clear Linux OS (only required in Example 2)
  • +
+
+
+

Install the redis bundle

+

In Clear Linux OS, find redis in the redis-native bundle.

+
    +
  1. Open a Terminal and login as an administrative user.
  2. +
  3. Add redis-native.
  4. +
+
sudo swupd bundle-add redis-native
+
+
+
+

注解

+

If the bundle already exists, no action is required.

+
+
+
+

Start the redis-server

+

A systemd service unit is available to control the redis server. +By default, redis runs on port 6379.

+
    +
  1. Start the service.

    +
    systemctl start redis
    +
    +
    +
    +

    注解

    +

    To stop redis run systemctl stop redis.

    +
    +
  2. +
  3. Assure the service is running.

    +
    systemctl status redis
    +
    +
    +
  4. +
  5. Verify the redis-server sends a reply.

    +
    redis-cli ping
    +
    +
    +
    +

    注解

    +

    Expected output: PONG.

    +
    +
  6. +
  7. Optional: If you wish to apply advanced configuration, copy the +redis.conf into /etc/ directory.

    +
    sudo cp /usr/share/defaults/etc/redis.conf /etc/
    +
    +
    +
  8. +
+

The redis-server is now ready to use on Clear Linux OS. Try some examples below.

+
+
+

Example 1: Use the redis-cli and try commands

+

One advantage of redis over other NoSQL databases is that developers can +easily access data structures like lists, sets, sorted sets, strings, and +hashes using collection operations commands similar to those found in many +programming languages. These exercises are inspired by try redis io.

+

After your redis-server is running, try some basic commands.

+
    +
  1. Enter the redis-cli. It provides syntax suggestions as you type.

    +
    redis-cli
    +
    +
    +
  2. +
  3. SET key to hold string value. In the set create connections and increment.

    +
    SET server:name "clearlinux"
    +
    +
    +
    MGET server:name
    +
    +
    +
    +

    注解

    +

    If the key does not exist or hold a key value, nil is returned.

    +
    +
    SET connections 100
    +
    +
    +
    INCR connections
    +
    +
    +
    INCR connections
    +
    +
    +
    DEL connections
    +
    +
    +
  4. +
  5. Create a friends list and insert new values at the end of the list.

    +
    RPUSH friends "Deb"
    +
    +
    +
    RPUSH friends "David"
    +
    +
    +
    RPUSH friends "Mary"
    +
    +
    +
  6. +
  7. Modify friends list, using a common slice method with a 0-index.

    +
    LRANGE friends 0 1
    +
    +
    +
    LLEN friends
    +
    +
    +
    LPOP friends
    +
    +
    +
    RPOP friends
    +
    +
    +
    LLEN friends
    +
    +
    +
  8. +
  9. Consider using a hash, a very useful data type, which maps string fields +and string values, offering multiple lookup methods.

    +

    Enter many user key:values with HMSET. Then try HGET and HGETALL.

    +
    HMSET user:1000 name "Robert Noyce" password "SuperEngi9eer" email "robert.noyce@intel.com"
    +
    +
    +
    HGET user:1000 name
    +
    +
    +
    HGET user:1000 email
    +
    +
    +
    HGETALL user:1000
    +
    +
    +
  10. +
+
+
+

Example 2: Run the Clear Linux OS redis docker image

+

We also provide a Clear Linux Redis instance, which is +updated continuously and maintained by Clear Linux OS development.

+
sudo swupd bundle-add containers-basic
+
+
+
sudo systemctl start docker
+
+
+
sudo -E docker pull clearlinux/redis
+
+
+
+
+

Next Steps

+ +
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/smb/smb-desktop.html b/zh_CN/tutorials/smb/smb-desktop.html new file mode 100644 index 00000000..a4934e57 --- /dev/null +++ b/zh_CN/tutorials/smb/smb-desktop.html @@ -0,0 +1,1058 @@ + + + + + + + + + + + Connect to Windows* shared location from Clear Linux* OS desktop — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Tutorials »
  • + +
  • Connect to Windows* shared location from Clear Linux* OS desktop
  • + + +
  • + + + + Edit on GitHub + + + +
  • + +
+ + +
+
+
+
+ +
+

Connect to Windows* shared location from Clear Linux* OS desktop

+

This tutorial explains how to access an existing shared drive on +Windows* via Server Message Block (SMB) / Common Internet File System (CIFS) +from the Clear Linux OS GNOME desktop. CIFS filesystem is generally used to access +shared storage locations, or share files.

+
+

Prerequisites

+ +
+
+

Connect to Windows shared location with Nautilus

+
    +
  1. From the desktop, select Files from the application menu.

    +
    +

    注解

    +

    GNOME Files is also known as Nautilus.

    +
    +
  2. +
  3. In Files, select Other Locations.

    +
    +Files, Other Locations +

    Figure 1: Files, Other Locations

    +
    +
  4. +
  5. In the lower taskbar, beside Connect to Server, +enter the file-sharing address using the Windows sharing schema:

    +
    smb://servername/Share
    +
    +
    +
    +Connect to Server +

    Figure 2: Connect to Server

    +
    +
  6. +
  7. Optional: If there are issues with DNS, you can use an IP address in +place of the servername above. You must still specify the share.

    +
  8. +
  9. Optional: On the Windows machine, in a CLI, retrieve the IP address by +entering the command:

    +
    ifconfig
    +
    +
    +
    +

    注解

    +

    If using the IP address, assure that it is accessible and secure.

    +
    +
  10. +
  11. Select Connect.

    +
  12. +
  13. The server will request authentication, as shown in Figure 3.

    +
    +Authentication +

    Figure 3: Authentication

    +
    +
  14. +
  15. Log in with the same Windows system credentials for which you granted +access to the share.

    +
  16. +
  17. Select the appropriate checkbox to save your credentials. Consider +carefully the security risks as a result of your selection.

    +
  18. +
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/smb/smb.html b/zh_CN/tutorials/smb/smb.html new file mode 100644 index 00000000..f13916f0 --- /dev/null +++ b/zh_CN/tutorials/smb/smb.html @@ -0,0 +1,1098 @@ + + + + + + + + + + + Enable simple file sharing with a Windows* machine using Samba* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Enable simple file sharing with a Windows* machine using Samba*

+

This tutorial describes how to enable simple file sharing from a system +running Clear Linux* OS to a Windows machine using Samba. For more advanced sharing, +refer to the Samba guide.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. For +detailed instructions, follow the steps in Install Clear Linux* OS from the live desktop.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Set up file sharing

+
    +
  1. Log in and get root privileges.

    +
    sudo -s
    +
    +
    +
  2. +
  3. Add the storage-utils bundle, which includes the Samba binaries.

    +
    swupd bundle-add storage-utils
    +
    +
    +
    +

    注解

    +

    The os-clr-on-clr bundle also includes the Samba binaries.

    +
    +
  4. +
  5. Create a configuration file called /etc/samba/smb.conf. In this +example, [Downloads] enables a folder share with a specific user. +[Documents] enables a folder share with any user. The example assumes that a +user account clearlinuxuser already exists.

    +

    If valid users is not specified, then anyone with a user account on the +machine and with their Samba password already set can access the folder. +However, the account is only able to access files and folders for which +they have appropriate permissions.

    +

    Use chown or chmod to change either the owner of the +file or the permissions to allow other users to access the file.

    +
    [Global]
    +map to guest = bad user
    +
    +[Downloads]
    +path=/home/clearlinuxuser/Downloads
    +read only = no
    +guest ok = no
    +valid users = clearlinuxuser
    +
    +[Documents]
    +path=/home/clearlinuxuser/Documents
    +read only = no
    +browsable = yes
    +guest ok = yes
    +
    +
    +
  6. +
  7. Enable the Samba daemon to start every time.

    +
    systemctl enable smb
    +systemctl start smb
    +
    +
    +
  8. +
  9. Use smbpasswd to add the initial password for the user +account to access the share. Be aware that Samba maintains its own list of +passwords for user accounts. The Samba password list can be different than +the password used to log in.

    +
    smbpasswd -a clearlinuxuser
    +
    +
    +
  10. +
+

Setup is complete and a Windows machine on the same network can access the +shares. Windows uses the format \\[server IP or hostname]\folder to +access shares. Access the shares directly with Windows Explorer or by +mapping a network drive.

+

Use the IP address of the Clear Linux OS machine for an easy access method. If the +Clear Linux OS machine is behind an Active Directory domain controller or a DNS server, +use the hostname of the Clear Linux OS machine. For other ways to access shares using a +hostname instead of an IP address, see Chapter 7 of the Samba guide.

+
+
+

Map Clear Linux OS drive in Windows

+
    +
  1. Open Windows Explorer and click on the left sidebar on This PC +to change the options available at the top.

    +
  2. +
  3. Click the Map Network Drive icon and enter the path in the +format: \\[server IP or hostname]\[shared folder]

    +
  4. +
  5. Check the box Connect using different credentials. Enter +the Samba user clearlinuxuser and the password created with +smbpasswd. See Figure 1 for details.

    +
    +Map a network drive in Windows Explorer +

    Figure 1: Map a network drive in Windows Explorer.

    +
    +
  6. +
+

When complete, Windows Explorer displays the share drive as shown in Figure 2.

+
+View a share drive in Windows Explorer +

Figure 2: View a share drive in Windows Explorer.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/spark.html b/zh_CN/tutorials/spark.html new file mode 100644 index 00000000..67eb3a13 --- /dev/null +++ b/zh_CN/tutorials/spark.html @@ -0,0 +1,1117 @@ + + + + + + + + + + + Set up a standalone cluster system using Apache* Spark* — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+
+
+

Set up a standalone cluster system using Apache* Spark*

+

This tutorial describes how to install, configure, and run Apache Spark on +Clear Linux* OS. Apache Spark is a fast general-purpose cluster computing system with +the following features:

+
    +
  • Provides high-level APIs in Java*, Scala*, Python*, and R*.
  • +
  • Includes an optimized engine that supports general execution graphs.
  • +
  • Supports high-level tools including Spark SQL, MLlib, GraphX, and Spark +Streaming.
  • +
+

In this tutorial, you will install Spark on a single machine running the +master daemon and a worker daemon.

+
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +the bare metal installation guide.

+

Before you install any new packages, update Clear Linux OS with the following command:

+
sudo swupd update
+
+
+
+
+

Install Apache Spark

+

Apache Spark is included in the big-data-basic bundle. To install the +framework, enter:

+
sudo swupd bundle-add big-data-basic
+
+
+
+
+

Configure Apache Spark

+
    +
  1. Create the configuration directory with the command:

    +
    sudo mkdir /etc/spark
    +
    +
    +
  2. +
  3. Copy the default templates from /usr/share/defaults/spark to +/etc/spark with the command:

    +
    sudo cp /usr/share/defaults/spark/* /etc/spark
    +
    +
    +
    +

    注解

    +

    Since Clear Linux OS is a stateless system, you should never modify the +files under the /usr/share/defaults directory. The software +updater overwrites those files.

    +
    +
  4. +
  5. Copy the template files below to create custom configuration files:

    +
    sudo cp /etc/spark/spark-defaults.conf.template /etc/spark/spark-defaults.conf
    +sudo cp /etc/spark/spark-env.sh.template /etc/spark/spark-env.sh
    +sudo cp /etc/spark/log4j.properties.template /etc/spark/log4j.properties
    +
    +
    +
  6. +
  7. Edit the /etc/spark/spark-env.sh file and add the +SPARK_MASTER_HOST variable. Replace the example address below +with your localhost IP address. View your IP address using the +hostname -I command.

    +
    SPARK_MASTER_HOST="10.300.200.100"
    +
    +
    +
    +

    注解

    +

    This optional step enables the master’s web user interface to +view information needed later in this tutorial.

    +
    +
  8. +
  9. Edit the /etc/spark/spark-defaults.conf file and update the +spark.master variable with the SPARK_MASTER_HOST address and port 7077.

    +
    spark.master    spark://10.300.200.100:7077
    +
    +
    +
  10. +
+
+
+

Start the master server and a worker daemon

+
    +
  1. Start the master server using:

    +
    sudo /usr/share/apache-spark/sbin/./start-master.sh
    +
    +
    +
  2. +
  3. Start one worker daemon and connect it to the master using the +spark.master variable defined earlier:

    +
    sudo /usr/share/apache-spark/sbin/./start-slave.sh spark://10.300.200.100:7077
    +
    +
    +
  4. +
  5. Open an internet browser and view the worker daemon information using +the master’s IP address and port 8080:

    +
    http://10.300.200.100:8080
    +
    +
    +
  6. +
+
+
+

Run the Spark wordcount example

+
    +
  1. Run the wordcount example using a file on your local host and output the +results to a new file with the following command:

    +
    sudo spark-submit /usr/share/apache-spark/examples/src/main/python/wordcount.py ~/Documents/example_file > ~/Documents/results
    +
    +
    +
  2. +
  3. Open an internet browser and view the application information using +the master’s IP address and port 8080:

    +
    http://10.300.200.100:8080
    +
    +
    +
  4. +
  5. View the results of the wordcount application in the ~/Documents/results file.

    +
  6. +
+

Congratulations!

+

You successfully installed and set up a standalone Apache Spark cluster. +Additionally, you ran a simple wordcount example.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/tutorial-proxy.html b/zh_CN/tutorials/tutorial-proxy.html new file mode 100644 index 00000000..1fa04590 --- /dev/null +++ b/zh_CN/tutorials/tutorial-proxy.html @@ -0,0 +1,1104 @@ + + + + + + + + + + + Setting up proxy — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Setting up proxy

+

This tutorial shows you how to configure your system for use behind an +outbound proxy to access the Internet.

+

Clear Linux OS applications already benefit from the Autoproxy +feature.

+ +
+

Prerequisites

+

This tutorial assumes you have installed Clear Linux OS on your host system. +For detailed instructions on installing Clear Linux OS on a bare metal system, visit +the bare metal installation guide.

+
+
+

Shells and programs in a desktop session

+
+

Terminal

+

Add the following to your ~/.bashrc:

+
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:

+
echo >> ~/.wgetrc <<EOF
+http_proxy = your.http-proxy.url:port
+https_proxy = your.https-proxy.url:port
+ftp_proxy = your.http-proxy.url:port
+no_proxy = your-company-domain.com, localhost
+EOF
+
+
+
+
+

System service (Docker)

+

For Docker (and other services that use systemd), you can follow these steps to configure and check proxy settings:

+
+

注解

+

Be sure to use sudo, as you will need elevated permissions.

+
+
    +
  1. Create /etc/systemd/system/docker.service.d directory to host +configuration information for the Docker service.

    +
  2. +
  3. Create /etc/systemd/system/docker.service.d/http-proxy.conf and add:

    +
    +
    [Service]
    +Environment="HTTP_PROXY=http://your.http-proxy.url:port/"
    +Environment="HTTPS_PROXY=http://your.https-proxy.url:port/"
    +
    +
    +
    +
  4. +
  5. Load the changes and restart the service:

    +
    +
    sudo systemctl daemon-reload
    +sudo systemctl restart docker
    +
    +
    +
    +
  6. +
  7. Verify that changes have loaded:

    +
    +
    systemctl show --property=Environment docker
    +
    +
    +
    Environment=HTTP_PROXY=http://your.http-proxy.url:port/ HTTPS_PROXY=http://your.https-proxy.url:port/
    +
    +
    +
    +
  8. +
+
+

注解

+

This process enables the ability to successfully run docker pull. +Containers themselves must be configured independently.

+
+
+
+

git over ssh

+

Add the following to your ~/.ssh/config:

+
host github.com
+    port 22
+    user git
+    ProxyCommand connect-proxy -S your.ssh-proxy.url:port %h %p
+
+
+
+

注解

+

Though netcat is included with Clear Linux, it is not the BSD version, +which is the one usually used to enable git over ssh.

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/tutorials.html b/zh_CN/tutorials/tutorials.html new file mode 100644 index 00000000..9685fc17 --- /dev/null +++ b/zh_CN/tutorials/tutorials.html @@ -0,0 +1,1016 @@ + + + + + + + + + + + Tutorials — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/wordpress/web-server-install.html b/zh_CN/tutorials/wordpress/web-server-install.html new file mode 100644 index 00000000..c38f2954 --- /dev/null +++ b/zh_CN/tutorials/wordpress/web-server-install.html @@ -0,0 +1,1427 @@ + + + + + + + + + + + Set up a LAMP web server on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set up a LAMP web server on Clear Linux* OS

+

This tutorial provides instructions on how to set up a +LAMP web server on Clear Linux* OS and how +to use phpMyAdmin* to manage an associated database. Note that this +tutorial installs MariaDB*, which is a drop-in replacement for MySQL*.

+

In order to create a web server using Clear Linux OS as the host OS, your host system +must be running Clear Linux OS. This tutorial assumes you have installed Clear Linux OS on your +host system. For detailed instructions on installing Clear Linux OS on a bare metal +system, visit Install Clear Linux* OS from the live desktop.

+

This tutorial covers:

+ +
+

Install Apache

+

Apache is an open source HTTP web server application that can run on several +operating systems, including Clear Linux OS. Go to the Apache HTTP Server Project +for more information.

+
+

Install the web-server-basic bundle

+

The web-server-basic bundle contains the packages needed to install the +Apache software bundle on Clear Linux OS.

+
+

注解

+

Before you install new packages, update the Clear Linux OS with the following +console command:

+
sudo swupd update
+
+
+
+
    +
  1. To install the bundle, enter the following command:

    +
    sudo swupd bundle-add web-server-basic
    +
    +
    +
  2. +
  3. To start the Apache service, enter the following commands:

    +
    sudo systemctl enable httpd.service
    +sudo systemctl start httpd.service
    +
    +
    +
  4. +
  5. To verify that the Apache server application is running, open a web +browser and navigate to: http://localhost.

    +

    If the service is running, a confirmation message will appear, similar to the +message shown in figure 1.

    +
    +This web server is operational from host. +

    Figure 1: Confirmation that the Apache service is running.

    +
    +
    +

    注解

    +

    The index.html file is located in the /var/www/html directory +of your host system. You will copy this file into a new location after you +modify the configuration in the next step.

    +
    +
  6. +
+
+
+
+

Change the default configuration and data directory

+

Clear Linux OS is designed to be a Stateless operating system which means that you +must create an optional configuration file to override the default values. +The default location of the Apache configuration file, httpd.conf, +is located in the /usr/share/defaults/httpd directory. Clear Linux OS can +override this directory as part of the stateless paradigm. This default +.conf file includes the following directives that allow for additional +locations of configuration definitions:

+
# Virtual hosts
+IncludeOptional /usr/share/defaults/httpd/conf.d/*.conf
+IncludeOptional /usr/share/defaults/httpd/conf.modules.d/*.conf
+IncludeOptional /etc/httpd/conf.d/*.conf
+IncludeOptional /etc/httpd/conf.modules.d/*.conf
+
+
+

In this section you will define your own httpd.conf file to override the +default values, and define a custom DocumentRoot for your web server.

+
    +
  1. Create the directory structure for /etc/httpd/conf.d.

    +
    sudo mkdir -p /etc/httpd/conf.d
    +
    +
    +
  2. +
  3. Create and open the httpd.conf file in your new /etc/httpd/conf.d +directory.

    +
    sudo nano /etc/httpd/conf.d/httpd.conf
    +
    +
    +
  4. +
  5. Add the DocumentRoot variable to httpd.conf. Copy the content +listed below into the new /etc/httpd/conf.d/httpd.conf file.

    +
    #
    +# Set a new location for DocumentRoot
    +#
    +DocumentRoot "/var/www/tutorial"
    +
    +#
    +# Relax access to content within /var/www/tutorial for this example
    +#
    +<Directory "/var/www/tutorial">
    +  AllowOverride none
    +  Require all granted
    +</Directory>
    +
    +
    +
  6. +
  7. Create a new DocumentRoot directory structure and copy the +index.html file from /var/www/html directory to +/var/www/tutorial.

    +
    sudo mkdir –p /var/www/tutorial
    +cd /var/www/tutorial
    +sudo cp /var/www/html/index.html .
    +
    +
    +
  8. +
  9. To ensure a successful setup, edit the new index.html file with an +obvious change.

    +
    sudo nano index.html
    +
    +
    +

    For example, we changed the default message

    +

    “It works!”

    +

    to

    +

    “It works from its new location!”

    +
  10. +
  11. Stop and then restart httpd.service.

    +
    sudo systemctl stop httpd.service
    +sudo systemctl start httpd.service
    +
    +
    +
  12. +
  13. Go to http://localhost to view the new screen. You should see your updated +default message from step 5.

    +
  14. +
  15. Change the configuration back to the default /var/www/html +location. To do this, edit the /etc/httpd/conf.d/httpd.conf file +again and replace any instance of /var/www/tutorial with /var/www/html.

    +
    sudo nano /etc/httpd/conf.d/httpd.conf
    +
    +
    +
  16. +
  17. Stop and then restart httpd.service.

    +
    sudo systemctl stop httpd.service
    +sudo systemctl start httpd.service
    +
    +
    +
  18. +
  19. Go to http://localhost and verify that you can see the default screen +again.

    +
  20. +
  21. Optionally, remove the /var/www/tutorial directory you previously created.

    +
    sudo rm /var/www/tutorial/index.html
    +sudo rmdir /var/www/tutorial
    +
    +
    +
  22. +
+
+
+

Install PHP

+

An Apache installation allows you to display static web pages. Enabling PHP +allows you to generate and display dynamic web pages. To add this +functionality to your web server, install PHP on your system.

+
    +
  1. To get the php components, enter the following command:

    +
    sudo swupd bundle-add php-basic
    +
    +
    +
  2. +
  3. To enable PHP, enter the following commands:

    +
    sudo systemctl enable php-fpm.service
    +sudo systemctl start php-fpm.service
    +sudo systemctl restart httpd.service
    +
    +
    +

    After restarting the Apache service, test your PHP installation.

    +
  4. +
  5. Create and open a file named phpinfo.php in the /var/www/html/ +directory using a text editor.

    +
    sudo nano /var/www/html/phpinfo.php
    +
    +
    +
  6. +
  7. Add the following line to the file:

    +
    <?PHP phpinfo() ?>
    +
    +
    +
  8. +
  9. Go to http://localhost/phpinfo.php.

    +
  10. +
  11. Verify that the PHP information screen appears, similar to figure 2:

    +
    +PHP information screen +

    Figure 2: The PHP information screen.

    +
    +
  12. +
+

If the PHP information screen is displayed, you have successfully installed +the PHP components and are now ready to add your database application to +complete your LAMP server implementation.

+
+
+

Install MariaDB

+

Install MariaDB to store content. MariaDB is a drop-in replacement for MySQL +and is available in the database-basic Clear Linux OS bundle.

+
    +
  1. To install the database-basic bundle, enter the following command:

    +
    sudo swupd bundle-add database-basic
    +
    +
    +
  2. +
  3. To start MariaDB after it is installed, enter the following commands:

    +
    sudo systemctl enable mariadb
    +sudo systemctl start mariadb
    +
    +
    +
  4. +
  5. To check the status of MariaDB, enter the following command:

    +
    sudo systemctl status mariadb
    +
    +
    +

    Press Ctrl + c or q to exit.

    +
  6. +
+
+

Security hardening

+

With the MariaDB service running, we can perform some basic security +hardening.

+
    +
  1. To add a basic layer of security, enter the following command:

    +
    sudo mysql_secure_installation
    +
    +
    +
  2. +
  3. Respond to the questions that appear in the script below.

    +
    +

    注解

    +

    Our suggested responses follow each question.

    +
    +
    Enter current password for root (enter for none):
    +
    +
    +

    In order to secure MariaDB, we need the current password for the root +user. For a newly installed MariaDB without a set root password, the +password is blank. Thus, press enter to continue.

    +
    OK, successfully used password, moving on...
    +
    +Set root password? [Y/n]
    +
    +
    +

    Set the root password to prevent unauthorized MariaDB root user logins. +To set a root password, type ‘y’.

    +
    New password:
    +
    +
    +

    Type the desired password for the root user.

    +
    Re-enter new password:
    +
    +
    +

    Re-type the desired password for the root user.

    +
    Password updated successfully!
    +Reloading privilege tables..
    +... Success!
    +
    +Remove anonymous users? [Y/n]
    +
    +
    +

    By default, a MariaDB installation includes an anonymous user that allows +anyone to log in to MariaDB without a user account. This anonymous user +is intended only for testing and for a smoother installation. To remove +the anonymous user and make your database more secure, type ‘y’.

    +
    ... Success!
    +Disallow root login remotely? [Y/n]
    +
    +
    +

    Normally, root should only be allowed to connect from the ‘localhost’. This +ensures that someone cannot guess the root password from the network. To +block any remote root login, type ‘y’.

    +
    ... Success!
    +Remove test database and access to it? [Y/n]
    +
    +
    +

    By default, MariaDB includes a database named ‘test’ which anyone can access. +This database is also intended only for testing and should be removed. To +remove the test database, type ‘y’.

    +
    - Dropping test database...
    +... Success!
    +- Removing privileges on test database...
    +... Success!
    +Reload privilege tables now? [Y/n]
    +
    +
    +

    Reloading the privilege tables ensures all changes made so far take +effect immediately. To reload the privilege tables, type ‘y’.

    +
    ... Success!
    +
    +Cleaning up...
    +
    +
    +

    All done! If you’ve completed all of the above steps, your MariaDB +installation should now be secure.

    +

    Thanks for using MariaDB!

    +
  4. +
+

The MariaDB installation is complete, and we can now install phpMyAdmin to +manage the databases.

+
+
+
+

Install phpMyAdmin

+

The web-based tool phpMyAdmin is a straightforward way to manage MySQL or +MariaDB databases. Visit the phpMyAdmin website for the complete +discussion regarding phpMyAdmin, its documentation, the latest downloads, +and other useful information.

+

In this tutorial, we use the latest English version of phpMyAdmin.

+
    +
  1. Download the phpMyAdmin-<version>-english.tar.gz file to your +~/Downloads directory. Here, <version> refers to the current +version available at https://www.phpmyadmin.net/downloads.

    +
    +

    注解

    +

    This example downloads and uses version 4.6.4.

    +
    +
  2. +
  3. Once the file has been successfully downloaded and verified, decompress +the file and directories into the Apache web server document root +directory. Use the following commands:

    +
    cd /var/www/html
    +sudo tar –xzvf ~/Downloads/phpMyAdmin-4.6.4-english.tar.gz
    +
    +
    +
  4. +
  5. To keep things simple, rename the newly created +phpMyAdmin-4.6.4-english directory to phpMyAdmin with the +following command:

    +
    sudo mv phpMyAdmin-4.6.4-english phpMyAdmin
    +
    +
    +
  6. +
+
+
+

Use phpMyAdmin to manage a database

+

You can use the phpMyAdmin web-based tool to manage your databases. Follow the +steps below for setting up a database called “WordPress”.

+
    +
  1. Verify that a successful installation of all LAMP server components by +going to http://localhost/phpMyAdmin. See figure 3.

    +
  2. +
  3. Log in with your root userid and the password you set up when you ran the +mysql_secure_installation command. Enter your +credentials and select Go to log in:

    +
    +phpMyAdmin login page +

    Figure 3: The phpMyAdmin login page.

    +
    +
  4. +
  5. Verify a successful login by confirming that the main phpMyAdmin page +displays, as shown in figure 4:

    +
    +phpMyAdmin dashboard +

    Figure 4: The phpMyAdmin dashboard.

    +
    +
  6. +
  7. Set up a database by selecting the Databases tab, as shown in +figure 5.

    +
  8. +
  9. Enter WordPress in the text field below the Create database +label.

    +
  10. +
  11. Select the utf8_unicode_ci option from the +Collation drop-down menu beside the text field.

    +
  12. +
  13. Click Create.

    +
    +Databases tab +

    Figure 5: The Databases tab.

    +
    +
  14. +
  15. Set up user permissions by selecting the WordPress database +located in the left panel. See figure 6.

    +
  16. +
  17. Select the Privileges tab. Figure 6 shows its contents.

    +
    +Privileges tab +

    Figure 6: The Privileges tab.

    +
    +
  18. +
  19. Click Add user account located at the bottom of the +Privileges tab. The Add user account page appears, as shown +in figure 7.

    +
    +User accounts tab +

    Figure 7: The User accounts tab.

    +
    +
  20. +
  21. Enter the following information in the corresponding fields that appear +in figure 7 above:

    +
      +
    • User name: wordpressuser
    • +
    • Password: wp-example
    • +
    • Re-type: wp-example
    • +
    +
  22. +
  23. In the Database for user account section, select +Grant all privileges on database “WordPress”.

    +
  24. +
  25. At the bottom of the page, click Go.

    +
  26. +
+

If successful, you should see the screen shown in figure 8:

+
+User added successfully +

Figure 8: The user wordpressuser is successfully added.

+
+

Congratulations!

+

You have now created a fully functional LAMP server along with a +WordPress*-ready database using Clear Linux OS.

+
+
+

Next steps

+

Next, add the WordPress components needed to host a WordPress website with Set up WordPress* on a LAMP web server.

+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/wordpress/wordpress.html b/zh_CN/tutorials/wordpress/wordpress.html new file mode 100644 index 00000000..e17713b9 --- /dev/null +++ b/zh_CN/tutorials/wordpress/wordpress.html @@ -0,0 +1,1010 @@ + + + + + + + + + + + WordPress* on Clear Linux* OS — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

WordPress* on Clear Linux* OS

+

This tutorial describes how to setup a web server to host a WordPress* site on a +Clear Linux* OS system. The tutorial is split into two sections:

+
    +
  1. Set up a LAMP web server on Clear Linux* OS
  2. +
  3. Set up WordPress* on a LAMP web server
  4. +
+

If you already have a Clear Linux OS based LAMP web server, +you can skip ahead to the second section of this tutorial.

+
+

注解

+

This tutorial is for development and testing purposes only. Additional steps +are required to secure production systems. Those steps are beyond the scope +of this tutorial.

+
+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/wordpress/wp-install.html b/zh_CN/tutorials/wordpress/wp-install.html new file mode 100644 index 00000000..a1459d89 --- /dev/null +++ b/zh_CN/tutorials/wordpress/wp-install.html @@ -0,0 +1,1151 @@ + + + + + + + + + + + Set up WordPress* on a LAMP web server — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Set up WordPress* on a LAMP web server

+

This tutorial shows you how to install the WordPress* components on your Clear Linux OS +LAMP server. At the end of +Set up a LAMP web server on Clear Linux* OS, you created a WordPress-ready database using +phpMyAdmin* and MariaDB*. Now that the LAMP server is up and running, you +can add the WordPress components needed to host a WordPress website on your system.

+
+

Before you begin

+

This tutorial assumes that you have successfully completed +Install Clear Linux* OS from the live desktop and you have Set up a LAMP web server on Clear Linux* OS.

+
+
+

Create a WordPress server

+

WordPress can be installed in a variety of ways. These instructions are +written for users who have followed our instructions for installing phpMyAdmin +when they set up a LAMP web server. Note that +all steps in this tutorial have been tested using a NUC6i5SYH Intel® NUC. +Visit the NUC6i5SYH product page for detailed information.

+

Numerous online articles are available to help you name your website and +acquire the necessary certificates. Those tasks are beyond the scope of this tutorial.

+

You can take several actions to harden your website from attacks. The security +of your website and the data it contains are complex and ever-evolving tasks. +Prioritize security if you plan to expose your website to the outside world. +This tutorial does not address security measures that you can take to harden +your site but we strongly encourage you to take action.

+
+

注解

+

Throughout this tutorial, we reference your website name as <your_website>.

+
+
+

Download WordPress and manage directories

+

For this tutorial, you will create a WordPress blog that can be accessed at: +http://<your_website>/blog.

+

To accomplish this setup, you must add WordPress components to the /var/www/html/blog +directory.

+

Follow these steps:

+
    +
  1. Navigate to the top level of the website’s root directory:

    +
    cd /var/www/html
    +
    +
    +
  2. +
  3. Download the latest version of WordPress:

    +
    sudo curl -O https://wordpress.org/latest.tar.gz
    +
    +
    +
  4. +
  5. Extract all files and directories from the downloaded file:

    +
    sudo tar –xzvf latest.tar.gz
    +
    +
    +
  6. +
  7. Rename the top-level WordPress directory to “blog”:

    +
    sudo mv wordpress blog
    +
    +
    +
  8. +
  9. Remove the downloaded tar file:

    +
    sudo rm latest.tar.gz
    +
    +
    +
  10. +
+
+
+

Set up WordPress with web-based GUI

+

Recall that you created a database and user when you installed phpMyAdmin when you +set up a Clear Linux OS based web server. Next, you must +connect WordPress to the database and install WordPress.

+

To continue with the setup, go to: http://<your_website>/blog/wp-admin/install.php. +The WordPress language option screen appears, as shown in figure 1.

+
    +
  1. Select English and click Continue.

    +
    +WordPress language selection +

    Figure 1: WordPress language selection screen.

    +
    +

    The WordPress installation continues until the Welcome screen appears, as shown in +figure 2:

    +
    +WordPress welcome screen +

    Figure 2: WordPress Welcome screen.

    +
    +
  2. +
  3. Click Let’s go!.

    +
  4. +
  5. Enter database connection specifics in the screen that appears, as shown in figure 3 +below.

    +
      +
    • Database name: WordPress
    • +
    • Database username: wordpressuser
    • +
    • Database password: wp-example (asterisks will not appear in the text box)
    • +
    • Database host: localhost
    • +
    • Table prefix: wp_
    • +
    +
    +Database connection details +

    Figure 3: Information necessary for WordPress to connect to the database.

    +
    +
  6. +
  7. Click Submit to complete the setup.

    +

    Figure 4 shows the confirmation screen that verifies a successful setup. WordPress +is connected to the MariaDB database.

    +
    +Successful database connection. +

    Figure 4: Successful WordPress connection.

    +
    +
  8. +
  9. Click Run the install. +The installer runs until WordPress is fully installed on your system.

    +
  10. +
+
+
+

Complete successful login

+

Once the installation is complete, you can name your blog and create a WordPress username +and password. See figure 5.

+
+WordPress user creation +

Figure 5: WordPress site information screen.

+
+
    +
  1. Enter all required information.

    +
  2. +
  3. Click Install WordPress.

    +
  4. +
  5. Verify that the initial login screen appears once the installation is complete. See figure 6:

    +
    +WordPress login +

    Figure 6: The WordPress login screen.

    +
    +
  6. +
  7. Enter your WordPress username and password.

    +
  8. +
  9. Check Remember me to save your credentials.

    +
  10. +
  11. Click Log in.

    +
  12. +
+

Figure 7 shows the WordPress dashboard after a successful login:

+
+WordPress Dashboard +

Figure 7: The WordPress dashboard.

+
+

You are ready to go!

+

To check out your blog as it is seen by the outside world, enter: +http://<your_website>/blog on your browser. Figure 8 shows the result:

+
+WordPress blog +

Figure 8: Your WordPress blog.

+
+

Congratulations, your WordPress blog is up and running!

+

You have successfully installed WordPress on a host system.

+

Add new entries to your blog and share them with the world using Clear Linux OS!

+
+
+
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zh_CN/tutorials/yubikey-u2f.html b/zh_CN/tutorials/yubikey-u2f.html new file mode 100644 index 00000000..527271c9 --- /dev/null +++ b/zh_CN/tutorials/yubikey-u2f.html @@ -0,0 +1,1087 @@ + + + + + + + + + + + Enable YubiKey U2F Support — Documentation for Clear Linux* project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Enable YubiKey U2F Support

+

YubiKey* is a USB security token manufactured by Yubico. Depending on the +model, a YubiKey can support different authentication protocols including: +One-Time Password (OTP), Smart card, FIDO2, and Universal 2nd Factor (U2F).

+

These instructions will go over configuring a YubiKey for U2F authentication +through a web browser on a Clear Linux* OS system.

+

A list of websites +accepting U2F authentication with the YubiKey is available on the Yubico +website. See the Yubico website to learn more about the Yubikey: +https://www.yubico.com/getstarted/meet-the-yubikey/

+ +
+

Prerequisites

+

This tutorial assumes you have:

+
    +
  1. Clear Linux OS installed and running.
  2. +
  3. Mozilla Firefox installed on Clear Linux OS.
  4. +
  5. A YubiKey.
  6. +
+
+
+

Enable Linux udev rules for YubiKey

+

udev is the Linux device manager which handles events when USB +devices are added and removed. Custom rules needs to be created to properly +identify the YubiKey and provide applications access.

+

These instructions are derived from: Yubico support article Using Your U2F +YubiKey with Linux

+
    +
  1. Create the udev rules folder under /etc

    +
    sudo mkdir -p /etc/udev/rules.d/
    +
    +
    +
  2. +
  3. Download the u2f rules from the Yubico GitHub:

    +
    curl -O https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules
    +
    +
    +
  4. +
  5. Move the downloaded 70-u2f.rules file into the /etc/udev +folder

    +
    sudo mv 70-u2f.rules /etc/udev/rules.d/
    +
    +
    +
  6. +
  7. The udev rules should automatically be reloaded. However, they can be +manually reloaded or reboot the system:

    +
    sudo udevadm control --reload-rules && sudo udevadm trigger
    +
    +
    +
  8. +
  9. Plugin and validate the YubiKey appears as a USB device:

    +
    lsusb
    +
    +
    +
  10. +
+
+
+

Enable U2F in Mozilla Firefox

+

Firefox comes with U2F web authentication support disabled by default. U2F +needs to be enabled in the advanced settings.

+

These instructions are derived from: Yubico support article Enabling U2F +support in Mozilla Firefox

+
    +
  1. Launch Mozilla Firefox

    +
  2. +
  3. In the URL bar, type about:config to access the advanced +settings.

    +
    about:config
    +
    +
    +
  4. +
  5. Click the I accept the risk! button to continue to the advanced settings

    +
  6. +
  7. Search for the security.webauth.u2f and double-click it +so Value becomes true.

    +
  8. +
+

Your YubiKey is now usable on Clear Linux OS with Mozilla Firefox with websites that +support U2F authentication.

+
+ +
+ + +
+ +
+ + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + \ No newline at end of file