autokernelconfig

Chris

Lad
Member
Bash:
#!/bin/bash
set -euo pipefail

DISK=/dev/nvme0n1
SLACK_ISO="$(dirname "$0")/slackware.iso"

# wifi
nmcli device wifi connect "YourSSID" password "YourPass"
timeout 15 bash -c 'until ip -br link show wlan0 | grep -q LOWER_UP; do sleep 1; done'

# wipe and partition
sgdisk --zap-all "$DISK"
sgdisk --new=1:1MiB:+512MiB --typecode=1:EF00 "$DISK"
sgdisk --new=2:0:0 --typecode=2:8300 "$DISK"
mkfs.fat -F 32 "${DISK}p1"
mkfs.ext4 "${DISK}p2"
mkdir -p /mnt/boot
mount "${DISK}p1" /mnt/boot
mount "${DISK}p2" /mnt

# pick a distro
echo "  1. Arch"
echo "  2. Fedora"
echo "  3. Debian"
echo "  4. Slackware"
echo "  5. Ubuntu"
read -rp "Pick (1-5): " pick

case "$pick" in
  1) pacstrap -c -m -G /mnt base linux linux-firmware ;;
  2) dnf --installroot=/mnt -y install @core ;;
  3) debootstrap --variant=minbase bookworm /mnt ;;
  # no debootstrap for slackware, just installpkg from the iso
  4) mount -o loop "$SLACK_ISO" /mnt/cdrom
     cd /mnt/cdrom/slackware64
     installpkg --root /mnt a/*.t?z l/*.t?z n/*.t?z
     cd /; umount /mnt/cdrom ;;
  5) debootstrap --variant=minbase noble /mnt ;;
esac

# x11
case "$pick" in
  1) chroot /mnt pacman -S --noconfirm xorg-server i3-wm xterm ;;
  2) chroot /mnt dnf install -y xorg-x11-server-Xorg i3 xterm ;;
  3) chroot /mnt apt-get update && chroot /mnt apt-get install -y xorg i3 xterm ;;
  4) mount -o loop "$SLACK_ISO" /mnt/cdrom
     cd /mnt/cdrom/slackware64
     installpkg --root /mnt x/*.t?z
     cd /; umount /mnt/cdrom ;;
  5) chroot /mnt apt-get update && chroot /mnt apt-get install -y xorg i3 xterm ;;
esac

# grub
chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
umount -R /mnt
echo "Done."
 

Chris

Lad
Member
Bash:
#!/bin/bash
set -euo pipefail

if [ "$EUID" -ne 0 ]; then
  echo "Run as root."
  exit 1
fi

SLACK_ISO="$(dirname "$0")/slackware64-current-mini-install.iso"

# Drive selection
lsblk
echo ""
read -rp "What drive would you like to use? (e.g., /dev/nvme0n1 or /dev/sda): " DISK

if [ ! -b "$DISK" ]; then
  echo "Error: $DISK is not a valid block device."
  exit 1
fi

if [[ "$DISK" =~ [0-9]$ ]]; then
  P="${DISK}p"
else
  P="${DISK}"
fi

# WiFi setup
nmcli device wifi connect "YourSSID" password "YourPass"
timeout 15 bash -c 'until ip -br link show wlan0 | grep -q LOWER_UP; do sleep 1; done'

# Overwrite and partition
echo "Wiping and partitioning $DISK..."
sgdisk --zap-all "$DISK"
sgdisk --new=1:1MiB:+512MiB --typecode=1:EF00 "$DISK"
sgdisk --new=2:0:0          --typecode=2:8300 "$DISK"

mkfs.fat -F 32 "${P}1"
mkfs.ext4 -F "${P}2"

# Mount layout
mount "${P}2" /mnt
mkdir -p /mnt/boot
mount "${P}1" /mnt/boot

echo "  1. Arch"
echo "  2. Fedora"
echo "  3. Debian"
echo "  4. Slackware"
echo "  5. Ubuntu"
read -rp "Pick (1-5): " pick

# Bootstrap base system + graphics packages
case "$pick" in
  1)
    pacstrap -K /mnt base linux linux-firmware grub efibootmgr networkmanager xorg-server i3-wm xterm
    ;;
  2)
    dnf --installroot=/mnt --releasever=45 -y groupinstall "Minimal Install"
    dnf --installroot=/mnt -y install kernel grub2-efi-x64 efibootmgr networkmanager xorg-x11-server-Xorg i3 xterm
    ;;
  3)
    debootstrap --variant=minbase --include=linux-image-amd64,grub-efi,efibootmgr,systemd-sysv,network-manager,xorg,i3,xterm bookworm /mnt
    ;;
  4)
    mkdir -p /mnt/cdrom
    mount -o loop "$SLACK_ISO" /mnt/cdrom
    cd /mnt/cdrom/slackware64
    installpkg --root /mnt a/*.t?z l/*.t?z n/*.t?z x/*.t?z k/*.t?z
    cd /
    umount /mnt/cdrom
    rmdir /mnt/cdrom
    ;;
  5)
    debootstrap --variant=minbase --include=linux-image-generic,grub-efi,efibootmgr,systemd-sysv,network-manager,xorg,i3,xterm noble /mnt
    ;;
esac

# Fstab configuration
mkdir -p /mnt/etc
ROOT_UUID=$(blkid -s UUID -o value "${P}2")
EFI_UUID=$(blkid -s UUID -o value "${P}1")
cat <<EOF > /mnt/etc/fstab
UUID=$ROOT_UUID / ext4 defaults 0 1
UUID=$EFI_UUID /boot vfat defaults 0 2
EOF

# Bind mounts for chroot
for dir in dev proc sys run; do
  mount --mkdir --bind /$dir /mnt/$dir
done

# Bootloader configuration
chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB --recheck
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg

# Enable networking services
if [ "$pick" -eq 1 ] || [ "$pick" -eq 2 ] || [ "$pick" -eq 3 ] || [ "$pick" -eq 5 ]; then
  chroot /mnt systemctl enable NetworkManager || true
fi

# Cleanup
umount -R /mnt
echo "Overwrite complete. Selected OS is installed."
 
Last edited:
Top