X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=distro-begin;h=a7622848af7171f3437c9f02dcba2c3eb2ef2f1a;hb=c2bf18a9e27233fc9b57450455969fc9e53508b8;hp=a76549110ad0e77c62eb93e00a46c5a3ed50dbdc;hpb=f7cd81f49aa5d7a4581db63bed053e66e692972e;p=distro-setup diff --git a/distro-begin b/distro-begin index a765491..a762284 100755 --- a/distro-begin +++ b/distro-begin @@ -567,7 +567,7 @@ EOF fi fi -s mkdir -p /q/i/{w,k} +s mkdir -p /q /i/{w,k} for dir in /{i,w,k}; do if mountpoint $dir; then continue; fi # already mounted s mkdir -p $dir @@ -583,21 +583,27 @@ s mkdir -p /mnt/iroot # then waits endlessly for them on bootup, after the /dev/mapper disks # have already been created and exist. todo: create a simple repro # for this in a vm and report it upstream. -s dd of=/root/imount <<'EOF' +if has_btrfs || home_network; then + pi nfs-common + s dd of=/root/imount <<'EOF' #!/bin/bash [[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@" set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR -for dir in /i /mnt/iroot /w /k /kr; do - if ! mountpoint $dir &>/dev/null && \ - awk '{print $2}' /etc/fstab | grep -xFq $dir; then - mount $dir - fi +for dir in /i /mnt/iroot /k /kr /w; do + if ! mountpoint $dir &>/dev/null && \ + awk '{print $2}' /etc/fstab | grep -xF $dir &>/dev/null; then + if awk '{print $3}' /etc/fstab | grep -xF nfs &>/dev/null; then + mount $dir || echo "warning: failed to mount nfs on $dir" + else + mount $dir + fi + fi done EOF -s chmod +x /root/imount + s chmod +x /root/imount -s dd of=/etc/systemd/system/imount.service <<'EOF' + s dd of=/etc/systemd/system/imount.service <<'EOF' [Unit] Description=Mount /i and related mountpoints @@ -606,32 +612,39 @@ Type=oneshot ExecStart=/root/imount [Install] +# note /kr needs networking, this target is the simplest way to +# time it when the network should be up, but not do something +# dumb like delay startup until the network is up. It happens +# at some time after network.target WantedBy=multi-user.target EOF -sudo systemctl daemon-reload # needed if the file was already there -sudo systemctl enable imount.service -sudo systemctl start imount.service - + sudo systemctl daemon-reload # needed if the file was already there + sudo systemctl enable imount.service + sudo systemctl start imount.service +fi dir=/nocow -if ! mountpoint $dir; then - subvol=/mnt/root/nocow - if [[ ! -e $subvol ]]; then - s btrfs subvolume create $subvol - s chown root:1000 $subvol - s chattr +C $subvol - fi +if has_btrfs; then + if ! mountpoint $dir; then + subvol=/mnt/root/nocow + if [[ ! -e $subvol ]]; then + s btrfs subvolume create $subvol + s chown root:1000 $subvol + s chattr +C $subvol + fi - first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab) - tu /etc/fstab <