#!/bin/bash

echo
echo "Disk to install on:"
echo "-------------------"
echo

HDD=null
IFS=$'\n'
select HDD in $(lsblk -dno NAME,SIZE,TYPE -x NAME | grep -i " disk$")
do
  [ -n "$HDD" ] && break
done
HDD="/dev/$(echo "$HDD" | awk '{print $1}')"

while ! echo -e "o\nn\n\n\n\n\na\nw\n" | fdisk -w always -W always $HDD
do
  sync; sleep 1
done

PRT=$(ls -1 $HDD* | tail -1)
mkfs -t xfs -f $PRT

mount -v $PRT /media

cat > /dev/shm/setup.conf << EOF
[main]
sslverify=0
EOF

cat > /dev/shm/setup.repo << EOF
[baseos]
baseurl=https://mirror.yandex.ru/almalinux/9/BaseOS/x86_64/os
gpgcheck=0
EOF

source /etc/os-release
microdnf \
    --assumeyes \
    --best \
    --config=/dev/shm/setup.conf \
    --installroot=/media \
    --nodocs \
    --noplugins \
    --releasever=$VERSION_ID \
    --setopt=cachedir=/media/opt/setup/cachedir \
    --setopt=install_weak_deps=0 \
    --setopt=reposdir=/dev/shm \
    --setopt=varsdir=/media/opt/setup/varsdir \
    install dnf grub2-pc kernel NetworkManager openssh-server

rm -rf \
    /media/dev/* \
    /media/etc/systemd/system/* \
    /media/etc/systemd/user/* \
    /media/run/* \
    /media/var/cache/dnf \
    /media/var/lib/dnf \
    /media/var/lib/systemd/random-seed \
    /media/var/log/*.log \
    /media/var/log/journal

IP=$(nmcli --mode multiline --fields DHCP4 device show | grep -w "next_server" | awk '{print $4}')
while ! curl --output /media/opt/setup/setup --fail http://$IP/setup; do sleep 5; done
chmod a+x /media/opt/setup/setup

cat > /media/opt/setup/setup.service << EOF
[Service]
ExecStart=/opt/setup/setup
[Install]
WantedBy=multi-user.target
EOF

systemctl --root=/media enable dbus-broker.service getty@.service NetworkManager.service sshd.service dbus.socket /opt/setup/setup.service
systemctl --root=/media enable dbus-broker.service dbus.socket --global
systemctl --root=/media set-default multi-user.target

echo "root:$(grep "^root:" /etc/shadow | cut -d : -f 2)" | chpasswd -e --root /media

eval $(blkid -o export $PRT)
echo "UUID=$UUID / $TYPE defaults 0 1" > /media/etc/fstab

cat > /media/etc/default/grub << EOF
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="\$(sed 's, release .*\$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=console
GRUB_CMDLINE_LINUX="mitigations=off quiet selinux=0"
GRUB_DISABLE_RECOVERY=true
GRUB_ENABLE_BLSCFG=true
EOF

cat > /media/etc/sysconfig/kernel << EOF
UPDATEDEFAULT=yes
DEFAULTKERNEL=kernel-core
EOF

for m in dev proc run sys; do mount -Bv /$m /media/$m; done

chroot /media grub2-install $HDD
chroot /media grub2-mkconfig -o /boot/grub2/grub.cfg

sync
umount -Rv /media

reboot
