246 lines
6.8 KiB
Bash
Executable File
246 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
export PATH="/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
|
|
export HOME="/root"
|
|
|
|
function wdvn-chroot {
|
|
(
|
|
set -e
|
|
mount -o bind "/dev" "$1/dev"
|
|
mount -o bind "/dev/pts" "$1/dev/pts"
|
|
mount -o bind "/sys" "$1/sys"
|
|
mount -t proc none "$1/proc"
|
|
chroot "$1" ${@:2}
|
|
)
|
|
|
|
if [ $? != 0 ]; then
|
|
wdvn-chroot-end "$1"
|
|
exit 1
|
|
fi
|
|
|
|
wdvn-chroot-end "$1"
|
|
}
|
|
|
|
function wdvn-chroot-end {
|
|
umount -l "$1/proc"
|
|
umount -l "$1/sys"
|
|
umount -l "$1/dev/pts"
|
|
umount -l "$1/dev"
|
|
}
|
|
|
|
CHOICE=1
|
|
while true; do
|
|
echo "Welcome to windvn!"
|
|
echo "1: Fast install"
|
|
echo "2: Open bash"
|
|
echo "3: Reboot"
|
|
echo "4: Shut down"
|
|
read -p "Choice: " CHOICE
|
|
echo ""
|
|
|
|
if [ "$CHOICE" == "1" ]; then
|
|
(
|
|
set -e
|
|
dpkg-reconfigure keyboard-configuration
|
|
service console-setup.sh restart
|
|
udevadm trigger --subsystem-match=input --action=change
|
|
service keyboard-setup.sh restart
|
|
|
|
YN="n"
|
|
while [ "$YN" == "n" ]; do
|
|
echo ""
|
|
lsblk -d -o PATH,SIZE
|
|
read -p "Device: " DEVICE
|
|
echo ""
|
|
lsblk "$DEVICE" -o NAME,SIZE,FSTYPE,PARTLABEL
|
|
read -p "All data on this disk will be erased! Continue? [y,n]: " YN
|
|
YN="$(echo "$YN" | tr "[:upper:]" "[:lower:]")"
|
|
if [ "$YN" != "y" ]; then
|
|
YN="n"
|
|
fi
|
|
done
|
|
|
|
# Ask for encryption
|
|
WDVN_ENCRYPT=""
|
|
WDVN_ENCRYPT_PASS=""
|
|
while true; do
|
|
read -p "Encrypt the disk? [y,n]: " WDVN_ENCRYPT
|
|
WDVN_ENCRYPT="$(echo "$WDVN_ENCRYPT" | tr "[:upper:]" "[:lower:]")"
|
|
if [ "$WDVN_ENCRYPT" == "y" ]; then
|
|
apt -y install cryptsetup
|
|
echo ""
|
|
loadkeys us
|
|
while true; do
|
|
read -s -p "Passphrase: " WDVN_ENCRYPT_PASS
|
|
echo ""
|
|
read -s -p "Confirm passphrase: " WDVN_ENCRYPT_PASS_CONFIRM
|
|
echo ""
|
|
if [ "$WDVN_ENCRYPT_PASS" == "$WDVN_ENCRYPT_PASS_CONFIRM" ]; then
|
|
break
|
|
fi
|
|
echo "Passwords don't match."
|
|
echo ""
|
|
done
|
|
service console-setup.sh restart
|
|
udevadm trigger --subsystem-match=input --action=change
|
|
service keyboard-setup.sh restart
|
|
break
|
|
fi
|
|
|
|
if [ "$WDVN_ENCRYPT" == "n" ]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Create partitions
|
|
echo "Creating partitions ..."
|
|
wipefs --all "$DEVICE"
|
|
sgdisk -n 1:2048:+1M -c 1:"BIOS boot partition" -t 1:ef02 "$DEVICE"
|
|
sgdisk -n 2::+512M -c 2:"EFI System" -t 2:ef00 "$DEVICE"
|
|
sgdisk -n 3::-0 -c 3:"Linux filesystem" -t 3:8300 "$DEVICE"
|
|
sgdisk --hybrid=1:2:3 "$DEVICE"
|
|
PART_EFI="$(echo "${DEVICE}"*2)"
|
|
PART_DATA="$(echo "${DEVICE}"*3)"
|
|
DEV_DATA="$PART_DATA"
|
|
|
|
# Additional passphrases
|
|
if [ "$WDVN_ENCRYPT" == "y" ]; then
|
|
echo "$WDVN_ENCRYPT_PASS" | cryptsetup luksFormat --type luks1 "$PART_DATA"
|
|
|
|
while true; do
|
|
echo ""
|
|
read -p "Add another passphrase? [y,n]: " CHOICE
|
|
CHOICE="$(echo "$CHOICE" | tr "[:upper:]" "[:lower:]")"
|
|
if [ "$CHOICE" == "y" ]; then
|
|
loadkeys us
|
|
while true; do
|
|
read -s -p "Passphrase: " WDVN_ENCRYPT_PASS_ADD
|
|
echo ""
|
|
read -s -p "Confirm passphrase: " WDVN_ENCRYPT_PASS_ADD_CONFIRM
|
|
echo ""
|
|
if [ "$WDVN_ENCRYPT_PASS_ADD" == "$WDVN_ENCRYPT_PASS_ADD_CONFIRM" ]; then
|
|
echo "$WDVN_ENCRYPT_PASS
|
|
$WDVN_ENCRYPT_PASS_ADD" | cryptsetup luksAddKey "$PART_DEV"
|
|
break
|
|
fi
|
|
echo "Passwords don't match."
|
|
echo ""
|
|
done
|
|
service console-setup.sh restart
|
|
udevadm trigger --subsystem-match=input --action=change
|
|
service keyboard-setup.sh restart
|
|
fi
|
|
|
|
if [ "$CHOICE" == "n" ]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
echo "$WDVN_ENCRYPT_PASS" | cryptsetup luksOpen "$PART_DATA" system
|
|
|
|
PART_DATA="/dev/mapper/system"
|
|
fi
|
|
|
|
# Format partitions
|
|
echo "Formatting partitions ..."
|
|
mkfs.fat -F32 "$PART_EFI"
|
|
mkfs.ext4 "$PART_DATA"
|
|
|
|
# Mount target partition
|
|
echo "Mounting partitions ..."
|
|
mkdir -p "/media/install"
|
|
mount "$PART_DATA" "/media/install"
|
|
mkdir -p "/media/install/efi"
|
|
mount "$PART_EFI" "/media/install/efi"
|
|
|
|
# Creating swap
|
|
echo "Creating swap ..."
|
|
dd if=/dev/zero of="/media/install/swap" bs=1M count=512 status=progress
|
|
chmod 600 "/media/install/swap"
|
|
mkswap "/media/install/swap"
|
|
swapon "/media/install/swap"
|
|
|
|
# Add files
|
|
echo "Adding files ..."
|
|
unsquashfs -f -d "/media/install" "/lib/live/mount/medium/live/filesystem.squashfs"
|
|
|
|
if [ "$WDVN_ENCRYPT" == "y" ]; then
|
|
echo "GRUB_ENABLE_CRYPTODISK=y" > "/media/install/etc/default/grub.d/cryptodisk.cfg"
|
|
fi
|
|
|
|
# Set hostname
|
|
echo "Setting hostname ..."
|
|
echo "$(head -c4 </dev/urandom|xxd -p -u)" >"/media/install/etc/hostname"
|
|
|
|
# Write fstab
|
|
UUID_PART_DATA="$(blkid -o value -s UUID "$PART_DATA")"
|
|
UUID_DEV_DATA="$(blkid -o value -s UUID "$DEV_DATA")"
|
|
|
|
echo "Writing fstab ..."
|
|
if [ "$WDVN_ENCRYPT" == "y" ]; then
|
|
echo "GRUB_CMDLINE_LINUX=\"\$GRUB_CMDLINE_LINUX cryptdevice=UUID=$UUID_DEV_DATA root=UUID=$UUID_PART_DATA\"" >> "/media/install/etc/default/grub.d/cryptodisk.cfg"
|
|
fi
|
|
|
|
if [ "$WDVN_ENCRYPT" == "y" ]; then
|
|
echo "system UUID=$UUID_DEV_DATA none luks" >"media/install/etc/crypttab"
|
|
fi
|
|
echo "UUID=$UUID_PART_DATA / ext4 errors=remount-ro 0 1" >>"/media/install/etc/fstab"
|
|
echo "/swap none swap sw 0 0" >>"/media/install/etc/fstab"
|
|
|
|
# Remove live-specific packages
|
|
echo "Removing live-specific packages ..."
|
|
wdvn-chroot "/media/install" apt -y remove live-boot live-boot-initramfs-tools
|
|
wdvn-chroot "/media/install" apt -y autoremove
|
|
if [ "$WDVN_ENCRYPT" == "y" ]; then
|
|
wdvn-chroot "/media/install" apt -y install cryptsetup-initramfs
|
|
fi
|
|
wdvn-chroot "/media/install" update-initramfs -u
|
|
rm "/media/install/bin/login"
|
|
mv "/media/install/bin/login.oobe" "/media/install/bin/login"
|
|
|
|
# Install GRUB
|
|
echo "Installing grub ..."
|
|
wdvn-chroot "/media/install" grub-install --target=i386-efi --uefi-secure-boot --efi-directory="/efi" --boot-directory="/boot" "$DEVICE"
|
|
wdvn-chroot "/media/install" grub-install --target=x86_64-efi --uefi-secure-boot --efi-directory="/efi" --boot-directory="/boot" "$DEVICE"
|
|
wdvn-chroot "/media/install" grub-install --target=i386-pc --boot-directory="/boot" "$DEVICE"
|
|
wdvn-chroot "/media/install" update-grub
|
|
|
|
# Unmount
|
|
echo "Unmounting ..."
|
|
swapoff "/media/install/swap"
|
|
umount -l "/media/install/efi"
|
|
rmdir "/media/install/efi"
|
|
umount -l "/media/install"
|
|
rmdir "/media/install"
|
|
|
|
echo ""
|
|
echo Success. Press ENTER to quit setup.
|
|
read
|
|
)
|
|
if [ "$?" != "0" ]; then
|
|
echo ERROR. Cleaning up...
|
|
swapoff "/media/install/swap"
|
|
umount -l "/media/install/efi"
|
|
umount -l "/media/install"
|
|
cryptsetup luksClose system
|
|
echo ""
|
|
echo An error occured. Press ENTER to quit setup.
|
|
read
|
|
fi
|
|
fi
|
|
|
|
if [ "$CHOICE" == "2" ]; then
|
|
bash
|
|
fi
|
|
|
|
if [ "$CHOICE" == "3" ]; then
|
|
reboot
|
|
exit
|
|
fi
|
|
|
|
if [ "$CHOICE" == "4" ]; then
|
|
poweroff
|
|
exit
|
|
fi
|
|
|
|
echo ""
|
|
done |