summaryrefslogtreecommitdiff
path: root/bin/debvm-create
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2023-02-20 14:28:45 +0100
committerHelmut Grohne <helmut@subdivi.de>2023-02-20 14:28:45 +0100
commitdeb6f69095495efc775569c0c8f0846af3512508 (patch)
tree7a5808cdedc30c2f7731f90a0549e5479b67489f /bin/debvm-create
parentb4d773ef93ec3474048f73b880abf4a58be31a98 (diff)
downloaddebvm-deb6f69095495efc775569c0c8f0846af3512508.tar.gz
debvm-create: add --initsystem option
This option allows changing the init system. The notable addition is sysv.
Diffstat (limited to 'bin/debvm-create')
-rwxr-xr-xbin/debvm-create66
1 files changed, 50 insertions, 16 deletions
diff --git a/bin/debvm-create b/bin/debvm-create
index d9ba6fa..10794c7 100755
--- a/bin/debvm-create
+++ b/bin/debvm-create
@@ -37,6 +37,13 @@ A suitable kernel image is automatically selected and installed into the image.
Set the hostname of the virtual machine.
By default, the hostname is B<testvm>.
+=item B<--initsystem>=B<systemd> | B<sysv> | B<none>
+
+Select an init system to be used.
+The default is B<systemd> independently of the Debian release.
+Note that when selecting B<none>, the resulting image will not be bootable unless something else takes care of creating F</sbin/init>.
+Automatic customizations that are specific to a particular init system will be skipped when a different init system is selected.
+
=item B<-k> F<sshkey>, B<--sshkey>=F<sshkey>
Install the given ssh public key file into the virtual machine image for the root user.
@@ -75,13 +82,15 @@ Internally, B<mmdebstrap> creates a tar archive first and converts that to ext2,
This option causes the conversion to ext2 and further steps to be skipped and the output image will be a tar archive instead.
Such a tar archive is not suitable for being booted by B<debvm-run>.
+=item B<ifupdown>
+
+skips installing B<ifupdown> configuration to automatically configure wired interfaces.
+This is specific to using B<sysv> as init system.
+
=item B<initsystem>
skips installing an init system.
-When enabling this option, the resulting image will lack F</sbin/init> and the image will not be bootable by B<debvm-run> unless something else provides that path.
-One would specify this option when providing the init system via other means, such as passing C<--include=sysvinit-core> to B<mmdebstrap>.
-This option also implies disabling other integrations that depend on it.
-At present, this will also skip B<autologin> and B<systemdnetwork>.
+This is equivalent to specifying B<--initsystem=none>.
=item B<kernel>
@@ -99,6 +108,7 @@ This generally produces a smaller image, but you need to run B<apt update> befor
=item B<systemdnetwork>
skips installing B<libnss-resolve> as well as automatic network configuration via B<systemd-networkd>.
+This is specific to using B<systemd> as init system.
=item B<usrmerge>
@@ -140,6 +150,7 @@ set -u
ARCHITECTURE=$(dpkg --print-architecture)
IMAGE=rootfs.ext4
+INITSYSTEM=systemd
SIZE=1G
SKIP=,
SSHKEY=
@@ -171,8 +182,22 @@ opt_architecture() {
opt_hostname() {
VMNAME=$1
}
+opt_initsystem() {
+ case "$1" in
+ systemd|sysv|none)
+ ;;
+ *)
+ die "value for --initsystem must be one of systemd, sysv or none"
+ ;;
+ esac
+ INITSYSTEM=$1
+}
opt_skip() {
- SKIP="$SKIP$1,"
+ if test "$1" = initsystem; then
+ opt_initsystem none
+ else
+ SKIP="$SKIP$1,"
+ fi
}
opt_sshkey() {
SSHKEY=$1
@@ -202,12 +227,12 @@ while getopts :a:h:k:o:r:s:z:-: OPTCHAR; do
help)
usage
;;
- architecture|hostname|output|release|size|skip|sshkey)
+ architecture|hostname|initsystem|output|release|size|skip|sshkey)
test "$OPTIND" -gt "$#" && usage_error "missing argument for --$OPTARG"
"opt_$OPTARG" "$(nth_arg "$OPTIND" "$@")"
OPTIND=$((OPTIND+1))
;;
- architecture=*|hostname=*|output=*|release=*|size=*|skip=*|sshkey=*)
+ architecture=*|hostname=*|initsystem=*|output=*|release=*|size=*|skip=*|sshkey=*)
"opt_${OPTARG%%=*}" "${OPTARG#*=}"
;;
*)
@@ -239,10 +264,6 @@ check_skip() {
esac
}
-if check_skip initsystem; then
- SKIP="${SKIP}autologin,systemdnetwork,"
-fi
-
if ! check_skip kernel; then
set -- "--customize-hook=$SHARE_DIR/customize-kernel.sh" "$@"
fi
@@ -262,9 +283,17 @@ set -- \
'--customize-hook=echo "LABEL=debvm / ext4 defaults 0 1" >"$1/etc/fstab"' \
"$@"
-if ! check_skip initsystem; then
- set -- --include=systemd-sysv "$@"
-fi
+case "$INITSYSTEM" in
+ systemd)
+ set -- --include=systemd-sysv "$@"
+ ;;
+ sysv)
+ set -- \
+ --include=sysvinit-core,e2fsprogs \
+ '--include=?not(?virtual)?exact-name(orphan-sysvinit-scripts)' \
+ "$@"
+ ;;
+esac
# set up a hostname
set -- \
@@ -275,13 +304,18 @@ set -- \
# allow password-less root login
set -- '--customize-hook=passwd --root "$1" --delete root' "$@"
-if ! check_skip systemdnetwork; then
+if test "$INITSYSTEM" = systemd && ! check_skip systemdnetwork; then
# dhcp on all network interfaces, and add a dns resolver
set -- \
"--customize-hook=$SHARE_DIR/customize-networkd.sh" \
'--include=?not(?virtual)?exact-name(libnss-resolve)' \
"--customize-hook=$SHARE_DIR/customize-resolved.sh" \
"$@"
+elif test "$INITSYSTEM" = sysv && ! check_skip ifupdown; then
+ set -- \
+ '--include=ifupdown,isc-dhcp-client' \
+ "--customize-hook=$SHARE_DIR/customize-ifupdown.sh" \
+ "$@"
fi
# add ssh key for root
@@ -310,7 +344,7 @@ if ! check_skip usrmerge; then
set -- --hook-dir=/usr/share/mmdebstrap/hooks/maybe-merged-usr "$@"
fi
-if ! check_skip autologin; then
+if test "$INITSYSTEM" != none && ! check_skip autologin; then
set -- "--customize-hook=$SHARE_DIR/customize-autologin.sh" "$@"
fi