X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc2;h=d374c52537cdba929355a7f0abf7955ed1d25134;hb=253530bdfb6da78f7b33f7af11a031359f02ef84;hp=491dcada8e562e33990a96b50427ab9cf1af16a2;hpb=01ccff895787ca94ad37d11cb93f0440a29edd7c;p=distro-setup diff --git a/brc2 b/brc2 index 491dcad..d374c52 100644 --- a/brc2 +++ b/brc2 @@ -1134,11 +1134,37 @@ EOF } +mns() { # mount namespace + ns=$1 + shift + s mkdir -p /root/mount_namespaces + if ! sudo mountpoint /root/mount_namespaces >/dev/null; then + m sudo mount --bind /root/mount_namespaces /root/mount_namespaces + fi + m sudo mount --make-private /root/mount_namespaces + if [[ ! -e /root/mount_namespaces/$ns ]]; then + m sudo touch /root/mount_namespaces/$ns + fi + if ! sudo mountpoint /root/mount_namespaces/$ns >/dev/null; then + m sudo unshare --propagation slave --mount=/root/mount_namespaces/$ns /bin/true + fi + m sudo -E /usr/bin/nsenter --mount=/root/mount_namespaces/$ns "$@" +} + +mnsnonet() { + ns=$1 + if ! s ip netns list | grep -Fx nonet &>/dev/null; then + s ip netns add nonet + fi + mns $ns --net=/var/run/netns/nonet sudo -E -u iank /bin/bash +} + + lom() { local l base if [[ $1 == /* ]]; then base=${1##*/} - if mountpoint -q /mnt/$base; then + if mns $base mountpoint -q /mnt/$base; then return 0 fi l=$(losetup -j $1 | sed -rn 's/^([^ ]+): .*/\1/p' | head -n1 ||:) @@ -1153,12 +1179,12 @@ lom() { fi fi m sudo mkdir -p /mnt/$base - m sudo mount /dev/mapper/$base /mnt/$base - m sudo chown $USER:$USER /mnt/$base + m mns $base mount /dev/mapper/$base /mnt/$base + m mns $base chown $USER:$USER /mnt/$base else base=$1 - if mountpoint /mnt/$base &>/dev/null; then - m sudo umount /mnt/$base + if mns $base mountpoint /mnt/$base &>/dev/null; then + m mns $base umount /mnt/$base fi if sudo cryptsetup status /dev/mapper/$base &>/dev/null; then if ! m sudo cryptsetup luksClose /dev/mapper/$base; then @@ -1754,7 +1780,7 @@ mailnncheck() { vpncmd() { - m sudo -E env "PATH=$PATH" nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n -m "$@" + m sudo -E env "PATH=$PATH" nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n "$@" } vpnf() { sudo -v