Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- set -euo pipefail
- [ "$(id -u)" -eq 0 ] || { echo "This script must be run as root." >&2; exit 1; }
- apk add parted btrfs-progs dhcpcd
- DISK=""
- SEPARATE_HOME="no"
- SECURE_BOOT="no"
- usage() {
- cat <<EOF
- Usage: $0 -d <disk> [-H] [-s]
- -d <disk> Target disk device (e.g. /dev/sda or /dev/nvme0n1)
- -H Create separate /home partition
- EOF
- exit 1
- }
- while getopts "d:Hs" opt; do
- case "$opt" in
- d) DISK="$OPTARG" ;; H) SEPARATE_HOME="yes" ;; *) usage ;;
- esac
- done
- [ -n "$DISK" ] || usage
- dhcpcd || true
- sleep 10
- UEFI="no"
- if [ -d /sys/firmware/efi ]; then
- UEFI="yes"
- fi
- echo "Installing on $DISK (UEFI: $UEFI, Separate /home: $SEPARATE_HOME, SecureBoot: $SECURE_BOOT)"
- if echo "$DISK" | grep -qE "^/dev/nvme"; then
- PART1=p1; PART2=p2; PART3=p3; PART4=p4
- else
- PART1=1; PART2=2; PART3=3; PART4=4
- fi
- EFI_PART=${DISK}${PART1}
- ROOT_PART=${DISK}${PART2}
- HOME_PART=${DISK}${PART3}
- BIOS_PART=${DISK}${PART4}
- echo "Partitioning $DISK..."
- parted -s "$DISK" mklabel gpt
- if [ "$UEFI" = "yes" ]; then
- parted -s "$DISK" mkpart primary fat32 1MiB 513MiB
- parted -s "$DISK" name 1 EFI
- parted -s "$DISK" set 1 esp on
- parted -s "$DISK" mkpart primary btrfs 513MiB 100%
- parted -s "$DISK" name 2 ROOT
- if [ "$SEPARATE_HOME" = "yes" ]; then
- parted -s "$DISK" mkpart primary btrfs 90% 100%
- parted -s "$DISK" name 3 HOME
- fi
- else
- parted -s "$DISK" mkpart primary 1MiB 3MiB
- parted -s "$DISK" name 1 BIOS
- parted -s "$DISK" set 1 bios_grub on
- parted -s "$DISK" mkpart primary btrfs 3MiB 100%
- parted -s "$DISK" name 2 ROOT
- if [ "$SEPARATE_HOME" = "yes" ]; then
- parted -s "$DISK" mkpart primary btrfs 80% 100%
- parted -s "$DISK" name 3 HOME
- fi
- fi
- mkfs.vfat -F32 -n EFI "$EFI_PART" || true
- mkfs.btrfs -f -L ROOT "$ROOT_PART"
- if [ "$SEPARATE_HOME" = "yes" ]; then
- mkfs.btrfs -f -L HOME "$HOME_PART"
- fi
- TARGET=/mnt/panora
- mkdir -p $TARGET
- mount -t btrfs -o defaults "$ROOT_PART" $TARGET
- mkdir -p $TARGET/boot
- mount -t vfat "$EFI_PART" $TARGET/boot
- umount $TARGET/boot; umount $TARGET
- mount -t btrfs -o subvolid=5,defaults "$ROOT_PART" $TARGET
- btrfs subvolume create $TARGET/@
- btrfs subvolume create $TARGET/@var
- [ "$SEPARATE_HOME" = "no" ] && btrfs subvolume create $TARGET/@home
- umount $TARGET
- mount -t btrfs -o subvol=@ "$ROOT_PART" $TARGET
- mkdir -p $TARGET/var
- mount -t btrfs -o subvol=@var "$ROOT_PART" $TARGET/var
- mkdir -p $TARGET/home
- if [ "$SEPARATE_HOME" = "no" ]; then
- mount -t btrfs -o subvol=@home "$ROOT_PART" $TARGET/home
- else
- mount -t btrfs "$HOME_PART" $TARGET/home
- fi
- mkdir -p $TARGET/boot
- mount -t vfat "$EFI_PART" $TARGET/boot
- ip route
- echo "-> Testing network connectivity"
- ping -c 3 1.1.1.1 || { echo "ERROR: Network connection failed"; exit 1; }
- setup-apkrepos -1 -c
- apk update
- apk add alpine-make-rootfs
- alpine-make-rootfs -p alpine-base -p dhcpcd -r /etc/apk/repositories $TARGET
- mount --rbind /dev $TARGET/dev
- mount --rbind /sys $TARGET/sys
- mount --rbind /proc $TARGET/proc
- cp /etc/resolv.conf $TARGET/etc/
- chroot $TARGET /bin/sh <<EOF
- set -euo pipefail
- setup-apkrepos -f -c
- apk update
- echo panora > /etc/hostname
- apk add dhcpcd
- rc-update add dhcpcd default
- apk add btrfs-progs kmod linux-lts
- echo btrfs >> /etc/modules
- KERNEL_VER=\$(basename /lib/modules/*)
- modprobe -S \$KERNEL_VER btrfs
- ROOT_UUID=$(blkid $ROOT_PART | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
- EFI_UUID=$(blkid $EFI_PART | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
- echo "UUID=\$ROOT_UUID / btrfs defaults,subvol=@ 0 0" > /etc/fstab
- [ "$SEPARATE_HOME" = "yes" ] && HOME_UUID=$(blkid $HOME_PART | grep -o 'UUID="[^"]*"' | cut -d'"' -f2) && echo "UUID=\$HOME_UUID /home btrfs defaults 0 2" >> /etc/fstab || echo "UUID=\$ROOT_UUID /home btrfs defaults,subvol=@home 0 0" >> /etc/fstab
- echo "UUID=\$EFI_UUID /boot vfat defaults 0 2" >> /etc/fstab
- echo "tmpfs /tmp tmpfs defaults,noatime 0 0" >> /etc/fstab
- apk add mkinitfs
- echo 'features="ata base cdrom keymap kms mmc nvme raid scsi usb virtio btrfs"' > /etc/mkinitfs/mkinitfs.conf
- mkinitfs -o /boot/initramfs-lts -l \$KERNEL_VER -c /etc/mkinitfs/mkinitfs.conf -b /
- rc-update add btrfs-scan boot
- apk add grub-efi efibootmgr grub grub-bios
- if [ "$UEFI" = "yes" ]; then
- grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Panora
- else
- grub-install --target=i386-pc --recheck "$DISK"
- fi
- echo "GRUB_TIMEOUT=5
- GRUB_DISTRIBUTOR="Panora"
- GRUB_CMDLINE_LINUX="debug_init single"
- GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=btrfs"
- grub-mkconfig -o /boot/grub/grub.cfg" >> /etc/default/grub
- EOF
- echo "Installation complete. Reboot now."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement