2022-07-14 18:33:26 +03:00
#! /bin/bash
2022-08-24 21:45:29 +03:00
# Variables
2022-09-04 00:12:16 +03:00
bootloader_id = ''
bootloader = ''
2022-08-24 21:45:29 +03:00
newuser_yn = ''
# Functions
2022-08-28 16:55:00 +03:00
# Source: https://www.reddit.com/r/voidlinux/comments/jlkv1j/xs_quick_install_tool_for_void_linux/
function xs {
2022-07-17 23:54:09 +03:00
2022-08-28 16:55:00 +03:00
xpkg -a | fzf -m --preview 'xq {1}' --preview-window= right:66%:wrap | xargs -ro xi
2022-07-17 23:54:09 +03:00
2022-07-14 18:33:26 +03:00
}
2022-08-28 16:55:00 +03:00
function initial_configuration {
2022-07-14 18:33:26 +03:00
2022-08-28 16:55:00 +03:00
clear
2022-07-30 20:45:36 +03:00
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
2022-08-11 19:31:58 +03:00
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
2022-08-28 16:55:00 +03:00
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Initial configuration ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
2022-08-11 19:31:58 +03:00
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
2022-07-17 23:54:09 +03:00
2022-09-01 15:40:17 +03:00
echo -e -n " \nSetting ${ BLUE_LIGHT } root password ${ NORMAL } :\n "
2022-08-28 16:55:00 +03:00
while true ; do
echo
passwd root
if [ [ " $? " = = "0" ] ] ; then
break
else
echo -e -n " \n ${ RED_LIGHT } Something went wrong, please try again. ${ NORMAL } \n\n "
read -n 1 -r -p "[Press any key to continue...]" key
echo
fi
done
echo -e -n "\nSetting root permissions...\n"
chown root:root /
chmod 755 /
2022-08-30 11:57:31 +03:00
echo -e -n "\nEnabling wheel group to use sudo...\n"
echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/10-wheel
2022-07-14 18:33:26 +03:00
echo -e -n "\nExporting variables that will be used for fstab...\n"
2022-07-30 20:45:36 +03:00
export LUKS_UUID = $( blkid -s UUID -o value " $encrypted_partition " )
2022-08-11 19:31:58 +03:00
export ROOT_UUID = $( blkid -s UUID -o value " $final_drive " )
2022-07-14 18:33:26 +03:00
2022-08-28 16:55:00 +03:00
echo -e -n "\nWriting fstab...\n"
2022-07-14 18:33:26 +03:00
sed -i '/tmpfs/d' /etc/fstab
2022-07-30 20:45:36 +03:00
2022-07-14 18:33:26 +03:00
cat << EOF >> /etc/fstab
2022-07-17 12:58:23 +03:00
2022-08-28 16:55:00 +03:00
# Root subvolume
2022-08-11 19:31:58 +03:00
UUID = $ROOT_UUID / btrfs $BTRFS_OPT ,subvol= @ 0 1
2022-07-18 12:02:24 +03:00
2022-08-28 16:55:00 +03:00
# Home subvolume
2022-08-11 19:31:58 +03:00
UUID = $ROOT_UUID /home btrfs $BTRFS_OPT ,subvol= @home 0 2
2022-07-18 12:02:24 +03:00
2022-08-28 16:55:00 +03:00
# Snapshots subvolume, uncomment the following line after creating a config for root [/] in snapper
2022-08-11 19:31:58 +03:00
#UUID=$ROOT_UUID /.snapshots btrfs $BTRFS_OPT,subvol=@snapshots 0 2
2022-07-18 12:02:24 +03:00
# TMPfs
2022-07-14 18:33:26 +03:00
tmpfs /tmp tmpfs defaults,noatime,mode= 1777 0 0
EOF
2022-08-28 16:55:00 +03:00
echo -e -n "\nAdding needed dracut configuration files...\n"
2022-07-14 18:33:26 +03:00
echo -e "hostonly=yes\nhostonly_cmdline=yes" >> /etc/dracut.conf.d/00-hostonly.conf
2022-08-11 19:31:58 +03:00
echo -e "add_dracutmodules+=\" crypt btrfs lvm resume \"" >> /etc/dracut.conf.d/20-addmodules.conf
2022-07-14 18:33:26 +03:00
echo -e "tmpdir=/tmp" >> /etc/dracut.conf.d/30-tmpfs.conf
2022-07-17 23:54:09 +03:00
echo -e -n "\nGenerating new dracut initramfs...\n\n"
2022-07-30 20:45:36 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
echo
2022-08-11 19:31:58 +03:00
dracut --regenerate-all --force --hostonly
2022-07-14 18:33:26 +03:00
2022-07-17 23:54:09 +03:00
echo
read -n 1 -r -p "[Press any key to continue...]" key
clear
2022-07-14 18:33:26 +03:00
}
2022-08-28 16:55:00 +03:00
function header_ib {
2022-07-30 20:45:36 +03:00
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
2022-08-28 16:55:00 +03:00
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Bootloader installation ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
2022-07-30 20:45:36 +03:00
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
}
2022-08-28 16:55:00 +03:00
function install_bootloader {
2022-07-14 18:33:26 +03:00
2022-08-28 16:55:00 +03:00
while true ; do
2022-07-17 23:54:09 +03:00
2022-08-28 16:55:00 +03:00
if [ [ " $luks_ot " = = "2" ] ] ; then
header_ib
echo -e -n " \nLUKS version $luks_ot was previously selected.\n ${ BLUE_LIGHT } EFISTUB ${ NORMAL } will be used as bootloader.\n\n "
bootloader = "EFISTUB"
read -n 1 -r -p "[Press any key to continue...]" key
2022-09-01 15:40:17 +03:00
echo
2022-08-28 17:20:59 +03:00
else
2022-08-28 16:55:00 +03:00
header_ib
echo -e -n " \nSelect which ${ BLUE_LIGHT } bootloader ${ NORMAL } do you want to use (EFISTUB, GRUB2): "
2022-08-28 18:10:40 +03:00
read -r bootloader
2022-08-28 16:55:00 +03:00
fi
2022-07-18 12:02:24 +03:00
2022-08-28 16:55:00 +03:00
if [ [ " $bootloader " = = "EFISTUB" ] ] || [ [ " $bootloader " = = "efistub" ] ] ; then
2022-09-01 15:40:17 +03:00
echo -e -n " \nBootloader selected: ${ BLUE_LIGHT } $bootloader ${ NORMAL } .\n "
echo -e -n " \nMounting $boot_partition to /boot...\n "
2022-08-28 16:55:00 +03:00
mkdir /TEMPBOOT
cp -pr /boot/* /TEMPBOOT/
rm -rf /boot/*
mount -o rw,noatime " $boot_partition " /boot
cp -pr /TEMPBOOT/* /boot/
rm -rf /TEMPBOOT
echo -e -n "\nSetting correct options in /etc/default/efibootmgr-kernel-hook...\n"
sed -i "/MODIFY_EFI_ENTRIES=0/s/0/1/" /etc/default/efibootmgr-kernel-hook
if [ [ " $encryption_yn " = = "y" ] ] || [ [ " $encryption_yn " = = "Y" ] ] ; then
sed -i " /# OPTIONS=/s/.*/OPTIONS=\"loglevel=4 rd.auto=1 rd.luks.name= $LUKS_UUID = $encrypted_name \"/ " /etc/default/efibootmgr-kernel-hook
if [ [ " $hdd_ssd " = = "ssd" ] ] ; then
sed -i " /OPTIONS=/s/\" $/ rd.luks.allow-discards= $LUKS_UUID &/ " /etc/default/efibootmgr-kernel-hook
fi
2022-09-04 00:12:16 +03:00
elif { [ [ " $encryption_yn " = = "n" ] ] || [ [ " $encryption_yn " = = "N" ] ] ; } && { [ [ " $lvm_yn " = = "y" ] ] || [ [ " $lvm_yn " = = "Y" ] ] ; } ; then
2022-08-28 16:55:00 +03:00
sed -i "/# OPTIONS=/s/.*/OPTIONS=\"loglevel=4 rd.auto=1\"/" /etc/default/efibootmgr-kernel-hook
else
sed -i "/# OPTIONS=/s/.*/OPTIONS=\"loglevel=4\"/" /etc/default/efibootmgr-kernel-hook
fi
sed -i "/# DISK=/s|.*|DISK=\"\$(lsblk -pd -no pkname \$(findmnt -enr -o SOURCE -M /boot))\"|" /etc/default/efibootmgr-kernel-hook
sed -i "/# PART=/s_.*_PART=\"\$(lsblk -pd -no pkname \$(findmnt -enr -o SOURCE -M /boot) | grep --color=never -Eo \\\\\"[0-9]+\$\\\\\")\"_" /etc/default/efibootmgr-kernel-hook
echo -e -n "\nModifying /etc/kernel.d/post-install/50-efibootmgr to keep EFI entry after reboot...\n"
sed -i "/efibootmgr -qo \$bootorder/s/^/#/" /etc/kernel.d/post-install/50-efibootmgr
echo -e -n " \n ${ RED_LIGHT } Keep in mind that to keep the new EFI entry after each reboot, ${ NORMAL } \n "
echo -e -n " ${ RED_LIGHT } the last line of /etc/kernel.d/post-install/50-efibootmgr has been commented. ${ NORMAL } \n "
echo -e -n " ${ RED_LIGHT } Probably you will have to comment the same line after each efibootmgr update. ${ NORMAL } \n\n "
2022-07-14 18:33:26 +03:00
2022-08-28 16:55:00 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
break
2022-07-14 18:33:26 +03:00
2022-08-28 16:55:00 +03:00
elif [ [ " $bootloader " = = "GRUB2" ] ] || [ [ " $bootloader " = = "grub2" ] ] ; then
2022-09-01 15:40:17 +03:00
echo -e -n " \nBootloader selected: ${ BLUE_LIGHT } $bootloader ${ NORMAL } .\n "
2022-08-28 16:55:00 +03:00
if [ [ " $encryption_yn " = = "y" ] ] || [ [ " $encryption_yn " = = "Y" ] ] ; then
echo -e -n "\nEnabling CRYPTODISK in GRUB...\n"
echo -e -n "\nGRUB_ENABLE_CRYPTODISK=y\n" >> /etc/default/grub
sed -i " /GRUB_CMDLINE_LINUX_DEFAULT=/s/\" $/ rd.auto=1 rd.luks.name= $LUKS_UUID = $encrypted_name &/ " /etc/default/grub
if [ [ " $hdd_ssd " = = "ssd" ] ] ; then
sed -i " /GRUB_CMDLINE_LINUX_DEFAULT=/s/\" $/ rd.luks.allow-discards= $LUKS_UUID &/ " /etc/default/grub
fi
2022-09-04 00:12:16 +03:00
elif { [ [ " $encryption_yn " = = "n" ] ] || [ [ " $encryption_yn " = = "N" ] ] ; } && { [ [ " $lvm_yn " = = "y" ] ] || [ [ " $lvm_yn " = = "Y" ] ] ; } ; then
2022-08-28 16:55:00 +03:00
sed -i " /GRUB_CMDLINE_LINUX_DEFAULT=/s/\" $/ rd.auto=1&/ " /etc/default/grub
fi
if ! grep -q efivar /proc/mounts ; then
echo -e -n "\nMounting efivarfs...\n"
mount -t efivarfs efivarfs /sys/firmware/efi/efivars/
fi
2022-07-17 23:54:09 +03:00
2022-08-11 19:31:58 +03:00
while true ; do
2022-08-28 16:55:00 +03:00
echo -e -n " \nSelect a ${ BLUE_LIGHT } bootloader-id ${ NORMAL } that will be used for grub install: "
read -r bootloader_id
if [ [ -z " $bootloader_id " ] ] ; then
echo -e -n "\nPlease enter a valid bootloader-id.\n\n"
2022-08-11 19:31:58 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
else
2022-08-28 16:55:00 +03:00
while true ; do
echo -e -n " \nYou entered: ${ BLUE_LIGHT } $bootloader_id ${ NORMAL } .\n\n "
read -n 1 -r -p "Is this the desired bootloader-id? (y/n): " yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
if [ [ " $encryption_yn " = = "y" ] ] || [ [ " $encryption_yn " = = "Y" ] ] ; then
2022-09-01 15:40:17 +03:00
echo -e -n "\n\nGenerating random key to avoid typing password twice at boot...\n\n"
2022-08-28 16:55:00 +03:00
dd bs = 512 count = 4 if = /dev/random of = /boot/volume.key
echo -e -n "\nRandom key generated, unlocking the encrypted partition...\n"
while true ; do
echo
cryptsetup luksAddKey " $encrypted_partition " /boot/volume.key
if [ [ " $? " = = "0" ] ] ; then
break
else
echo -e -n " \n ${ RED_LIGHT } Something went wrong, please try again. ${ NORMAL } \n\n "
read -n 1 -r -p "[Press any key to continue...]" key
echo
fi
done
chmod 000 /boot/volume.key
chmod -R g-rwx,o-rwx /boot
echo -e -n "\nAdding random key to /etc/crypttab...\n"
echo -e " \n $encrypted_name UUID= $LUKS_UUID /boot/volume.key luks\n " >> /etc/crypttab
echo -e -n "\nAdding random key to dracut configuration files...\n"
echo -e "install_items+=\" /boot/volume.key /etc/crypttab \"" >> /etc/dracut.conf.d/10-crypt.conf
echo -e -n "\nGenerating new dracut initramfs...\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
echo
dracut --regenerate-all --force --hostonly
fi
echo -e -n " \n\nInstalling GRUB on ${ BLUE_LIGHT } /boot/efi ${ NORMAL } partition with ${ BLUE_LIGHT } $bootloader_id ${ NORMAL } as bootloader-id...\n\n "
mkdir -p /boot/efi
mount -o rw,noatime " $boot_partition " /boot/efi/
grub-install --target= x86_64-efi --boot-directory= /boot --efi-directory= /boot/efi --bootloader-id= " $bootloader_id " --recheck
break 3
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nPlease select another bootloader-id.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
2022-08-11 19:31:58 +03:00
fi
done
2022-08-28 16:55:00 +03:00
else
echo -e -n "\nPlease select a valid bootloader.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
2022-08-11 19:31:58 +03:00
fi
2022-08-28 16:55:00 +03:00
2022-08-11 19:31:58 +03:00
done
2022-07-30 20:45:36 +03:00
2022-08-28 16:55:00 +03:00
if { [ [ " $lvm_yn " = = "y" ] ] || [ [ " $lvm_yn " = = "Y" ] ] ; } && [ [ " $hdd_ssd " = = "ssd" ] ] ; then
echo -e -n "\n\nEnabling SSD trim for LVM...\n"
2022-07-30 20:45:36 +03:00
sed -i 's/issue_discards = 0/issue_discards = 1/' /etc/lvm/lvm.conf
2022-07-17 23:54:09 +03:00
fi
2022-08-28 16:55:00 +03:00
export UEFI_UUID = $( blkid -s UUID -o value " $boot_partition " )
2022-09-01 15:40:17 +03:00
echo -e -n "\nWriting EFI partition to /etc/fstab...\n"
2022-08-28 16:55:00 +03:00
if [ [ " $bootloader " = = "EFISTUB" ] ] || [ [ " $bootloader " = = "efistub" ] ] ; then
echo -e " \n# EFI partition\nUUID= $UEFI_UUID /boot vfat defaults,noatime 0 2 " >> /etc/fstab
elif [ [ " $bootloader " = = "GRUB2" ] ] || [ [ " $bootloader " = = "grub2" ] ] ; then
echo -e " \n# EFI partition\nUUID= $UEFI_UUID /boot/efi vfat defaults,noatime 0 2 " >> /etc/fstab
fi
echo -e -n " \nBootloader ${ BLUE_LIGHT } $bootloader ${ NORMAL } successfully installed.\n\n "
2022-07-30 20:45:36 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
2022-07-17 23:54:09 +03:00
clear
2022-07-30 20:45:36 +03:00
}
2022-07-14 18:33:26 +03:00
2022-08-11 19:31:58 +03:00
function header_cs {
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } SwapFile creation ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
}
function create_swapfile {
while true ; do
header_cs
echo -e -n " \nDo you want to create a ${ BLUE_LIGHT } swapfile ${ NORMAL } in ${ BLUE_LIGHT } /var/swap/ ${ NORMAL } btrfs subvolume?\nThis will also enable ${ BLUE_LIGHT } zswap ${ NORMAL } , a cache in RAM for swap.\nA swapfile is needed if you plan to use hibernation (y/n): "
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
ram_size = $( free -g --si | awk -F " " 'FNR == 2 {print $2}' )
while true ; do
clear
header_cs
echo -e -n " \nYour system has ${ BLUE_LIGHT } ${ ram_size } GB ${ NORMAL } of RAM.\n "
2022-08-11 21:37:40 +03:00
echo -e -n "\nPress [ENTER] to create a swapfile of the same dimensions or choose the desired size in GB (only numbers): "
2022-08-11 19:31:58 +03:00
read -r swap_size
if [ [ " $swap_size " = = "" ] ] || [ [ " $swap_size " -gt "0" ] ] ; then
if [ [ " $swap_size " = = "" ] ] ; then
swap_size = $ram_size
fi
echo -e -n " \nA swapfile of ${ BLUE_LIGHT } ${ swap_size } GB ${ NORMAL } will be created in ${ BLUE_LIGHT } /var/swap/ ${ NORMAL } btrfs subvolume...\n\n "
btrfs subvolume create /var/swap
truncate -s 0 /var/swap/swapfile
chattr +C /var/swap/swapfile
chmod 600 /var/swap/swapfile
2023-07-27 17:12:57 +03:00
dd if = /dev/zero of = /var/swap/swapfile bs = 100M count = " $(( ${ swap_size } * 10 )) " status = progress
2022-08-24 21:45:29 +03:00
mkswap --label SwapFile /var/swap/swapfile
2022-08-11 19:31:58 +03:00
swapon /var/swap/swapfile
gcc -O2 " $HOME " /btrfs_map_physical.c -o " $HOME " /btrfs_map_physical
RESUME_OFFSET = $(( $( " $HOME " /btrfs_map_physical /var/swap/swapfile | awk -F " " 'FNR == 2 {print $NF}' ) / $( getconf PAGESIZE) ))
2022-08-28 16:55:00 +03:00
if [ [ " $bootloader " = = "EFISTUB" ] ] || [ [ " $bootloader " = = "efistub" ] ] ; then
sed -i " /OPTIONS=/s/\" $/ resume=UUID= $ROOT_UUID resume_offset= $RESUME_OFFSET &/ " /etc/default/efibootmgr-kernel-hook
elif [ [ " $bootloader " = = "GRUB2" ] ] || [ [ " $bootloader " = = "grub2" ] ] ; then
sed -i " /GRUB_CMDLINE_LINUX_DEFAULT=/s/\" $/ resume=UUID= $ROOT_UUID resume_offset= $RESUME_OFFSET &/ " /etc/default/grub
fi
echo -e "\n# SwapFile\n/var/swap/swapfile none swap defaults 0 0" >> /etc/fstab
2022-08-11 19:31:58 +03:00
echo -e -n "\nEnabling zswap...\n"
2022-08-24 21:45:29 +03:00
echo "add_drivers+=\" lz4hc lz4hc_compress z3fold \"" >> /etc/dracut.conf.d/40-add_zswap_drivers.conf
2022-08-11 19:31:58 +03:00
echo -e -n "\nRegenerating dracut initramfs...\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
echo
dracut --regenerate-all --force --hostonly
2022-08-28 16:55:00 +03:00
if [ [ " $bootloader " = = "EFISTUB" ] ] || [ [ " $bootloader " = = "efistub" ] ] ; then
sed -i " /OPTIONS=/s/\" $/ zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lz4hc zswap.zpool=z3fold&/ " /etc/default/efibootmgr-kernel-hook
echo -e -n "\nReconfiguring kernel...\n\n"
kernelver_pre = $( ls /lib/modules/)
kernelver = $( echo ${ kernelver_pre %.* } )
xbps-reconfigure -f linux" $kernelver "
elif [ [ " $bootloader " = = "GRUB2" ] ] || [ [ " $bootloader " = = "grub2" ] ] ; then
sed -i " /GRUB_CMDLINE_LINUX_DEFAULT=/s/\" $/ zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lz4hc zswap.zpool=z3fold&/ " /etc/default/grub
echo -e -n "\nUpdating grub...\n\n"
update-grub
fi
2022-08-11 19:31:58 +03:00
swapoff --all
echo -e -n "\nSwapfile successfully created and zswap successfully enabled.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break 2
else
echo -e -n "\nPlease enter a valid value.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nNo swapfile created.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
}
2022-08-28 16:55:00 +03:00
function header_iap {
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Install additional packages ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
}
function install_additional_packages {
while true ; do
header_iap
2022-09-01 15:40:17 +03:00
echo -e -n " \nDo you want to ${ BLUE_LIGHT } install ${ NORMAL } any ${ BLUE_LIGHT } additional package ${ NORMAL } in your system? (y/n): "
2022-08-28 16:55:00 +03:00
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
echo -e -n "\n\nPlease mark all the packages you want to install with [TAB] key.\nPress [ENTER] key when you're done to install the selected packages\nor press [ESC] key to abort the operation.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
xs
echo
read -n 1 -r -p "[Press any key to continue...]" key
clear
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nNo additional packages were installed.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
}
function header_eds {
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Enable/disable services ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
}
function enable_disable_services {
header_eds
echo -e -n "\nEnabling internet service at first boot...\n"
ln -s /etc/sv/dbus /etc/runit/runsvdir/default/
ln -s /etc/sv/NetworkManager /etc/runit/runsvdir/default/
echo -e -n "\nEnabling grub snapshot service at first boot...\n\n"
ln -s /etc/sv/grub-btrfs /etc/runit/runsvdir/default/
read -n 1 -r -p "[Press any key to continue...]" key
clear
while true ; do
header_eds
2022-09-01 15:40:17 +03:00
echo -e -n " \nDo you want to ${ BLUE_LIGHT } enable ${ NORMAL } any additional ${ BLUE_LIGHT } service ${ NORMAL } in your system? (y/n): "
2022-08-28 16:55:00 +03:00
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
while true ; do
clear
header_eds
echo -e -n "\nListing all the services that could be enabled...\n"
ls --almost-all --color= always /etc/sv/
echo -e -n "\nListing all the services that are already enabled...\n"
ls --almost-all --color= always /etc/runit/runsvdir/default/
echo -e -n "\nWhich service do you want to enable? (i.e. NetworkManager, \"q\" to break): "
read -r service_enabler
if [ [ " $service_enabler " = = "q" ] ] ; then
echo -e -n "\nAborting the operation...\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break
elif [ [ ! -d /etc/sv/" $service_enabler " ] ] ; then
echo -e -n " \nService ${ RED_LIGHT } $service_enabler ${ NORMAL } does not exist.\nPlease select another service to be enabled.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
elif [ [ -L /etc/runit/runsvdir/default/" $service_enabler " ] ] ; then
echo -e -n " \nService ${ RED_LIGHT } $service_enabler ${ NORMAL } already enabled.\nPlease select another service to be enabled.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
elif [ [ " $service_enabler " = = "" ] ] ; then
echo -e -n "\nPlease enter a valid service name.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break
else
echo -e -n " \nEnabling service ${ BLUE_LIGHT } $service_enabler ${ NORMAL } ...\n\n "
ln -s /etc/sv/" $service_enabler " /etc/runit/runsvdir/default/
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
fi
done
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nNo additional services were enabled.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
while true ; do
header_eds
2022-09-01 15:40:17 +03:00
echo -e -n " \nDo you want to ${ BLUE_LIGHT } disable ${ NORMAL } any ${ BLUE_LIGHT } service ${ NORMAL } in your system? (y/n): "
2022-08-28 16:55:00 +03:00
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
while true ; do
clear
header_eds
echo -e -n "\nListing all the services that could be disabled...\n"
ls --almost-all --color= always /etc/runit/runsvdir/default/
echo -e -n "\nWhich service do you want to disable? (i.e. NetworkManager, \"q\" to break): "
read -r service_disabler
if [ [ " $service_disabler " = = "q" ] ] ; then
echo -e -n "\nAborting the operation...\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break
elif [ [ ! -L /etc/runit/runsvdir/default/" $service_disabler " ] ] ; then
echo -e -n " \nService ${ RED_LIGHT } $service_disabler ${ NORMAL } does not exist.\nPlease select another service to be disabled.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
elif [ [ " $service_disabler " = = "" ] ] ; then
echo -e -n "\nPlease enter a valid service name.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
else
echo -e -n " \nDisabling service ${ BLUE_LIGHT } $service_disabler ${ NORMAL } ...\n\n "
rm -f /etc/runit/runsvdir/default/" $service_disabler "
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
fi
done
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nNo additional services were disabled.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
}
2022-08-24 21:45:29 +03:00
function header_cu {
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Create new users ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
}
function create_user {
while true; do
header_cu
2022-09-01 15:40:17 +03:00
echo -e -n " \nDo you want to ${ BLUE_LIGHT } add ${ NORMAL } any ${ BLUE_LIGHT } new user ${ NORMAL } ?\nOnly non-root users can later configure Void Packages (y/n): "
2022-08-24 21:45:29 +03:00
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
while true ; do
clear
header_cu
2022-09-01 15:40:17 +03:00
echo -e -n " \nPlease select a ${ BLUE_LIGHT } name ${ NORMAL } for your new user (i.e. MyNewUser): "
2022-08-24 21:45:29 +03:00
read -r newuser
if [ [ -z " $newuser " ] ] ; then
echo -e -n "\nPlease select a valid name.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
elif [ [ " $newuser " = = "root" ] ] ; then
echo -e -n "\nYou can't add root again\nPlease select another name.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
elif getent passwd " $newuser " & > /dev/null ; then
echo -e -n " \nUser ${ BLUE_LIGHT } $newuser ${ NORMAL } already exists.\nPlease select another username.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
while true; do
echo -e -n " \nIs username ${ BLUE_LIGHT } $newuser ${ NORMAL } okay? (y/n and [ENTER]): "
2022-09-01 15:40:17 +03:00
read -r yn
2022-08-24 21:45:29 +03:00
if [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\nAborting, pleasae select another name.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
elif [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
echo -e -n " \nAdding new user ${ BLUE_LIGHT } $newuser ${ NORMAL } and giving access to groups:\n "
echo -e -n "kmem, wheel, tty, tape, daemon, floppy, disk, lp, dialout, audio, video,\nutmp, cdrom, optical, mail, storage, scanner, kvm, input, plugdev, users.\n"
useradd --create-home --groups kmem,wheel,tty,tape,daemon,floppy,disk,lp,dialout,audio,video,utmp,cdrom,optical,mail,storage,scanner,kvm,input,plugdev,users " $newuser "
echo -e -n " \nPlease select a new password for user ${ BLUE_LIGHT } $newuser ${ NORMAL } :\n "
2022-08-28 16:55:00 +03:00
while true ; do
echo
passwd " $newuser "
if [ [ " $? " = = "0" ] ] ; then
break
else
echo -e -n " \n ${ RED_LIGHT } Something went wrong, please try again. ${ NORMAL } \n\n "
read -n 1 -r -p "[Press any key to continue...]" key
echo
fi
done
2022-08-24 21:45:29 +03:00
while true ; do
echo -e -n "\nListing all the available shells:\n\n"
chsh --list-shells
echo -e -n " \nWhich ${ BLUE_LIGHT } shell ${ NORMAL } do you want to set for user ${ BLUE_LIGHT } $newuser ${ NORMAL } ?\nPlease enter the full path (i.e. /bin/sh): "
read -r set_user_shell
if [ [ ! -x " $set_user_shell " ] ] ; then
echo -e -n "\nPlease enter a valid shell.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
else
while true ; do
echo -e -n " \nYou entered: ${ BLUE_LIGHT } $set_user_shell ${ NORMAL } .\n\n "
read -n 1 -r -p "Is this the desired shell? (y/n): " yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
echo
echo
chsh --shell " $set_user_shell " " $newuser "
echo -e -n " \nDefault shell for user ${ BLUE_LIGHT } $newuser ${ NORMAL } successfully changed.\n "
echo -e -n " \nUser ${ BLUE_LIGHT } $newuser ${ NORMAL } successfully created.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
newuser_yn = "y"
clear
break 4
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nPlease select another shell.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
fi
done
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
fi
done
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nNo additional user was added.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
if [ [ " $newuser_yn " = = "" ] ] ; then
newuser_yn = "n"
fi
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
}
function header_vp {
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Configure Void Packages ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
}
function void_packages {
if [ [ " $newuser_yn " = = "y" ] ] ; then
while true; do
header_vp
2022-09-01 15:40:17 +03:00
echo -e -n " \nDo you want to clone a ${ BLUE_LIGHT } Void Packages ${ NORMAL } repository to a specific folder for a specific non-root user? (y/n): "
2022-08-24 21:45:29 +03:00
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
while true ; do
clear
header_vp
echo -e -n " \nPlease enter an existing ${ BLUE_LIGHT } username ${ NORMAL } : "
read -r void_packages_username
if [ [ -z " $void_packages_username " ] ] ; then
echo -e -n "\nPlease input a valid username.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
elif [ [ " $void_packages_username " = = "root" ] ] ; then
echo -e -n "\nRoot user cannot be used to configure Void Packages.\nPlease select another username.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
elif ! getent passwd " $void_packages_username " & > /dev/null ; then
echo -e -n " \nUser ${ RED_LIGHT } $void_packages_username ${ NORMAL } doesn't exists.\nPlease select another username.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
else
while true ; do
clear
header_vp
echo -e -n " \nUser selected: ${ BLUE_LIGHT } $void_packages_username ${ NORMAL } \n "
2022-09-04 00:12:16 +03:00
echo -e -n " \nPlease enter a ${ BLUE_LIGHT } full empty path ${ NORMAL } where you want to clone Void Packages.\nThe script will create that folder and then clone Void Packages into it (i.e. /home/user/MyVoidPackages/): "
2022-08-24 21:45:29 +03:00
read -r void_packages_path
if [ [ -z " $void_packages_path " ] ] ; then
echo -e -n "\nPlease input a valid path.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
else
while true; do
if [ [ ! -d " $void_packages_path " ] ] ; then
2022-08-28 16:55:00 +03:00
if ! su - " $void_packages_username " --command " mkdir -p $void_packages_path 2> /dev/null " ; then
2022-08-24 21:45:29 +03:00
echo -e -n " \nUser ${ RED_LIGHT } $void_packages_username ${ NORMAL } cannot create a folder in this directory.\nPlease select another path.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
break
fi
else
if [ [ -n $( ls -A " $void_packages_path " ) ] ] ; then
echo -e -n " \nDirectory ${ RED_LIGHT } $void_packages_path ${ NORMAL } is not empty.\nPlease select another path.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
break
fi
if [ [ $( stat --dereference --format= "%U" $void_packages_path ) != " $void_packages_username " ] ] ; then
echo -e -n " \nUser ${ RED_LIGHT } $void_packages_username ${ NORMAL } doesn't have write permission in this directory.\nPlease select another path.\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
break
fi
fi
echo -e -n " \nPath selected: ${ BLUE_LIGHT } $void_packages_path ${ NORMAL } \n "
echo -e -n "\nIs this correct? (y/n): "
read -n 1 -r yn
if [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\nAborting, select another path.\n\n"
if [ [ -z " $( ls -A $void_packages_path ) " ] ] ; then
2022-08-28 16:55:00 +03:00
rm -rf " $void_packages_path "
2022-08-24 21:45:29 +03:00
fi
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
elif [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
2022-09-01 15:40:17 +03:00
while true ; do
echo -e -n " \n\nDo you want to specify a ${ BLUE_LIGHT } custom public repository ${ NORMAL } ?\nIf not, official repository will be used (y/n): "
read -n 1 -r yn
if [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nOfficial repository will be used.\n"
git_cmd = " git clone $void_packages_repo "
elif [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
while true ; do
echo -e -n "\n\nPlease enter a public repository url and optionally a branch (i.e. https://github.com/MyPersonal/VoidPackages MyBranch): "
read -r void_packages_custom_repo void_packages_custom_branch
if [ [ -z " $void_packages_custom_branch " ] ] ; then
repo_check = $( GIT_TERMINAL_PROMPT = 0 git ls-remote " $void_packages_custom_repo " | wc -l)
else
repo_check = $( GIT_TERMINAL_PROMPT = 0 git ls-remote " $void_packages_custom_repo " " $void_packages_custom_branch " | wc -l)
fi
if [ [ " $repo_check " = = "1" ] ] ; then
echo -e -n " \nCustom repository ${ BLUE_LIGHT } $void_packages_custom_repo ${ NORMAL } will be used.\n "
if [ [ -z " $void_packages_custom_branch " ] ] ; then
git_cmd = " git clone $void_packages_custom_repo "
else
git_cmd = " git clone $void_packages_custom_repo -b $void_packages_custom_branch "
fi
break 2
else
echo -e -n "\n\nPlease enter a valid public repository url.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
echo -e -n " \nSwitching to user ${ BLUE_LIGHT } $void_packages_username ${ NORMAL } ...\n\n "
su --login --shell= /bin/bash --whitelist-environment= git_cmd,void_packages_path " $void_packages_username " << EOSU
$git_cmd " $void_packages_path "
2022-08-24 21:45:29 +03:00
echo -e -n "\nEnabling restricted packages...\n"
echo "XBPS_ALLOW_RESTRICTED=yes" >> " $void_packages_path " /etc/conf
EOSU
echo -e -n " \nLogging out user ${ BLUE_LIGHT } $void_packages_username ${ NORMAL } ...\n "
echo -e -n "\nVoid Packages successfully cloned and configured.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break 3
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
fi
done
fi
done
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nVoid Packages were not configured.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
elif [ [ " $newuser_yn " = = "n" ] ] ; then
header_vp
echo -e -n "\nNo non-root user was created.\nVoid Packages cannot be configured for root user.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
}
2022-07-30 20:45:36 +03:00
function header_fc {
2022-07-14 18:33:26 +03:00
2022-07-30 20:45:36 +03:00
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } # VLI # ${ NORMAL } ${ GREEN_LIGHT } Chroot ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####### ${ NORMAL } ${ GREEN_LIGHT } Final touches ${ NORMAL } ${ GREEN_DARK } # ${ NORMAL } \n "
echo -e -n " ${ GREEN_DARK } ####################################### ${ NORMAL } \n "
2022-07-17 23:54:09 +03:00
2022-07-14 18:33:26 +03:00
}
2022-07-30 20:45:36 +03:00
function finish_chroot {
2022-07-14 18:33:26 +03:00
2022-08-11 19:31:58 +03:00
header_fc
echo -e -n " \nSetting the ${ BLUE_LIGHT } timezone ${ NORMAL } in /etc/rc.conf.\n\nPress any key to list all the timezones.\nMove with arrow keys and press \"q\" to exit the list. "
read -n 1 -r key
echo
awk '/^Z/ { print $2 }; /^L/ { print $3 }' /usr/share/zoneinfo/tzdata.zi | less --RAW-CONTROL-CHARS --no-init
2022-07-30 20:45:36 +03:00
while true ; do
2022-08-11 19:31:58 +03:00
echo -e -n "\nType the timezone you want to set and press [ENTER] (i.e. America/New_York): "
read -r user_timezone
if [ [ ! -f /usr/share/zoneinfo/" $user_timezone " ] ] ; then
echo -e "\nEnter a valid timezone.\n"
read -n 1 -r -p "[Press any key to continue...]" key
else
sed -i " /#TIMEZONE=/s|.*|TIMEZONE=\" $user_timezone \"| " /etc/rc.conf
echo -e -n " \nTimezone set to: ${ BLUE_LIGHT } $user_timezone ${ NORMAL } .\n\n "
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
fi
done
header_fc
if [ [ -n " $user_keyboard_layout " ] ] ; then
2022-09-01 15:40:17 +03:00
echo -e -n " \nSetting ${ BLUE_LIGHT } $user_keyboard_layout ${ NORMAL } keyboard layout in /etc/rc.conf...\n "
2022-08-11 19:31:58 +03:00
sed -i " /#KEYMAP=/s/.*/KEYMAP=\" $user_keyboard_layout \"/ " /etc/rc.conf
2022-09-01 15:40:17 +03:00
echo -e -n "\nSetting keymap in dracut configuration and regenerating initramfs...\n\n"
echo -e "i18n_vars=\"/etc/rc.conf:KEYMAP\ni18n_install_all=\"no\"\"" >> /etc/dracut.conf.d/i18n.conf
read -n 1 -r -p "[Press any key to continue...]" key
echo
dracut --regenerate-all --force --hostonly
echo
2022-08-11 19:31:58 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
clear
else
echo -e -n " \nSetting ${ BLUE_LIGHT } keyboard layout ${ NORMAL } in /etc/rc.conf.\n\nPress any key to list all the keyboard layouts.\nMove with arrow keys and press \"q\" to exit the list. "
2022-07-30 20:45:36 +03:00
read -n 1 -r key
echo
2022-08-11 19:31:58 +03:00
find /usr/share/kbd/keymaps/ -type f -iname "*.map.gz" -printf " ${ BLUE_LIGHT_FIND } %f\0 ${ NORMAL_FIND } \n " | sed -e 's/\..*$//' | sort | less --RAW-CONTROL-CHARS --no-init
2022-07-30 20:45:36 +03:00
while true ; do
2022-08-11 19:31:58 +03:00
echo -e -n "\nType the keyboard layout you want to set and press [ENTER]: "
read -r user_keyboard_layout
if [ [ -z " $user_keyboard_layout " ] ] || ! loadkeys " $user_keyboard_layout " 2> /dev/null ; then
echo -e -n "\nPlease select a valid keyboard layout.\n\n"
2022-07-30 20:45:36 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
else
2022-08-11 19:31:58 +03:00
sed -i " /#KEYMAP=/s/.*/KEYMAP=\" $user_keyboard_layout \"/ " /etc/rc.conf
2022-09-01 15:40:17 +03:00
echo -e -n " \nKeyboard layout set to: ${ BLUE_LIGHT } $user_keyboard_layout ${ NORMAL } .\n "
echo -e -n "\nSetting keymap in dracut configuration and regenerating initramfs...\n\n"
echo -e "i18n_vars=\"/etc/rc.conf:KEYMAP\ni18n_install_all=\"no\"\"" >> /etc/dracut.conf.d/i18n.conf
read -n 1 -r -p "[Press any key to continue...]" key
echo
dracut --regenerate-all --force --hostonly
echo
2022-07-30 20:45:36 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
clear
2022-08-11 19:31:58 +03:00
break
2022-07-30 20:45:36 +03:00
fi
done
2022-08-11 19:31:58 +03:00
fi
2022-07-30 20:45:36 +03:00
2022-09-04 00:12:16 +03:00
if [ [ " $bootloader " = = "GRUB2" ] ] || [ [ " $bootloader " = = "grub2" ] ] ; then
while true ; do
header_fc
echo -e -n "\nDo you want to set the same keyboard layout in GRUB2? (y/n): "
read -n 1 -r yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
if [ [ " $lvm_yn " = = "y" ] ] || [ [ " $lvm_yn " = = "Y" ] ] ; then
if [ [ " $encryption_yn " = = "y" ] ] || [ [ " $encryption_yn " = = "Y" ] ] ; then
root_line = $( echo -e -n " cryptomount -u ${ LUKS_UUID //-/ } \nset root=(lvm/ $vg_name - $lv_root_name )\n " )
else
root_line = " set root=(lvm/ $vg_name - $lv_root_name ) "
fi
else
if [ [ " $encryption_yn " = = "y" ] ] || [ [ " $encryption_yn " = = "Y" ] ] ; then
root_line = $( echo -e -n " cryptomount -u ${ LUKS_UUID //-/ } \nset root=(cryptouuid/ ${ LUKS_UUID //-/ } )\n " )
else
disk = $( blkid -s UUID -o value $final_drive )
root_line = $( echo -e -n " search --no-floppy --fs-uuid $disk --set pre_root\nset root=(\\\$pre_root)\n " )
fi
fi
echo -e -n "\n\nCreating /etc/kernel.d/post-install/51-grub_ckb...\n"
cat << End >> /etc/kernel.d/post-install/51-grub_ckb
#! /bin/sh
#
# Create grubx64.efi containing custom keyboard layout
# Requires: ckbcomp, grub2, xkeyboard-config
#
if [ ! -f /boot/efi/EFI/$bootloader_id /ORIG_grubx64.efi_ORIG ] ; then
if [ ! -f /boot/efi/EFI/$bootloader_id /grubx64.efi ] ; then
echo -e -n " \nFIle /boot/efi/EFI/ $bootloader_id /grubx64.efi not found, install GRUB2 first!\n "
exit 1
else
mv /boot/efi/EFI/$bootloader_id /grubx64.efi /boot/efi/EFI/$bootloader_id /ORIG_grubx64.efi_ORIG
fi
fi
for file in $user_keyboard_layout .gkb early-grub.cfg grubx64_ckb.efi memdisk_ckb.tar ; do
if [ -f /boot/grub/\$ file ] ; then
rm -f /boot/grub/\$ file
fi
done
grub-kbdcomp --output= /boot/grub/$user_keyboard_layout .gkb $user_keyboard_layout 2> /dev/null
tar --create --file= /boot/grub/memdisk_ckb.tar --directory= /boot/grub/ $user_keyboard_layout .gkb 2> /dev/null
cat << EndOfGrubConf >> /boot/grub/early-grub.cfg
set gfxpayload = keep
loadfont = unicode
terminal_output gfxterm
terminal_input at_keyboard
keymap ( memdisk) /$user_keyboard_layout .gkb
${ root_line } /@
set prefix = \\ \$ root/boot/grub
configfile \\ \$ prefix/grub.cfg
EndOfGrubConf
grub-mkimage --config= /boot/grub/early-grub.cfg --output= /boot/grub/grubx64_ckb.efi --format= x86_64-efi --memdisk= /boot/grub/memdisk_ckb.tar diskfilter gcry_rijndael gcry_sha256 ext2 memdisk tar at_keyboard keylayouts configfile gzio part_gpt all_video efi_gop efi_uga video_bochs video_cirrus echo linux font gfxterm gettext gfxmenu help reboot terminal test search search_fs_file search_fs_uuid search_label cryptodisk luks lvm btrfs
if [ -f /boot/efi/EFI/$bootloader_id /grubx64.efi ] ; then
rm -f /boot/efi/EFI/$bootloader_id /grubx64.efi
fi
cp /boot/grub/grubx64_ckb.efi /boot/efi/EFI/$bootloader_id /grubx64.efi
End
chmod +x /etc/kernel.d/post-install/51-grub_ckb
echo -e -n "\nReconfiguring kernel...\n\n"
kernelver_pre = $( ls /lib/modules/)
kernelver = " ${ kernelver_pre %.* } "
xbps-reconfigure -f linux" $kernelver "
echo
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nNo changes were made.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
fi
done
fi
2022-07-30 20:45:36 +03:00
if [ [ " $ARCH " = = "x86_64" ] ] ; then
2022-08-11 19:31:58 +03:00
header_fc
echo -e -n " \nSetting the ${ BLUE_LIGHT } locale ${ NORMAL } in /etc/default/libc-locales.\n\nPress any key to print all the available locales.\n\nKeep in mind the ${ BLUE_LIGHT } one line number ${ NORMAL } you need because that line will be uncommented.\n\nMove with arrow keys and press \"q\" to exit the list. "
read -n 1 -r key
echo
less --LINE-NUMBERS --RAW-CONTROL-CHARS --no-init /etc/default/libc-locales
2022-07-30 20:45:36 +03:00
while true ; do
2022-08-11 19:31:58 +03:00
echo -e -n " \nType only ${ BLUE_LIGHT } one line number ${ NORMAL } you want to uncomment to set your locale and and press [ENTER]: "
read -r user_locale_line_number
if [ [ -z " $user_locale_line_number " ] ] ; then
echo -e "\nEnter a valid line-number.\n"
read -n 1 -r -p "[Press any key to continue...]" key
else
while true ; do
user_locale_pre = $( sed -n " ${ user_locale_line_number } " p /etc/default/libc-locales)
user_locale_uncommented = $( echo " ${ user_locale_pre //# } " )
user_locale = $( echo " ${ user_locale_uncommented %%[[ : space : ]]* } " )
echo -e -n " \nYou choose line ${ BLUE_LIGHT } $user_locale_line_number ${ NORMAL } that cointains locale ${ BLUE_LIGHT } $user_locale ${ NORMAL } .\n\n "
read -n 1 -r -p "Is this correct? (y/n): " yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
echo -e -n " \n\nUncommenting line ${ BLUE_LIGHT } $user_locale_line_number ${ NORMAL } that contains locale ${ BLUE_LIGHT } $user_locale ${ NORMAL } ...\n "
sed -i " $user_locale_line_number s/^#// " /etc/default/libc-locales
echo -e -n " \nWriting locale ${ BLUE_LIGHT } $user_locale ${ NORMAL } to /etc/locale.conf...\n\n "
sed -i " /LANG=/s/.*/LANG= $user_locale / " /etc/locale.conf
read -n 1 -r -p "[Press any key to continue...]" key
clear
break 2
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nPlease select another locale.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
fi
2022-07-30 20:45:36 +03:00
done
fi
2022-07-17 23:54:09 +03:00
2022-07-30 20:45:36 +03:00
while true ; do
header_fc
echo -e -n " \nSelect a ${ BLUE_LIGHT } hostname ${ NORMAL } for your system: "
read -r hostname
if [ [ -z " $hostname " ] ] ; then
echo -e -n "\nPlease enter a valid hostname.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
else
while true ; do
echo -e -n " \nYou entered: ${ BLUE_LIGHT } $hostname ${ NORMAL } .\n\n "
read -n 1 -r -p "Is this the desired hostname? (y/n): " yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
set +o noclobber
echo " $hostname " > /etc/hostname
set -o noclobber
echo -e -n "\n\nHostname successfully set.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break 2
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nPlease select another hostname.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
fi
done
2022-08-11 19:31:58 +03:00
while true ; do
header_fc
echo -e -n "\nListing all the available shells:\n\n"
chsh --list-shells
echo -e -n " \nWhich ${ BLUE_LIGHT } shell ${ NORMAL } do you want to set for ${ BLUE_LIGHT } root ${ NORMAL } user?\nPlease enter the full path (i.e. /bin/sh): "
read -r set_shell
if [ [ ! -x " $set_shell " ] ] ; then
echo -e -n "\nPlease enter a valid shell.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
else
while true ; do
echo -e -n " \nYou entered: ${ BLUE_LIGHT } $set_shell ${ NORMAL } .\n\n "
read -n 1 -r -p "Is this the desired shell? (y/n): " yn
if [ [ " $yn " = = "y" ] ] || [ [ " $yn " = = "Y" ] ] ; then
echo
echo
chsh --shell " $set_shell "
echo -e -n "\nDefault shell successfully changed.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
break 2
elif [ [ " $yn " = = "n" ] ] || [ [ " $yn " = = "N" ] ] ; then
echo -e -n "\n\nPlease select another shell.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
clear
break
else
echo -e -n "\nPlease answer y or n.\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
fi
done
fi
done
2022-08-28 16:55:00 +03:00
echo -e -n "\n\nConfiguring AppArmor and setting it to enforce...\n"
2022-08-24 21:45:29 +03:00
sed -i "/APPARMOR=/s/.*/APPARMOR=enforce/" /etc/default/apparmor
sed -i "/#write-cache/s/^#//" /etc/apparmor/parser.conf
sed -i "/#show_notifications/s/^#//" /etc/apparmor/notify.conf
2022-08-28 16:55:00 +03:00
if [ [ " $bootloader " = = "EFISTUB" ] ] || [ [ " $bootloader " = = "efistub" ] ] ; then
sed -i " /OPTIONS=/s/\" $/ apparmor=1 security=apparmor&/ " /etc/default/efibootmgr-kernel-hook
echo -e -n "\nReconfiguring kernel...\n\n"
kernelver_pre = $( ls /lib/modules/)
kernelver = $( echo ${ kernelver_pre %.* } )
xbps-reconfigure -f linux" $kernelver "
elif [ [ " $bootloader " = = "GRUB2" ] ] || [ [ " $bootloader " = = "grub2" ] ] ; then
sed -i " /GRUB_CMDLINE_LINUX_DEFAULT=/s/\" $/ apparmor=1 security=apparmor&/ " /etc/default/grub
echo -e -n "\nUpdating grub...\n\n"
update-grub
fi
2022-08-11 19:31:58 +03:00
2022-07-30 20:45:36 +03:00
echo -e -n "\nReconfiguring every package...\n\n"
read -n 1 -r -p "[Press any key to continue...]" key
echo
xbps-reconfigure -fa
echo -e -n "\nEverything's done, exiting chroot...\n\n"
2022-07-17 23:54:09 +03:00
read -n 1 -r -p "[Press any key to continue...]" key
clear
2022-07-30 20:45:36 +03:00
2022-07-14 18:33:26 +03:00
}
2022-08-28 16:55:00 +03:00
initial_configuration
install_bootloader
2022-08-11 19:31:58 +03:00
create_swapfile
2022-08-28 16:55:00 +03:00
install_additional_packages
enable_disable_services
2022-08-24 21:45:29 +03:00
create_user
void_packages
2022-07-30 20:45:36 +03:00
finish_chroot
exit 0