X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=distro-begin;h=a7622848af7171f3437c9f02dcba2c3eb2ef2f1a;hb=c2bf18a9e27233fc9b57450455969fc9e53508b8;hp=edb36f49c5ef870667a640e3e0fc7c6ab5e2eb8a;hpb=9eeed9d8bd24850fe5e35d2c2f9be8608491bf70;p=distro-setup diff --git a/distro-begin b/distro-begin index edb36f4..a762284 100755 --- a/distro-begin +++ b/distro-begin @@ -1,12 +1,12 @@ #!/bin/bash -l # Copyright (C) 2016 Ian Kelling - +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at - +# # http://www.apache.org/licenses/LICENSE-2.0 - +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -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 <