X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc2;h=bd959d82dc824b6e597a10df51f9906f2c8633ec;hb=d4366929e6e200155b010dc05ce74255ee6a45ed;hp=9bc89d5158c499ff9892e08c26e1f193f5dcc690;hpb=62dede3e7ad2c0ee566145f3efabf1fd23df46a7;p=distro-setup diff --git a/brc2 b/brc2 index 9bc89d5..bd959d8 100644 --- a/brc2 +++ b/brc2 @@ -1079,14 +1079,19 @@ lom() { local l base if [[ $1 == /* ]]; then base=${1##*/} - if mountpoint /mnt/$base; then + if mountpoint -q /mnt/$base; then return 0 fi - l=$(sudo losetup -f) - sudo losetup $l $1 - if ! sudo cryptsetup luksOpen $l $base; then - sudo losetup -d $l - return 1 + l=$(losetup -j $1 | sed -rn 's/^([^ ]+): .*/\1/p' | head -n1 ||:) + if [[ ! $l ]]; then + l=$(sudo losetup -f) + sudo losetup $l $1 + fi + if ! sudo cryptsetup status /dev/mapper/$base &>/dev/null; then + if ! sudo cryptsetup luksOpen $l $base; then + sudo losetup -d $l + return 1 + fi fi sudo mkdir -p /mnt/$base sudo mount /dev/mapper/$base /mnt/$base @@ -1096,9 +1101,18 @@ lom() { if mountpoint /mnt/$base &>/dev/null; then sudo umount /mnt/$base fi - l=$(sudo cryptsetup status /dev/mapper/$base|sed -rn 's/^\s*device:\s*(.*)/\1/p') - sudo cryptsetup luksClose /dev/mapper/$base || return 1 - sudo losetup -d $l + if sudo cryptsetup status /dev/mapper/$base &>/dev/null; then + if ! sudo cryptsetup luksClose /dev/mapper/$base; then + echo lom: failed cryptsetup luksClose /dev/mapper/$base + return 1 + fi + fi + l=$(losetup -j $1 | sed -rn 's/^([^ ]+): .*/\1/p' | head -n1 ||:) + if [[ $l ]]; then + sudo losetup -d $l + else + echo lom: warning: no loopback device found + fi fi } @@ -1558,11 +1572,11 @@ enn() { sdnbash() { # systemd namespace bash local unit=$1 - m sudo nsenter -t $(systemctl status $unit | sed -n '/^ *Main PID:/s/[^0-9]//gp') -n -m sudo -u $USER -i bash + m sudo nsenter -t $(systemctl show --property MainPID --value $unit') -n -m sudo -u $USER -i bash } mailnnbash() { - m sudo nsenter -t $(systemctl status mailnn| sed -n '/^ *Main PID:/s/[^0-9]//gp') -n -m sudo -u $USER -i bash + m sudo nsenter -t $(systemctl show --property MainPID --value mailnn') -n -m sudo -u $USER -i bash } mailvpnbash() { @@ -1573,7 +1587,7 @@ eximbash() { } spamnn() { local spamdpid - spamdpid=$(systemctl status spamassassin| sed -n '/^ *Main PID:/s/[^0-9]//gp') + spamdpid=$(systemctl show --property MainPID --value spamassassin) m sudo nsenter -t $spamdpid -n -m sudo -u Debian-exim spamassassin "$@" } unboundbash() { @@ -1581,9 +1595,18 @@ unboundbash() { } mailnncheck() { - local pid ns mailnn - for p in mailnn mailvpn unbound dovecot spamassassin exim4 radicale; do - pid=$(s systemctl status $p| sed -n '/^ *Main PID:/s/[^0-9]//gp') + local p pid ns mailnn + # mailvpn would belong on the list if using openvpn + for p in mailnn unbound dovecot spamassassin exim4 radicale; do + case $p in + exim4|radicale) + pid=$(ps -eo pid,cgroup | grep /system.slice/$p.service | awk '{print $1}') + ;; + *) + pid=$(s systemctl show --property MainPID --value $p) + ;; + esac + echo p=$p pid=$pid if [[ ! $pid ]]; then echo failed to find pid for $p continue