alpine iso modding for remote setup via ssh

reinhard@finalmedia.de Wed Feb 3 23:23:23 PM CET 2026

Ziel, eine Alpine Installer ISO File so verändern, das beim bootup bereits im Hintergrund ein ssh Server aktiv ist, der keybasierten Login ermöglicht (ssh authorized keys in der iso hinterlegt), ohne dass nach dem Boot der ISO irgendeine Benutzereingabe erwartet wird. Sprich ISO booten... und via ssh an separater Stelle beliebig automatisierbar und setup remote ausführen..

DISCLAIMER WICHTIG!

Beachte: Der Patch der init file ist auf meine eigenen Bedürfnisse angepasst. Verändere also die base64 encodierte Payload in der Makefile natürlich vorher, wenn du den Zugriff für einen anderen ssh publickey als meinen testkey erlauben willst! ;)

Los gehts

Hier ein Makefile um das quick&dirty abzubilden

Lege diese in ein eigenes, neu angelegtes Unterverzeichnis als Arbeitsverzeichnis, bevor du sie ausführst!

get:
	wget https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/x86_64/alpine-virt-3.23.3-x86_64.iso

extract:
	rm -rf iso/
	xorriso -osirrox on -indev alpine-virt-3.23.3-x86_64.iso -extract / iso/
	chmod +rw iso/boot/syslinux/isolinux.bin

unpack:
	rm -rf initramfs
	mkdir -p initramfs
	zcat iso/boot/initramfs-virt | cpio -iv -D initramfs

patch:
	test -f initramfs/init && echo MTEyMGExMTIxLDExNDIKPiBlY2hvICJGaW5hbG1lZGlhIFJlbW90ZSBTZXR1cCIKPiBpcCBsaW5rIHNldCBkZXYgZXRoMCB1cAo+IHNsZWVwIDIKPiB1ZGhjcGMKPiBpcCBhIHNob3cKPiBzbGVlcCA0Cj4gI3BpbmcgLWMgMiA5LjkuOS45Cj4gZWNobwo+IGVjaG8KPiBjaHJvb3QgL3N5c3Jvb3Qgc2ggLWMgJ2VjaG8gIm5hbWVzZXJ2ZXIgOS45LjkuOSIgPiAvZXRjL3Jlc29sdi5jb25mJwo+IGNocm9vdCAvc3lzcm9vdCBzaCAtYyAndHIgLWRjICIwLTlhLWYiIDwvZGV2L3VyYW5kb20gfCBoZWFkIC1jIDEwIHwgc2VkICJzL14vcm9vdDovZyIgfCB0ZWUgL3Byb2Mvc2VsZi9mZC8yIHwgY2hwYXNzd2QgMj4vZGV2L251bGwnCj4gY2hyb290IC9zeXNyb290IHNoIC1jICdta2RpciAvcm9vdC8uc3NoOyBlY2hvICJzc2gtZWQyNTUxOSBBQUFBQzNOemFDMWxaREkxTlRFNUFBQUFJTnBTZld6dVYyVVVickxCd2M1cjMxOVJvZUtaZ2g5cnM2MmFyOGNsbjFPUiIgPiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5cycKPiBjaHJvb3QgL3N5c3Jvb3Qgc2ggLWMgJ2VjaG87IGFwayBhZGQgb3BlbnNzaCA+L2Rldi9udWxsOyBzc2gta2V5Z2VuIC1BID4vZGV2L251bGwgMj4vZGV2L251bGw7IC91c3Ivc2Jpbi9zc2hkICcKPiAKPiAjY2hyb290IC9zeXNyb290IHNoIC1jICdlY2hvOyBhcGsgYWRkIG9wZW5zc2ggPi9kZXYvbnVsbDsgc3NoLWtleWdlbiAtQSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyAvdXNyL3NiaW4vc3NoZCAtRGUgJwo+ICNjaHJvb3QgL3N5c3Jvb3Qgc2ggLWMgJ2VjaG87IGFwayBhZGQgb3BlbnNzaCA+L2Rldi9udWxsOyBzZWQgLWkgInMvI1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzL1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzL2ciIC9ldGMvc3NoL3NzaGRfY29uZmlnOyBzc2gta2V5Z2VuIC1BID4vZGV2L251bGwgMj4vZGV2L251bGw7IC91c3Ivc2Jpbi9zc2hkIC1EZScKPiAKPiAjY2hyb290IC9zeXNyb290IHNoIC1jICdlY2hvOyBlY2hvOyBhcGsgYWRkIG9wZW5zc2ggPi9kZXYvbnVsbDsgc3NoLWtleWdlbiAtQSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyAvdXNyL3NiaW4vc3NoZCAtZGRkJwo+ICNjaHJvb3QgL3N5c3Jvb3Qgc2ggLWMgJ2FwayBhZGQgb3BlbnNzaDsgcmMtdXBkYXRlIGFkZCBzc2hkOyByYy1zZXJ2aWNlIHNzaGQgc3RhcnQ7IHNlcnZpY2Ugc3NoZCBzdGFydCcKPiAjY2hyb290IC9zeXNyb290IHNoIC1jICdwcmludGYgInlcbnNkYVxueVxuIiB8IHNldHVwLWRpc2sgLW0gc3lzJwo+ICNjaHJvb3QgL3N5c3Jvb3Qgc2ggLWMgJ3NldHVwLW5ldHdvcmsgLWE7IEVSQVNFX0RJU0tTPS9kZXYvc2RhIHNldHVwLWFscGluZSAtZSAtZiBodHRwczovL2ZpbmFsbWVkaWEuZGUvYWxwaW5lJwo+ICNleGVjIHNoCg== | base64 -d | patch initramfs/init -

repack:
	chmod +rw iso/boot/initramfs-virt
	cd initramfs && find . -print | cpio -ov -H newc | gzip -9 -q -c > ../iso/boot/initramfs-virt

build:
	genisoimage -f -J -R -r -no-emul-boot -boot-load-size 4 -boot-info-table -joliet-long -allow-lowercase -allow-multidot -max-iso9660-filenames -c boot/syslinux/boot.cat -b boot/syslinux/isolinux.bin -o final.iso iso/

setup:
	rm -f demo.qcow2
	qemu-img create -f qcow2 demo.qcow2 2000M
	qemu-system-x86_64 -m 1024 -cdrom final.iso -boot d -enable-kvm -machine q35 -netdev user,id=net0,hostfwd='tcp:127.0.0.1:22222-:22' -device virtio-net,netdev=net0 -hda demo.qcow2

run:
	qemu-system-x86_64 -m 1024 -hda demo.qcow2 -boot c -enable-kvm -machine q35 -netdev user,id=net0,hostfwd='tcp:127.0.0.1:22222-:22' -device virtio-net,netdev=net0

Es genügt dann letztlich auf einem debian System die folgende Kette, um die eigene ISO zu erzeugen

 apt-get install make genisoimage xorriso
 make get extract unpack patch repack build

Es fällt dann eine final.iso heraus. Wenn du die ISO im Emulator testen willst, bietet sich qemu an

 apt-get install qemu-system-x86
 make setup run

Du kannst dich dann verbinden via

 ssh root@127.0.0.1 -p 22222
und dort das Setup "remote" ausführen mittels
 setup-alpine
Dabei sind auch vorausgefüllte Feldwerte mit separater answerfile verwendbar. Beispiel:
 setup-alpine -f https://finalmedia.de/alpine