In Memory CentOS 7 - LinuxUserGroupUWSP/RackMesa GitHub Wiki

Derived from http://www.espenbraastad.no/posts/centos-7-rootfs-on-tmpfs/

yum install -y libvirt virt-builder guestfish

systemctl start libvirtd

mkdir -p /work/initramfs/bin
mkdir -p /work/newroot
mkdir -p /work/result

virt-builder centos-7.3 -o /work/disk.img --root-password password:changeme

guestfish --ro -a /work/disk.img -i copy-out / /work/newroot/

echo > /work/newroot/etc/fstab

echo "SELINUX=disabled" > /work/newroot/etc/selinux/config

mkdir /work/newroot/etc/systemd/system/[email protected]
cat > /work/newroot/etc/systemd/system/[email protected]/noclear.conf << EOF
[Service]
TTYVTDisallocate=no
EOF

wget -O /work/initramfs/bin/busybox https://www.busybox.net/downloads/binaries/1.26.1-defconfig-multiarch/busybox-x86_64

chmod +x /work/initramfs/bin/busybox

Create init script

vi /work/initramfs/init
#!/bin/busybox sh

# Dump to sh if something fails
error() {
	echo "Jumping into the shell..."
	setsid cttyhack sh
}

# Populate /bin with binaries from busybox
/bin/busybox --install /bin

mkdir -p /proc
mount -n -t proc none /proc

mkdir -p /sys
mount -n -t sysfs none /sys
mkdir -p /sys/dev

mkdir -p /var/run

mkdir -p /dev
mount -n -t tmpfs -o mode=0755 mdev /dev

mkdir -p /dev/pts
mount -n -t devpts devpts /dev/pts

# Populate /dev
echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s

mkdir -p /newroot
mount -t tmpfs -o size=1500m tmpfs /newroot || error

echo "Extracting rootfs... "
xz -d -c -f rootfs.tar.xz | tar -x -f - -C /newroot || error

mount --move /sys /newroot/sys
mount --move /proc /newroot/proc
mount --move /dev /newroot/dev

exec switch_root /newroot /sbin/init || error

Make init executable.

chmod +x /work/initramfs/init

Create the root filesystem.

cd /work/newroot
tar cJf /work/initramfs/rootfs.tar.xz .


cd /work/initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /work/result/initramfs.gz

cp /work/newroot/boot/vmlinuz-*x86_64 /work/result/vmlinuz