From e2def6f8d34d03880a655ce2132f2148a23f0fd5 Mon Sep 17 00:00:00 2001 From: Yolanda Robla Date: Wed, 23 Mar 2016 20:51:40 +0100 Subject: [PATCH] Generate fedora-atomic images using dib It consumes an external deployed tree, and generates a cloud bootable image based on that. It relies on lvm element to generate the volumes needed for the image. Change-Id: Ie681064d799279519adcc8e1bcf7a61ff9120042 --- magnum/elements/fedora-atomic/README.rst | 67 +++++++++++++++++ magnum/elements/fedora-atomic/element-deps | 4 + .../environment.d/50-fedora-atomic | 2 + .../fedora-atomic/finalise.d/80-fedora-atomic | 73 +++++++++++++++++++ .../fedora-atomic/package-installs.yaml | 2 + 5 files changed, 148 insertions(+) create mode 100644 magnum/elements/fedora-atomic/README.rst create mode 100644 magnum/elements/fedora-atomic/element-deps create mode 100644 magnum/elements/fedora-atomic/environment.d/50-fedora-atomic create mode 100755 magnum/elements/fedora-atomic/finalise.d/80-fedora-atomic create mode 100644 magnum/elements/fedora-atomic/package-installs.yaml diff --git a/magnum/elements/fedora-atomic/README.rst b/magnum/elements/fedora-atomic/README.rst new file mode 100644 index 0000000000..c2f2210620 --- /dev/null +++ b/magnum/elements/fedora-atomic/README.rst @@ -0,0 +1,67 @@ +============= +fedora-atomic +============= + +Generates a Fedora Atomic image based on a public deployed tree. This element has been tested under Debian, Ubuntu, CentOS and Fedora operating systems. + +Pre-requisites to run diskimage-builder +--------------------------------------- +For diskimage-builder to work, following packages need to be +present: + +* python-dev +* build-essential +* python-pip +* kpartx +* python-lzma +* qemu-utils +* yum +* yum-utils +* python-yaml + +For Debian/Ubuntu systems, use:: + + apt-get install python-dev build-essential python-pip kpartx python-lzma qemu-utils yum yum-utils python-yaml + +For CentOS and Fedora < 22, use:: + + yum install python-dev build-essential python-pip kpartx python-lzma qemu-utils yum yum-utils python-yaml + +For Fedora >= 22, use:: + + dnf install python-dev build-essential python-pip kpartx python-lzma qemu-utils yum yum-utils python-yaml + +diskimage-builder can be installed using pip:: + + pip install diskimage-builder + +How to generate Fedora Atomic image +----------------------------------- +To generate an atomic image for Fedora 23 these commands can be +executed:: + + export ELEMENTS_PATH=/path/to/diskimage-builder/elements:/path/to/magnum/elements + export DIB_RELEASE=23 # this can be switched to the desired version + export DIB_IMAGE_SIZE=2 # we need to give a bit more space to loopback device + disk-image-create fedora-atomic + +This element can consume already published trees, but you can use it +to consume your own generated trees. Documentation about creating own trees +can be found at `http://developers.redhat.com/blog/2015/01/08/creating-custom-atomic-trees-images-and-installers-part-1/ `_ + +Environment Variables +--------------------- + +To properly reference the tree, the following env vars can be set: + +FEDORA_ATOMIC_TREE_URL + :Required: Yes + :Description: Url for the public fedora-atomic tree to use. It can + reference to own published trees. + :Default: `https://dl.fedoraproject.org/pub/fedora/linux/atomic/23/ `_ + + +FEDORA_ATOMIC_TREE_REF + :Required: Yes + :Description: Reference of the tree to install. + :Default: 954bdbeebebfa87b625d9d7bd78c81400bdd6756fcc3205987970af4b64eb678 diff --git a/magnum/elements/fedora-atomic/element-deps b/magnum/elements/fedora-atomic/element-deps new file mode 100644 index 0000000000..2e68953874 --- /dev/null +++ b/magnum/elements/fedora-atomic/element-deps @@ -0,0 +1,4 @@ +fedora-minimal +growroot +package-installs +vm diff --git a/magnum/elements/fedora-atomic/environment.d/50-fedora-atomic b/magnum/elements/fedora-atomic/environment.d/50-fedora-atomic new file mode 100644 index 0000000000..5e7386cc90 --- /dev/null +++ b/magnum/elements/fedora-atomic/environment.d/50-fedora-atomic @@ -0,0 +1,2 @@ +export FEDORA_ATOMIC_TREE_URL=${FEDORA_ATOMIC_TREE_URL:-https://dl.fedoraproject.org/pub/fedora/linux/atomic/23/} +export FEDORA_ATOMIC_TREE_REF=${FEDORA_ATOMIC_TREE_REF:-954bdbeebebfa87b625d9d7bd78c81400bdd6756fcc3205987970af4b64eb678} diff --git a/magnum/elements/fedora-atomic/finalise.d/80-fedora-atomic b/magnum/elements/fedora-atomic/finalise.d/80-fedora-atomic new file mode 100755 index 0000000000..9a2d90f2c0 --- /dev/null +++ b/magnum/elements/fedora-atomic/finalise.d/80-fedora-atomic @@ -0,0 +1,73 @@ +#!/bin/bash + +if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then + set -x +fi +set -eu +set -o pipefail + +# generate ostree in root +cd / +ostree admin os-init fedora-atomic +ostree remote add --set=gpg-verify=false fedora-atomic ${FEDORA_ATOMIC_TREE_URL} +ostree pull fedora-atomic ${FEDORA_ATOMIC_TREE_REF} +ostree remote delete fedora-atomic +ostree admin deploy --os=fedora-atomic ${FEDORA_ATOMIC_TREE_REF} --karg-proc-cmdline --karg=selinux=0 + +# copy /etc/fstab to the deployed directory +SYSROOT=/ostree/deploy/fedora-atomic/deploy/${FEDORA_ATOMIC_TREE_REF}.0 +cp /etc/fstab $SYSROOT/etc/ + +# need to find the generated images +DEPLOYED_DIRECTORY=$(find /boot/ostree -name fedora-atomic-* -type d) +DEPLOYED_ID=${DEPLOYED_DIRECTORY##*-} +INIT_IMAGE=$(find ${DEPLOYED_DIRECTORY} -name initramfs*.img) + +# generate ostree boot +cat > /etc/grub.d/15_ostree < $SYSROOT/etc/sysconfig/docker-storage <