initial commit

This commit is contained in:
max/sooulix 2025-02-03 00:31:56 +01:00
commit 9a7be39f04
2 changed files with 175 additions and 0 deletions

View File

@ -0,0 +1,7 @@
BOOTSTRAP_HOSTNAME=mx2.freepinc.dev
BOOTSTRAP_ROOTFS=/dev/vg/mx2-rootfs
BOOTSTRAP_IFNAME=eth0
BOOTSTRAP_IFADDR=192.168.254.25
BOOTSTRAP_IFGW=192.168.254.1
BOOTSTRAP_DNS=192.168.254.1
BOOTSTRAP_ALPINE_VERSION=3.19

168
run.sh Executable file
View File

@ -0,0 +1,168 @@
#!/usr/bin/bash
# needed configuration values
# BOOTSTRAP_HOSTNAME=
# BOOTSTRAP_ROOTFS=
# BOOTSTRAP_IFNAME=
# BOOTSTRAP_IFADDR=
# BOOTSTRAP_IFGW=
# BOOTSTRAP_DNS=
# BOOTSTRAP_ALPINE_VERSION=
# Must be root
notroot() {
echo "You must be root to run this script"
exit 1
}
[ `id -u` -eq 0 ] || notroot
# Set the variable in the environment or give a file defining them as an argument
if [ $# -ge 1 ];
then
source $1
fi
echo "Starting to bootstrap an Alpine Linux OS with the following configuration:"
echo BOOTSTRAP_HOSTNAME=$BOOTSTRAP_HOSTNAME
echo BOOTSTRAP_ROOTFS=$BOOTSTRAP_ROOTFS
echo BOOTSTRAP_IFNAME=$BOOTSTRAP_IFNAME
echo BOOTSTRAP_IFADDR=$BOOTSTRAP_IFADDR
echo BOOTSTRAP_IFGW=$BOOTSTRAP_IFGW
echo BOOTSTRAP_DNS=$BOOTSTRAP_DNS
echo BOOTSTRAP_ALPINE_VERSION=$BOOTSTRAP_ALPINE_VERSION
echo "confirm (y/n)"
read confirm
[ "$confirm" != "y" ] && exit 0
APK_BINARY=
TARGET_MNT=`mktemp -d`
error_mount() {
echo "Cannot mount $BOOTSTRAP_ROOTFS to $TARGET_MNT"
exit 1
}
mount_rootfs() {
mount -t ext4 $BOOTSTRAP_ROOTFS $TARGET_MNT || error_mount
}
error_download_apk() {
echo "Cannot download apk binary file"
exit 1
}
download_apk() {
APK_BINARY=`mktemp`
curl https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v2.14.6/x86_64/apk.static > $APK_BINARY || error_download_apk
chmod +x $APK_BINARY
}
error_bootstrap() {
echo "Cannot bootstrap alpine"
exit 1
}
bootstrap() {
REPO=https://dl-cdn.alpinelinux.org/alpine/v$BOOTSTRAP_ALPINE_VERSION/main/
$APK_BINARY --arch x86_64 \
-X $REPO \
-U --allow-untrusted --initdb \
--root $TARGET_MNT \
add alpine-base agetty || error_bootstrap
}
genfstab() {
echo "UUID=`blkid -s UUID -o value $BOOTSTRAP_ROOTFS` / ext4 defaults,errors=remount-ro,discard,noatime 0 1"
}
# geninittab() {
# }
geninterfaces() {
cat << EOF
auto lo
iface lo inet loopback
auto $BOOTSTRAP_IFNAME
iface $BOOTSTRAP_IFNAME inet static
address $BOOTSTRAP_IFADDR
gateway $BOOTSTRAP_IFGW
EOF
}
genresolvconf() {
cat << EOF
nameserver $BOOTSTRAP_DNS
search `echo $BOOTSTRAP_HOSTNAME|cut -d. -f2-`
EOF
}
genapkrepo() {
cat << EOF
https://dl-cdn.alpinelinux.org/alpine/v$BOOTSTRAP_ALPINE_VERSION/main
https://dl-cdn.alpinelinux.org/alpine/v$BOOTSTRAP_ALPINE_VERSION/community
EOF
}
chrooting() {
for dir in /proc /sys /dev;
do
mount -o bind $dir $TARGET_MNT$dir
done
}
unchroot() {
for dir in /proc /sys /dev;
do
umount $TARGET_MNT$dir
done
}
exit_clean() {
unchroot
umount $TARGET_MNT
rmdir $TARGET_MNT
rm $APK_BINARY
}
echo "Installing"
mount_rootfs
[ ! -x "$APK_BINARY" ] && download_apk
bootstrap
echo $BOOTSTRAP_HOSTNAME > $TARGET_MNT/etc/hostname
genfstab > $TARGET_MNT/etc/ftsab
# geninittab > $TARGET_MNT/etc/inittab
geninterfaces > $TARGET_MNT/etc/network/interfacces
genresolvconf > $TARGET_MNT/etc/resolv.conf
genapkrepo > $TARGET_MNT/etc/apk/repositories
chrooting
CHROOT_CMD="chroot $TARGET_MNT"
(
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# Install packages
$CHROOT_CMD apk update
$CHROOT_CMD apk add linux-virt linux-firmware-none acpi mkinitfs vim screen qemu-guest-agent openssh-server
# Enable services
for svc in seedrng swap networking modules hostname hwclock bootmisc;
do
$CHROOT_CMD rc-update add $svc boot;
done;
for svc in acpid crond qemu-guest-agent sshd;
do
$CHROOT_CMD rc-update add $svc default;
done;
for svc in devfs dmesg mdev hwdrivers;
do
$CHROOT_CMD rc-update add $svc sysinit;
done;
for svc in killprocs mount-ro savecache;
do
$CHROOT_CMD rc-update add $svc shutdown;
done;
)
exit_clean