A script to install alpine linux on a dedicated server. Tested on Hetzner, Kimsufi / OVH
#!/bin/sh | |
set -ex | |
PATH=/bin:/sbin:/usr/bin:/usr/sbin | |
KEYMAP="us us" | |
HOST=alpine | |
USER=anon | |
ROOT_FS=ext4 | |
BOOT_FS=ext4 | |
FEATURES="ata base ide scsi usb virtio $ROOT_FS" | |
MODULES="sd-mod,usb-storage,$ROOT_FS" | |
REL=3.6 | |
MIRROR=http://dl-cdn.alpinelinux.org/alpine | |
REPO=$MIRROR/v$REL/main | |
APKV=2.7.2-r0 | |
DEV=/dev/sdb | |
ROOT_DEV=${DEV}2 | |
BOOT_DEV=${DEV}1 | |
ROOT=/mnt | |
BOOT=/mnt/boot | |
ARCH=$(uname -m) | |
sgdisk -Z $DEV | |
sgdisk -n 1:0:+512M $DEV | |
sgdisk -t 1:8300 $DEV | |
sgdisk -c 1:boot $DEV | |
sgdisk -n 2:0:+20G $DEV | |
sgdisk -t 2:8300 $DEV | |
sgdisk -c 2:root $DEV | |
sgdisk -A 1:set:2 $DEV | |
mkfs.$BOOT_FS -m 0 -q -L boot $BOOT_DEV | |
mkfs.$ROOT_FS -q -L root $ROOT_DEV | |
mount $ROOT_DEV $ROOT | |
mkdir $BOOT | |
mount $BOOT_DEV $BOOT | |
curl -s $MIRROR/v$REL/main/$ARCH/apk-tools-static-${APKV}.apk | tar xz | |
./sbin/apk.static --repository $REPO --update-cache --allow-untrusted --root $ROOT --initdb add alpine-base syslinux dhcpcd | |
cat << EOF > $ROOT/etc/fstab | |
$ROOT_DEV / $ROOT_FS defaults,noatime 0 0 | |
$BOOT_DEV /boot $BOOT_FS defaults 0 2 | |
EOF | |
echo $REPO > $ROOT/etc/apk/repositories | |
cat /etc/resolv.conf > $ROOT/etc/resolv.conf | |
cat << EOF > $ROOT/etc/update-extlinux.conf | |
overwrite=1 | |
vesa_menu=0 | |
default_kernel_opts="quiet" | |
modules=$MODULES | |
root=$ROOT_DEV | |
verbose=0 | |
hidden=1 | |
timeout=1 | |
default=grsec | |
serial_port= | |
serial_baud=115200 | |
xen_opts=dom0_mem=256M | |
password='' | |
EOF | |
cat << EOF > $ROOT/etc/network/interfaces | |
auto lo | |
iface lo inet loopback | |
auto eth0 | |
iface eth0 inet dhcp | |
hostname $HOST | |
EOF | |
mount --bind /proc $ROOT/proc | |
mount --bind /dev $ROOT/dev | |
mount --bind /sys $ROOT/sys | |
chroot $ROOT /bin/sh -x << CHROOT | |
apk update | |
apk add openssh | |
setup-hostname -n $HOST | |
rc-update -q add devfs sysinit | |
rc-update -q add dmesg sysinit | |
rc-update -q add mdev sysinit | |
rc-update -q add hwdrivers sysinit | |
rc-update -q add hwclock boot | |
rc-update -q add modules boot | |
rc-update -q add sysctl boot | |
rc-update -q add hostname boot | |
rc-update -q add bootmisc boot | |
rc-update -q add syslog boot | |
rc-update -q add networking boot | |
rc-update -q add urandom boot | |
rc-update -q add dhcpcd boot | |
rc-update -q add mount-ro shutdown | |
rc-update -q add killprocs shutdown | |
rc-update -q add savecache shutdown | |
rc-update -q add acpid default | |
rc-update -q add crond default | |
rc-update -q add sshd default | |
echo features=\""$FEATURES"\" > /etc/mkinitfs/mkinitfs.conf | |
apk add linux-grsec | |
extlinux -i /boot | |
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=$DEV | |
CHROOT | |
chroot $ROOT passwd | |
chroot $ROOT adduser -s /bin/ash -D $USER | |
chroot $ROOT passwd $USER | |
umount $ROOT/proc | |
umount $ROOT/dev | |
umount $ROOT/sys | |
umount $BOOT | |
umount $ROOT |
This comment has been minimized.
This comment has been minimized.
I have got a tar file in root of alpine ISO. During the installation of Alpine i want to extract the folder to /user/sbin. Where should i add the tar command to extract the tar file ? |
This comment has been minimized.
This comment has been minimized.
How do you use this script ? |
This comment has been minimized.
This comment has been minimized.
Update for Alpine Linux 3.9, adapted and tested on Kimsufi (installed from NetBoot: rescue):
|
This comment has been minimized.
This comment has been minimized.
Boot up the machine in rescue boot mode and run the script. You have to correct the variables beforehand. |
This comment has been minimized.
This comment has been minimized.
Thanks for posting it! :) |
This comment has been minimized.
This comment has been minimized.
I got a problem after updating my Alpine and rebooting the machine. It seems my networks config just isn't compatible with the Kimsufi network anymore. Any one got the same problems ? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Hey Demian,
this is a great peace of work, that helped me a lot getting alpine running. But as i am a complete alpine beginner (just converted from debian) i've got some misunderstandings according to this script. Maybe you can get a bit into details for some lines:
5 PATH=/bin:/sbin:/usr/bin:/usr/sbin
seems to be unused right?6 KEYMAP="us us"
unused?11 FEATURES="ata base ide scsi usb virtio $ROOT_FS"
I have added "raid" here to get my system booting. What exactly is that? Kernel modules? It has something to do with the RamFS. Can you explain that a little better?12 MODULES="sd-mod,usb-storage,$ROOT_FS"
Curiously, I don't have to specify any raid modules for the kernel here...44 ./sbin/apk.static --repository $REPO --update-cache --allow-untrusted --root $ROOT --initdb add alpine-base syslinux dhcpcd
At this point i added "mdadm" to be right there... or what do you think?49 cat << EOF > $ROOT/etc/update-extlinux.conf
Since I come from Debian Syslinux/Extlinux is totally new to me.84 rc-update -q add devfs sysinit
Where should I put mdadm? sysinit or boot?107 echo features=\""$FEATURES"\" > /etc/mkinitfs/mkinitfs.conf
Can you explain me the boot process step by step? After BIOS/UEFI has passed to the bootloader (syslinux)... initramfs -> then kernel from / partition? I ask because syslinux knows where to find the kernel... or does syslinux need the initramfs?It would be great if you could spent some time to give me some support and answer my questions. If you wish, I can post you my Raid-Version of your script. Its working pretty stable, although I do not understand why ;-)
Greetings
David