server/fickit-prepare.yml

180 lines
5.3 KiB
YAML

kernel:
image: nemunaire/kernel:4.9.210-e1d178d56edb377b36364eb4890dc4bf430acf77-dirty-amd64
cmdline: "console=ttyS0 console=tty0"
init:
- nemunaire/mdadm:18de5ca414227f38a5c0619662077ba5fa26176d
- nemunaire/syslinux:4e080937962e68f9f6a962ff6890cb4c62720841
- linuxkit/format:v0.7
- linuxkit/dm-crypt:v0.7
- alpine:latest
files:
- path: /init
contents: |
#!/bin/sh
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
mdev -s
mdadm --auto-detect
ip a add 10.10.10.5/29 dev eth0
ip link set eth0 up
# Try to detect backend/frontend setup
if ip l | grep eth3 > /dev/null
then
DEFAULT_BOOT=1
echo "Detected: FRONTEND host"
else
DEFAULT_BOOT=0
echo "Detected: BACKEND host"
fi
read -p "Proceed? (y/N) " V
[ "$V" != "y" ] && { while true; do /bin/ash; done }
cat /etc/fdisk_cmd | fdisk /dev/sda &&
cat /etc/fdisk_cmd | fdisk /dev/sdb &&
cat /etc/sfdisk_schema | sfdisk /dev/sda &&
cat /etc/sfdisk_schema | sfdisk /dev/sdb
/sbin/mdadm --create /dev/md2 --run --level=1 --metadata=1.0 --raid-devices=2 /dev/sda1 /dev/sdb1
/sbin/mdadm --create /dev/md1 --run --level=1 --metadata=1.1 --raid-devices=2 /dev/sda2 /dev/sdb2
/sbin/mdadm --create /dev/md0 --run --level=1 --metadata=0 --raid-devices=2 /dev/sda3 /dev/sdb3
mkswap /dev/md1
#mkfs.ext4 -F /dev/md0
cryptsetup -q -s 512 luksFormat /dev/md0 /etc/dm-crypt/key
cryptsetup luksOpen -d /etc/dm-crypt/key /dev/md0 crypt_fic
mkfs.ext4 -F /dev/mapper/crypt_fic
sync
mkfs.vfat /dev/md2
mkdir -p /boot
mount /dev/md2 /boot/ && {
/root/install_grub ${DEFAULT_BOOT} /dev/sda /dev/sdb
/root/update_imgs
} ||
/bin/ash
umount /boot &&
sync &&
reboot -f
/bin/ash
mode: "0755"
- path: root/update_imgs
source: configs/update_imgs.sh
mode: "0755"
- path: root/install_syslinux
contents: |
#!/bin/sh
mkdir -p /boot/EFI/boot /boot/imgs
[ $1 == "0" ] && ONTIMEOUT="backend" || ONTIMEOUT="frontend"
cd /usr/share/syslinux/efi64
cp ldlinux.e64 menu.c32 libcom32.c32 libutil.c32 vesamenu.c32 poweroff.c32 /boot/EFI/boot
cp syslinux.efi /boot/EFI/boot/bootx64.efi
cat <<EOF > /boot/syslinux.cfg
TIMEOUT 30
ONTIMEOUT ${ONTIMEOUT}
MENU background #00000000 * *
MENU color title * #FF22BBCC *
MENU color sel * #FFFFFFFF #FF22BBCC *
MENU color hotsel 1;7;37;40 #ffffffff #76a1d0ff *
UI vesamenu.c32
MENU TITLE Server FIC Challenge
LABEL backend
MENU LABEL FIC Backend
LINUX /imgs/fickit-kernel
INITRD /imgs/fickit-boot-initrd.img
APPEND console=ttyS0 console=tty0 root=fickit-backend-squashfs.img
LABEL frontend
MENU LABEL FIC Frontend
LINUX /imgs/fickit-kernel
INITRD /imgs/fickit-boot-initrd.img
APPEND console=ttyS0 console=tty0 root=fickit-frontend-squashfs.img
LABEL update
MENU LABEL Update images
LINUX /imgs/fickit-kernel
INITRD /imgs/fickit-update-initrd.img
APPEND console=ttyS0 console=tty0
MENU SEPARATOR
LABEL poweroff
MENU LABEL ^Shutdown
KERNEL poweroff.c32
EOF
cp /usr/share/syslinux/libcom32.c32 /usr/share/syslinux/libutil.c32 /usr/share/syslinux/poweroff.c32 /usr/share/syslinux/vesamenu.c32 /boot/
shift
for p
do
# BIOS part
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/mbr.bin of=${p}
syslinux --install ${p}
done
mode: "0550"
- path: root/install_grub
contents: |
#!/bin/sh
mkdir -p /boot/EFI/boot /boot/grub /boot/imgs
cat <<EOF > /boot/grub/grub.cfg
set timeout=3
set default=$1
menuentry 'FIC Backend' {
set root=(hd0,1)
linux /imgs/fickit-kernel console=ttyS0 console=tty0 quiet root=fickit-backend-squashfs.img
initrd /imgs/fickit-boot-initrd.img
}
menuentry 'FIC Frontend' {
set root=(hd0,1)
linux /imgs/fickit-kernel console=ttyS0 console=tty0 quiet root=fickit-frontend-squashfs.img
initrd /imgs/fickit-boot-initrd.img
}
menuentry 'Update images' {
set root=(hd0,1)
linux /imgs/fickit-kernel console=ttyS0 console=tty0 quiet
initrd /imgs/fickit-update-initrd.img
}
EOF
cp "/boot/grub/grub.cfg" "/boot/EFI/boot/grub.cfg"
shift
for p
do
grub-mkimage -o "/boot/EFI/boot/bootx64.efi" -p /efi/boot -O x86_64-efi fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2
grub-install --boot-directory="/boot/" --target=i386-pc "${p}"
done
mode: "0550"
- path: etc/sfdisk_schema
contents: |
,500M,U,*
,4M,S,-
,+,R,-
mode: "0440"
- path: etc/fdisk_cmd
contents: |
o
w
mode: "0440"
- path: etc/dm-crypt/key
source: configs/dm-crypt.key
mode: "0440"