#!/bin/sh -x
# v0.16

cd $1 || exit;
BASEDIR=`pwd`

mkdir -p "${BASEDIR}/dev"
mkdir -p "${BASEDIR}/var/lib/rpm"
mkdir -p "${BASEDIR}/var/cache/apt/archives/partial"
mkdir -p "${BASEDIR}/var/lib/apt/lists/partial"

mknod "${BASEDIR}/dev/null" c 1 3
mknod "${BASEDIR}/dev/urandom" c 1 9

rpm --root "${BASEDIR}" --initdb

apt-get \
	-o APT::Architecture="x86_64" \
	-o RPM::RootDir="${BASEDIR}" \
	-o Dir::State="${BASEDIR}/var/lib/apt/" \
	-o Dir::Cache="${BASEDIR}/var/cache/apt/" \
		update

apt-get -y \
	-o APT::Architecture="x86_64" \
	-o RPM::RootDir="${BASEDIR}" \
	-o Dir::State="${BASEDIR}/var/lib/apt/" \
	-o Dir::Cache="${BASEDIR}/var/cache/apt/" \
		install filesystem

mount --bind /dev "${BASEDIR}/dev"
mount --bind /dev/pts "${BASEDIR}/dev/pts"
mount --bind /dev/shm "${BASEDIR}/dev/shm"
mount --bind /proc "${BASEDIR}/proc"
mount --bind /sys "${BASEDIR}/sys"

mount -t tmpfs tmpfs "${BASEDIR}/tmp"
mkdir -p "${BASEDIR}/tmp/.private/root"

apt-get -y \
	-o APT::Architecture="x86_64" \
	-o RPM::RootDir="${BASEDIR}" \
	-o Dir::State="${BASEDIR}/var/lib/apt/" \
	-o Dir::Cache="${BASEDIR}/var/cache/apt/" \
		install basesystem kernel-image-6.12 grub-pc apt apt-scripts mingetty mdadm lvm2 glibc \
			altlinux-release-sisyphus ifrename openssh openssh-clients openssh-server cpupower \
			vim-console etckeeper etcnet iftop mc hexedit man man-pages ntpdate passwd sysstat \
			fdisk cfdisk net-tools telnet xfsprogs e2fsprogs which dhcpcd procps \
			lshw pciutils usbutils openssh-blacklist-utils systemd-sysvinit systemd-timesyncd \
			make-initrd-lvm make-initrd-mdadm ntools ntools-apt sysstat dstat ifstat \
			netcat iputils docker-engine docker-compose-v2 kbd kbd-data tmux || exit

/bin/cp "/etc/resolv.conf" "${BASEDIR}/etc/"
/bin/cp "/root/.vimrc" "${BASEDIR}/root/"
/bin/cp -r "/root/.vim" "${BASEDIR}/root/"
/bin/cp "/root/.ssh/authorized_keys" "${BASEDIR}/root/.ssh/"
/bin/cp -r "/root/bin" "${BASEDIR}/root/bin"

echo "ALT Linux Sisyphus" > "${BASEDIR}/etc/altlinux-release"

cat > "${BASEDIR}/etc/issue" <<EOL
Welcome to \\R
Kernel \\r on \\m / \\l
EOL

echo "net.ipv6.conf.all.disable_ipv6=1" >> "${BASEDIR}/etc/sysctl.d/90-disable_ipv6.conf"

sed -i 's/^#\(rpm \[alt\] http:.*Sisyphus\/x86_64\s\)/\1/g' "${BASEDIR}/etc/apt/sources.list.d/alt.list"
sed -i 's/^#\(rpm \[alt\] http:.*Sisyphus\/noarch\s\)/\1/g' "${BASEDIR}/etc/apt/sources.list.d/alt.list"

sed -i "s/alias l=.*/alias l='ls -lp --group-directories-first'/" "${BASEDIR}/etc/bashrc.d/alias.sh"
sed -i "s/alias ll=.*/alias ll='ls -lap --group-directories-first'/" "${BASEDIR}/etc/bashrc.d/alias.sh"

FSMOUNTMODE="1 1"

for BLOCKDEVICE in $(findmnt --mountpoint "${BASEDIR}" -o SOURCE -nR); do
	FSUUID=$(findmnt "${BLOCKDEVICE}" -o UUID -n)

	if [ -n "${FSUUID}" ]; then
		FSTYPE=$(findmnt "${BLOCKDEVICE}" -o FSTYPE -n)
		FSMOUNTPOINT=$(realpath --relative-to="${BASEDIR}" $(findmnt "${BLOCKDEVICE}" -o TARGET -n))

		if [ "${FSMOUNTPOINT}" = "." ]; then
			FSMOUNTPOINT="/"
		else
			FSMOUNTPOINT="/${FSMOUNTPOINT}"
		fi

		FSLIST="${FSLIST}UUID=\"${FSUUID}\"\t${FSMOUNTPOINT}\t${FSTYPE}\tdefaults\t${FSMOUNTMODE}\n"
		FSMOUNTMODE="1 2"
	fi
done;

sed -i "1i ${FSLIST}" "${BASEDIR}/etc/fstab"

#chroot ${BASEDIR} timedatectl set-timezone 'Europe/Moscow'
chroot ${BASEDIR} alternatives-update
chroot ${BASEDIR} usermod -p '' root
chroot ${BASEDIR} systemctl enable altlinux-libresolv.path network sshd \
	lvm2-monitor.service dm-event.socket lvm2-lvmpolld.socket

#KERNELVERSION=$(find "${BASEDIR}/boot/" -name 'vmlinuz-*' -type f -print | sed 's/^.*\/vmlinuz-\(.*\)/\1/')
#chroot "${BASEDIR}" /bin/bash -c "/sbin/depmod \"${KERNELVERSION}\"; /usr/sbin/make-initrd -k \"${KERNELVERSION}\""

if [ -e "${BASEDIR}/etc/sysconfig/grub2" ]; then
	sed -i "s/^GRUB_AUTOUPDATE_CFG=.*/GRUB_AUTOUPDATE_CFG=false/" "${BASEDIR}/etc/sysconfig/grub2"
	sed -i "s/^GRUB_VMLINUZ_SYMLINKS=.*/GRUB_VMLINUZ_SYMLINKS=false/" "${BASEDIR}/etc/sysconfig/grub2"
	sed -i "s/^GRUB_VMLINUZ_FAILSAFE=.*/GRUB_VMLINUZ_FAILSAFE=false/" "${BASEDIR}/etc/sysconfig/grub2"
	sed -i "s/^GRUB_TERMINAL_OUTPUT=.*/GRUB_TERMINAL_OUTPUT='console'/" "${BASEDIR}/etc/sysconfig/grub2"
	sed -i "s/^GRUB_SAVEDEFAULT=.*/GRUB_SAVEDEFAULT=false/" "${BASEDIR}/etc/sysconfig/grub2"

	chroot ${BASEDIR} /usr/sbin/update-grub
fi

umount "${BASEDIR}/tmp"
umount "${BASEDIR}/sys"
umount "${BASEDIR}/proc"
umount "${BASEDIR}/dev/shm"
umount "${BASEDIR}/dev/pts"
umount "${BASEDIR}/dev"

sync
