title | author | date | published | comments | tags |
---|---|---|---|---|---|
Automate Building Atomic Host |
trishnag |
2017-02-13 12:00:00 UTC |
true |
true |
atomic, fedora, ansible, automation, ostree |
Project Atomic hosts are built from standard RPM packages which have been composed into filesystem trees using rpm-ostree. This guide provides method for automation of Building Atomic host(Creating new trees).
One of the primary benefits to Atomic Host and OSTree has been the ability to "configure once, deploy many times" using custom OSTree images. But the process for doing so wasn't streamlined or well-documented. I'm helping change that.
The procedure and playbook below will enable you to create your own Atomic Host OSTree image. This is the first step in creating your own "distributions" of Atomic Host to install on your cloud servers. Note that it will install a bunch of requirements on your local server, as well as using system resources heavily. As such, you may want to run it on a development machine instead of your personal laptop.
- Fedora Atomic QCOW2 Image. The image can be downloaded from here: Fedora-Atomic
- Make sure that Ansible is installed on your system:
$ sudo dnf install ansible
. Note that I am installing on my Fedora-Workstation.
Clone the Git repo on your working machine Build-Atomic-Host
$ git clone https://github.com/trishnaguha/build-atomic-host.git
$ cd build-atomic-host
The following creates VM from QCOW2 Image where username is atomic-user
and password is atomic
.
Here atomic-node
in the instance name.
$ sudo sh create-vm.sh atomic-node /path/to/fedora-atomic25.qcow2
# For example: /var/lib/libvirt/images/Fedora-Atomic-25-20170131.0.x86_64.qcow2
The tree is made available via web server. The following playbook creates directory structure, initializes OSTree repository and starts the HTTP server.
$ ansible-playbook httpserver.yml --ask-sudo-pass
Use ip addr
to check IP Address of the HTTP server.
Replace the variables given in vars/atomic.yml with OSTree name and HTTP Server IP Address. For Instance:
# Variables for Atomic host
atomicname: my-atomic
httpserver: 192.168.122.1
Here my-atomic
is OSTree name and 192.168.122.1
is HTTP Server IP Address.
The following playbook installs requirements, starts HTTP Server, composes OSTree, performs SSH-setup and rebases on created Tree.
$ ansible-playbook main.yml --ask-sudo-pass
The following command returns the IP Address of the running Atomic instance
$ sudo virsh domifaddr atomic-node
Now SSH to the Atomic Host and reboot it so that it can reboot in to the created OSTree:
$ ssh atomic-user@<atomic-hostIP>
$ sudo systemctl reboot
Wait for 10 minutes, You may want to go for a Coffee now.
$ ssh atomic-user@192.168.122.221
[atomic-user@atomic-node ~]$ sudo rpm-ostree status
State: idle
Deployments:
● my-atomic:fedora-atomic/25/x86_64/docker-host
Version: 25.1 (2017-02-07 05:34:46)
Commit: 15b70198b8ec7fd54271f9672578544ff03d1f61df8d7f0fa262ff7519438eb6
OSName: fedora-atomic
fedora-atomic:fedora-atomic/25/x86_64/docker-host
Version: 25.51 (2017-01-30 20:09:59)
Commit: f294635a1dc62d9ae52151a5fa897085cac8eaa601c52e9a4bc376e9ecee11dd
OSName: fedora-atomic
Now you have the Updated Tree.
If you are willing to Compose your own tree which includes addition or deletion of packages of your own choice, Please follow Compose-your-own-tree by Jason Brooks.
Shout-Out for the following folks:
- Gerard Braad who mentored me for the project.
- Jonathon Lebon who demonstrated Building Atomic host workshop in DevConf.CZ,2017 at Brno. His slides are here: jlebon-devconf-slides.