Advertisement
Guest User

Untitled

a guest
May 28th, 2025
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.65 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. set -euo pipefail
  4. [ "$(id -u)" -eq 0 ] || { echo "This script must be run as root." >&2; exit 1; }
  5.  
  6. apk add parted btrfs-progs dhcpcd
  7.  
  8. DISK=""
  9. SEPARATE_HOME="no"
  10. SECURE_BOOT="no"
  11.  
  12. usage() {
  13. cat <<EOF
  14. Usage: $0 -d <disk> [-H] [-s]
  15. -d <disk> Target disk device (e.g. /dev/sda or /dev/nvme0n1)
  16. -H Create separate /home partition
  17. EOF
  18. exit 1
  19. }
  20.  
  21. while getopts "d:Hs" opt; do
  22. case "$opt" in
  23. d) DISK="$OPTARG" ;; H) SEPARATE_HOME="yes" ;; *) usage ;;
  24. esac
  25. done
  26. [ -n "$DISK" ] || usage
  27.  
  28. dhcpcd || true
  29. sleep 10
  30.  
  31. UEFI="no"
  32. if [ -d /sys/firmware/efi ]; then
  33. UEFI="yes"
  34. fi
  35.  
  36. echo "Installing on $DISK (UEFI: $UEFI, Separate /home: $SEPARATE_HOME, SecureBoot: $SECURE_BOOT)"
  37.  
  38. if echo "$DISK" | grep -qE "^/dev/nvme"; then
  39. PART1=p1; PART2=p2; PART3=p3; PART4=p4
  40. else
  41. PART1=1; PART2=2; PART3=3; PART4=4
  42. fi
  43. EFI_PART=${DISK}${PART1}
  44. ROOT_PART=${DISK}${PART2}
  45. HOME_PART=${DISK}${PART3}
  46. BIOS_PART=${DISK}${PART4}
  47.  
  48. echo "Partitioning $DISK..."
  49. parted -s "$DISK" mklabel gpt
  50. if [ "$UEFI" = "yes" ]; then
  51. parted -s "$DISK" mkpart primary fat32 1MiB 513MiB
  52. parted -s "$DISK" name 1 EFI
  53. parted -s "$DISK" set 1 esp on
  54. parted -s "$DISK" mkpart primary btrfs 513MiB 100%
  55. parted -s "$DISK" name 2 ROOT
  56. if [ "$SEPARATE_HOME" = "yes" ]; then
  57. parted -s "$DISK" mkpart primary btrfs 90% 100%
  58. parted -s "$DISK" name 3 HOME
  59. fi
  60. else
  61. parted -s "$DISK" mkpart primary 1MiB 3MiB
  62. parted -s "$DISK" name 1 BIOS
  63. parted -s "$DISK" set 1 bios_grub on
  64. parted -s "$DISK" mkpart primary btrfs 3MiB 100%
  65. parted -s "$DISK" name 2 ROOT
  66. if [ "$SEPARATE_HOME" = "yes" ]; then
  67. parted -s "$DISK" mkpart primary btrfs 80% 100%
  68. parted -s "$DISK" name 3 HOME
  69. fi
  70. fi
  71.  
  72. mkfs.vfat -F32 -n EFI "$EFI_PART" || true
  73. mkfs.btrfs -f -L ROOT "$ROOT_PART"
  74. if [ "$SEPARATE_HOME" = "yes" ]; then
  75. mkfs.btrfs -f -L HOME "$HOME_PART"
  76. fi
  77.  
  78. TARGET=/mnt/panora
  79. mkdir -p $TARGET
  80. mount -t btrfs -o defaults "$ROOT_PART" $TARGET
  81. mkdir -p $TARGET/boot
  82. mount -t vfat "$EFI_PART" $TARGET/boot
  83.  
  84. umount $TARGET/boot; umount $TARGET
  85. mount -t btrfs -o subvolid=5,defaults "$ROOT_PART" $TARGET
  86. btrfs subvolume create $TARGET/@
  87. btrfs subvolume create $TARGET/@var
  88. [ "$SEPARATE_HOME" = "no" ] && btrfs subvolume create $TARGET/@home
  89. umount $TARGET
  90. mount -t btrfs -o subvol=@ "$ROOT_PART" $TARGET
  91. mkdir -p $TARGET/var
  92. mount -t btrfs -o subvol=@var "$ROOT_PART" $TARGET/var
  93. mkdir -p $TARGET/home
  94. if [ "$SEPARATE_HOME" = "no" ]; then
  95. mount -t btrfs -o subvol=@home "$ROOT_PART" $TARGET/home
  96. else
  97. mount -t btrfs "$HOME_PART" $TARGET/home
  98. fi
  99. mkdir -p $TARGET/boot
  100. mount -t vfat "$EFI_PART" $TARGET/boot
  101.  
  102. ip route
  103. echo "-> Testing network connectivity"
  104. ping -c 3 1.1.1.1 || { echo "ERROR: Network connection failed"; exit 1; }
  105.  
  106. setup-apkrepos -1 -c
  107. apk update
  108. apk add alpine-make-rootfs
  109. alpine-make-rootfs -p alpine-base -p dhcpcd -r /etc/apk/repositories $TARGET
  110.  
  111. mount --rbind /dev $TARGET/dev
  112. mount --rbind /sys $TARGET/sys
  113. mount --rbind /proc $TARGET/proc
  114. cp /etc/resolv.conf $TARGET/etc/
  115. chroot $TARGET /bin/sh <<EOF
  116. set -euo pipefail
  117. setup-apkrepos -f -c
  118. apk update
  119. echo panora > /etc/hostname
  120. apk add dhcpcd
  121. rc-update add dhcpcd default
  122. apk add btrfs-progs kmod linux-lts
  123. echo btrfs >> /etc/modules
  124. KERNEL_VER=\$(basename /lib/modules/*)
  125. modprobe -S \$KERNEL_VER btrfs
  126. ROOT_UUID=$(blkid $ROOT_PART | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
  127. EFI_UUID=$(blkid $EFI_PART | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
  128. echo "UUID=\$ROOT_UUID / btrfs defaults,subvol=@ 0 0" > /etc/fstab
  129. [ "$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
  130. echo "UUID=\$EFI_UUID /boot vfat defaults 0 2" >> /etc/fstab
  131. echo "tmpfs /tmp tmpfs defaults,noatime 0 0" >> /etc/fstab
  132. apk add mkinitfs
  133. echo 'features="ata base cdrom keymap kms mmc nvme raid scsi usb virtio btrfs"' > /etc/mkinitfs/mkinitfs.conf
  134. mkinitfs -o /boot/initramfs-lts -l \$KERNEL_VER -c /etc/mkinitfs/mkinitfs.conf -b /
  135. rc-update add btrfs-scan boot
  136. apk add grub-efi efibootmgr grub grub-bios
  137. if [ "$UEFI" = "yes" ]; then
  138. grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Panora
  139. else
  140. grub-install --target=i386-pc --recheck "$DISK"
  141. fi
  142. echo "GRUB_TIMEOUT=5
  143. GRUB_DISTRIBUTOR="Panora"
  144. GRUB_CMDLINE_LINUX="debug_init single"
  145. GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=btrfs"
  146. grub-mkconfig -o /boot/grub/grub.cfg" >> /etc/default/grub
  147.  
  148. EOF
  149.  
  150. echo "Installation complete. Reboot now."
  151.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement