Skip to content

Commit

Permalink
Merge pull request #296 from mariux64/add-startup-scripts
Browse files Browse the repository at this point in the history
libexec_startup: Import sbin scripts from projects
  • Loading branch information
donald authored Jan 17, 2023
2 parents 3a93d84 + 49ea798 commit 88fed8d
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 0 deletions.
3 changes: 3 additions & 0 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,9 @@ install_data misc_systemd_units/pacbio-sshd.service "$DESTDIR$systemdunitd
for f in libexec_cron/*; do
install_exec "$f" "$DESTDIR$usr_exec_prefix/libexec/cron/$(basename "$f")"
done
for f in libexec_startup/*; do
install_exec "$f" "$DESTDIR$usr_exec_prefix/libexec/startup/$(basename "$f")"
done

postinstall
exit
61 changes: 61 additions & 0 deletions libexec_startup/prj_tor_startup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#! /usr/bin/bash

USER=torprj
ROOT=/project/tor
INTERFACE=vlan.tor0
VLAN=64
IP=141.14.220.177/31
ROUTER=141.14.220.176

set -e

cd $ROOT

get_guardian_pid() {
pid="$(cat $ROOT/var/run/guardian.pid 2>/dev/null)" || exit 1
kill -0 "$pid" 2>/dev/null || exit 1
echo "$pid"
}

exec_in_ns() {
pid=$1
shift
HOME=$ROOT/home nsenter --net --mount --user --target $pid -- "$@"
}

case $1 in
start)
pid=$(get_guardian_pid) || true
if [ -z "$pid" ]; then
pid=$(sudo -i -u $USER unshare --propagation unchanged --user --map-root-user --net --mount bash -c 'sleep infinity>/dev/null&echo $!')
echo $pid > $ROOT/var/run/guardian.pid
fi

if ! exec_in_ns $pid ip link show $INTERFACE >/dev/null 2>&1; then
if ! ip link show $INTERFACE >/dev/null 2>&1; then
if ! ip link add link net02 name $INTERFACE type vlan id $VLAN; then
echo "link may be locked in removed namespace for some minutes. try again later" >&2
exit 1
fi
fi
ip link set $INTERFACE netns $pid
fi

exec_in_ns $pid mount -t tmpfs shm /dev/shm
exec_in_ns $pid mount --bind /dev/null /etc/nsswitch.conf
exec_in_ns $pid ip link set lo up
exec_in_ns $pid ip address add $IP dev $INTERFACE
exec_in_ns $pid ip link set $INTERFACE up
exec_in_ns $pid ip route add default via $ROUTER
;;
stop)
pid=$(get_guardian_pid) || exit 0
kill $pid
rm $ROOT/var/run/guardian.pid
;;
*)
echo "usage: $0 {start|stop}" >&2
exit 1
;;
esac

61 changes: 61 additions & 0 deletions libexec_startup/prj_torb_startup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#! /usr/bin/bash

USER=torbprj
ROOT=/project/torb
INTERFACE=vlan.torb0
VLAN=87
IP=141.14.15.217/31
ROUTER=141.14.15.216

set -e

cd $ROOT

get_guardian_pid() {
pid="$(cat $ROOT/var/run/guardian.pid 2>/dev/null)" || exit 1
kill -0 "$pid" 2>/dev/null || exit 1
echo "$pid"
}

exec_in_ns() {
pid=$1
shift
HOME=$ROOT/home nsenter --net --mount --user --target $pid -- "$@"
}

case $1 in
start)
pid=$(get_guardian_pid) || true
if [ -z "$pid" ]; then
pid=$(sudo -i -u $USER unshare --propagation unchanged --user --map-root-user --net --mount bash -c 'sleep infinity>/dev/null&echo $!')
echo $pid > $ROOT/var/run/guardian.pid
fi

if ! exec_in_ns $pid ip link show $INTERFACE >/dev/null 2>&1; then
if ! ip link show $INTERFACE >/dev/null 2>&1; then
if ! ip link add link net02 name $INTERFACE type vlan id $VLAN; then
echo "link may be locked in removed namespace for some minutes. try again later" >&2
exit 1
fi
fi
ip link set $INTERFACE netns $pid
fi

exec_in_ns $pid mount -t tmpfs shm /dev/shm
exec_in_ns $pid mount --bind /dev/null /etc/nsswitch.conf
exec_in_ns $pid ip link set lo up
exec_in_ns $pid ip address add $IP dev $INTERFACE
exec_in_ns $pid ip link set $INTERFACE up
exec_in_ns $pid ip route add default via $ROUTER
;;
stop)
pid=$(get_guardian_pid) || exit 0
kill $pid
rm $ROOT/var/run/guardian.pid
;;
*)
echo "usage: $0 {start|stop}" >&2
exit 1
;;
esac

0 comments on commit 88fed8d

Please sign in to comment.