vinstaller/main.sh

156 lines
4.3 KiB
Bash
Raw Normal View History

2022-02-06 22:12:28 +01:00
#!/bin/bash
main="/tmp/vinstall"
target="${main}/target"
2022-02-06 23:25:49 +01:00
pass="oem"
2022-02-07 01:34:16 +01:00
if [ $DEBUG ]; then
umount ${target}/boot/efi ${target}/boot ${target}
vgchange -an
2022-02-07 01:35:12 +01:00
cryptsetup close /dev/mapper/luks*
fi
2022-02-07 01:34:16 +01:00
2022-02-06 23:25:49 +01:00
mkdir -p $target
2022-02-06 22:12:28 +01:00
. functions
target_phy_disk() {
header "Choose target disk"
local DISKS_DETAILS
local output
DISKS_DETAILS=$(lsblk -l -o KNAME,TYPE,SIZE,MODEL,WWN|grep disk)
echo "$DISKS_DETAILS"
input "which one?" "$(echo "$DISKS_DETAILS"|awk '{print $1}'|tr '\n' ' ')" "not found."
2022-02-06 23:25:49 +01:00
TARGET_PHY_DISK="/dev/${output}"
2022-02-06 22:12:28 +01:00
}
target_phy_id() {
local i
local f1
local f2
for i in $(find /dev/disk/by-id|grep -v part); do
if realpath "$i" | grep -q -i "$TARGET_PHY_DISK"; then
if echo "$i" | grep -q "wwn"; then
TARGET_PHY_WWN="$i"
f1=1
fi
if echo "$i" | grep -q -v "wwn"; then
TARGET_PHY_ID="$i"
f2=1
fi
fi
done
if [ "$f1" == "1" ] && [ "$f2" == "1" ]; then
return 0
else
err "no id found"
fi
}
use_efi() {
if test -e /sys/firmware/efi; then
EFI=1
else
EFI=0
fi
}
encryption_style() {
header "Choose encryption style"
echo "implemented:"
echo "a)keyfile in initramfs" #bios: 1 uefi: 2
2022-02-06 23:25:49 +01:00
echo "b)no encryption" #bios: 2 uefi: 2
2022-02-06 22:12:28 +01:00
echo "not implemented:"
echo "c)no keyfile (double pw enter)" #bios: 1 uefi: 2
echo "d)keyfile on usb" #bios: 1 uefi: ?
echo "e)unencrypted boot" #bios: 2 uefi: 2
input "how to encrypt?" "a b c d e" "wrong input"
ENCRYPTION_STYLE="$output"
}
2022-02-06 23:25:49 +01:00
hibernation() {
ramsize="$(($(getconf _PHYS_PAGES) * $(getconf PAGE_SIZE) / (1024 * 1024)))"
ramsize="$(awk "BEGIN { printf(\"%.0f\n\", ${ramsize}/1024); }")"
HIBERNATE=1
if [[ "${ramsize}" -lt "2" ]]; then
SWAPSIZE="$(( ramsize * 2 ))"
SWAPSIZE="$(( ramsize * 3 ))"
elif [[ "${ramsize}" -ge "2" ]] && [[ "${ramsize}" -lt "8" ]]; then
SWAPSIZE="${ramsize}"
SWAPSIZE="$(( ramsize * 2 ))"
elif [[ "${ramsize}" -ge "8" ]] && [[ "${ramsize}" -lt "16" ]]; then
SWAPSIZE="${ramsize}"
SWAPSIZE="$(awk "BEGIN { printf(\"%.0f\n\", ${ramsize}*1.5); }")"
elif [[ "${ramsize}" -ge "16" ]]; then
SWAPSIZE="4"
echo "hibernate not recommended, turning off"
HIBERNATE="0"
SWAPSIZE="4"
fi
}
do_partition() {
header "do partition"
start=1
if [ "$EFI" == "1" ]; then
2022-02-07 00:38:15 +01:00
parted -a optimal $TARGET_PHY_WWN -s -- mklabel gpt
2022-02-06 23:25:49 +01:00
size=500
2022-02-07 01:05:55 +01:00
parted -a optimal $TARGET_PHY_WWN unit mib -s -- mkpart EFI fat32 $start $(( start + size ))
2022-02-07 01:07:35 +01:00
start=$(( start + size ))
2022-02-07 00:38:15 +01:00
parted -a optimal $TARGET_PHY_WWN unit mib -s -- mkpart root $start -1s
2022-02-07 01:21:25 +01:00
mkfs.vfat -F32 ${TARGET_PHY_WWN}-part1
2022-02-06 23:25:49 +01:00
TARGET_PART="2"
else
2022-02-07 01:26:40 +01:00
set -x
2022-02-07 00:38:15 +01:00
parted -a optimal $TARGET_PHY_WWN -s -- mklabel msdos
2022-02-06 23:25:49 +01:00
TARGET_PART="1"
if [ "$ENCRYPTION_STYLE" == "b" ] || [ "$ENCRYPTION_STYLE" == "e" ]; then
size=2048
2022-02-07 01:05:55 +01:00
parted -a optimal $TARGET_PHY_WWN unit mib -s -- mkpart primary ext4 $start $(( start + size ))
2022-02-07 01:07:35 +01:00
start=$(( start + size ))
2022-02-07 01:30:08 +01:00
mkfs.btrfs -f "${TARGET_PHY_WWN}-part1"
2022-02-06 23:25:49 +01:00
TARGET_PART="2"
fi
2022-02-07 00:38:15 +01:00
parted -a optimal $TARGET_PHY_WWN unit mib -s -- mkpart primary ext4 $start -1s
2022-02-06 23:25:49 +01:00
fi
2022-02-07 01:32:03 +01:00
sync
sleep 3
2022-02-07 01:08:05 +01:00
2022-02-06 23:25:49 +01:00
TARGETNAME=$(basename ${TARGET_PHY_WWN}-part${TARGET_PART})
2022-02-07 01:15:40 +01:00
TARGETNAME_UNDERSCORE=${TARGETNAME//-/_}
2022-02-07 00:25:49 +01:00
echo -n $pass | cryptsetup luksFormat ${TARGET_PHY_WWN}-part${TARGET_PART} -d -
2022-02-06 23:25:49 +01:00
#echo -n $pass | sudo cryptsetup luksOpen /dev/sdc1 sdc1 -d -
2022-02-07 01:34:16 +01:00
echo -n $pass | cryptsetup luksOpen ${TARGET_PHY_WWN}-part${TARGET_PART} "luks_${TARGETNAME_UNDERSCORE}" -d -
vgcreate vg_${TARGETNAME_UNDERSCORE} /dev/mapper/luks_${TARGETNAME_UNDERSCORE}
2022-02-07 01:17:29 +01:00
lvcreate --name swap -L ${SWAPSIZE}G vg_${TARGETNAME_UNDERSCORE}
lvcreate --name root -l 100%FREE vg_${TARGETNAME_UNDERSCORE}
mkswap -f /dev/mapper/vg_${TARGETNAME_UNDERSCORE}-swap
mkfs.btrfs -f /dev/mapper/vg_${TARGETNAME_UNDERSCORE}-root
mount /dev/mapper/vg_${TARGETNAME_UNDERSCORE}-root $target
2022-02-06 23:25:49 +01:00
btrfs subvol create ${target}/root
btrfs subvol create ${target}/home
umount $target
2022-02-07 01:17:29 +01:00
mount /dev/mapper/vg_${TARGETNAME_UNDERSCORE}-root $target -o subvol=root
2022-02-06 22:12:28 +01:00
if [ "$EFI" == "1" ]; then
2022-02-06 23:25:49 +01:00
mkdir -p ${target}/boot/efi
mount ${TARGET_PHY_WWN}-part1 ${target}/boot/efi
2022-02-06 22:12:28 +01:00
else
2022-02-06 23:25:49 +01:00
if [ "$ENCRYPTION_STYLE" == "b" ] || [ "$ENCRYPTION_STYLE" == "e" ]; then
mkdir -p ${target}/boot
mount ${TARGET_PHY_WWN}-part1 ${target}/boot
fi
2022-02-06 22:12:28 +01:00
fi
}
target_phy_disk
target_phy_id
use_efi
encryption_style
2022-02-06 23:25:49 +01:00
hibernation
2022-02-07 00:29:48 +01:00
do_partition