While Atomic Host has been around since 2014 there are still a lot of people that aren’t as familiar with the technology. The Atomic team within Red Hat, along with numerous other upstream contributors, have brought the OSTree and RPM-OSTree technology a long way. At the Fedora user and contributor conference (known as Flock) this week we will be giving a lab on Atomic Host designed to let new users learn about Atomic Host. The audience for this lab is anyone familiar with Linux and interested in learning a new technology.
The entire lab will cover quite a few features of Atomic Host including:
- Getting Familiar With Atomic Host
- Viewing Changes To A Deployed System
- Configuring Storage for Containers
- Atomic Host Rebasing
- Atomic Host Upgrades and Rollbacks
- Browsing OS History
- Package Layering
- Experimental Features (livefs, remove, replace)
- Containerized and Non-Containerized Applications
In Part 0: Preparation we are going to set up an existing Fedora 26 Atomic Host for the rest of the lab sections.
Getting A Fedora 26 Atomic Host
In this lab you’ll need to start with a Fedora 26 Atomic Host. It is
recommended you start from the
13ed0f2) release. The
corresponding media that was built from that release was part of
26-20170821.0 compose. You can spin up this release by booting
in AWS or by spinning up a vagrant box or cloud image. Information on
AMIs or links to downloads can be found here.
For demonstration purposes I’ll be using the libvirt vagrant box. If you are on Fedora please see the Fedora Developer Portal for instructions on how to get started with Vagrant.
After downloading the libvirt vagrant box
we can now add the box to Vagrant:
$ vagrant box add --name F26AHLab ./Fedora-Atomic-Vagrant-26-20170821.0.x86_64.vagrant-libvirt.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'F26AHLab' (v0) for provider: box: Unpacking necessary files from: file:///path/Fedora-Atomic-Vagrant-26-20170821.0.x86_64.vagrant-libvirt.box ==> box: Successfully added box 'F26AHLab' (v0) for 'libvirt'!
I can now bring up and ssh into the Atomic Host:
$ mkdir atomic && cd atomic && vagrant init F26AHLab && vagrant up A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. Bringing machine 'default' up with 'libvirt' provider... ==> default: Creating image (snapshot of base box volume). ... $ vagrant ssh [vagrant@localhost ~]$ [vagrant@localhost ~]$ sudo su - [root@localhost ~]# grep PRETTY_NAME /etc/os-release PRETTY_NAME="Fedora 26 (Atomic Host)" [root@localhost ~]# [root@localhost ~]# rpm-ostree status State: idle Deployments: ● fedora-atomic:fedora/26/x86_64/atomic-host Version: 26.110 (2017-08-20 18:10:09) Commit: 13ed0f241c9945fd5253689ccd081b5478e5841a71909020e719437bbeb74424
Extend Root Filesystem
For this lab we are going to be adding some files to the root filesystem and also rebasing to other OSTrees. Let’s add a significant amount of space to the root filesystem to accommodate this:
[root@localhost ~]# lvresize --resizefs --size=+10G /dev/atomicos/root Size of logical volume atomicos/root changed from 2.93 GiB (750 extents) to 12.93 GiB (3310 extents). Logical volume atomicos/root successfully resized. ...
Download Lab Files Archive
A goal of this lab is to be able to be executed in an offline scenario. This means we have archived a bunch of files of the lab and stored them in a tar.gz for consumption. It also means that a user should be able to execute this lab any time in the future without worrying about missing necessary files that are no longer on the web.
Please download the atomic-host-lab.tar.gz
file into the
/srv/localweb directory on the running atomic host:
NOTE: If you downloaded the
atomic-host-lab.tar.gz file before
you started the Atomic Host then you can use
scp to copy
the file in.
[root@localhost ~]# mkdir /srv/localweb && chmod 777 /srv/localweb [root@localhost ~]# cd /srv/localweb [root@localhost localweb]# curl -O https://201708-atomic-host-lab.nyc3.digitaloceanspaces.com/atomic-host-lab.tar.gz ... [root@localhost localweb]# tar -xf atomic-host-lab.tar.gz [root@localhost localweb]# rm atomic-host-lab.tar.gz [root@localhost localweb]# cd [root@localhost ~]#
Set Up Local Webserver For Archive Files
Throughout this entire lab we’ll use a local webserver to host the files from the archive. Initially this service will use builtin http server modules within Python. Let’s create and start that service now:
[root@localhost ~]# cat <<'EOF' > /etc/systemd/system/localweb.service [Unit] [Service] WorkingDirectory=/srv/localweb ExecStart=/usr/bin/python3 -m http.server [Install] WantedBy=multi-user.target EOF [root@localhost ~]# [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl enable --now localweb.service Created symlink /etc/systemd/system/multi-user.target.wants/localweb.service → /etc/systemd/system/localweb.service. [root@localhost ~]# systemctl status localweb.service ● localweb.service Loaded: loaded (/etc/systemd/system/localweb.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2017-08-29 16:36:45 UTC; 5s ago Main PID: 2974 (python3) Tasks: 1 (limit: 4915) Memory: 19.6M CPU: 342ms CGroup: /system.slice/localweb.service └─2974 /usr/bin/python3 -m http.server Aug 29 16:36:45 localhost.localdomain systemd: Started localweb.service. [root@localhost ~]# [root@localhost ~]# curl http://localhost:8000/hello.txt hello world
Configure OSTree/YUM Repositories
Our local webservice is now running and hosting files that
are a front for an OSTree repository as well as a YUM repository.
Let’s remove the old remote from the system and configure it so
ostree pulls from that local server:
[root@localhost ~]# ostree remote delete fedora-atomic [root@localhost ~]# ostree remote add --no-gpg-verify local http://localhost:8000/ostreerepo/
Let’s take it one step farther and tell the current deployment
on the system to track the
ref from the
local remote. We’ll then restart
make the system pick up the changes.
[root@localhost ~]# ostree admin set-origin --index 0 local http://localhost:8000/ostreerepo/ fedora/26/x86_64/updates/atomic-host [root@localhost ~]# systemctl restart rpm-ostreed.service
Finally, we’ll delete all existing YUM repositories and add our
localyum repository to the system.
[root@localhost ~]# rm /etc/yum.repos.d/*.repo [root@localhost ~]# cat <<'EOF' > /etc/yum.repos.d/localyum.repo [localyum] baseurl=http://localhost:8000/yumrepo/ enabled=1 gpgcheck=0 EOF
Part 0 Wrap Up
Part 0 of this lab has been specifically to get the system prepared for later sections of the lab. You may have some questions. That’s OK. Hopefully we’ll answer them in the later sections of this lab. In the next post we’ll get more familiar with Atomic Host.