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! ;)
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 22222und dort das Setup "remote" ausführen mittels
setup-alpineDabei sind auch vorausgefüllte Feldwerte mit separater answerfile verwendbar. Beispiel:
setup-alpine -f https://finalmedia.de/alpine