install OS from template
This commit is contained in:
parent
6e3d689f45
commit
cc2e025ae0
13
create.sh
13
create.sh
@ -13,6 +13,10 @@ install_binary $(which switch_root)
|
||||
install_binary $(which bash)
|
||||
install_binary $(which mount)
|
||||
install_binary $(which openssl) && cp -r /etc/ssl "${ROOT}/etc/"
|
||||
install_binary $(which cryptsetup)
|
||||
install_binary $(which blkid)
|
||||
install_binary $(which fdisk)
|
||||
install_binary $(which mkfs.ext4)
|
||||
install_kmod
|
||||
install_busybox
|
||||
|
||||
@ -23,11 +27,18 @@ echo_cyan "Installing kernel modules..."
|
||||
# # Uncomment this section if you want to grab modules from the guest OS
|
||||
# scan_modules
|
||||
install_module virtio_net
|
||||
install_module btrfs
|
||||
install_module ext4
|
||||
install_module virtio_blk
|
||||
install_module msr
|
||||
install_module sev-guest
|
||||
install_module dm_crypt
|
||||
install_module hid-generic
|
||||
install_module dm-integrity
|
||||
install_module cbc
|
||||
install_module hmac
|
||||
install_module sha256
|
||||
install_module rng
|
||||
install_module aes
|
||||
|
||||
echo_cyan "Building module dependency tree..."
|
||||
cp /lib/modules/${KERNEL}/modules.{order,builtin,builtin.modinfo} "${ROOT}/lib/modules/${KERNEL}/"
|
||||
|
@ -25,6 +25,7 @@ create_dirs() {
|
||||
mkdir -p "${ROOT}/etc"
|
||||
mkdir -p "${ROOT}/proc"
|
||||
mkdir -p "${ROOT}/run"
|
||||
mkdir -p "${ROOT}/sys"
|
||||
mkdir -p "${ROOT}/tmp"
|
||||
mkdir -p "${ROOT}/var"
|
||||
ln -s usr/bin "${ROOT}/bin"
|
||||
@ -77,12 +78,12 @@ install_binary() {
|
||||
install_kmod() {
|
||||
echo_cyan "Installing kmod (depmod, insmod, lsmod, modinfo, modprobe, rmmod)..."
|
||||
install_binary /usr/bin/kmod || return 1
|
||||
ln -s kmod ${ROOT}/usr/bin/lsmod
|
||||
ln -s kmod ${ROOT}/usr/bin/rmmod
|
||||
ln -s kmod ${ROOT}/usr/bin/insmod
|
||||
ln -s kmod ${ROOT}/usr/bin/modinfo
|
||||
ln -s kmod ${ROOT}/usr/bin/modprobe
|
||||
ln -s kmod ${ROOT}/usr/bin/depmod
|
||||
ln -s kmod "${ROOT}/usr/bin/lsmod"
|
||||
ln -s kmod "${ROOT}/usr/bin/rmmod"
|
||||
ln -s kmod "${ROOT}/usr/bin/insmod"
|
||||
ln -s kmod "${ROOT}/usr/bin/modinfo"
|
||||
ln -s kmod "${ROOT}/usr/bin/modprobe"
|
||||
ln -s kmod "${ROOT}/usr/bin/depmod"
|
||||
}
|
||||
|
||||
install_busybox() {
|
||||
@ -99,8 +100,8 @@ install_busybox() {
|
||||
}
|
||||
|
||||
install_init_script() {
|
||||
cp ../init.sh ${ROOT}/init
|
||||
cp ../init_functions.sh ${ROOT}/
|
||||
cp ../init.sh "${ROOT}/init"
|
||||
cp ../init_functions.sh "${ROOT}/"
|
||||
}
|
||||
|
||||
install_module() {
|
||||
|
12
init.sh
12
init.sh
@ -4,5 +4,15 @@ create_mounts
|
||||
load_modules
|
||||
create_certs
|
||||
setup_network
|
||||
mount_root
|
||||
|
||||
# TODO: replace hardcoded URL with guest_api
|
||||
echo "http://192.168.122.226/base_arch2.tar.xz" > /tmp/install_url
|
||||
if [[ -f "/tmp/install_url" ]]; then
|
||||
install_os
|
||||
else
|
||||
mount_root
|
||||
fi
|
||||
|
||||
github_ssh_key
|
||||
|
||||
exec switch_root /mnt /sbin/init "$@"
|
||||
|
@ -65,7 +65,40 @@ setup_network() {
|
||||
echo nameserver $nameserver > /etc/resolv.conf
|
||||
}
|
||||
|
||||
install_os() {
|
||||
local url="$(cat /tmp/install_url)"
|
||||
blkid | grep vda1 | grep ext4 && {
|
||||
mount_root
|
||||
return 0
|
||||
}
|
||||
fdisk /dev/vda <<EOF
|
||||
n
|
||||
p
|
||||
|
||||
|
||||
|
||||
w
|
||||
EOF
|
||||
mkfs.ext4 /dev/vda1
|
||||
mount_root
|
||||
cd /mnt/
|
||||
wget -O template.tar.xz "$url"
|
||||
tar --numeric-owner -xpJf /mnt/template.tar.xz -C /mnt/
|
||||
rm /mnt/template.tar.xz
|
||||
rm /mnt/etc/fstab
|
||||
}
|
||||
|
||||
# detee_ghu stands for GitHub user and expects format detee_ghu=ghe0
|
||||
github_ssh_key() {
|
||||
github_user=$(cat /proc/cmdline | grep -oE 'detee_ghu=[0-9a-z\_\.\-]+' | cut -d '=' -f2)
|
||||
[[ -z "$github_user" ]] && return 0
|
||||
mkdir -p /mnt/root/.ssh
|
||||
cd /mnt/root/.ssh
|
||||
wget -O authorized_keys https://github.com/${github_user}.keys
|
||||
chmod 600 authorized_keys
|
||||
}
|
||||
|
||||
mount_root() {
|
||||
mkdir /mnt
|
||||
mount /dev/vda3 /mnt
|
||||
mount /dev/vda1 /mnt
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user