Red Hat Enterprise Linux Atomic Host is a small footprint, purpose-built version of Red Hat Enterprise Linux that is designed to run containerized workloads. Building on the success of our last release, Red Hat’s Atomic-OpenShift team is excited to announce the general availability of Red Hat Enterprise Linux Atomic Host 7.2.6. This release features improvements in rpm-ostree, cockpit, skopeo, docker, and the atomic CLI. The full release notes can be found here. This post is going to explore a major new feature

, currently available as a Technology Preview: package layering.

Increasing the Flexibility of Atomic Host Deployments

By design, Atomic Host is an immutable operating system with simplified configuration, but state does need maintained between reboots, so directories like /etc/ and /var are writable for configuration and data respectively. All code is deployed to Atomic Host through atomic upgrades and rollbacks. Each release is composed from a fixed set of packages and, all workloads are deployed on top as Linux containers.

Containers make it simple to run traditional applications and microservices. Containers also make it simple to run debugging tools or monitoring agents on the host. The challenge is, most of the agents and tools that we use today were designed before containers were invented - hence, not every piece of software is easy to migrate into a container.

For the past two years, Red Hat has been promoting the concept of super-privileged containers (SPCs) to handle the “tools and agents” use case. We still believe this is an ideal approach for solving these use cases in a containerized environment.  That said, there are plenty of situations where it would be nice to simply add an rpm, or even a handful, to Atomic Host. Customers have been asking to do this, and we are excited to announce that it is now possible.

Package Layering

Let’s say we want to run something like lm_sensors on Atomic Host. We can easily create a dedicated SPC or add it to something along the lines of the rhel-tools container to accomplish this... or now we can just add the package plus dependencies directly to Atomic Host. This is especially useful for things like monitoring agents, drivers, etc.

In the following example I’ll add lm_sensors which will also pull in some perl dependencies.

bash-4.2# rpm-ostree pkg-add lm_sensors

notice: pkg-add is a preview command and subject to change.

Downloading metadata: [===================================================] 100%

Resolving dependencies... done

Will download: 29 packages (12.1 MB)

Downloading from rhel-7-server-rpms: [==============================] 100%

Importing: [==============================================================] 100%

Checking out tree b672bf8... done

Overlaying... done

Running %post for lm_sensors...... done

Writing rpmdb... done

Writing OSTree commit... done

Copying /etc changes: 27 modified, 4 removed, 62 added

Transaction complete; bootconfig swap: yes deployment count change: 1

Added:

lm_sensors-3.3.4-11.el7.x86_64

lm_sensors-libs-3.3.4-11.el7.x86_64

perl-4:5.16.3-286.el7.x86_64

---truncating dep list ---------------------------------------------------------------------

Run "systemctl reboot" to start a reboot
 

Now that the packages have been added and installed, we must reboot to use them.

bash-4.2#atomic host status

State: idle

Deployments:

* rhel-atomic-host-ostree:rhel-atomic-host/7/x86_64/standard

Version: 7.2.6 (2016-08-05 00:50:20)

BaseCommit: b672bf8a457cb28e003dee20c53749636ef5fce3e4743afe4aaad269d3aaa62a

Commit: 7694a2f0dc4d6d94346fadc429cc9914ec52578d0d0ef2612799cb2b85293e0f

OSName: rhel-atomic-host

Packages: lm_sensors

rhel-atomic-host-ostree:rhel-atomic-host/7/x86_64/standard

Version: 7.2.6 (2016-07-29 19:54:25)

Commit: b672bf8a457cb28e003dee20c53749636ef5fce3e4743afe4aaad269d3aaa62a

OSName: rhel-atomic-host
 

Checking the status of the host shows that we’ve added lm_sensors to the system!

The Fine Print

  1. pkg-add and pkg-remove is a tech preview feature and we would love for users to try it out and provide feedback.
  2. Currently we’re limited on installing packages that do not add users to the system. We will be working on adding this capability in the future, but in the meantime that will limit the number of packages that are installable via package layering. The transaction will currently error out if a package attempts to add a user.
  3. Dependencies are resolved in a familiar way using libdnf.  By default you’ll have access to the Red Hat Enterprise Linux repositories, and simply add any needed 3rd party repo files to /etc/yum.repos.d/.
  4. When `atomic host upgrade` is run layered packages will also be updated if newer versions are available in their repos.
  5. We can restore the system to its original state by running `rpm-ostree pkg remove [package(s)]` followed by a reboot.

Conclusion

At Red Hat, we think that containers and container hosts should make your life easier. While overlay packages are not the solution to every problem, they can be the difference between a convenient fives minutes of work or four hours of yak shaving. In other words, overlay packages could be the difference between being able to deploy an agent or tool quickly or spending half of a day building a container when you can’t or don’t want to.

We hope you enjoy using this release as much as we did making it. Please check out the new package layering functionality as well as a host of other new packages and features and let us know what you think by leaving a comment (below).