summaryrefslogtreecommitdiff
path: root/scripts/.local/bin/makekernel
blob: 8615e65e6757cca5e033b7b02fb84c1246d7a186 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/sh

KERNEL_SRC_DIR="/usr/src/linux"
KEYDIR="/etc/efikeys/"
KERNEL_NAME="vmlinuz-latest-gentoo"
THREADS="$(grep -c ^processor /proc/cpuinfo)"

if [ "$(hostname)" = "pc" ]; then
	ROOT_DEVICE="/dev/nvme0n1p3"
	MICROCODE="amd"
	KERNEL_DIR="/boot/efi/gentoo"
	BOOT_PARAMS="nvidia-drm.modeset=1" # preventing screen tearing on NVIDIA GPU
elif [ "$(hostname)" = "laptop" ]; then
	ROOT_DEVICE="/dev/sda3"
	MICROCODE="intel"
	KERNEL_DIR="/boot/efi/EFI/gentoo"
	BOOT_PARAMS=""
else
	echo "Unknown device $(hostname), cannot choose kernel parameters"
	exit 1
fi

ROOT="/dev/mapper/root"
CRYPT_ROOT="$(blkid -s UUID | grep $ROOT_DEVICE | cut -d' ' -f2 | sed 's/"//g')"
BOOT_PARAMS="ro crypt_root=$CRYPT_ROOT root=$ROOT rootfsype=btrfs rootflags=subvol=@ root_trim=yes lsm=selinux $BOOT_PARAMS"

printf 'Boot parameters:\n%s\n' "$BOOT_PARAMS"
printf '\"lsblk -f\" output:\n%s\n' "$(lsblk -f)"
printf 'Kernel image will compiled with %s threads and be installed to %s\n' "$THREADS" "$KERNEL_DIR"

if [ "$(/usr/bin/id -u)" -ne 0 ]; then
	echo "Cannot proceed, need root permissions"
	exit 1
fi

echo "Proceed with kernel compiling? [Y/N]"
read -r answer
if [ "$answer" != "${answer#[Nn]}" ] ;then
	echo "Aborted"
	exit 1
fi

cd "$KERNEL_SRC_DIR" || exit 1

# inject $BOOT_PARAMS into kernel config
sed -i "s|^\(CONFIG_CMDLINE=\).*|\1\"$BOOT_PARAMS\"|" .config

genkernel --no-clean --no-mrproper --no-save-config \
	--microcode="$MICROCODE" \
	--integrated-initramfs --compress-initramfs --compress-initramfs-type=lz4 \
	--luks --no-zfs --btrfs \
	--kernel-config="$KERNEL_SRC_DIR/.config" \
	--kernel-filename="$KERNEL_NAME" \
	--makeopts="-j$THREADS" \
	--loglevel=3 \
	all

echo "Signing kernel image"
sbsign --key "$KEYDIR/db.key" --cert "$KEYDIR/db.crt" -o "$KERNEL_DIR/$KERNEL_NAME.efi" "/boot/$KERNEL_NAME"

cd - || exit 1