X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc2;h=d6ff1a401367e8412b3cbd8d1bb90975b4f09b18;hb=87c3f2244a47ad10a031a27d0d0456f0a7defd21;hp=f9acadade2fb7414038b7efb6fbc797a539992b9;hpb=ca61084446e48fb0703ce2a203c1bd18ceaf4dfb;p=distro-setup diff --git a/brc2 b/brc2 index f9acada..d6ff1a4 100644 --- a/brc2 +++ b/brc2 @@ -2037,12 +2037,12 @@ apache-strip() { for f in $(find . -type f -maxdepth 1); do if head -n1 "$f"| grep -E '^#!/bin/bash\b' &>/dev/null; then { head -n 20 $f | tac | sed '/^# limitations under the License.$/,/^# Copyright.*Ian Kelling$/d' | tac; tail -n+21 $f; } |sponge $f; fi ; done } -chrome() { +chro() { if type -p chromium &>/dev/null; then cmd=chromium else cd / - cmd="schroot -c bullseye chromium" + cmd="schroot -c bookworm chromium" CHROMIUM_FLAGS='--enable-remote-extensions' $cmd & r fi } @@ -3033,40 +3033,59 @@ EOF ) } +# sudo maybe +# +# passes on any initial -* args to sudo. +sudm() { + local arg + local -a sudo_opts + for arg; do + if [[ $arg == -* ]]; then + sudo_opts+=("$arg") + shift + else + break + fi + done + if [[ $EUID == 0 ]]; then + "$@" + else + sudo "${sudo_opts[@]}" "$@" + fi +} -mns() { # mount namespace +mns-setup() { + local ns 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 + sudm mkdir -p /root/mount_namespaces + if ! sudm mountpoint /root/mount_namespaces >/dev/null; then + m sudm 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 + m sudm mount --make-private /root/mount_namespaces + if ! sudm test -e /root/mount_namespaces/$ns; then + m sudm 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 + if ! sudm mountpoint /root/mount_namespaces/$ns >/dev/null; then + m sudm unshare --propagation slave --mount=/root/mount_namespaces/$ns /bin/true fi - m sudo -E /usr/bin/nsenter --mount=/root/mount_namespaces/$ns "$@" + +} + +mns() { # mount namespace + local ns + ns=$1 + shift + mns-setup $ns + m sudm -E /usr/bin/nsenter --mount=/root/mount_namespaces/$ns "$@" } mnsd() { # mount namespace + systemd namespace + local ns unit ns=$1 unit=$2 shift 2 - 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 + mns-setup $ns pid=$(servicepid $unit) tmpf=$(mktemp --tmpdir $unit.XXXXXXXXXX) @@ -4104,6 +4123,25 @@ sdncmdroot() { # systemd namespace root command } +# systemd network namespace (not mount) cmd +# usage: UNIT CMD... +sdnncmd() { + local unit pid tmpf + if (( $# <= 1 )); then + echo $0: error wrong number of args >&2 + return 1 + fi + unit=$1 + shift + pid=$(servicepid $unit) + tmpf=$(mktemp --tmpdir $unit.XXXXXXXXXX) + export -p >$tmpf + printf "%s " "${@@Q}" >>$tmpf + echo >>$tmpf + m sudo nsenter -t $pid -n sudo -u $USER -i bash -c ". $tmpf & rm $tmpf" +} + + mailnnbash() { sdnbash mailnn }