rootfs: Don't overwrite /sbin/init if it already exists

The prepare_overlay() code path is called when rootfs.sh is invoked
with no passed in distro string. This is used for the dracut case
from the Makefile for example. In that particular case, the starting
root directory is empty.

It's also valid to pass a prepopulated directory to rootfs.sh, which
is essentially a request for the script to just make the necessary
kata changes. Currently though prepare_overlay() makes some changes
that could wipe out pre-arranged /sbin/init setup.

Check first to see if /sbin/init exists in the rootfs dir, and if so,
skip the symlink changes

Fixes: #419

Signed-off-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
Cole Robinson 2020-03-04 17:56:03 -05:00
parent 8a9aa41247
commit 87a5d5c8d7

View File

@ -455,10 +455,18 @@ prepare_overlay()
{ {
pushd "${ROOTFS_DIR}" > /dev/null pushd "${ROOTFS_DIR}" > /dev/null
mkdir -p ./etc ./lib/systemd ./sbin ./var mkdir -p ./etc ./lib/systemd ./sbin ./var
# This symlink hacking is mostly to make later rootfs
# validation work correctly for the dracut case.
# We skip this if /sbin/init exists in the rootfs, meaning
# we were passed a pre-populated rootfs directory
if [ ! -e ./sbin/init ]; then
ln -sf ./usr/lib/systemd/systemd ./init ln -sf ./usr/lib/systemd/systemd ./init
ln -sf ../../init ./lib/systemd/systemd ln -sf ../../init ./lib/systemd/systemd
ln -sf ../init ./sbin/init ln -sf ../init ./sbin/init
# Kata sytemd unit file fi
# Kata systemd unit file
mkdir -p ./etc/systemd/system/basic.target.wants/ 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 ln -sf /usr/lib/systemd/system/kata-containers.target ./etc/systemd/system/basic.target.wants/kata-containers.target
popd > /dev/null popd > /dev/null