mirror of
https://gitlab.alpinelinux.org/alpine/cloud/tiny-cloud.git
synced 2025-12-14 19:02:45 +03:00
88 lines
1.7 KiB
Bash
Executable File
88 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# vim:set filetype=sh:
|
|
|
|
set -e
|
|
|
|
: "${LIBDIR:=$PREFIX/lib}"
|
|
. "$LIBDIR/tiny-cloud/common"
|
|
|
|
if [ -z "$MDEV" ] || [ -z "$ACTION" ]; then
|
|
log crit "MDEV or ACTION undefined, aborting"
|
|
fi
|
|
|
|
IFACE_CFG=/etc/network/interfaces
|
|
|
|
ip() {
|
|
local v=-4 lev=info
|
|
if [ "$1" = '-4' ] || [ "$1" = '-6' ]; then
|
|
v="$1"
|
|
shift
|
|
fi
|
|
local op="$2"
|
|
|
|
[ "$op" = show ] && lev=debug
|
|
if /sbin/ip "$v" "$@" || [ -n "$FAIL_OK" ]; then
|
|
log "$lev" "OK: ip $v $*"
|
|
else
|
|
log err "FAIL: ip $v $*"
|
|
fi
|
|
}
|
|
|
|
interface_up() {
|
|
log info "Bringing up $MDEV"
|
|
# umask so udhcpc PID file isn't non-owner writeable
|
|
(umask 0022 && ifup "$MDEV")
|
|
}
|
|
|
|
cleanup_interface() {
|
|
local v pref rtable="${MDEV#eth}"
|
|
let rtable+=10000
|
|
|
|
log info "Cleaning up $MDEV"
|
|
|
|
# kill related udhcpc, don't panic if it's not there
|
|
kill "$(cat "/run/udhcpc.$MDEV.pid")" || true
|
|
|
|
# tidy up /run/ifstate, if it exists
|
|
[ -f /run/ifstate ] && sed -i -e "/^$MDEV=/d" /run/ifstate
|
|
rm -f /run/ifstate."$MDEV".lock
|
|
|
|
# remove related rules
|
|
for v in 4 6; do
|
|
for pref in $(ip -"$v" rule show table "$rtable" | cut -d: -f1); do
|
|
ip -"$v" rule del pref "$pref"
|
|
done
|
|
done
|
|
}
|
|
|
|
is_networking_started() { service networking status -q 2>/dev/null; }
|
|
|
|
log info "STARTING: $ACTION $MDEV"
|
|
|
|
if exec 200>>"$IFACE_CFG"; then
|
|
if flock 200; then
|
|
case $ACTION in
|
|
add|"")
|
|
assemble-interfaces
|
|
is_networking_started && interface_up
|
|
;;
|
|
remove)
|
|
assemble-interfaces
|
|
is_networking_started && cleanup_interface
|
|
;;
|
|
*)
|
|
log err "Unknown action '$ACTION'"
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
log err "Unable to flock $IFACE_CFG"
|
|
exit 1
|
|
fi
|
|
else
|
|
log err "Unable to assign fd 200 to flock $IFACE_CFG"
|
|
exit 1
|
|
fi
|
|
|
|
log info "FINISHED: $ACTION $MDEV"
|