Skip to content

Instantly share code, notes, and snippets.

@zhuyifei1999
Last active October 22, 2018 02:52
Show Gist options
  • Save zhuyifei1999/b1fece4ac452cd5f0a78c4a2a6093139 to your computer and use it in GitHub Desktop.
Save zhuyifei1999/b1fece4ac452cd5f0a78c4a2a6093139 to your computer and use it in GitHub Desktop.
Build a Gentoo root_fs for QEMU/UML
#! /bin/bash
set -ex
TMPDIR=${TMPDIR:-/var/tmp}
IMAGE="$TMPDIR/root_fs"
STAGE3="$TMPDIR/stage3.tar"
ln -sf "$IMAGE" root_fs
# https://stackoverflow.com/a/49197786
extract() {
for plik in "$@"; do
case $(file "$plik") in
*bzip2*) bzcat "$plik";;
*gzip*) zcat "$plik";;
*xz*) ;&
*XZ*) xzcat "$plik";;
*) 1>&2 echo "Unknown archive '$plik'"; return 1 ;;
esac
done
}
#wget "$(curl -s 'https://www.gentoo.org/downloads/' | grep amd64 | grep nomultilib | grep -v hardened | grep -oP 'http://distfiles.+?.tar.xz')" -O "$STAGE3".compressed
wget "$(curl -s 'https://www.gentoo.org/downloads/' | grep amd64 | grep systemd | grep -oP 'http://distfiles.+?.tar.bz2')" -O "$STAGE3".compressed
extract "$STAGE3".compressed > "$STAGE3"
guestfish --progress-bars -x << EOF
sparse $IMAGE 5G
run
# mkfs ext4 /dev/sda label:ROOT
mkfs-btrfs /dev/sda label:ROOT
mount /dev/sda /
tar-in $STAGE3 /
# write-append /etc/fstab "LABEL=ROOT\t/\text4\terrors=remount-ro\t0\t1\n"
write-append /etc/fstab "LABEL=ROOT\t/\tbtrfs\tdefaults,compress=zlib\t0\t1\n"
# ln-sf /lib/systemd/system/console-getty.service /etc/systemd/system/getty.target.wants/console-getty.service
# ln-sf /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@tty0.service
ln-sf /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty0.service
ln-sf /dev/null /etc/systemd/system/getty.target.wants/getty@tty1.service
mkdir-p /etc/systemd/logind.conf.d
write /etc/systemd/logind.conf.d/no-vt.conf "[Login]\nNAutoVTs=0\nReserveVT=0\n"
mkdir-p /etc/systemd/system/sockets.target.wants
mkdir-p /etc/systemd/system/network-online.target.wants
ln-sf /lib/systemd/system/systemd-networkd.service /etc/systemd/system/dbus-org.freedesktop.network1.service
ln-sf /lib/systemd/system/systemd-networkd.service /etc/systemd/system/multi-user.target.wants/systemd-networkd.service
ln-sf /lib/systemd/system/systemd-networkd.socket /etc/systemd/system/sockets.target.wants/systemd-networkd.socket
ln-sf /lib/systemd/system/systemd-networkd.service /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service
mkdir-p /etc/systemd/network
write /etc/systemd/network/50-dhcp.network "[Match]\nName=eth0\n[Network]\nDHCP=yes\n"
ln-sf /lib/systemd/system/systemd-resolved.service /etc/systemd/system/dbus-org.freedesktop.resolve1.service
ln-sf /lib/systemd/system/systemd-resolved.service /etc/systemd/system/multi-user.target.wants/systemd-resolved.service
ln-sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
ln-sf /lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/sshd.service
EOF
virt-edit -a "$IMAGE" /etc/shadow -e 's/^root:.*?:/root::/'
virt-sysprep -a "$IMAGE"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment