mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
Create a networking service script, so we can run it after switchd
Ticket: CM-8790 Reviewed By: wkok,roopa Testing Done: built, installed, rebooted jessie's networking starts as an init.d service. Trying to force ordering between init.d and systemd services when there are dependencies doesn't work well (especially since the init.d/networking service is forced very early because of the remote filesystem requirement in jesie). Converting networking to a script run as a systemd service allows us to start networking after switchd. The new script is /sbin/start-networking. I chose to keep it in /sbin, rather than put it in /usr/cumulus/bin, because it's core functionaity. I am not removing /etc/init.d/networking, it just gets ignored unless somebody types it manually. If somebody does that, systemctl runs through the lsb hooks. The two lost abilities below are just ignored if passed. I'm also preventing creating the rc.d symlinks to the init.d/networking script to reduce future confusion. We lose some init.d "convenience" functionality because it's not available through systemd. What we lose are: reload-currently-up - can still be done with ifreload --currently-up force-reload - can still be done with ifreload -f -a We keep start, stop, reload, restart
This commit is contained in:
1
debian/ifupdown2.install
vendored
1
debian/ifupdown2.install
vendored
@@ -1,2 +1,3 @@
|
||||
sbin/ifupdown2 /usr/share/ifupdown2/
|
||||
sbin/start-networking /sbin
|
||||
debian/networking.default /etc/default/networking
|
||||
|
16
debian/ifupdown2.networking.service
vendored
Normal file
16
debian/ifupdown2.networking.service
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Cumulus Linux networking initialization
|
||||
After=switchd.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
SyslogIdentifier=networking
|
||||
TimeoutSec=60s
|
||||
TimeoutStopSec=30s
|
||||
ExecStart=/sbin/start-networking start
|
||||
ExecStop=/sbin/start-networking stop
|
||||
ExecReload=/sbin/start-networking reload
|
||||
|
||||
[Install]
|
||||
WantedBy=basic.target network.target
|
13
debian/rules
vendored
13
debian/rules
vendored
@@ -5,12 +5,19 @@ export PYBUILD_NAME=ifupdown2
|
||||
export PYBUILD_INSTALL_ARGS=--install-lib=/usr/share/ifupdown2 --install-scripts=/usr/share/ifupdown2
|
||||
|
||||
%:
|
||||
dh $@ --with python2 --buildsystem=pybuild
|
||||
dh $@ --with python2 --with systemd --buildsystem=pybuild
|
||||
|
||||
override_dh_installman:
|
||||
./scripts/genmanpages.sh ./man.rst ./man
|
||||
dh_installman
|
||||
|
||||
override_dh_installinit:
|
||||
override_dh_systemd_start:
|
||||
dh_systemd_start --name=networking --no-start
|
||||
|
||||
override_dh_systemd_enable:
|
||||
dh_systemd_enable --name=networking
|
||||
dh_installinit --name=networking --no-start
|
||||
|
||||
# init.d/networking is installed, but we don't want any symlinks; it's
|
||||
# never used by anything, so avoid the confusion of the symlinks.
|
||||
override_dh_installinit:
|
||||
dh_installinit --name=networking --no-start -uremove networking.init
|
||||
|
144
sbin/start-networking
Executable file
144
sbin/start-networking
Executable file
@@ -0,0 +1,144 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This overrides /etc/init.d/networking
|
||||
# Only has start, stop, reload, because that's all systemd has.
|
||||
# restart is implemented in systemd by stop then start.
|
||||
|
||||
PATH="/sbin:/bin"
|
||||
RUN_DIR="/run/network"
|
||||
IFSTATE="$RUN_DIR/ifstate"
|
||||
|
||||
NAME=networking
|
||||
|
||||
[ -x /sbin/ifup ] || exit 0
|
||||
[ -x /sbin/ifdown ] || exit 0
|
||||
|
||||
CONFIGURE_INTERFACES=yes
|
||||
|
||||
EXTRA_ARGS=
|
||||
|
||||
[ -f /etc/default/networking ] && . /etc/default/networking
|
||||
|
||||
[ "$VERBOSE" = yes ] && EXTRA_ARGS=-v
|
||||
[ "$DEBUG" = yes ] && EXTRA_ARGS="$EXTRA_ARGS -d"
|
||||
[ "$SYSLOG" = yes ] && EXTRA_ARGS="$EXTRA_ARGS --syslog"
|
||||
|
||||
perf_options() {
|
||||
# At bootup lets set perfmode
|
||||
[ -f /var/tmp/network/ifstatenew ] && echo -n "" && return
|
||||
|
||||
echo -n "--perfmode"
|
||||
}
|
||||
|
||||
process_exclusions() {
|
||||
set -- $EXCLUDE_INTERFACES
|
||||
exclusions=""
|
||||
for d
|
||||
do
|
||||
exclusions="-X $d $exclusions"
|
||||
done
|
||||
echo $exclusions
|
||||
}
|
||||
|
||||
check_network_file_systems() {
|
||||
[ -e /proc/mounts ] || return 0
|
||||
|
||||
if [ -e /etc/iscsi/iscsi.initramfs ]; then
|
||||
echo ${NAME}':' "not deconfiguring network interfaces: iSCSI root is mounted."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
while read DEV MTPT FSTYPE REST; do
|
||||
case $DEV in
|
||||
/dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
|
||||
echo ${NAME}':' "not deconfiguring network interfaces: network devices still mounted."
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
case $FSTYPE in
|
||||
nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse.curlftpfs)
|
||||
echo ${NAME}':' "not deconfiguring network interfaces: network file systems still mounted."
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done < /proc/mounts
|
||||
}
|
||||
|
||||
check_network_swap() {
|
||||
[ -e /proc/swaps ] || return 0
|
||||
|
||||
while read DEV MTPT FSTYPE REST; do
|
||||
case $DEV in
|
||||
/dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
|
||||
echo ${NAME}':' "not deconfiguring network interfaces: network swap still mounted."
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done < /proc/swaps
|
||||
}
|
||||
|
||||
ifup_hotplug () {
|
||||
if [ -d /sys/class/net ]
|
||||
then
|
||||
ifaces=$(for iface in $(ifquery --list --allow=hotplug 2>/dev/null)
|
||||
do
|
||||
link=${iface##:*}
|
||||
link=${link##.*}
|
||||
if [ -e "/sys/class/net/$link" ] && [ "$(cat /sys/class/net/$link/operstate)" = up ]
|
||||
then
|
||||
echo "$iface"
|
||||
fi
|
||||
done)
|
||||
if [ -n "$ifaces" ]
|
||||
then
|
||||
ifup $ifaces "$@" || true
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
ifupdown_init() {
|
||||
[ ! -e /run/network ] && mkdir -p /run/network &>/dev/null
|
||||
[ ! -e /etc/network/run ] && \
|
||||
ln -sf /run/network /etc/network/run &>/dev/null
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
ifupdown_init
|
||||
if [ "$CONFIGURE_INTERFACES" = no ]
|
||||
then
|
||||
echo ${NAME}':' "Not configuring network interfaces, see /etc/default/networking"
|
||||
exit 0
|
||||
fi
|
||||
set -f
|
||||
exclusions=$(process_exclusions)
|
||||
perfoptions=$(perf_options)
|
||||
echo ${NAME}':' "Configuring network interfaces"
|
||||
ifup -a $EXTRA_ARGS $exclusions $perfoptions
|
||||
;;
|
||||
|
||||
stop)
|
||||
ifupdown_init
|
||||
check_network_file_systems
|
||||
check_network_swap
|
||||
exclusions=$(process_exclusions)
|
||||
|
||||
echo ${NAME}':' "Deconfiguring network interfaces"
|
||||
ifdown -a $EXTRA_ARGS
|
||||
;;
|
||||
|
||||
reload)
|
||||
|
||||
ifupdown_init
|
||||
echo ${NAME}':' "Reloading network interfaces configuration"
|
||||
|
||||
ifreload -a $EXTRA_ARGS
|
||||
;;
|
||||
|
||||
*)
|
||||
echo ${NAME}':' "Usage: $0 {start|stop|reload}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
Reference in New Issue
Block a user