various fixes
[distro-setup] / brc2
diff --git a/brc2 b/brc2
index 491dcada8e562e33990a96b50427ab9cf1af16a2..5035ca2f5c3c348e81524ca034dd1c2db9818d09 100644 (file)
--- a/brc2
+++ b/brc2
@@ -1134,6 +1134,32 @@ EOF
 }
 
 
+mns() { # mount namespace
+  ns=$1
+  shift
+  s mkdir -p /root/mount_namespaces
+  if ! s mountpoint /root/mount_namespaces >/dev/null; then
+    m s mount --bind /root/mount_namespaces /root/mount_namespaces
+  fi
+  m s mount --make-private /root/mount_namespaces
+  if [[ ! -e /root/mount_namespaces/$ns ]]; then
+    s touch /root/mount_namespaces/$ns
+  fi
+  if ! s mountpoint /root/mount_namespaces/$ns >/dev/null; then
+    m 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
@@ -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 mount /dev/mapper/$base /mnt/$base
+    m mns chown $USER:$USER /mnt/$base
   else
     base=$1
-    if mountpoint /mnt/$base &>/dev/null; then
-      m sudo umount /mnt/$base
+    if mns mountpoint /mnt/$base &>/dev/null; then
+      m mns umount /mnt/$base
     fi
     if sudo cryptsetup status /dev/mapper/$base &>/dev/null; then
       if ! m sudo cryptsetup luksClose /dev/mapper/$base; then