Last active
June 29, 2019 01:21
-
-
Save mskarbek/a0701fe21d6918ebaa872a3f58e63036 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -ex | |
if [ -z ${POOL_DISK} ] | |
then | |
POOL_DISK="/dev/vda" | |
fi | |
if [ -z ${POOL_NAME} ] | |
then | |
POOL_NAME="system" | |
fi | |
if [ -z ${HOST_NAME} ] | |
then | |
HOST_NAME="zfshost" | |
fi | |
BOOT_PARTUUID=$(cat /proc/sys/kernel/random/uuid) | |
POOL_PARTUUID=$(cat /proc/sys/kernel/random/uuid) | |
sgdisk -Z ${POOL_DISK} | |
sgdisk -n 1:0:+1024M -t 1:ef00 -u 1:${BOOT_PARTUUID} ${POOL_DISK} | |
sgdisk -n 2:0:-8M -t 2:bf01 -u 2:${POOL_PARTUUID} ${POOL_DISK} | |
sleep 1 | |
BOOT_PART=$(readlink -f /dev/disk/by-partuuid/${BOOT_PARTUUID}) | |
mkfs.vfat -n EFI -F32 ${BOOT_PART} | |
zpool create -f \ | |
-o ashift=12 \ | |
-O mountpoint=/ \ | |
-O canmount=off \ | |
-O compression=lz4 \ | |
-O atime=off \ | |
-O checksum=sha256 \ | |
-O utf8only=on \ | |
-O xattr=sa \ | |
-O acltype=posixacl \ | |
-R /run/${POOL_NAME} \ | |
${POOL_NAME} \ | |
/dev/disk/by-partuuid/${POOL_PARTUUID} | |
sleep 1 | |
zfs create -o mountpoint=none ${POOL_NAME}/rootfs | |
zfs create -o mountpoint=/ ${POOL_NAME}/rootfs/fedora28 | |
zfs create -o setuid=off ${POOL_NAME}/home | |
zfs create -o mountpoint=/root ${POOL_NAME}/home/root | |
zfs create -o canmount=off -o setuid=off -o exec=off ${POOL_NAME}/var | |
zfs create -o com.sun:auto-snapshot=false ${POOL_NAME}/var/cache | |
zfs create -o canmount=off ${POOL_NAME}/var/lib | |
zfs create ${POOL_NAME}/var/lib/flatpak | |
zfs create ${POOL_NAME}/var/lib/docker | |
zfs create ${POOL_NAME}/var/lib/containers | |
zfs create ${POOL_NAME}/var/log | |
zfs create ${POOL_NAME}/var/spool | |
zfs create -o com.sun:auto-snapshot=false -o exec=on ${POOL_NAME}/var/tmp | |
mkdir -p /run/${POOL_NAME}/{boot,dev,etc,etc/rpm,proc,run,sys,tmp} | |
mount ${BOOT_PART} /run/${POOL_NAME}/boot | |
mount --bind /dev /run/${POOL_NAME}/dev | |
mount --bind /proc /run/${POOL_NAME}/proc | |
mount --bind /sys /run/${POOL_NAME}/sys | |
mount -t tmpfs tmpfs /run/${POOL_NAME}/run | |
mount -t tmpfs tmpfs /run/${POOL_NAME}/tmp | |
touch /run/${POOL_NAME}/etc/fstab | |
echo "PARTUUID=${BOOT_PARTUUID} /boot vfat umask=0077,shortname=winnt,x-initrd.mount 0 2" > /run/${POOL_NAME}/etc/fstab | |
touch /run/${POOL_NAME}/etc/rpm/macros.image-language-conf | |
echo "%_install_langs C:en:en_US:en_US.UTF-8" > /run/${POOL_NAME}/etc/rpm/macros.image-language-conf | |
dnf -y --installroot=/run/${POOL_NAME} --nodocs --nogpg --releasever=28 \ | |
--disablerepo='*' --enablerepo=fedora --enablerepo=updates \ | |
install \ | |
bash-completion \ | |
binutils \ | |
cryptsetup \ | |
dbus-broker \ | |
dnf \ | |
dosfstools \ | |
dracut \ | |
fedora-release \ | |
gdisk \ | |
glibc-common \ | |
glibc-langpack-en \ | |
glibc-minimal-langpack \ | |
iproute \ | |
iputils \ | |
mbuffer \ | |
less \ | |
passwd \ | |
procps-ng \ | |
psmisc \ | |
rootfiles \ | |
rpm \ | |
selinux-policy-targeted \ | |
sudo \ | |
systemd \ | |
vim-minimal | |
echo "deltarpm=0" >> /run/${POOL_NAME}/etc/dnf/dnf.conf | |
chroot /run/${POOL_NAME} bootctl install --no-variables | |
chroot /run/${POOL_NAME} systemctl enable systemd-resolved systemd-networkd dbus-broker | |
chroot /run/${POOL_NAME} ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf | |
echo -e "[Match]\nName=en*\n\n[Network]\nDHCP=yes\n" > /run/${POOL_NAME}/etc/systemd/network/10-dhcp.network | |
if [ -n ${USB_STORAGE} ] | |
then | |
echo "add_drivers+=usb-storage" > /run/${POOL_NAME}/etc/dracut.conf.d/usb.conf | |
fi | |
sed -i 's/root:\*:/root::/' /run/${POOL_NAME}/etc/shadow | |
curl -L -o /run/${POOL_NAME}/etc/yum.repos.d/fedora-zfs.repo http://repo.commandcentral.space/fedora-zfs/fedora-zfs.repo | |
sed -i '0,/metalink=/s/metalink=/baseurl=http:\/\/10\.171\.37\.120\/$releasever\/release\/\n#metalink=/' /run/${POOL_NAME}/etc/yum.repos.d/fedora.repo | |
sed -i '0,/metalink=/s/metalink=/baseurl=http:\/\/10\.171\.37\.120\/$releasever\/updates\/\n#metalink=/' /run/${POOL_NAME}/etc/yum.repos.d/fedora-updates.repo | |
dnf -y --installroot=/run/${POOL_NAME} --nodocs --nogpg --releasever=28 \ | |
install \ | |
kernel \ | |
kernel-core \ | |
kernel-modules \ | |
kernel-modules-extra | |
dnf -y --installroot=/run/${POOL_NAME} --nodocs --nogpg --releasever=28 \ | |
install zfs-dracut | |
chroot /run/${POOL_NAME} systemctl preset zfs-import-cache zfs-import-scan zfs-import.target zfs-mount zfs-share zfs-zed zfs.target | |
KERNEL_VERSION=$(chroot /run/${POOL_NAME} bash -c "rpm -q kernel|sed 's/kernel-//'") | |
zpool set cachefile=/run/${POOL_NAME}/etc/zfs/zpool.cache ${POOL_NAME} | |
echo ${HOST_NAME} > /run/${POOL_NAME}/etc/hostname | |
chroot /run/${POOL_NAME} dracut -fv --kver ${KERNEL_VERSION} | |
dnf -y --installroot=/run/${POOL_NAME} clean all | |
sync | |
chroot /run/system setfiles -v -F -e /boot -e /dev -e /proc -e /sys /etc/selinux/targeted/contexts/files/file_contexts / | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /home | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /root | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/cache | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/lib/flatpak | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/lib/docker | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/lib/containers | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/log | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/spool | |
chroot /run/system setfiles -v -F /etc/selinux/targeted/contexts/files/file_contexts /var/tmp | |
MACHINE_ID=$(cat /run/${POOL_NAME}/etc/machine-id) | |
cat << EOF > /run/${POOL_NAME}/boot/loader/entries/${MACHINE_ID}-${KERNEL_VERSION}.conf | |
title Fedora 28 | |
version ${KERNEL_VERSION} | |
machine-id ${MACHINE_ID} | |
linux /vmlinuz-${KERNEL_VERSION} | |
initrd /initramfs-${KERNEL_VERSION}.img | |
options root=ZFS=${POOL_NAME}/rootfs/fedora28 quiet | |
EOF | |
echo "timeout 3" > /run/${POOL_NAME}/boot/loader/loader.conf | |
echo "default ${MACHINE_ID}-*" >> /run/${POOL_NAME}/boot/loader/loader.conf | |
umount {/run/${POOL_NAME}/boot,/run/${POOL_NAME}/dev,/run/${POOL_NAME}/proc,/run/${POOL_NAME}/sys,/run/${POOL_NAME}/run,/run/${POOL_NAME}/tmp} | |
zfs snap -r ${POOL_NAME}@clean | |
zpool export ${POOL_NAME} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment