Autore: Fabio Di Matteo
Ultima revisione: 02/10/2026 08:54
Uno script per creare un chroot alpine che non fa uso di Systemd. Utile per sviluppare con musl.
#!/usr/bin/env bash ARCH="x86_64" ALPINE_VER="3.24" ALPINE_SUB_VER="2" PROJECT_NAME=$1 mkdir -p $PROJECT_NAME/ctr cd $PROJECT_NAME/ctr curl -L https://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VER/releases/$ARCH/alpine-minirootfs-$ALPINE_VER.$ALPINE_SUB_VER-$ARCH.tar.gz -o alpine.tar.gz tar xzf alpine.tar.gz rm alpine.tar.gz cd .. echo "#!/usr/bin/env bash" > runc.sh echo "cp /etc/resolv.conf ./ctr/etc/resolv.conf mount --bind /dev ./ctr/dev mount -t proc /proc ./ctr/proc mount -t sysfs /sys ./ctr/sys chroot ./ctr /bin/ash -l ./umount.sh " >> runc.sh chmod +x runc.sh echo "#!/usr/bin/env bash" > umount.sh echo "umount -R ctr/dev umount ctr/proc umount ctr/sys" >> umount.sh chmod +x umount.sh
Editare le variabili per la versione e architettura di alpine poi lanciare:
./auto-alpine-chroot <nome cartella dove mettere il chroot>
Entriamo nella cartella e troviamo 2 script:
runc.sh #avvia il chroot umount.sh #smonta il chroot
Nota che umount.sh è opzionale invocarlo perchè uscend dal chroot viene invocato automaticamente.
Si usa mount –bind così: runc.sh
mount --bind /home/fabio/myfolder ./ctr/folder
umount.sh
umount ./ctr/folder
creare uno script dentro il chroot con nome /usr/loca/bin/start.sh per esempio.
#!/bin/sh openrc sysinit openrc boot openrc default /bin/sh
lanciare il chroot con uno script del genere:
#!/usr/bin/env bash cp /etc/resolv.conf ./ctr/etc/resolv.conf mount --bind /dev ./ctr/dev mount -t proc /proc ./ctr/proc mount -t sysfs /sys ./ctr/sys chroot --userspec=root:root ./ctr /usr/local/bin/start.sh ./umount.sh
Qui è possibile trovare lo script già pronto che crea tutto il necessario. Editare, versione e architettura e avviare da root come sopra. auto-alpine-chroot-openrc
Creare uno script per avviare o stoppare il nostro chroot /usr/local/bin/myalpine
myalpine start # avvia myalpine stop # ferma e smonta tutto
#!/usr/bin/env bash if [ "$1" = "start" ] then echo "Starting Alpine Linux..." cd /home/fabio/folder/alpine sudo ./runc.sh fi if [ "$1" = "stop" ] then echo "Shutdown Alpine ..." cd /home/fabio/folder/alpine sudo ./umount.sh fi
#!/usr/bin/env bash ARCH="x86_64" ALPINE_VER="3.24" ALPINE_SUB_VER="2" PROJECT_NAME=$1 mkdir -p $PROJECT_NAME/ctr cd $PROJECT_NAME/ctr curl -L https://dl-cdn.alpinelinux.org/alpine/v$ALPINE_VER/releases/$ARCH/alpine-minirootfs-$ALPINE_VER.$ALPINE_SUB_VER-$ARCH.tar.gz -o alpine.tar.gz tar xzf alpine.tar.gz rm alpine.tar.gz cd .. echo "#!/usr/bin/env bash bwrap \ --die-with-parent \ --new-session \ --bind ./ctr / \ --dev /dev \ --proc /proc \ --tmpfs /tmp \ --ro-bind /etc/resolv.conf /etc/resolv.conf \ --chdir /root \ /bin/ash -l " > run_sandbox.sh chmod +x run_sandbox.sh