diff options
author | Helmut Grohne <helmut@subdivi.de> | 2023-01-04 10:16:16 +0100 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2023-01-04 10:21:16 +0100 |
commit | d1603fc20101de5b32030f314500fc0be65dcf29 (patch) | |
tree | 9844483ca7c3600e2ff250bc844380f041edaecd /debvm-create | |
parent | ba0206c069b00fed5911da62f56c9860bd1f8350 (diff) | |
download | debvm-d1603fc20101de5b32030f314500fc0be65dcf29.tar.gz |
debvm-create: add a --skip option
As with mmdebstrap, the --skip option can be used to skip over
tasks that are enabled by default. For now, we just add an integration
for
Diffstat (limited to 'debvm-create')
-rwxr-xr-x | debvm-create | 79 |
1 files changed, 54 insertions, 25 deletions
diff --git a/debvm-create b/debvm-create index 58094cc..f3f9895 100755 --- a/debvm-create +++ b/debvm-create @@ -11,7 +11,7 @@ debvm-create - Create a VM image for various Debian releases and architectures =head1 SYNOPSIS -B<debvm-create> [B<-a> I<architecture>] [B<-h> I<hostname>] [B<-k> I<sshkey>] [B<-m> I<mirror>] [B<-o> I<output>] [B<-p> I<package>] [B<-r> I<release>] [B<-z> I<size_in_GB>] [B<--> I<mmdebstrap options>] +B<debvm-create> [B<-a> I<architecture>] [B<-h> I<hostname>] [B<-k> I<sshkey>] [B<-m> I<mirror>] [B<-o> I<output>] [B<-p> I<package>] [B<-r> I<release>] [B<-s> <task>] [B<-z> I<size_in_GB>] [B<--> I<mmdebstrap options>] =head1 DESCRIPTION @@ -66,6 +66,19 @@ If a linux-image is passed here, it will replace the one selected by default. Use the given Debian release. By default, B<unstable> is being used. +=item B<-s> I<task>, B<--skip>=I<task> + +Skip a particular task or feature. +The option may be specified multiple times or list multiple tasks to be skipped by separating them with a comma. +By default, no tasks are skipped. +The following tasks may be skipped. + +=over 4 + +=item B<systemdnetwork> skips installing B<libnss-resolve> as well as automatic network configuration via B<systemd-networkd>. + +=back + =item B<-z> I<size_in_GB>, B<--size>=I<size_in_GB> Specify the minimum image size in giga bytes. @@ -93,6 +106,7 @@ IMAGE=rootfs.ext4 INCLUDE_PACKAGES=init MIRROR="http://deb.debian.org/debian" SIZE=$((1024*1024*1024)) +SKIP=, SSHKEY= SUITE=unstable VMNAME=testvm @@ -123,6 +137,9 @@ opt_hostname() { opt_mirror() { MIRROR=$1 } +opt_skip() { + SKIP="$SKIP$1," +} opt_sshkey() { SSHKEY=$1 } @@ -139,7 +156,7 @@ opt_size() { SIZE=$(($1*1024*1024*1024)) } -while getopts :a:h:k:m:o:p:r:z:-: OPTCHAR; do +while getopts :a:h:k:m:o:p:r:s:z:-: OPTCHAR; do case "$OPTCHAR" in a) opt_architecture "$OPTARG" ;; h) opt_hostname "$OPTARG" ;; @@ -148,18 +165,19 @@ while getopts :a:h:k:m:o:p:r:z:-: OPTCHAR; do o) opt_output "$OPTARG" ;; p) opt_package "$OPTARG" ;; r) opt_release "$OPTARG" ;; + s) opt_skip "$OPTARG" ;; z) opt_size "$OPTARG" ;; -) case "$OPTARG" in help) usage ;; - architecture|hostname|mirror|output|package|release|size|sshkey) + architecture|hostname|mirror|output|package|release|size|skip|sshkey) test "$OPTIND" -gt "$#" && usage_error "missing argument for --$OPTARG" "opt_$OPTARG" "$(nth_arg "$OPTIND" "$@")" OPTIND=$((OPTIND+1)) ;; - architecture=*|hostname=*|mirror=*|output=*|package=*|release=*|size=*|sshkey=*) + architecture=*|hostname=*|mirror=*|output=*|package=*|release=*|size=*|skip=*|sshkey=*) "opt_${OPTARG%%=*}" "${OPTARG#*=}" ;; *) @@ -184,6 +202,13 @@ if test -n "$SSHKEY" && ! test -f "$SSHKEY"; then die "error: ssh keyfile '$SSHKEY' not found" fi +check_skip() { + case "$SKIP" in + *",$1,"*) return 0 ;; + *) return 1 ;; + esac +} + case "$SUITE" in jessie) DEBVER=8 @@ -251,17 +276,19 @@ if test -n "$SSHKEY"; then INCLUDE_PACKAGES="$INCLUDE_PACKAGES,openssh-server" fi -# add a DNS resolver -if test "$DEBVER" -ge 9; then - INCLUDE_PACKAGES="$INCLUDE_PACKAGES,libnss-resolve" -fi -if test "$DEBVER" -le 11; then - set -- '--customize-hook=chroot "$1" systemctl enable systemd-resolved.service' "$@" -fi -if test "$DEBVER" -le 9; then - set -- '--customize-hook=ln -fs ../run/systemd/resolve/resolv.conf "$1/etc/resolv.conf"' "$@" -elif test "$DEBVER" -le 11; then - set -- '--customize-hook=ln -fs ../run/systemd/resolve/stub-resolv.conf "$1/etc/resolv.conf"' "$@" +if ! check_skip systemdnetwork; then + # add a DNS resolver + if test "$DEBVER" -ge 9; then + INCLUDE_PACKAGES="$INCLUDE_PACKAGES,libnss-resolve" + fi + if test "$DEBVER" -le 11; then + set -- '--customize-hook=chroot "$1" systemctl enable systemd-resolved.service' "$@" + fi + if test "$DEBVER" -le 9; then + set -- '--customize-hook=ln -fs ../run/systemd/resolve/resolv.conf "$1/etc/resolv.conf"' "$@" + elif test "$DEBVER" -le 11; then + set -- '--customize-hook=ln -fs ../run/systemd/resolve/stub-resolv.conf "$1/etc/resolv.conf"' "$@" + fi fi # construct mmdebstrap options as $@: @@ -284,16 +311,18 @@ set -- \ # allow password-less root login set -- '--customize-hook=chroot "$1" passwd --delete root' "$@" -# dhcp on all network interfaces -SYSD_NET_MATCH='Name=en*\n' -test "$DEBVER" -le 8 && SYSD_NET_MATCH="${SYSD_NET_MATCH}Name=eth*\\n" -SYSD_NET_NET='DHCP=yes\n' -# This anchor is included by default since bullseye. Fails DNSSEC validation when missing. -test "$DEBVER" -le 11 && SYSD_NET_NET="${SYSD_NET_NET}DNSSECNegativeTrustAnchors=home.arpa\\n" -set -- \ - '--customize-hook=chroot "$1" systemctl enable systemd-networkd.service' \ - "--customize-hook=printf \"[Match]\\n$SYSD_NET_MATCH\\n[Network]\\n$SYSD_NET_NET"'\n[DHCP]\nUseDomains=yes\n" > "$1/etc/systemd/network/20-wired.network"' \ - "$@" +if ! check_skip systemdnetwork; then + # dhcp on all network interfaces + SYSD_NET_MATCH='Name=en*\n' + test "$DEBVER" -le 8 && SYSD_NET_MATCH="${SYSD_NET_MATCH}Name=eth*\\n" + SYSD_NET_NET='DHCP=yes\n' + # This anchor is included by default since bullseye. Fails DNSSEC validation when missing. + test "$DEBVER" -le 11 && SYSD_NET_NET="${SYSD_NET_NET}DNSSECNegativeTrustAnchors=home.arpa\\n" + set -- \ + '--customize-hook=chroot "$1" systemctl enable systemd-networkd.service' \ + "--customize-hook=printf \"[Match]\\n$SYSD_NET_MATCH\\n[Network]\\n$SYSD_NET_NET"'\n[DHCP]\nUseDomains=yes\n" > "$1/etc/systemd/network/20-wired.network"' \ + "$@" +fi # add ssh key for root if test -n "$SSHKEY"; then |