diff --git a/.gitignore b/.gitignore index 1f35979..28785c1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /osbuilder-72c5f6a.tar.gz +/osbuilder-4287ba6.tar.gz +/agent-8d682c4.tar.gz diff --git a/fedora-kata-osbuilder.sh b/fedora-kata-osbuilder.sh new file mode 100755 index 0000000..4e849a9 --- /dev/null +++ b/fedora-kata-osbuilder.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +# This script builds the kata appliance initrd and image. It is invoked +# at RPM install %post time. + +set -e +set -x + +cd /usr/libexec/kata-containers/osbuilder + +KVERSION=`uname -r` +DRACUT_OVERLAY=`mktemp --directory -t kata-dracut-overlay-XXXXXX` +DRACUT_ROOTFS=`mktemp --directory -t kata-dracut-rootfs-XXXXXX` +DRACUT_IMAGES=`mktemp --directory -t kata-dracut-images-XXXXXX` +trap "{ rm -rf ${DRACUT_OVERLAY} ${DRACUT_ROOTFS} ${DRACUT_IMAGES}; }" EXIT + + +export AGENT_SOURCE_BIN="/usr/libexec/kata-containers/osbuilder/agent/kata-agent" +TARGET_IMAGE="${DRACUT_IMAGES}/kata-containers.img" \ +TARGET_INITRD="${DRACUT_IMAGES}/kata-containers-initrd.img" \ +OSBUILDER_VERSION="fedora-osbuilder-version-unknown" +DRACUT_CONF_DIR="./dracut/dracut.conf.d" +DRACUT_KMODULES=`source ${DRACUT_CONF_DIR}/10-drivers.conf; echo "$drivers"` +DRACUT_OPTIONS="--no-compress --conf /dev/null --confdir ./dracut/dracut.conf.d" + +# Build the dracut overlay fs +./rootfs-builder/rootfs.sh -o ${OSBUILDER_VERSION} -r ${DRACUT_OVERLAY} +mkdir -p ${DRACUT_OVERLAY}/etc/modules-load.d +echo ${DRACUT_KMODULES} | tr " " "\n" > ${DRACUT_OVERLAY}/etc/modules-load.d/kata-modules.conf + +# Build the initrd +dracut ${DRACUT_OPTIONS} \ + --include ${DRACUT_OVERLAY} \ + / ${TARGET_INITRD} ${KVERSION} + +# Extract initrd filesystem for image build +cat ${TARGET_INITRD} | \ + cpio --extract --preserve-modification-time --make-directories --directory=${DRACUT_ROOTFS} + +# Build the FS image +./image-builder/image_builder.sh -o ${TARGET_IMAGE} ${DRACUT_ROOTFS} + +# Move images into place +cd /usr/share/kata-containers +# This is dangerous, but not sure what else to do... +rm * || true + +KERNEL_NAME="vmlinuz-${KVERSION}" +INITRD_NAME="fedora-kata-${KVERSION}.initrd" +IMAGE_NAME="fedora-kata-${KVERSION}.img" + +cp /boot/${KERNEL_NAME} . +ln -sf /boot/${KERNEL_NAME} vmlinuz.container + +mv ${TARGET_INITRD} ${INITRD_NAME} +ln -sf ${INITRD_NAME} kata-containers-initrd.img + +mv ${TARGET_IMAGE} ${IMAGE_NAME} +ln -sf ${IMAGE_NAME} kata-containers.img diff --git a/kata-osbuilder.spec b/kata-osbuilder.spec index 3e59a1d..3f65a8d 100644 --- a/kata-osbuilder.spec +++ b/kata-osbuilder.spec @@ -7,73 +7,140 @@ %global debug_package %{nil} %endif -%global katadir %{_datadir}/kata-containers +%global katadatadir %{_datadir}/kata-containers %global katalibexecdir %{_libexecdir}/kata-containers +%global kataosbuilderdir %{katalibexecdir}/osbuilder +%global kataagentdir %{kataosbuilderdir}/agent %global git0 https://github.com/kata-containers/osbuilder -%global commit0 72c5f6a223964e6c3dae220bb6cd08bd94be8c8b +%global commit0 4287ba639bbec8f447295bb567636d939bcb4cfc %global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) +%global git1 https://github.com/kata-containers/agent +%global commit1 8d682c45840d8bd76675879c8bbfffd9ef078838 +%global shortcommit1 %(c=%{commit1}; echo ${c:0:7}) + + Name: kata-osbuilder -Version: 1.4.1 -Release: 4.git%{shortcommit0}%{?dist} +Version: 1.9.0 +Release: 0.1.git%{shortcommit0}%{?dist} License: ASL 2.0 -Summary: Guest OS building scripts +Summary: Kata guest initrd and image build scripts URL: %{git0} Source0: %{git0}/archive/%{commit0}/osbuilder-%{shortcommit0}.tar.gz +Source1: %{git1}/archive/%{commit1}/agent-%{shortcommit1}.tar.gz +Source2: fedora-kata-osbuilder.sh + +# Adjust rootfs.sh to pull more pieces from the kata-agent dir, +# like systemd units. Not acceptable as is for upstream, we need +# to find a nicer solution. +Patch01: osbuilder-0001-rootfs-allow-using-systemd-units-from-AGENT_SOURCE_B.patch +# Fix symlinks in the dracut_overlay to not clobber Fedora. +# Needs to be submitted upstream +Patch02: osbuilder-0002-rootfs-Fix-systemd-sbin-init-symlinking.patch +# List of drivers needed in the initrd. +# Needs to be submitted upstream +Patch03: osbuilder-0003-dracut-Add-Fedora-virtio-kernel-modules-to-the-initr.patch + BuildRequires: git -BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang} -Requires(post): %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang} -Requires(post): go-srpm-macros +BuildRequires: compiler(go-compiler) +BuildRequires: go-srpm-macros + Requires(post): qemu-img +Requires(post): dracut +Requires(post): cpio +Requires(post): bash +Requires(post): kernel +# mkfs.ext4 and tune2fs needed for the image build step +Requires(post): e2fsprogs +# gcc is used for building a little dax tool in image_builder.sh +Requires(post): gcc + +# Bundled kata-agent pieces +Provides: bundled(golang(github.com/docker/docker/pkg/parsers)) +Provides: bundled(golang(github.com/gogo/protobuf/gogoproto)) +Provides: bundled(golang(github.com/gogo/protobuf/proto)) +Provides: bundled(golang(github.com/gogo/protobuf/types)) +Provides: bundled(golang(github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc)) +Provides: bundled(golang(github.com/hashicorp/yamux)) +Provides: bundled(golang(github.com/mdlayher/vsock)) +Provides: bundled(golang(github.com/opencontainers/runc/libcontainer)) +Provides: bundled(golang(github.com/opencontainers/runc/libcontainer/configs)) +Provides: bundled(golang(github.com/opencontainers/runc/libcontainer/nsenter)) +Provides: bundled(golang(github.com/opencontainers/runc/libcontainer/seccomp)) +Provides: bundled(golang(github.com/opencontainers/runc/libcontainer/specconv)) +Provides: bundled(golang(github.com/opencontainers/runc/libcontainer/utils)) +Provides: bundled(golang(github.com/opencontainers/runtime-spec/specs-go)) +Provides: bundled(golang(github.com/opentracing/opentracing-go)) +Provides: bundled(golang(github.com/pkg/errors)) +Provides: bundled(golang(github.com/sirupsen/logrus)) +Provides: bundled(golang(github.com/uber/jaeger-client-go/config)) +Provides: bundled(golang(github.com/vishvananda/netlink)) +Provides: bundled(golang(golang.org/x/net/context)) +Provides: bundled(golang(golang.org/x/sys/unix)) +Provides: bundled(golang(google.golang.org/grpc)) +Provides: bundled(golang(google.golang.org/grpc/codes)) +Provides: bundled(golang(google.golang.org/grpc/status)) + %description %{summary} + + %prep %autosetup -Sgit -n osbuilder-%{commit0} +tar -xvf %{SOURCE1} + %build +# Build kata-agent +pushd agent-%{commit1} +mkdir _build +pushd _build +mkdir -p src/github.com/kata-containers +ln -s $(dirs +1 -l) src/github.com/kata-containers/agent +popd + +mv vendor src +export GOPATH=$(pwd)/_build:$(pwd) +%gobuild -o %{name} +make +popd + + %install -install -dp %{buildroot}%{katadir} -install -dp %{buildroot}%{katalibexecdir}/{image-builder,initrd-builder,rootfs-builder,scripts} -install -p -m 755 rootfs-builder/rootfs.sh %{buildroot}%{katalibexecdir}/rootfs-builder/kata-rootfs_builder -install -p -m 644 rootfs-builder/versions.txt %{buildroot}%{katalibexecdir}/rootfs-builder/versions.txt -install -p -m 755 image-builder/image_builder.sh %{buildroot}%{katalibexecdir}/image-builder/kata-image_builder -install -p -m 755 initrd-builder/initrd_builder.sh %{buildroot}%{katalibexecdir}/initrd-builder/kata-initrd_builder -install -p -m 755 scripts/lib.sh %{buildroot}%{katalibexecdir}/scripts/lib.sh - -for distro in alpine centos clearlinux euleros fedora -do - install -dp %{buildroot}%{katalibexecdir}/rootfs-builder/$distro - install -p -m 644 rootfs-builder/$distro/config.sh %{buildroot}%{katalibexecdir}/rootfs-builder/$distro -done +mkdir -p %{buildroot}%{katadatadir} +mkdir -p %{buildroot}%{kataosbuilderdir} +mkdir -p %{buildroot}%{kataagentdir} +cp -aR rootfs-builder %{buildroot}/%{kataosbuilderdir} +cp -aR image-builder %{buildroot}/%{kataosbuilderdir} +cp -aR scripts %{buildroot}%{kataosbuilderdir} +cp -aR dracut %{buildroot}%{kataosbuilderdir} +cp -a %{_sourcedir}/fedora-kata-osbuilder.sh %{buildroot}%{kataosbuilderdir} +cp -a agent-%{commit1}/{kata-*.service,kata-*.target,kata-agent} %{buildroot}%{kataagentdir} + %post -echo "Creating Fedora image..." -GOPATH=%{gopath} OS_VERSION=%{?fedora} %{katalibexecdir}/rootfs-builder/kata-rootfs_builder fedora -GOPATH=%{gopath} %{katalibexecdir}/image-builder/kata-image_builder %{katalibexecdir}/rootfs-builder/rootfs-Fedora -GOPATH=%{gopath} %{katalibexecdir}/initrd-builder/kata-initrd_builder %{katalibexecdir}/rootfs-builder/rootfs-Fedora -mv /kata-* %{katadir} -rm -rf %{katalibexecdir}/rootfs-builder/rootfs-Fedora +TMPOUT="$(mktemp -t kata-rpm-post-XXXXXX.log)" +echo "Creating kata appliance initrd and filesystem image..." +bash %{kataosbuilderdir}/fedora-kata-osbuilder.sh > ${TMPOUT} 2>&1 +if test "$?" != "0" ; then + echo "Building failed. See log for details: ${TMPOUT}" + exit 1 +fi + -#define license tag if not already defined -%{!?_licensedir:%global license %doc} %files %license LICENSE %doc CODE_OF_CONDUCT.md CONTRIBUTING.md README.md -%dir %{katadir} -%dir %{katalibexecdir} -%dir %{katalibexecdir}/rootfs-builder -%dir %{katalibexecdir}/image-builder -%dir %{katalibexecdir}/initrd-builder -%dir %{katalibexecdir}/scripts -%{katalibexecdir}/rootfs-builder/* -%{katalibexecdir}/image-builder/* -%{katalibexecdir}/initrd-builder/* -%{katalibexecdir}/scripts/* +%dir %{katadatadir} +%dir %{kataosbuilderdir} +%{kataosbuilderdir}/* + + %changelog * Thu Jul 25 2019 Fedora Release Engineering - 1.4.1-4.git72c5f6a diff --git a/osbuilder-0001-rootfs-allow-using-systemd-units-from-AGENT_SOURCE_B.patch b/osbuilder-0001-rootfs-allow-using-systemd-units-from-AGENT_SOURCE_B.patch new file mode 100644 index 0000000..e4a92eb --- /dev/null +++ b/osbuilder-0001-rootfs-allow-using-systemd-units-from-AGENT_SOURCE_B.patch @@ -0,0 +1,33 @@ +>From ffc788c6f841f1dea9cbba761e0a15c6080747da Mon Sep 17 00:00:00 2001 +Message-Id: +From: Cole Robinson +Date: Sat, 7 Sep 2019 17:10:54 -0400 +Subject: [PATCH 1/3] rootfs: allow using systemd units from AGENT_SOURCE_BIN + dirname + +Signed-off-by: Cole Robinson +--- + rootfs-builder/rootfs.sh | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/rootfs-builder/rootfs.sh b/rootfs-builder/rootfs.sh +index 0b68764..4bdc10d 100755 +--- a/rootfs-builder/rootfs.sh ++++ b/rootfs-builder/rootfs.sh +@@ -497,7 +497,13 @@ EOT + make install DESTDIR="${ROOTFS_DIR}" INIT=${AGENT_INIT} SECCOMP=${SECCOMP} + popd + else ++ AGENT_SOURCE_DIR=$(dirname "${AGENT_SOURCE_BIN}") ++ ROOTFS_SYSTEMD_DIR="${ROOTFS_DIR}"/usr/lib/systemd/system ++ mkdir -p "${AGENT_DIR}" ++ mkdir -p "${ROOTFS_SYSTEMD_DIR}" + cp ${AGENT_SOURCE_BIN} ${AGENT_DEST} ++ cp "${AGENT_SOURCE_DIR}"/kata-agent.service "${ROOTFS_SYSTEMD_DIR}" ++ cp "${AGENT_SOURCE_DIR}"/kata-containers.target "${ROOTFS_SYSTEMD_DIR}" + OK "cp ${AGENT_SOURCE_BIN} ${AGENT_DEST}" + fi + +-- +2.21.0 + diff --git a/osbuilder-0002-rootfs-Fix-systemd-sbin-init-symlinking.patch b/osbuilder-0002-rootfs-Fix-systemd-sbin-init-symlinking.patch new file mode 100644 index 0000000..78e0818 --- /dev/null +++ b/osbuilder-0002-rootfs-Fix-systemd-sbin-init-symlinking.patch @@ -0,0 +1,31 @@ +>From 183645ca57f466ac89eb018c72348c2a3a5b38a3 Mon Sep 17 00:00:00 2001 +Message-Id: <183645ca57f466ac89eb018c72348c2a3a5b38a3.1567901440.git.crobinso@redhat.com> +In-Reply-To: +References: +From: Cole Robinson +Date: Sat, 7 Sep 2019 15:53:08 -0400 +Subject: [PATCH 2/3] rootfs: Fix systemd /sbin/init symlinking + +Signed-off-by: Cole Robinson +--- + rootfs-builder/rootfs.sh | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/rootfs-builder/rootfs.sh b/rootfs-builder/rootfs.sh +index 4bdc10d..fb020c0 100755 +--- a/rootfs-builder/rootfs.sh ++++ b/rootfs-builder/rootfs.sh +@@ -388,9 +388,7 @@ prepare_overlay() + { + pushd "${ROOTFS_DIR}" > /dev/null + mkdir -p ./etc ./lib/systemd ./sbin ./var +- ln -sf ./usr/lib/systemd/systemd ./init +- ln -sf ../../init ./lib/systemd/systemd +- ln -sf ../init ./sbin/init ++ ln -sf ../lib/systemd/systemd ./sbin/init + # Kata sytemd unit file + mkdir -p ./etc/systemd/system/basic.target.wants/ + ln -sf /usr/lib/systemd/system/kata-containers.target ./etc/systemd/system/basic.target.wants/kata-containers.target +-- +2.21.0 + diff --git a/osbuilder-0003-dracut-Add-Fedora-virtio-kernel-modules-to-the-initr.patch b/osbuilder-0003-dracut-Add-Fedora-virtio-kernel-modules-to-the-initr.patch new file mode 100644 index 0000000..b595495 --- /dev/null +++ b/osbuilder-0003-dracut-Add-Fedora-virtio-kernel-modules-to-the-initr.patch @@ -0,0 +1,29 @@ +>From 01e83d4b3bb2478764671c10f0590507017f9d2c Mon Sep 17 00:00:00 2001 +Message-Id: <01e83d4b3bb2478764671c10f0590507017f9d2c.1567901440.git.crobinso@redhat.com> +In-Reply-To: +References: +From: Cole Robinson +Date: Sat, 7 Sep 2019 19:53:40 -0400 +Subject: [PATCH 3/3] dracut: Add Fedora virtio kernel modules to the initrd + +Signed-off-by: Cole Robinson +--- + dracut/dracut.conf.d/10-drivers.conf | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/dracut/dracut.conf.d/10-drivers.conf b/dracut/dracut.conf.d/10-drivers.conf +index 121e858..e45b75a 100644 +--- a/dracut/dracut.conf.d/10-drivers.conf ++++ b/dracut/dracut.conf.d/10-drivers.conf +@@ -6,4 +6,7 @@ + # Specify a space-separated set of kernel modules to copy from the host to + # the initramfs image. For example: + # drivers="9p 9pnet 9pnet_virtio" +-drivers="" ++#drivers="" ++ ++# Fedora: add kata virtio modules to the initrd. ++drivers="9p 9pnet_virtio vmw_vsock_virtio_transport virtio_console virtio_blk virtio_scsi virtio_net" +-- +2.21.0 + diff --git a/sources b/sources index 4323dc5..6ebeec0 100644 --- a/sources +++ b/sources @@ -1 +1,3 @@ SHA512 (osbuilder-72c5f6a.tar.gz) = 856d621017e715107488a81b7cd67762f2f1d8db5984fdf4f799e3c154ca38bd1af47730e58a69614df9cd97bfab1a8f1ee085d28b71d5a5ca9e54aa0f079101 +SHA512 (osbuilder-4287ba6.tar.gz) = 2b9a6079e2a2cc2fbfa6e25705353d45906e093780323cae00b61aadb6ab3c47c7d54751e2ef82d1b4be82ed8cfd7bd428c9a097de6a5c2957ac014f3a68a2c1 +SHA512 (agent-8d682c4.tar.gz) = 16706946878923b7e772902ef1d1d02a59827717535066d8d174b9bea2fca9885e9baee9b578fe1cb4ca68f9fd1615870cd93d61b11b81fc2355cc70f104f0dc