- Our drive is
/dev/sda
- The target alpine version is
3.16.2
- We have networking
- Your timezone is
Europe/Vilnius
You can easily change these factors when you notice them, for example in the alpine rootfs you can always change the version, or in timezone, well time timezone, the drive whenever it comes up, though networking is needed here
- Download any ISO and boot it
- Setup your network
- Change to root user: sudo su
- Partition the drive using
cfdisk
gpt - 300MB efi/boot partition {.t = "EFI System"}
- 4GB swap partition {.t = "Linux swap"}
- Rest of the drive for root {.t = "Linux filesystem"}
- Then
- Format the partitions
- Boot:
mkfs.vfat -F32 /dev/sda1
- Swap:
mkswap /dev/sda2 && swapon /dev/sda2
- Root:
mkfs.ext4 /dev/sda3
mkdir -p /mnt/alpine
mount /dev/sda3 /mnt/alpine
mkdir -p /mnt/alpine/boot
mount /dev/sda1 /mnt/alpine/boot
cd /mnt/alpine
wget https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86_64/alpine-minirootfs-3.16.2-x86_64.tar.gz
tar xpvf alpine-minirootfs-3.16.2-x86_64.tar.gz --xattrs-include='*.*' --numeric-owner
wget https://raw.githubusercontent.com/cemkeylan/genfstab/master/genfstab
sh genfstab -U /mnt/alpine >>/mnt/alpine/etc/fstab
cat /mnt/alpine/etc/fstab
- If
/dev/sda2
does not appear
echo "$(blkid /dev/sda2 | awk '{print $2}' | sed 's/"//g') none swap sw 0 0" >>/mnt/alpine/etc/fstab
#Mount the needed fake filesystems
mount --types proc /proc /mnt/alpine/proc
mount --rbind /sys /mnt/alpine/sys
mount --make-rslave /mnt/alpine/sys
mount --rbind /dev /mnt/alpine/dev
mount --make-rslave /mnt/alpine/dev
mount --bind /run /mnt/alpine/run
mount --make-slave /mnt/alpine/run
#Copy host's resolv.conf to the chroot environment
cp /etc/resolv.conf /mnt/alpine/etc/resolv.conf
chroot /mnt/alpine /bin/ash
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
#Update and install setup scripts
apk update
apk add alpine-conf openrc --no-cache
If you see any errors regarding rc-service, rc-update, etc. ignore them
This part is based off https://docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html
setup-keymap us us # This will use the US keyboard
export HOSTNAME='alpine'
setup-hostname "$HOSTNAME" # Hostname will be alpine
tee /etc/hosts <<EOF
127.0.0.1 localhost.localdomain localhost $HOSTNAME.localdomain $HOSTNAME
::1 localhost.localdomain localhost $HOSTNAME.localdomain $HOSTNAME
EOF
https://docs.alpinelinux.org/user-handbook/0.1a/Installing/manual.html#_networking
apk add tzdata
export _TZ='Europe/Vilnius'
install -Dm 0644 "/usr/share/zoneinfo/$_TZ" "/etc/zoneinfo/$_TZ"
export TZ="$_TZ"
echo "export TZ='$TZ'" >> /etc/profile.d/timezone.sh
passwd
apk add dhcp wpa_supplicant
#Bootloader (GRUB) and kernel
apk add grub grub-efi efibootmgr linux-lts
apk add linux-firmware
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ALPINE
grub-mkconfig -o /boot/grub/grub.cfg
rc-update add hostname boot
rc-update add devfs sysinit
rc-update add cgroups sysinit
rc-update add bootmisc boot
rc-update add binfmt boot
rc-update add fsck boot
rc-update add urandom boot
rc-update add root boot
rc-update add procfs boot
rc-update add swap boot
rc-update add sysfs sysinit
rc-update add localmount boot
rc-update add sysctl boot
tee -a /etc/default/grub <<EOF
GRUB_TIMEOUT_STYLE=menu
GRUB_GFXMODE=1920x1080
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_CMDLINE_LINUX="rootfstype=ext4 loglevel=3"
EOF
grub-mkconfig -o /boot/grub/grub.cfg
#Exiting the installation
exit
umount -a
poweroff