Compare commits
3 Commits
Author | SHA1 | Date |
---|---|---|
Vlastimil Holer | 0b7dbc8e0c | 7 years ago |
Vlastimil Holer | f48408bbab | 7 years ago |
Vlastimil Holer | 7dc0e7cff4 | 7 years ago |
@ -1,2 +0,0 @@
|
||||
require:
|
||||
members: false
|
@ -1,10 +0,0 @@
|
||||
<!--//////////////////////////////////////////////////////////-->
|
||||
<!-- Please note the pull request can be merged only if all -->
|
||||
<!-- commits are properly signed! Read the instructions here: -->
|
||||
<!-- https://github.com/OpenNebula/one/wiki/Sign-Your-Work -->
|
||||
<!--//////////////////////////////////////////////////////////-->
|
||||
|
||||
Changes proposed in this pull request:
|
||||
- briefly describe change here,
|
||||
- briefly describe change here,
|
||||
- briefly describe change here.
|
@ -1,14 +0,0 @@
|
||||
name: 'ShellCheck'
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
shellcheck:
|
||||
name: Shellcheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run ShellCheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
scandir: './src'
|
@ -0,0 +1,20 @@
|
||||
# Maintainer Harvard University FAS Research Computing <rchelp.fas.harvard.edu>
|
||||
|
||||
pkgname=one-context
|
||||
pkgver=4.14.1
|
||||
pkgrel=1
|
||||
pkgdesc='OpenNebula Contextualisation'
|
||||
arch=('any')
|
||||
url='https://github.com/OpenNebula/addon-context-linux/releases'
|
||||
license=('Apache')
|
||||
depends=('mkinitcpio-growrootfs')
|
||||
source=("")
|
||||
install=one-context.install
|
||||
md5sums=('')
|
||||
|
||||
package() {
|
||||
cd ${srcdir}
|
||||
TARGET=arch OUT=${pkgdir} ./generate.sh
|
||||
cp -rT ${pkgdir}/usr/sbin ${pkgdir}/usr/bin
|
||||
rm -rf ${pkgdir}/usr/sbin
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
post_install(){
|
||||
systemctl enable one-context
|
||||
|
||||
rm -f /etc/systemd/network/*
|
||||
}
|
@ -1,152 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
SERVICES=${SERVICES:-one-context-local one-context-online one-context}
|
||||
TIMERS=${TIMERS:-one-context-reconfigure.timer}
|
||||
|
||||
rm -f /etc/udev/rules.d/70-persistent-cd.rules
|
||||
rm -f /etc/udev/rules.d/70-persistent-net.rules
|
||||
|
||||
# Reload udev rules
|
||||
udevadm control --reload >/dev/null 2>&1 || :
|
||||
|
||||
|
||||
### Enable services ########################################
|
||||
|
||||
if which systemctl >/dev/null 2>&1 && \
|
||||
[ -d /etc/systemd ] && \
|
||||
[ -f /usr/lib/systemd/system/one-context.service ];
|
||||
then
|
||||
systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
|
||||
for S in ${SERVICES} ${TIMERS}; do
|
||||
systemctl enable "${S}" >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
|
||||
if which chkconfig >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
chkconfig --add "${S}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
# EL6: refresh initramfs via dracut for growroot module
|
||||
if [ -f /usr/share/dracut/modules.d/50growroot/install ]; then
|
||||
for I in $(find /boot -name 'initramfs-*.img'); do
|
||||
KERNEL_VERS=$(echo "${I}" | sed -e 's/.*initramfs-\(.*\)\.img/\1/')
|
||||
dracut -f "${I}" "${KERNEL_VERS}" || :
|
||||
done
|
||||
fi
|
||||
|
||||
elif which update-rc.d >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
update-rc.d "${S}" enable >/dev/null 2>&1
|
||||
update-rc.d "${S}" defaults >/dev/null 2>&1
|
||||
done
|
||||
|
||||
elif which rc-update >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
rc-update add "${S}" boot >/dev/null 2>&1
|
||||
done
|
||||
|
||||
# Add crontab action for 1min schedules
|
||||
if ! crontab -l -u root | grep -qF '/etc/periodic/1min'; then
|
||||
(
|
||||
crontab -l -u root
|
||||
echo -e '\n# Added by one-context'
|
||||
echo -e '* * * * * run-parts /etc/periodic/1min'
|
||||
) | crontab -u root -
|
||||
fi
|
||||
|
||||
# When existing file is changed, the new one might be created with
|
||||
# .apk-new suffix. Such files need to be processed by update-conf.
|
||||
if update-conf -al 2>/dev/null | grep -q context; then
|
||||
echo 'WARNING: Run update-conf to process any updated one-context files in /etc!' >&2
|
||||
fi
|
||||
|
||||
elif [ -x /bin/freebsd-version ]; then
|
||||
:
|
||||
|
||||
else
|
||||
echo 'WARNING: Contextualization service not enabled automatically' >&2
|
||||
fi
|
||||
|
||||
|
||||
### Cleanup network configuration ##########################
|
||||
|
||||
if [ -f /etc/sysctl.d/50-one-context.conf ]; then
|
||||
rm -f /etc/sysctl.d/50-one-context.conf
|
||||
fi
|
||||
|
||||
# Debian based distros
|
||||
if [ -d /etc/network ]; then
|
||||
# Prepare network files
|
||||
cp /etc/network/interfaces "/etc/network/interfaces.$(date '+%s')"
|
||||
rm -rf /etc/network/interfaces.d
|
||||
|
||||
cat > /etc/network/interfaces <<EOT
|
||||
# The loopback network interface
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
EOT
|
||||
|
||||
# Do not reconfigure network interfaces on boot
|
||||
# if [ -f /etc/default/networking ]; then
|
||||
# if ! grep -q ^CONFIGURE_INTERFACES /etc/default/networking; then
|
||||
# echo 'CONFIGURE_INTERFACES=no' >> /etc/default/networking
|
||||
# fi
|
||||
# fi
|
||||
fi
|
||||
|
||||
# Red Hat based distros
|
||||
if [ -d /etc/sysconfig/network-scripts/ ]; then
|
||||
# Prepare network files
|
||||
find /etc/sysconfig/network-scripts -type f \
|
||||
\( -name 'ifcfg-*' -o -name 'route-*' -o -name 'route6-*' \) \
|
||||
! -name 'ifcfg-lo' ! -name 'route-lo' ! -name 'route6-lo' \
|
||||
-exec rm -f {} \;
|
||||
fi
|
||||
|
||||
# openSUSE based distros
|
||||
if [ -d /etc/sysconfig/network/ ]; then
|
||||
# Prepare network files
|
||||
find /etc/sysconfig/network -type f \
|
||||
\( -name 'ifcfg-*' -o -name 'ifroute-*' -o -name 'ifsysctl-*' \) \
|
||||
! -name 'ifcfg-lo' ! -name 'ifroute-lo' ! -name 'ifsysctl-lo' \
|
||||
-exec rm -f {} \;
|
||||
|
||||
rm -f /etc/sysconfig/network/routes /etc/sysconfig/network/ifsysctl
|
||||
|
||||
sed -i '/^NETCONFIG_DNS_STATIC_SERVERS=/ s/=.*$/=""/' /etc/sysconfig/network/config
|
||||
sed -i '/^NETCONFIG_DNS_STATIC_SEARCHLIST=/ s/=.*$/=""/' /etc/sysconfig/network/config
|
||||
fi
|
||||
|
||||
# Netplan
|
||||
if [ -d /etc/netplan/ ]; then
|
||||
rm -f /etc/netplan/*
|
||||
fi
|
||||
|
||||
# NetworkManager
|
||||
if [ -d /etc/NetworkManager/system-connections/ ]; then
|
||||
rm -f /etc/NetworkManager/system-connections/*
|
||||
fi
|
||||
|
||||
# systemd-networkd
|
||||
if [ -d /etc/systemd/network/ ]; then
|
||||
rm -f \
|
||||
/etc/systemd/networkd/*.network \
|
||||
/etc/systemd/networkd/*.link
|
||||
fi
|
||||
|
||||
# FreeBSD based distros
|
||||
#TODO: pfsense paths?
|
||||
if [ -x /bin/freebsd-version ]; then
|
||||
rm -f /etc/rc.conf.d/network /etc/rc.conf.d/routing
|
||||
|
||||
if [ -f /etc/rc.conf ]; then
|
||||
sed -i '' \
|
||||
-e '/^ifconfig_/d' \
|
||||
-e '/^route_/d' \
|
||||
-e '/^static_routes/d' \
|
||||
-e '/^defaultrouter/d' \
|
||||
/etc/rc.conf
|
||||
fi
|
||||
fi
|
@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
udevadm control --reload >/dev/null 2>&1 || :
|
||||
|
||||
if which systemctl >/dev/null 2>&1 && [ -d /etc/systemd ]; then
|
||||
systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
fi
|
@ -1,66 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Reload udev rules
|
||||
udevadm control --reload >/dev/null 2>&1 || :
|
||||
|
||||
### Enable services ########################################
|
||||
|
||||
SERVICES=${SERVICES:-one-context-local one-context-online one-context}
|
||||
TIMERS=${TIMERS:-one-context-reconfigure.timer}
|
||||
|
||||
if which systemctl >/dev/null 2>&1 && \
|
||||
[ -d /etc/systemd ] && \
|
||||
[ -f /usr/lib/systemd/system/one-context.service ];
|
||||
then
|
||||
systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
|
||||
for S in ${SERVICES} ${TIMERS}; do
|
||||
systemctl enable "${S}" >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
|
||||
if which chkconfig >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
chkconfig --add "${S}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
# EL6: refresh initramfs via dracut for growroot module
|
||||
if [ -f /usr/share/dracut/modules.d/50growroot/install ]; then
|
||||
for I in $(find /boot -name 'initramfs-*.img'); do
|
||||
KERNEL_VERS=$(echo "${I}" | sed -e 's/.*initramfs-\(.*\)\.img/\1/')
|
||||
dracut -f "${I}" "${KERNEL_VERS}" || :
|
||||
done
|
||||
fi
|
||||
|
||||
elif which update-rc.d >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
update-rc.d "${S}" enable >/dev/null 2>&1
|
||||
update-rc.d "${S}" defaults >/dev/null 2>&1
|
||||
done
|
||||
|
||||
elif which rc-update >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
rc-update add "${S}" boot >/dev/null 2>&1
|
||||
done
|
||||
|
||||
# Add crontab action for 1min schedules
|
||||
if ! crontab -l -u root | grep -qF '/etc/periodic/1min'; then
|
||||
(
|
||||
crontab -l -u root
|
||||
echo -e '\n# Added by one-context'
|
||||
echo -e '* * * * * run-parts /etc/periodic/1min'
|
||||
) | crontab -u root -
|
||||
fi
|
||||
|
||||
# When existing file is changed, the new one might be created with
|
||||
# .apk-new suffix. Such files need to be processed by update-conf.
|
||||
if update-conf -al 2>/dev/null | grep -q context; then
|
||||
echo 'WARNING: Run update-conf to process any updated one-context files in /etc!' >&2
|
||||
fi
|
||||
|
||||
elif [ -x /bin/freebsd-version ]; then
|
||||
:
|
||||
|
||||
else
|
||||
echo 'WARNING: Contextualization service not enabled automatically' >&2
|
||||
fi
|
@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
SERVICES=${SERVICES:-one-context one-context-online one-context-local one-context-reconfigure one-context-reconfigure-delayed}
|
||||
TIMERS=${TIMERS:-one-context-reconfigure.timer}
|
||||
|
||||
# Disable services
|
||||
if which systemctl >/dev/null 2>&1 && [ -d /etc/systemd ]; then
|
||||
for S in ${TIMERS} ${SERVICES}; do
|
||||
systemctl --no-reload disable "${S}" >/dev/null 2>&1 || :
|
||||
systemctl stop "${S}" >/dev/null 2>&1 || :
|
||||
done
|
||||
fi
|
||||
|
||||
if which chkconfig >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
chkconfig --del "${S}" >/dev/null 2>&1 || :
|
||||
done
|
||||
|
||||
elif which update-rc.d >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
update-rc.d -f "${S}" remove >/dev/null 2>&1 || :
|
||||
done
|
||||
|
||||
elif which rc-update >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
rc-update del "${S}" boot >/dev/null 2>&1 || :
|
||||
done
|
||||
fi
|
@ -0,0 +1,146 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2010-2017, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
NETWORK=${NETWORK:-yes}
|
||||
NETWORK_EC2=${NETWORK_EC2:-no}
|
||||
SERVICES=${SERVICES:-one-context-local one-context}
|
||||
|
||||
rm -f /etc/udev/rules.d/70-persistent-cd.rules
|
||||
rm -f /etc/udev/rules.d/70-persistent-net.rules
|
||||
|
||||
# Reload udev rules
|
||||
udevadm control --reload >/dev/null 2>&1 || :
|
||||
|
||||
# Enable services
|
||||
if which systemctl >/dev/null 2>&1 && \
|
||||
[ -d /etc/systemd ] && \
|
||||
[ -f /usr/lib/systemd/system/one-context.service ];
|
||||
then
|
||||
for S in ${SERVICES}; do
|
||||
systemctl enable "${S}.service"
|
||||
done
|
||||
fi
|
||||
|
||||
if which chkconfig >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
chkconfig --add "${S}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
# EL6: refresh initramfs via dracut for growroot module
|
||||
if [ -f /usr/share/dracut/modules.d/50growroot/install ]; then
|
||||
for I in $(find /boot -name 'initramfs-*.img'); do
|
||||
KERNEL_VERS=$(echo "${I}" | sed -e 's/.*initramfs-\(.*\)\.img/\1/')
|
||||
dracut -f "${I}" "${KERNEL_VERS}" || :
|
||||
done
|
||||
fi
|
||||
|
||||
elif which update-rc.d >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
update-rc.d "${S}" enable >/dev/null 2>&1
|
||||
update-rc.d "${S}" defaults >/dev/null 2>&1
|
||||
done
|
||||
|
||||
elif which rc-update >/dev/null 2>&1; then
|
||||
for S in ${SERVICES}; do
|
||||
rc-update add "${S}" boot >/dev/null 2>&1
|
||||
done
|
||||
|
||||
else
|
||||
echo 'WARNING: Contextualization service not enabled automatically' >&2
|
||||
fi
|
||||
|
||||
# Cleanup network configuration
|
||||
if [ "${NETWORK}" != 'yes' ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# Debian based distros
|
||||
if [ -d /etc/network ]; then
|
||||
# Prepare network files
|
||||
cp /etc/network/interfaces /etc/network/interfaces.$(date "+%s")
|
||||
rm -rf /etc/network/interfaces.d
|
||||
|
||||
if [ "${NETWORK_EC2}" = 'yes' ]; then
|
||||
cat > /etc/network/interfaces <<EOT
|
||||
# The loopback network interface
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
auto eth0
|
||||
iface eth0 inet dhcp
|
||||
EOT
|
||||
else
|
||||
cat > /etc/network/interfaces <<EOT
|
||||
# The loopback network interface
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
EOT
|
||||
fi
|
||||
|
||||
# Do not reconfigure network interfaces on boot
|
||||
# if [ -f /etc/default/networking ]; then
|
||||
# if ! grep -q ^CONFIGURE_INTERFACES /etc/default/networking; then
|
||||
# echo 'CONFIGURE_INTERFACES=no' >> /etc/default/networking
|
||||
# fi
|
||||
# fi
|
||||
fi
|
||||
|
||||
# RedHat based distros
|
||||
if [ -d /etc/sysconfig/network-scripts ]; then
|
||||
# Prepare network files
|
||||
find /etc/sysconfig/network-scripts -type f \
|
||||
-name 'ifcfg-*' ! -name 'ifcfg-lo' \
|
||||
-exec rm -f {} \;
|
||||
|
||||
if [ "${NETWORK_EC2}" = 'yes' ]; then
|
||||
cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<EOT
|
||||
DEVICE="eth0"
|
||||
BOOTPROTO="dhcp"
|
||||
ONBOOT="yes"
|
||||
TYPE="Ethernet"
|
||||
USERCTL="yes"
|
||||
PEERDNS="yes"
|
||||
IPV6INIT="no"
|
||||
NM_CONTROLLED="no"
|
||||
PERSISTENT_DHCLIENT="1"
|
||||
EOT
|
||||
fi
|
||||
fi
|
||||
|
||||
# openSUSE based distros
|
||||
if [ -d /etc/sysconfig/network ]; then
|
||||
# Prepare network files
|
||||
find /etc/sysconfig/network -type f \
|
||||
\( -name 'ifcfg-*' -o -name 'ifroute-*' -o -name 'ifsysctl-*' \) \
|
||||
! -name 'ifcfg-lo' ! -name 'ifroute-lo' ! -name 'ifsysctl-lo' \
|
||||
-exec rm -f {} \;
|
||||
|
||||
rm -f /etc/sysconfig/network/routes /etc/sysconfig/network/ifsysctl
|
||||
|
||||
sed -i '/^NETCONFIG_DNS_STATIC_SERVERS=/ s/=.*$/="/' /etc/sysconfig/network/config
|
||||
sed -i '/^NETCONFIG_DNS_STATIC_SEARCHLIST=/ s/=.*$/=""/' /etc/sysconfig/network/config
|
||||
|
||||
if [ "${NETWORK_EC2}" = 'yes' ]; then
|
||||
cat >/etc/sysconfig/network/ifcfg-eth0 <<EOT
|
||||
DEVICE=eth0
|
||||
BOOTPROTO=dhcp4
|
||||
STARTMODE=auto
|
||||
USERCONTROL=yes
|
||||
EOT
|
||||
fi
|
||||
fi
|
@ -1,7 +0,0 @@
|
||||
# This enables sensible default for 'unmanaged-devices' on ubuntu:
|
||||
# https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1638842
|
||||
# https://askubuntu.com/questions/882806/ethernet-device-not-managed
|
||||
#
|
||||
# This file must exist prior start of NetworkManager to take an effect -
|
||||
# a simple reloading of the already running daemon will not work.
|
||||
|
@ -1,3 +0,0 @@
|
||||
[main]
|
||||
no-auto-default=*
|
||||
dns=none
|
@ -1,44 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
# -------------------------------------------------------------------------- #
|
||||
|
||||
# As of Netplan 0.102, the NetworkManager renderer can only enable
|
||||
# IPv6 privacy if ipv6-privacy == true, but doesn't disable it if false.
|
||||
# Instead of enforcing any global defaults, we set IPv6 privacy via sysctl
|
||||
# on Netplan described interfaces in case the current settings is -1 (unknown),
|
||||
# i.e. not explicitly configured. This is a forward compatible workaround, once
|
||||
# Netplan properly sets NM ipv6.ip6-privacy=0, this code won't be effective.
|
||||
|
||||
case "${CONNECTION_ID}" in
|
||||
netplan-*)
|
||||
IP6_PRIVACY=$(nmcli -g ipv6.ip6-privacy con show "${CONNECTION_UUID}")
|
||||
|
||||
# overwrite only unknown state
|
||||
if [ "${IP6_PRIVACY}" = '-1' ]; then
|
||||
sysctl -q -w "net.ipv6.conf.${DEVICE_IFACE}.use_tempaddr=0"
|
||||
|
||||
# delete any existing temporary IPv6 addresses
|
||||
ip -6 address show dev "${DEVICE_IFACE}" | \
|
||||
grep 'inet6.*temporary' | \
|
||||
tr -s ' ' | \
|
||||
cut -d' ' -f 3 | \
|
||||
xargs -r -n1 ip -6 address del dev "${DEVICE_IFACE}"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -1,6 +0,0 @@
|
||||
# Periodically run one-context-reconfigure on VMware
|
||||
SHELL=/bin/sh
|
||||
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
|
||||
MAILTO=''
|
||||
|
||||
* * * * * root if [ "$(virt-what 2>/dev/null)" = 'vmware' ]; then service one-context-reconfigure start >/dev/null 2>&1 || service one-context-reconfigure onestart >/dev/null 2>&1; fi
|
@ -0,0 +1,2 @@
|
||||
# Do not configure serial console
|
||||
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1"
|
@ -1,47 +0,0 @@
|
||||
# On NIC hotplug the delayed reconfiguration is triggered.
|
||||
|
||||
# NOTE: With hot-attached emulated NICs (e1000, ...) the interface
|
||||
# and kernel event may appear later, even after CD-ROM is refreshed.
|
||||
# Such interface doesn't configure, since new change in context
|
||||
# script is not detected anymore. We hack the state files so that the
|
||||
# recontextualization is forced to run.
|
||||
notify 21 {
|
||||
match "system" "ETHERNET";
|
||||
match "type" "IFATTACH";
|
||||
match "subsystem" "!vtnet[0-9]+";
|
||||
action "/bin/sh -c 'test -f /var/run/one-context/context.sh.local && echo >> /var/run/one-context/context.sh.local; test -f /var/run/one-context/context.sh.network && echo >> /var/run/one-context/context.sh.network; service one-context-reconfigure-delayed onestart'";
|
||||
};
|
||||
|
||||
notify 20 {
|
||||
match "system" "ETHERNET";
|
||||
match "type" "IFATTACH";
|
||||
action "service one-context-reconfigure-delayed onestart";
|
||||
};
|
||||
|
||||
notify 20 {
|
||||
match "system" "IFNET";
|
||||
match "type" "DETACH";
|
||||
action "service one-context-reconfigure-delayed onestart";
|
||||
};
|
||||
|
||||
# On CONTEXT CD-ROM change the immediate reconfiguration is triggered.
|
||||
notify 20 {
|
||||
match "system" "DEVFS";
|
||||
match "subsystem" "CDEV";
|
||||
match "type" "CREATE";
|
||||
match "cdev" "iso9660/CONTEXT";
|
||||
action "service one-context-reconfigure onestart";
|
||||
};
|
||||
|
||||
# Handle disk resize
|
||||
# NOTE: Event not generated on FreeBSD 12 and older
|
||||
notify 20 {
|
||||
match "system" "GEOM";
|
||||
match "subsystem" "DEV";
|
||||
match "type" "SIZECHANGE";
|
||||
match "cdev" "!(cd[0-9]+|.*/.*|.*p[0-9]+)"; # skip CD-ROM/context, filesystems and partitions
|
||||
action "service one-context-force onestart";
|
||||
};
|
||||
|
||||
# Handle swap hot-attach
|
||||
# NOTE: swap activation not supported on FreeBSD now
|
@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: one-context-force
|
||||
# Required-Start: one-context-local one-context
|
||||
# Required-Stop:
|
||||
# Should-Start: $time
|
||||
# Should-Stop:
|
||||
# Default-Start:
|
||||
# Default-Stop: 0 1 2 3 4 5 6
|
||||
# Short-Description: OpenNebula forced run
|
||||
### END INIT INFO
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
case "$1" in
|
||||
start|restart)
|
||||
export TIMEOUT=0
|
||||
log_daemon_msg $"Starting OpenNebula forced reconfiguration"
|
||||
/usr/sbin/one-context-run force
|
||||
log_end_msg $?
|
||||
;;
|
||||
*)
|
||||
log_action_msg $"Usage: $0 {start|restart}"
|
||||
exit 2
|
||||
esac
|
||||
|
||||
exit $?
|
@ -1,60 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
set -e
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Umount the directory and remove it
|
||||
cleanup()
|
||||
{
|
||||
[ "$MOUNTED" = "yes" ] && umount -l "${ROOTFS_DIR}"
|
||||
rm -r "${TMP_DIR}"
|
||||
}
|
||||
|
||||
if [ "${RECREATE_RUN^^}" = "YES" ] && [ "$(uname -s)" = 'Linux' ]; then
|
||||
# Detection of real run-time variable data directory in case there
|
||||
# would be images with (unusual) reverse symlink /run -> /var/run
|
||||
if [ -d /run ] && ! [ -L /run ]; then
|
||||
RUN_DIR=/run
|
||||
elif [ -d /var/run ] && ! [ -L /var/run ]; then
|
||||
RUN_DIR=/var/run
|
||||
else
|
||||
# this shouldn't happen
|
||||
echo 'ERROR: No suitable run-time data directory in image!' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
###
|
||||
|
||||
TMP_DIR=$(mktemp -d "/tmp/one-context.XXXXXX")
|
||||
ROOTFS_DIR="${TMP_DIR}/rootfs"
|
||||
trap cleanup EXIT
|
||||
chmod 0700 "${TMP_DIR}"
|
||||
mkdir "${ROOTFS_DIR}"
|
||||
|
||||
mount --bind -o ro,nodev,noexec,nosuid / "${ROOTFS_DIR}"
|
||||
MOUNTED=yes
|
||||
|
||||
# copy, but don't overwrite
|
||||
# NOTE: using -i </dev/null is a workaround for silly cp in busybox without -n support
|
||||
cp -aiv "${ROOTFS_DIR}/${RUN_DIR}" "$(dirname "${RUN_DIR}")" 2>/dev/null </dev/null
|
||||
fi
|
@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "${TIMEZONE}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! timedatectl set-timezone "${TIMEZONE}" 2>/dev/null; then
|
||||
_tz_base='/usr/share/zoneinfo/'
|
||||
_tz_dest=$(readlink -f "${_tz_base}${TIMEZONE}" 2>/dev/null)
|
||||
|
||||
# if timezone file path is resolvable file and
|
||||
# real path is inside the timezone directory
|
||||
if [ -n "${_tz_dest}" ] &&
|
||||
[ -f "${_tz_dest}" ] &&
|
||||
[[ "${_tz_dest}" =~ ^${_tz_base} ]];
|
||||
then
|
||||
ln -sf "${_tz_dest}" /etc/localtime
|
||||
else
|
||||
echo "ERROR: Invalid timezone '${TIMEZONE}'" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
@ -1,165 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# shellcheck disable=SC1091,SC1090
|
||||
|
||||
. /etc/one-context.d/loc-10-network.d/functions
|
||||
|
||||
context_type="$1"
|
||||
action="$2"
|
||||
os_id=$(detect_os)
|
||||
|
||||
if [ -z "${action}" ] ; then
|
||||
action="configure"
|
||||
fi
|
||||
|
||||
if [ -z "${NETCFG_TYPE}" ] ; then
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
NETCFG_TYPE='interfaces'
|
||||
;;
|
||||
altlinux)
|
||||
NETCFG_TYPE='networkd nm'
|
||||
;;
|
||||
debian|devuan|ubuntu)
|
||||
NETCFG_TYPE='interfaces netplan nm networkd'
|
||||
;;
|
||||
fedora|centos|rhel|almalinux|ol|rocky|msvsphere)
|
||||
NETCFG_TYPE='scripts nm networkd'
|
||||
;;
|
||||
opensuse*|sles|sled)
|
||||
NETCFG_TYPE='scripts'
|
||||
;;
|
||||
amzn)
|
||||
NETCFG_TYPE='scripts'
|
||||
;;
|
||||
freebsd)
|
||||
NETCFG_TYPE='bsd'
|
||||
;;
|
||||
*)
|
||||
NETCFG_TYPE='none'
|
||||
;;
|
||||
esac
|
||||
else
|
||||
# trim and lowercase
|
||||
NETCFG_TYPE=$(echo "$NETCFG_TYPE" | \
|
||||
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | \
|
||||
tr '[:upper:]' '[:lower:]')
|
||||
|
||||
# support alternative names for some configuration renderers
|
||||
case "${NETCFG_TYPE}" in
|
||||
networkmanager)
|
||||
NETCFG_TYPE='nm'
|
||||
;;
|
||||
systemd-networkd|systemd-network|systemd)
|
||||
NETCFG_TYPE='networkd'
|
||||
;;
|
||||
redhat)
|
||||
NETCFG_TYPE='scripts'
|
||||
;;
|
||||
debian)
|
||||
NETCFG_TYPE='interfaces'
|
||||
;;
|
||||
freebsd)
|
||||
NETCFG_TYPE='bsd'
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ "${NETCFG_TYPE}" != 'none' ] ; then
|
||||
_found_valid_netcfg='no'
|
||||
|
||||
# from a space separated list of $NETCFG_TYPE candidates check one
|
||||
# by one and select the first suitable one for current environment
|
||||
for _cfgtype in ${NETCFG_TYPE} ; do
|
||||
_cfgtype_file="/etc/one-context.d/loc-10-network.d/netcfg-$(basename "${_cfgtype}")"
|
||||
|
||||
if [ -e "${_cfgtype_file}" ] ; then
|
||||
# reload functions to reset back any overrides from prev. netcfg-X
|
||||
. /etc/one-context.d/loc-10-network.d/functions
|
||||
. "${_cfgtype_file}"
|
||||
else
|
||||
echo "ERROR [!]: Requested network type is not implemented: ${_cfgtype}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if is_network_supported ; then
|
||||
_found_valid_netcfg='yes'
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${_found_valid_netcfg}" = 'no' ] ; then
|
||||
echo "ERROR [!]: None of the requested network types is supported on: ${os_id}" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# any action is meaningless without functioning network type
|
||||
action='none'
|
||||
fi
|
||||
|
||||
# regardless of the required_context_type we need cleanup in the 'local' stage
|
||||
#
|
||||
# TODO: currently we must skip cleanup during reconfigure action (check-out the
|
||||
# initialize_network function) otherwise we would wiped-out running config and
|
||||
# broke the system
|
||||
if [ "${context_type}" = 'local' ] ; then
|
||||
case "$action" in
|
||||
configure|reconfigure)
|
||||
initialize_network
|
||||
;;
|
||||
*)
|
||||
echo "ERROR [!]: Unknown ACTION: ${action}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# this is a contextualization guard
|
||||
# shellcheck disable=SC2154
|
||||
case "${required_context_type}" in
|
||||
''|local|online)
|
||||
if [ "${required_context_type:-local}" != "${context_type}" ] ; then
|
||||
# skip this netcfg at this stage
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "ERROR [!]: Unknown required context type: ${required_context_type}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$action" in
|
||||
none)
|
||||
echo "INFO: Network will not be configured" >&2
|
||||
;;
|
||||
configure)
|
||||
configure_network
|
||||
;;
|
||||
reconfigure)
|
||||
configure_network
|
||||
reload_network
|
||||
;;
|
||||
*)
|
||||
echo "ERROR [!]: Unknown ACTION: ${action}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -0,0 +1,266 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2010-2014, C12G Labs S.L. #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
ACTION=$1
|
||||
|
||||
if [ -z "$ACTION" ]; then
|
||||
ACTION="none"
|
||||
fi
|
||||
|
||||
# Gets IP address from a given MAC
|
||||
mac2ip() {
|
||||
mac=$1
|
||||
|
||||
let ip_a=0x`echo $mac | cut -d: -f 3`
|
||||
let ip_b=0x`echo $mac | cut -d: -f 4`
|
||||
let ip_c=0x`echo $mac | cut -d: -f 5`
|
||||
let ip_d=0x`echo $mac | cut -d: -f 6`
|
||||
|
||||
ip="$ip_a.$ip_b.$ip_c.$ip_d"
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
# Gets the network part of an IP
|
||||
get_network() {
|
||||
network=$(get_iface_var "NETWORK")
|
||||
|
||||
if [ -z "$network" ]; then
|
||||
network="$(echo $IP | cut -d'.' -f1,2,3).0"
|
||||
fi
|
||||
|
||||
echo $network
|
||||
}
|
||||
|
||||
# Gets the network mask
|
||||
get_mask() {
|
||||
mask=$(get_iface_var "MASK")
|
||||
|
||||
if [ -z "$mask" ]; then
|
||||
mask="255.255.255.0"
|
||||
fi
|
||||
|
||||
echo $mask
|
||||
}
|
||||
|
||||
# Gets device MTU
|
||||
get_mtu() {
|
||||
mtu=$(get_iface_var "MTU")
|
||||
|
||||
echo $mtu
|
||||
}
|
||||
|
||||
is_gateway() {
|
||||
if [ -z "$GATEWAY_IFACE_NUM" ]; then
|
||||
true
|
||||
else
|
||||
[ "$IFACE_NUM" = "$GATEWAY_IFACE_NUM" ]
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway
|
||||
get_gateway() {
|
||||
if is_gateway; then
|
||||
get_iface_var "GATEWAY"
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway6
|
||||
get_gateway6() {
|
||||
if is_gateway; then
|
||||
get_iface_var "GATEWAY6"
|
||||
fi
|
||||
}
|
||||
|
||||
get_ip() {
|
||||
ip=$(get_iface_var "IP")
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
get_iface_var() {
|
||||
var_name="${UPCASE_DEV}_$1"
|
||||
var=$(eval "echo \"\${$var_name}\"")
|
||||
|
||||
echo $var
|
||||
}
|
||||
|
||||
gen_iface_conf() {
|
||||
cat <<EOT
|
||||
iface $DEV inet static
|
||||
address $IP
|
||||
network $NETWORK
|
||||
netmask $MASK
|
||||
EOT
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo " mtu $MTU"
|
||||
fi
|
||||
|
||||
if [ -n "$GATEWAY" ]; then
|
||||
echo " gateway $GATEWAY"
|
||||
|
||||
if [ -n "$METRIC" ]; then
|
||||
echo " metric $METRIC"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_iface6_conf() {
|
||||
cat <<EOT
|
||||
iface $DEV inet6 static
|
||||
address $IP6
|
||||
netmask ${IP6_PREFIX_LENGTH:-64}
|
||||
pre-up echo 0 > /proc/sys/net/ipv6/conf/${DEV}/autoconf
|
||||
pre-up echo 0 > /proc/sys/net/ipv6/conf/${DEV}/accept_ra
|
||||
EOT
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo " mtu $MTU"
|
||||
fi
|
||||
|
||||
if [ -n "$GATEWAY6" ]; then
|
||||
echo " gateway $GATEWAY6"
|
||||
|
||||
if [ -n "$METRIC" ]; then
|
||||
echo " metric $METRIC"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$IP6_ULA" ]; then
|
||||
cat <<EOT
|
||||
|
||||
iface $DEV inet6 static
|
||||
address $IP6_ULA
|
||||
netmask 64
|
||||
EOT
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo " mtu $MTU"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
get_interface_mac()
|
||||
{
|
||||
ip link show | awk '/^[0-9]+: [A-Za-z0-9]+:/ { device=$2; gsub(/:/, "",device)} /link\/ether/ { print device " " $2 }'
|
||||
}
|
||||
|
||||
get_context_interfaces()
|
||||
{
|
||||
env | grep -E "^ETH[0-9]+_MAC=" | sed 's/_.*$//' | sort
|
||||
}
|
||||
|
||||
get_dev()
|
||||
{
|
||||
list="$1"
|
||||
mac="$2"
|
||||
|
||||
echo "$list" | grep "$mac" | cut -d' ' -f1 | tail -n1
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
cat <<EOT
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
EOT
|
||||
|
||||
INTERFACE_MAC=$(get_interface_mac)
|
||||
CONTEXT_INTERFACES=$(get_context_interfaces)
|
||||
GATEWAY_IFACE_NUM=$(echo "$GATEWAY_IFACE" | sed 's/^ETH//')
|
||||
|
||||
for interface in $CONTEXT_INTERFACES; do
|
||||
UPCASE_DEV=$interface
|
||||
MAC=$(get_iface_var "MAC")
|
||||
DEV=$(get_dev "$INTERFACE_MAC" "$MAC")
|
||||
IFACE_NUM=$(echo "$UPCASE_DEV" | sed 's/^ETH//')
|
||||
|
||||
IP=$(get_ip)
|
||||
NETWORK=$(get_network)
|
||||
MASK=$(get_mask)
|
||||
MTU=$(get_mtu)
|
||||
GATEWAY=$(get_gateway)
|
||||
METRIC=$(get_iface_var "METRIC")
|
||||
|
||||
IP6=$(get_iface_var "IP6")
|
||||
[[ -z $IP6 ]] && IP6=$(get_iface_var "IPV6")
|
||||
IP6_PREFIX_LENGTH=$(get_iface_var "IP6_PREFIX_LENGTH")
|
||||
IP6_ULA=$(get_iface_var "IP6_ULA")
|
||||
GATEWAY6=$(get_gateway6)
|
||||
CONTEXT_FORCE_IPV4=$(get_iface_var "CONTEXT_FORCE_IPV4")
|
||||
|
||||
[ -z "${IP}${IP6}" ] && continue
|
||||
[ -z "${DEV}" ] && continue
|
||||
|
||||
echo "auto $DEV"
|
||||
|
||||
[[ -n $IP ]] && gen_iface_conf
|
||||
[[ -n $IP6 ]] && gen_iface6_conf
|
||||
done
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_network_configuration > /etc/network/interfaces
|
||||
#echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces
|
||||
}
|
||||
|
||||
deactivate_network()
|
||||
{
|
||||
. /etc/os-release
|
||||
if [ $ID = "ubuntu" ]; then
|
||||
IFACES=`/sbin/ifquery --list -a`
|
||||
|
||||
for i in $IFACES; do
|
||||
if [ $i != 'lo' ]; then
|
||||
/sbin/ifdown $i
|
||||
/sbin/ip addr flush dev $i
|
||||
fi
|
||||
done
|
||||
else
|
||||
service networking stop
|
||||
fi
|
||||
}
|
||||
|
||||
activate_network()
|
||||
{
|
||||
. /etc/os-release
|
||||
if [ $ID = "ubuntu" ]; then
|
||||
IFACES=`/sbin/ifquery --list -a`
|
||||
|
||||
for i in $IFACES; do
|
||||
/sbin/ifup $i
|
||||
done
|
||||
else
|
||||
service networking stop
|
||||
sleep 1
|
||||
service networking start
|
||||
fi
|
||||
}
|
||||
|
||||
[ $ACTION == "reconfigure" ] && deactivate_network
|
||||
configure_network
|
||||
[ $ACTION == "reconfigure" ] && activate_network
|
||||
|
@ -0,0 +1,231 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2010-2016, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# Gets IP address from a given MAC
|
||||
mac2ip() {
|
||||
mac=$1
|
||||
|
||||
let ip_a=0x`echo $mac | cut -d: -f 3`
|
||||
let ip_b=0x`echo $mac | cut -d: -f 4`
|
||||
let ip_c=0x`echo $mac | cut -d: -f 5`
|
||||
let ip_d=0x`echo $mac | cut -d: -f 6`
|
||||
|
||||
ip="$ip_a.$ip_b.$ip_c.$ip_d"
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
mask2cidr() {
|
||||
mask=$1
|
||||
nbits=0
|
||||
IFS=.
|
||||
for dec in $mask ; do
|
||||
case $dec in
|
||||
255) let nbits+=8;;
|
||||
254) let nbits+=7 ; break ;;
|
||||
252) let nbits+=6 ; break ;;
|
||||
248) let nbits+=5 ; break ;;
|
||||
240) let nbits+=4 ; break ;;
|
||||
224) let nbits+=3 ; break ;;
|
||||
192) let nbits+=2 ; break ;;
|
||||
128) let nbits+=1 ; break ;;
|
||||
0);;
|
||||
*) echo "Error: $dec is not recognised"; exit 1
|
||||
esac
|
||||
done
|
||||
echo "$nbits"
|
||||
}
|
||||
|
||||
# Gets the network part of an IP
|
||||
get_network() {
|
||||
network=$(get_iface_var "NETWORK")
|
||||
|
||||
if [ -z "$network" ]; then
|
||||
network="$(echo $IP | cut -d'.' -f1,2,3).0"
|
||||
fi
|
||||
|
||||
echo $network
|
||||
}
|
||||
|
||||
# Gets the network mask
|
||||
get_mask() {
|
||||
mask=$(get_iface_var "MASK")
|
||||
|
||||
if [ -z "$mask" ]; then
|
||||
mask="255.255.255.0"
|
||||
fi
|
||||
|
||||
echo $mask
|
||||
}
|
||||
|
||||
# Gets device MTU
|
||||
get_mtu() {
|
||||
mtu=$(get_iface_var "MTU")
|
||||
|
||||
echo $mtu
|
||||
}
|
||||
|
||||
is_gateway() {
|
||||
if [ -z "$GATEWAY_IFACE_NUM" ]; then
|
||||
true
|
||||
else
|
||||
[ "$IFACE_NUM" = "$GATEWAY_IFACE_NUM" ]
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway
|
||||
get_gateway() {
|
||||
if is_gateway; then
|
||||
gateway=$(get_iface_var "GATEWAY")
|
||||
|
||||
if [ -z "$gateway" ]; then
|
||||
if [ "$DEV" = "eth0" ]; then
|
||||
net_prefix=$(echo $NETWORK | cut -d'.' -f1,2,3)
|
||||
gateway="${net_prefix}.1"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo $gateway
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway6
|
||||
get_gateway6() {
|
||||
if is_gateway; then
|
||||
get_iface_var "GATEWAY6"
|
||||
fi
|
||||
}
|
||||
|
||||
get_ip() {
|
||||
ip=$(get_iface_var "IP")
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
get_iface_var() {
|
||||
var_name="${UPCASE_DEV}_$1"
|
||||
var=$(eval "echo \"\${$var_name}\"")
|
||||
|
||||
echo $var
|
||||
}
|
||||
|
||||
gen_iface_conf() {
|
||||
cat <<EOT
|
||||
[Network]
|
||||
Address=$IP/$CIDR
|
||||
EOT
|
||||
|
||||
if [ -n "$GATEWAY" ]; then
|
||||
echo "Gateway=$GATEWAY"
|
||||
fi
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
cat <<EOT
|
||||
|
||||
[Link]
|
||||
MTUBytes=$MTU"
|
||||
EOT
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_iface6_conf() {
|
||||
cat <<EOT
|
||||
[Network]
|
||||
Address=$IPV6/64
|
||||
EOT
|
||||
|
||||
if [ -n "$GATEWAY6" ]; then
|
||||
echo "Gateway=$GATEWAY6"
|
||||
fi
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
cat <<EOT
|
||||
|
||||
[Link]
|
||||
MTUBytes=$MTU
|
||||
EOT
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
get_interface_mac()
|
||||
{
|
||||
ip link show | awk '/^[0-9]+: [[:alnum:]]+:/ { device=$2; gsub(/:/, "",device)} /link\/ether/ { print device " " $2 }'
|
||||
}
|
||||
|
||||
get_context_interfaces()
|
||||
{
|
||||
env | grep -E "^ETH[0-9]+_MAC=" | sed 's/_.*$//' | sort
|
||||
}
|
||||
|
||||
get_dev()
|
||||
{
|
||||
list="$1"
|
||||
mac="$2"
|
||||
|
||||
echo "$list" | grep "$mac" | cut -d' ' -f1 | tail -n1
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
INTERFACE_MAC=$(get_interface_mac)
|
||||
CONTEXT_INTERFACES=$(get_context_interfaces)
|
||||
GATEWAY_IFACE_NUM=$(echo "$GATEWAY_IFACE" | sed 's/^ETH//')
|
||||
|
||||
for interface in $CONTEXT_INTERFACES; do
|
||||
UPCASE_DEV=$interface
|
||||
MAC=$(get_iface_var "MAC")
|
||||
DEV=$(get_dev "$INTERFACE_MAC" "$MAC")
|
||||
IFACE_NUM=$(echo "$UPCASE_DEV" | sed 's/^ETH//')
|
||||
|
||||
IP=$(get_ip)
|
||||
NETWORK=$(get_network)
|
||||
MASK=$(get_mask)
|
||||
CIDR=$(mask2cidr "$MASK")
|
||||
MTU=$(get_mtu)
|
||||
GATEWAY=$(get_gateway)
|
||||
|
||||
IPV6=$(get_iface_var "IPV6")
|
||||
[[ -z $IPV6 ]] && IPV6=$(get_iface_var "IP6")
|
||||
GATEWAY6=$(get_gateway6)
|
||||
CONTEXT_FORCE_IPV4=$(get_iface_var "CONTEXT_FORCE_IPV4")
|
||||
|
||||
[ -z "${IP}${IPV6}" ] && continue
|
||||
[ -z "${DEV}" ] && continue
|
||||
|
||||
(
|
||||
cat <<EOT
|
||||
[Match]
|
||||
Name=$DEV
|
||||
|
||||
EOT
|
||||
[[ -z $IPV6 || -n $CONTEXT_FORCE_IPV4 ]] && gen_iface_conf
|
||||
[[ -n $IPV6 ]] && gen_iface6_conf
|
||||
|
||||
) > /etc/systemd/network/${DEV}.network
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
[ -z "$(env | cut -d= -f1 | grep -E '^ETH[0-9]+_IPV*6*')" ] && exit 0
|
||||
|
||||
gen_network_configuration
|
||||
|
@ -0,0 +1,281 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2010-2016, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
COMMAND=${1}
|
||||
|
||||
# Gets IP address from a given MAC
|
||||
mac2ip() {
|
||||
mac=$1
|
||||
|
||||
let ip_a=0x`echo $mac | cut -d: -f 3`
|
||||
let ip_b=0x`echo $mac | cut -d: -f 4`
|
||||
let ip_c=0x`echo $mac | cut -d: -f 5`
|
||||
let ip_d=0x`echo $mac | cut -d: -f 6`
|
||||
|
||||
ip="$ip_a.$ip_b.$ip_c.$ip_d"
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
# Gets the network part of an IP
|
||||
get_network() {
|
||||
network=$(get_iface_var "NETWORK")
|
||||
|
||||
if [ -z "$network" ]; then
|
||||
network="$(echo $IP | cut -d'.' -f1,2,3).0"
|
||||
fi
|
||||
|
||||
echo $network
|
||||
}
|
||||
|
||||
# Gets the network mask
|
||||
get_mask() {
|
||||
mask=$(get_iface_var "MASK")
|
||||
|
||||
if [ -z "$mask" ]; then
|
||||
mask="255.255.255.0"
|
||||
fi
|
||||
|
||||
echo $mask
|
||||
}
|
||||
|
||||
# Gets device MTU
|
||||
get_mtu() {
|
||||
mtu=$(get_iface_var "MTU")
|
||||
|
||||
echo $mtu
|
||||
}
|
||||
|
||||
is_gateway() {
|
||||
if [ -z "$GATEWAY_IFACE_NUM" ]; then
|
||||
true
|
||||
else
|
||||
[ "$IFACE_NUM" = "$GATEWAY_IFACE_NUM" ]
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway
|
||||
get_gateway() {
|
||||
if is_gateway; then
|
||||
gateway=$(get_iface_var "GATEWAY")
|
||||
|
||||
echo $gateway
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway6
|
||||
get_gateway6() {
|
||||
if is_gateway; then
|
||||
get_iface_var "GATEWAY6"
|
||||
fi
|
||||
}
|
||||
|
||||
get_ip() {
|
||||
ip=$(get_iface_var "IP")
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
get_iface_var() {
|
||||
var_name="${UPCASE_DEV}_$1"
|
||||
var=$(eval "echo \"\${$var_name}\"")
|
||||
|
||||
echo $var
|
||||
}
|
||||
|
||||
export DNS_VARIABLES="DNS $(env | sed 's/=.*$//' | grep -E '^ETH[0-9]+_DNS$' | sort)"
|
||||
|
||||
export SEARCH_VARIABLES="SEARCH_DOMAIN $(env | sed 's/=.*$//' | grep -E '^ETH[0-9]+_SEARCH_DOMAIN$' | sort)"
|
||||
|
||||
nameservers=$(
|
||||
dns=()
|
||||
for var in ${DNS_VARIABLES}; do
|
||||
value=$(eval "echo \"\${$var}\"")
|
||||
if [ -n "$value" ]; then
|
||||
dns+=("$value")
|
||||
fi
|
||||
done
|
||||
echo $(printf " %s" "${dns[@]}")
|
||||
)
|
||||
|
||||
searchdomains=$(
|
||||
search=()
|
||||
for var in ${SEARCH_VARIABLES}; do
|
||||
value=$(eval "echo \"\${$var}\"")
|
||||
if [ -n "$value" ]; then
|
||||
search+=("$value")
|
||||
fi
|
||||
done
|
||||
echo $(printf " %s" "${search[@]}")
|
||||
)
|
||||
|
||||
gen_iface_conf() {
|
||||
cat <<EOT
|
||||
iface $DEV inet static
|
||||
address $IP
|
||||
network $NETWORK
|
||||
netmask $MASK
|
||||
EOT
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo " mtu $MTU"
|
||||
fi
|
||||
|
||||
if [ -n "$GATEWAY" ]; then
|
||||
echo " gateway $GATEWAY"
|
||||
fi
|
||||
#only for first interface
|
||||
if [ "eth0" == $DEV ]; then
|
||||
if [ -n "$nameservers" ]; then
|
||||
echo " dns-nameservers $nameservers"
|
||||
fi
|
||||
|
||||
if [ -n "$searchdomains" ]; then
|
||||
echo " dns-search $searchdomains"
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_iface6_conf() {
|
||||
cat <<EOT
|
||||
iface $DEV inet6 static
|
||||
address $IP6
|
||||
netmask ${IP6_PREFIX_LENGTH:-64}
|
||||
autoconf 0
|
||||
accept_ra 0
|
||||
EOT
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo " mtu $MTU"
|
||||
fi
|
||||
|
||||
if [ -n "$GATEWAY6" ]; then
|
||||
echo " gateway $GATEWAY6"
|
||||
fi
|
||||
|
||||
if [ -n "$IP6_ULA" ]; then
|
||||
cat <<EOT
|
||||
|
||||
iface $DEV inet6 static
|
||||
address $IP6_ULA
|
||||
netmask 64
|
||||
autoconf 0
|
||||
accept_ra 0
|
||||
EOT
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo " mtu $MTU"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
get_interface_mac()
|
||||
{
|
||||
ip link show | awk '/^[0-9]+: [A-Za-z0-9]+:/ { device=$2; gsub(/:/, "",device)} /link\/ether/ { print device " " $2 }'
|
||||
}
|
||||
|
||||
get_context_interfaces()
|
||||
{
|
||||
env | grep -E "^ETH[0-9]+_MAC=" | sed 's/_.*$//' | sort
|
||||
}
|
||||
|
||||
get_dev()
|
||||
{
|
||||
list="$1"
|
||||
mac="$2"
|
||||
|
||||
echo "$list" | grep "$mac" | cut -d' ' -f1 | tail -n1
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
cat <<EOT
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
EOT
|
||||
|
||||
INTERFACE_MAC=$(get_interface_mac)
|
||||
CONTEXT_INTERFACES=$(get_context_interfaces)
|
||||
GATEWAY_IFACE_NUM=$(echo "$GATEWAY_IFACE" | sed 's/^ETH//')
|
||||
|
||||
for interface in $CONTEXT_INTERFACES; do
|
||||
UPCASE_DEV=$interface
|
||||
MAC=$(get_iface_var "MAC")
|
||||
DEV=$(get_dev "$INTERFACE_MAC" "$MAC")
|
||||
IFACE_NUM=$(echo "$UPCASE_DEV" | sed 's/^ETH//')
|
||||
|
||||
IP=$(get_ip)
|
||||
NETWORK=$(get_network)
|
||||
MASK=$(get_mask)
|
||||
MTU=$(get_mtu)
|
||||
GATEWAY=$(get_gateway)
|
||||
|
||||
IP6=$(get_iface_var "IP6")
|
||||
[[ -z $IP6 ]] && IP6=$(get_iface_var "IPV6")
|
||||
IP6_PREFIX_LENGTH=$(get_iface_var "IP6_PREFIX_LENGTH")
|
||||
IP6_ULA=$(get_iface_var "IP6_ULA")
|
||||
GATEWAY6=$(get_gateway6)
|
||||
|
||||
[ -z "${IP}${IP6}" ] && continue
|
||||
[ -z "${DEV}" ] && continue
|
||||
|
||||
echo "auto $DEV"
|
||||
|
||||
[[ -n $IP ]] && gen_iface_conf
|
||||
[[ -n $IP6 ]] && gen_iface6_conf
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_network_configuration > /etc/network/interfaces
|
||||
echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces
|
||||
}
|
||||
|
||||
deactivate_network()
|
||||
{
|
||||
IFACES=`/sbin/ifquery --list -a`
|
||||
|
||||
for i in $IFACES; do
|
||||
if [ $i != 'lo' ]; then
|
||||
/sbin/ifdown $i
|
||||
/sbin/ip addr flush dev $i
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
activate_network()
|
||||
{
|
||||
IFACES=`/sbin/ifquery --list -a`
|
||||
|
||||
for i in $IFACES; do
|
||||
/sbin/ifup $i
|
||||
done
|
||||
}
|
||||
|
||||
[ -z "$(env | cut -d= -f1 | grep -E '^ETH[0-9]+_IPV*6*')" ] && exit 0
|
||||
|
||||
deactivate_network
|
||||
configure_network
|
||||
activate_network
|
@ -0,0 +1,248 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2010-2016, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
COMMAND=${1}
|
||||
|
||||
# Gets IP address from a given MAC
|
||||
mac2ip() {
|
||||
mac=$1
|
||||
|
||||
let ip_a=0x`echo $mac | cut -d: -f 3`
|
||||
let ip_b=0x`echo $mac | cut -d: -f 4`
|
||||
let ip_c=0x`echo $mac | cut -d: -f 5`
|
||||
let ip_d=0x`echo $mac | cut -d: -f 6`
|
||||
|
||||
ip="$ip_a.$ip_b.$ip_c.$ip_d"
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
# Gets the network part of an IP
|
||||
get_network() {
|
||||
network=$(get_iface_var "NETWORK")
|
||||
|
||||
if [ -z "$network" ]; then
|
||||
network="$(echo $IP | cut -d'.' -f1,2,3).0"
|
||||
fi
|
||||
|
||||
echo $network
|
||||
}
|
||||
|
||||
# Gets the network mask
|
||||
get_mask() {
|
||||
mask=$(get_iface_var "MASK")
|
||||
|
||||
if [ -z "$mask" ]; then
|
||||
mask="255.255.255.0"
|
||||
fi
|
||||
|
||||
echo $mask
|
||||
}
|
||||
|
||||
# Gets device MTU
|
||||
get_mtu() {
|
||||
mtu=$(get_iface_var "MTU")
|
||||
|
||||
echo $mtu
|
||||
}
|
||||
|
||||
is_gateway() {
|
||||
if [ -z "$GATEWAY_IFACE_NUM" ]; then
|
||||
true
|
||||
else
|
||||
[ "$IFACE_NUM" = "$GATEWAY_IFACE_NUM" ]
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway
|
||||
get_gateway() {
|
||||
if is_gateway; then
|
||||
gateway=$(get_iface_var "GATEWAY")
|
||||
|
||||
echo $gateway
|
||||
fi
|
||||
}
|
||||
|
||||
# Gets the network gateway6
|
||||
get_gateway6() {
|
||||
if is_gateway; then
|
||||
get_iface_var "GATEWAY6"
|
||||
fi
|
||||
}
|
||||
|
||||
get_ip() {
|
||||
ip=$(get_iface_var "IP")
|
||||
|
||||
echo $ip
|
||||
}
|
||||
|
||||
get_iface_var() {
|
||||
var_name="${UPCASE_DEV}_$1"
|
||||
var=$(eval "echo \"\${$var_name}\"")
|
||||
|
||||
echo $var
|
||||
}
|
||||
|
||||
gen_iface_conf() {
|
||||
cat <<EOT
|
||||
NETMASK=$MASK
|
||||
IPADDR=$IP
|
||||
EOT
|
||||
|
||||
if [ -n "$GATEWAY" ]; then
|
||||
if [ "$CONFIG_PATH" = "/etc/sysconfig/network" ]; then
|
||||
echo "default $GATEWAY - $DEV" >> /etc/sysconfig/network/ifroute-$DEV
|
||||
else
|
||||
echo "GATEWAY=$GATEWAY"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo "MTU=$MTU"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_iface6_conf() {
|
||||
if [ "$CONFIG_PATH" = "/etc/sysconfig/network" ]; then
|
||||
echo "IPADDR_0=$IP6/${IP6_PREFIX_LENGTH:-64}"
|
||||
|
||||
cat <<EOT >> /etc/sysconfig/network/ifsysctl-$DEV
|
||||
net.ipv6.conf.\$SYSCTL_IF.autoconf = 0
|
||||
net.ipv6.conf.\$SYSCTL_IF.accept_ra = 0
|
||||
EOT
|
||||
else
|
||||
cat <<EOT
|
||||
IPV6INIT=yes
|
||||
IPV6ADDR=$IP6/${IP6_PREFIX_LENGTH:-64}
|
||||
IPV6_AUTOCONF=no
|
||||
EOT
|
||||
fi
|
||||
|
||||
if [ -n "$IP6_ULA" ]; then
|
||||
if [ "$CONFIG_PATH" = "/etc/sysconfig/network" ]; then
|
||||
echo "IPADDR_1=$IP6_ULA/64"
|
||||
else
|
||||
echo "IPV6ADDR_SECONDARIES=$IP6_ULA/64"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$GATEWAY6" ]; then
|
||||
if [ "$CONFIG_PATH" = "/etc/sysconfig/network" ]; then
|
||||
echo "default $GATEWAY6 - $DEV" >> /etc/sysconfig/network/ifroute-$DEV
|
||||
else
|
||||
echo "IPV6_DEFAULTGW=$GATEWAY6"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$MTU" ]; then
|
||||
echo "IPV6_MTU=$MTU"
|
||||
fi
|
||||
}
|
||||
|
||||
get_interface_mac()
|
||||
{
|
||||
ip link show | awk '/^[0-9]+: [[:alnum:]]+:/ { device=$2; gsub(/:/, "",device)} /link\/ether/ { print device " " $2 }'
|
||||
}
|
||||
|
||||
get_context_interfaces()
|
||||
{
|
||||
env | grep -E "^ETH[0-9]+_MAC=" | sed 's/_.*$//' | sort
|
||||
}
|
||||
|
||||
get_dev()
|
||||
{
|
||||
list="$1"
|
||||
mac="$2"
|
||||
|
||||
echo "$list" | grep "$mac" | cut -d' ' -f1 | tail -n1
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
if [ -d /etc/sysconfig/network-scripts ]; then
|
||||
CONFIG_PATH=/etc/sysconfig/network-scripts
|
||||
elif [ -d /etc/sysconfig/network ]; then
|
||||
CONFIG_PATH=/etc/sysconfig/network
|
||||
fi
|
||||
|
||||
INTERFACE_MAC=$(get_interface_mac)
|
||||
CONTEXT_INTERFACES=$(get_context_interfaces)
|
||||
GATEWAY_IFACE_NUM=$(echo "$GATEWAY_IFACE" | sed 's/^ETH//')
|
||||
|
||||
for interface in $CONTEXT_INTERFACES; do
|
||||
UPCASE_DEV=$interface
|
||||
MAC=$(get_iface_var "MAC")
|
||||
DEV=$(get_dev "$INTERFACE_MAC" "$MAC")
|
||||
IFACE_NUM=$(echo "$UPCASE_DEV" | sed 's/^ETH//')
|
||||
|
||||
IP=$(get_ip)
|
||||
NETWORK=$(get_network)
|
||||
MASK=$(get_mask)
|
||||
MTU=$(get_mtu)
|
||||
GATEWAY=$(get_gateway)
|
||||
|
||||
IP6=$(get_iface_var "IP6")
|
||||
[[ -z $IP6 ]] && IP6=$(get_iface_var "IPV6")
|
||||
IP6_PREFIX_LENGTH=$(get_iface_var "IP6_PREFIX_LENGTH")
|
||||
IP6_ULA=$(get_iface_var "IP6_ULA")
|
||||
GATEWAY6=$(get_gateway6)
|
||||
|
||||
[ -z "${IP}${IP6}" ] && continue
|
||||
[ -z "${DEV}" ] && continue
|
||||
|
||||
(
|
||||
rm -f /etc/sysconfig/network/ifroute-$DEV
|
||||
rm -f /etc/sysconfig/network/ifsysctl-$DEV
|
||||
|
||||
cat <<EOT
|
||||
DEVICE=$DEV
|
||||
BOOTPROTO=static
|
||||
NM_CONTROLLED=no
|
||||
TYPE=Ethernet
|
||||
EOT
|
||||
if [ "$CONFIG_PATH" = "/etc/sysconfig/network" ]; then
|
||||
echo "STARTMODE=auto"
|
||||
else
|
||||
echo "ONBOOT=yes"
|
||||
fi
|
||||
|
||||
[[ -n $IP ]] && gen_iface_conf
|
||||
[[ -n $IP6 ]] && gen_iface6_conf
|
||||
|
||||
) > ${CONFIG_PATH}/ifcfg-${DEV}
|
||||
|
||||
ifup ${DEV}
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_network_configuration
|
||||
|
||||
if [ "${COMMAND}" = 'reconfigure' ]; then
|
||||
service network restart
|
||||
fi
|
||||
|
||||
sleep 2
|
||||
}
|
||||
|
||||
[ -z "$(env | cut -d= -f1 | grep -E '^ETH[0-9]+_IPV*6*')" ] && exit 0
|
||||
|
||||
configure_network
|
||||
|
@ -1,573 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# shellcheck disable=SC2155
|
||||
|
||||
#
|
||||
# network module interface
|
||||
#
|
||||
|
||||
export required_context_type='local' # this is the default, the next option is 'online'
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
false
|
||||
}
|
||||
|
||||
initialize_network()
|
||||
{
|
||||
# shellcheck disable=SC2154
|
||||
case "${os_id}" in
|
||||
freebsd)
|
||||
:
|
||||
;;
|
||||
*)
|
||||
mkdir -p /etc/sysctl.d/
|
||||
rm -f /etc/sysctl.d/50-one-context.conf
|
||||
sysctl --system 2>/dev/null || sysctl -p
|
||||
;;
|
||||
esac
|
||||
|
||||
#
|
||||
# remove all stale configs from any of the previous runs
|
||||
#
|
||||
|
||||
# TODO: improve this and support proper network unconfigure and cleanup
|
||||
# on action=reconfigure too - this becomes problematic when NETCFG_TYPE is
|
||||
# changed while VM is running (deleting configs will break ifdown etc.)
|
||||
#
|
||||
# shellcheck disable=SC2154
|
||||
[ "${action}" = 'configure' ] || return 0
|
||||
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
_iface_mac=$(get_interface_mac)
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
_mac=$(get_iface_var "${_iface}" "MAC")
|
||||
_dev=$(get_dev "${_iface_mac}" "${_mac}")
|
||||
|
||||
# network-scripts
|
||||
rm -f \
|
||||
"/etc/sysconfig/network-scripts/route-${dev}" \
|
||||
"/etc/sysconfig/network-scripts/route6-${dev}" \
|
||||
"/etc/sysconfig/network-scripts/ifcfg-${dev}" \
|
||||
"/etc/sysconfig/network/ifroute-${dev}" \
|
||||
"/etc/sysconfig/network/ifsysctl-${dev}" \
|
||||
"/etc/sysconfig/network/ifcfg-${dev}" \
|
||||
;
|
||||
|
||||
# networkd
|
||||
rm -f \
|
||||
"/etc/systemd/network/${dev}.network" \
|
||||
"/etc/systemd/network/${dev}.link"
|
||||
|
||||
# nm (on RH systems it was deleted with ifcfg-*)
|
||||
for _nm_con in /etc/NetworkManager/system-connections/* ; do
|
||||
if [ -e "${_nm_con}" ] && grep -q "^interface-name=${_dev}$" "${_nm_con}" ; then
|
||||
rm -f "${_nm_con}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# To avoid clashes when running legacy network-scripts and
|
||||
# NetworkManager/networkd, we disable old-style networking
|
||||
# on Red Hats and enable later back only if needed.
|
||||
if [ -d /etc/sysconfig/network-scripts/ ]; then
|
||||
touch /etc/sysconfig/network
|
||||
sed -i -e '/^NETWORKING=/d' /etc/sysconfig/network
|
||||
echo 'NETWORKING=no' >>/etc/sysconfig/network
|
||||
fi
|
||||
|
||||
# interfaces
|
||||
if [ -e /etc/network/interfaces ] ; then
|
||||
cat <<EOT >/etc/network/interfaces
|
||||
# Generated by one-context
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
EOT
|
||||
|
||||
case "${os_id}" in
|
||||
debian|ubuntu|devuan)
|
||||
echo "source /etc/network/interfaces.d/*.cfg" >> /etc/network/interfaces
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# netplan
|
||||
rm -f /etc/netplan/50-one-context.yaml
|
||||
|
||||
nm_disable
|
||||
}
|
||||
|
||||
nm_disable() {
|
||||
if [ -d /etc/NetworkManager/conf.d/ ] &&
|
||||
! [ -e /etc/NetworkManager/conf.d/50-unmanaged-devices.conf ];
|
||||
then
|
||||
cat - <<EOF >/etc/NetworkManager/conf.d/50-unmanaged-devices.conf
|
||||
# Generated by one-context
|
||||
|
||||
# NOTE: NetworkManager was dynamically disabled by OpenNebula
|
||||
# contextualization scripts because interfaces are managed by
|
||||
# different network service!
|
||||
|
||||
[keyfile]
|
||||
unmanaged-devices=*
|
||||
EOF
|
||||
|
||||
if command -v systemctl >/dev/null; then
|
||||
systemctl --no-block try-reload-or-restart NetworkManager.service 2>/dev/null
|
||||
else
|
||||
service NetworkManager reload 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
nm_enable() {
|
||||
if [ -e /etc/NetworkManager/conf.d/50-unmanaged-devices.conf ]; then
|
||||
rm -f /etc/NetworkManager/conf.d/50-unmanaged-devices.conf
|
||||
|
||||
if command -v systemctl >/dev/null; then
|
||||
systemctl --no-block try-reload-or-restart NetworkManager.service 2>/dev/null
|
||||
else
|
||||
service NetworkManager reload 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
echo "ERROR [!]: No 'configure_network' implementation for the network type: ${NETCFG_TYPE}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
echo "ERROR [!]: No 'stop_network' implementation for the network type: ${NETCFG_TYPE}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
echo "ERROR [!]: No 'start_network' implementation for the network type: ${NETCFG_TYPE}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
echo "ERROR [!]: No 'reload_network' implementation for the network type: ${NETCFG_TYPE}" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
#
|
||||
# generic shared functions
|
||||
#
|
||||
|
||||
# arg: <true|yes|false|no>
|
||||
is_true()
|
||||
(
|
||||
_value=$(echo "$1" | \
|
||||
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | \
|
||||
tr '[:upper:]' '[:lower:]')
|
||||
case "$_value" in
|
||||
1|true|yes|y)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
)
|
||||
|
||||
# return OS ID
|
||||
detect_os()
|
||||
(
|
||||
if [ -f /etc/os-release ] ; then
|
||||
ID=
|
||||
# shellcheck disable=SC1091
|
||||
. /etc/os-release
|
||||
echo "$ID" | tr '[:upper:]' '[:lower:]'
|
||||
|
||||
# check for legacy RHEL/CentOS 6
|
||||
elif [ -f /etc/centos-release ]; then
|
||||
echo 'centos'
|
||||
elif [ -f /etc/redhat-release ]; then
|
||||
echo 'rhel'
|
||||
|
||||
# fallback to uname (returns Linux, FreeBSD, ...)
|
||||
else
|
||||
uname | tr '[:upper:]' '[:lower:]'
|
||||
fi
|
||||
)
|
||||
|
||||
# arg: <iface>
|
||||
disable_ipv6()
|
||||
(
|
||||
# shellcheck disable=SC2154
|
||||
case "${os_id}" in
|
||||
freebsd)
|
||||
# TODO: these are the relevant options in /etc/rc.conf:
|
||||
# ip6addrctl_enable="NO"
|
||||
# ip6addrctl_policy="ipv4_prefer"
|
||||
# ipv6_activate_all_interfaces="NO"
|
||||
# ipv6_network_interfaces="none"
|
||||
echo "ERROR [!]: Disabling of IPv6 on '${os_id}' is not supported" >&2
|
||||
;;
|
||||
*)
|
||||
# VH-TODO: do we suport runtime enable?
|
||||
for S in \
|
||||
"net.ipv6.conf.${1}.disable_ipv6=1" \
|
||||
"net.ipv6.conf.${1}.autoconf=0" \
|
||||
"net.ipv6.conf.${1}.accept_ra=0";
|
||||
do
|
||||
# don't duplicate entries on recontextualization
|
||||
if ! grep -Fxq "${S}" /etc/sysctl.d/50-one-context.conf 2>/dev/null; then
|
||||
echo "${S}" >> /etc/sysctl.d/50-one-context.conf
|
||||
fi
|
||||
|
||||
sysctl -w "${S}" >/dev/null
|
||||
done
|
||||
;;
|
||||
esac
|
||||
)
|
||||
|
||||
# arg: <iface>
|
||||
disable_ipv6_privacy()
|
||||
(
|
||||
case "${os_id}" in
|
||||
freebsd)
|
||||
echo "ERROR [!]: Disabling of IPv6 privacy on '${os_id}' is not supported" >&2
|
||||
;;
|
||||
*)
|
||||
# shellcheck disable=SC2066
|
||||
for S in \
|
||||
"net.ipv6.conf.${1}.use_tempaddr=0";
|
||||
do
|
||||
# don't duplicate entries on recontextualization
|
||||
if ! grep -Fxq "${S}" /etc/sysctl.d/50-one-context.conf 2>/dev/null; then
|
||||
echo "${S}" >> /etc/sysctl.d/50-one-context.conf
|
||||
fi
|
||||
|
||||
sysctl -w "${S}" >/dev/null
|
||||
done
|
||||
;;
|
||||
esac
|
||||
)
|
||||
|
||||
skip_interface()
|
||||
{
|
||||
[ -z "${dev}" ] && return 0
|
||||
|
||||
_skip4=
|
||||
case "${method}" in
|
||||
''|static)
|
||||
if [ -z "${ip}" ] ; then
|
||||
_skip4=yes
|
||||
else
|
||||
_skip4=no
|
||||
fi
|
||||
;;
|
||||
skip)
|
||||
_skip4=yes
|
||||
;;
|
||||
dhcp)
|
||||
_skip4=no
|
||||
;;
|
||||
*)
|
||||
echo "ERROR [!]: Unknown IPv4 method: ${method}, skipping" >&2
|
||||
_skip4=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
_skip6=
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
if [ -z "${ip6}" ] ; then
|
||||
_skip6=yes
|
||||
else
|
||||
_skip6=no
|
||||
fi
|
||||
;;
|
||||
skip)
|
||||
_skip6=yes
|
||||
;;
|
||||
disable)
|
||||
disable_ipv6 "${dev}"
|
||||
_skip6=yes
|
||||
;;
|
||||
auto|dhcp)
|
||||
_skip6=no
|
||||
;;
|
||||
*)
|
||||
echo "ERROR [!]: Unknown IPv6 method: ${ip6_method}" >&2
|
||||
_skip6=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
if is_true "${_skip4}" && is_true "${_skip6}" ; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# args: <iface> <name>
|
||||
get_iface_var()
|
||||
(
|
||||
_iface=$(echo "$1" | tr '[:lower:]' '[:upper:]')
|
||||
_var_name="${_iface}_${2}"
|
||||
eval "echo \"\${${_var_name}}\""
|
||||
)
|
||||
|
||||
# Gets IP address from a given MAC
|
||||
mac2ip()
|
||||
(
|
||||
_mac="$1"
|
||||
|
||||
_ip_a=$(echo "$_mac" | cut -d: -f 3)
|
||||
_ip_b=$(echo "$_mac" | cut -d: -f 4)
|
||||
_ip_c=$(echo "$_mac" | cut -d: -f 5)
|
||||
_ip_d=$(echo "$_mac" | cut -d: -f 6)
|
||||
|
||||
echo "0x${_ip_a}.0x${_ip_b}.0x${_ip_c}.0x${_ip_d}"
|
||||
)
|
||||
|
||||
mask2cidr()
|
||||
(
|
||||
_mask="$1"
|
||||
_nbits=0
|
||||
IFS=.
|
||||
for _dec in $_mask ; do
|
||||
case "$_dec" in
|
||||
255) _nbits=$((_nbits + 8)) ;;
|
||||
254) _nbits=$((_nbits + 7)) ; break ;;
|
||||
252) _nbits=$((_nbits + 6)) ; break ;;
|
||||
248) _nbits=$((_nbits + 5)) ; break ;;
|
||||
240) _nbits=$((_nbits + 4)) ; break ;;
|
||||
224) _nbits=$((_nbits + 3)) ; break ;;
|
||||
192) _nbits=$((_nbits + 2)) ; break ;;
|
||||
128) _nbits=$((_nbits + 1)) ; break ;;
|
||||
0) break ;;
|
||||
*) echo "Error: $_dec is not recognised"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
echo "$_nbits"
|
||||
)
|
||||
|
||||
# Gets the network part of an IP
|
||||
# arg: <iface>
|
||||
get_network()
|
||||
(
|
||||
_network=$(get_iface_var "$1" "NETWORK")
|
||||
|
||||
if [ -z "$_network" ]; then
|
||||
_ip=$(get_ip "$1")
|
||||
_mask=$(get_mask "$1")
|
||||
_network=$(awk -v ip="$_ip" -v mask="$_mask" 'END {
|
||||
split(ip, ip_b, "."); split(mask, mask_b, ".");
|
||||
for (i=1; i<=4; ++i) x = x "." and(ip_b[i], mask_b[i]);
|
||||
sub(/^./, "", x); print x; }' </dev/null)
|
||||
fi
|
||||
|
||||
echo "$_network"
|
||||
)
|
||||
|
||||
# Gets the network mask
|
||||
# arg: <iface>
|
||||
get_mask()
|
||||
(
|
||||
_mask=$(get_iface_var "$1" "MASK")
|
||||
echo "${_mask:-255.255.255.0}"
|
||||
)
|
||||
|
||||
# Gets device MTU
|
||||
# arg: <iface>
|
||||
get_mtu()
|
||||
(
|
||||
# VH_TODO: drop default 1500, nekde se spoleha na tento default!
|
||||
_mtu=$(get_iface_var "$1" "MTU")
|
||||
echo "${_mtu:-1500}"
|
||||
)
|
||||
|
||||
# Gets the network gateway
|
||||
# arg: <iface>
|
||||
get_gateway()
|
||||
(
|
||||
get_iface_var "$1" "GATEWAY"
|
||||
)
|
||||
|
||||
# arg: <iface>
|
||||
get_ip()
|
||||
(
|
||||
get_iface_var "$1" "IP"
|
||||
)
|
||||
|
||||
# arg: <iface>
|
||||
get_dns()
|
||||
(
|
||||
get_iface_var "$1" "DNS"
|
||||
)
|
||||
|
||||
# arg: <iface>
|
||||
get_search_domain()
|
||||
(
|
||||
get_iface_var "$1" "SEARCH_DOMAIN"
|
||||
)
|
||||
|
||||
# arg: <iface>
|
||||
get_interface_alias()
|
||||
(
|
||||
# sed on freebsd does not recognize '+' - replacing with asterisk
|
||||
env | sed -n "s#^\(${1}_ALIAS[0-9][0-9]*\)_MAC=.*#\1#p" | sort
|
||||
)
|
||||
|
||||
get_context_interfaces()
|
||||
(
|
||||
# sed on freebsd does not recognize '+' - replacing with asterisk
|
||||
env | sed -n 's/^\(ETH[0-9][0-9]*\)_MAC=.*/\1/p' | sort
|
||||
)
|
||||
|
||||
get_pci_interfaces()
|
||||
(
|
||||
# sed on freebsd does not recognize '+' - replacing with asterisk
|
||||
env | sed -n 's/^\(PCI[0-9][0-9]*\)_MAC=.*/\1/p' | sort
|
||||
)
|
||||
|
||||
get_interface_mac()
|
||||
(
|
||||
ip link show | awk '/^[0-9]+: [A-Za-z0-9@]+:/ { device=$2; gsub(/:/, "",device); split(device,dev,"@")} /link\/ether/ { print dev[1] " " $2 }'
|
||||
)
|
||||
|
||||
get_dev()
|
||||
(
|
||||
_list="$1"
|
||||
_mac="$2"
|
||||
|
||||
echo "$_list" | grep "$_mac" | cut -d' ' -f1 | tail -n1
|
||||
)
|
||||
|
||||
# arg: <interface/alias>
|
||||
setup_ipadr_vars()
|
||||
{
|
||||
export ip=$(get_ip "$1")
|
||||
export network=$(get_network "$1")
|
||||
export mask=$(get_mask "$1")
|
||||
export cidr=$(mask2cidr "$mask")
|
||||
}
|
||||
|
||||
# arg: <interface/alias>
|
||||
setup_ip6adr_vars()
|
||||
{
|
||||
export ip6=$(get_iface_var "$1" "IP6")
|
||||
export ip6_prefix_length=$(get_iface_var "$1" "IP6_PREFIX_LENGTH")
|
||||
export ip6_ula=$(get_iface_var "$1" "IP6_ULA")
|
||||
|
||||
[ -z "$ip6" ] && ip6=$(get_iface_var "$1" "IPV6")
|
||||
[ -z "$ip6_prefix_length" ] && ip6_prefix_length=64
|
||||
}
|
||||
|
||||
# arg: <interface>
|
||||
setup_iface_vars()
|
||||
{
|
||||
_iface_mac=$(get_interface_mac)
|
||||
|
||||
export mac=$(get_iface_var "$1" "MAC")
|
||||
export dev=$(get_dev "$_iface_mac" "$mac")
|
||||
export mtu=$(get_iface_var "$1" "MTU")
|
||||
export gateway=$(get_gateway "$1")
|
||||
export metric=$(get_iface_var "$1" "METRIC")
|
||||
export dns=$(get_dns "$1")
|
||||
export search_domains=$(get_search_domain "$1")
|
||||
export method=$(get_iface_var "$1" "METHOD")
|
||||
export ip6_gateway=$(get_iface_var "$1" "IP6_GATEWAY")
|
||||
export ip6_metric=$(get_iface_var "$1" "IP6_METRIC")
|
||||
export ip6_method=$(get_iface_var "$1" "IP6_METHOD")
|
||||
|
||||
# backward compatibility
|
||||
[ -z "$ip6_gateway" ] && ip6_gateway=$(get_iface_var "$1" "GATEWAY6")
|
||||
|
||||
# defaults
|
||||
[ -z "$ip6_metric" ] && ip6_metric="${metric}"
|
||||
[ -z "$method" ] && method='static'
|
||||
[ -z "$ip6_method" ] && ip6_method="${method}"
|
||||
|
||||
setup_ipadr_vars "$1"
|
||||
setup_ip6adr_vars "$1"
|
||||
}
|
||||
|
||||
# arg: <alias>
|
||||
setup_alias_vars()
|
||||
{
|
||||
export external=$(get_iface_var "$1" "EXTERNAL")
|
||||
export detach=$(get_iface_var "$1" "DETACH")
|
||||
}
|
||||
|
||||
get_nameservers()
|
||||
(
|
||||
# sed on freebsd does not recognize '+' - replacing with asterisk
|
||||
_dns_variables=$(env | sed -n 's/^\(ETH[0-9][0-9]*_DNS\)=.*/\1/p' | sort)
|
||||
|
||||
for _dns in DNS ${_dns_variables} ; do
|
||||
_value=$(eval "echo \"\${$_dns}\"")
|
||||
if [ -n "$_value" ] ; then
|
||||
echo "$_value"
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
get_searchdomains()
|
||||
(
|
||||
# sed on freebsd does not recognize '+' - replacing with asterisk
|
||||
_search_domains=$(env | sed -n 's/^\(ETH[0-9][0-9]*_SEARCH_DOMAIN\)=.*/\1/p' | sort)
|
||||
|
||||
for _search in SEARCH_DOMAIN ${_search_domains} ; do
|
||||
_value=$(eval "echo \"\${$_search}\"")
|
||||
if [ -n "$_value" ] ; then
|
||||
echo "$_value"
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
gen_resolvconf()
|
||||
{
|
||||
export all_nameservers=$(get_nameservers)
|
||||
export all_search_domains=$(get_searchdomains)
|
||||
|
||||
[ -z "$all_nameservers" ] && return 0
|
||||
|
||||
if [ -L /etc/resolv.conf ]; then
|
||||
unlink /etc/resolv.conf
|
||||
else
|
||||
cat /dev/null > /etc/resolv.conf
|
||||
fi
|
||||
|
||||
for _nameserver in $all_nameservers ; do
|
||||
echo "nameserver ${_nameserver}" >> /etc/resolv.conf
|
||||
done
|
||||
|
||||
if [ -f /etc/sysconfig/network/config ]; then
|
||||
sed -i "/^NETCONFIG_DNS_STATIC_SERVERS=/ s/=.*$/=\"${all_nameservers}\"/" /etc/sysconfig/network/config
|
||||
fi
|
||||
|
||||
[ -z "$all_search_domains" ] && return 0
|
||||
|
||||
echo "search ${all_search_domains}" >> /etc/resolv.conf
|
||||
|
||||
if [ -f /etc/sysconfig/network/config ]; then
|
||||
sed -i "/^NETCONFIG_DNS_STATIC_SEARCHLIST=/ s/=.*$/=\"${all_search_domains}\"/" /etc/sysconfig/network/config
|
||||
fi
|
||||
}
|
@ -1,285 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#
|
||||
# network module implementation
|
||||
#
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
case "${os_id}" in
|
||||
freebsd)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_resolvconf
|
||||
gen_network_configuration > /etc/rc.conf.d/network
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
service netif stop >/dev/null
|
||||
service routing stop >/dev/null
|
||||
service rtsold stop >/dev/null
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
service netif start >/dev/null
|
||||
service routing start >/dev/null
|
||||
service rtsold start >/dev/null
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
service netif restart >/dev/null
|
||||
service routing restart >/dev/null
|
||||
service rtsold restart >/dev/null
|
||||
}
|
||||
|
||||
#
|
||||
# helper functions
|
||||
#
|
||||
|
||||
# TODO: remove global variables and get rid off exports
|
||||
#
|
||||
# to satisfy shellcheck SC2154:
|
||||
export os_id
|
||||
export ip
|
||||
export network
|
||||
export mask
|
||||
export cidr
|
||||
export ip6
|
||||
export ip6_prefix_length
|
||||
export ip6_ula
|
||||
export mac
|
||||
export dev
|
||||
export mtu
|
||||
export gateway
|
||||
export ip6_gateway
|
||||
export method
|
||||
export ip6_method
|
||||
export metric
|
||||
export ip6_metric
|
||||
export dns
|
||||
export search_domains
|
||||
export external
|
||||
export detach
|
||||
export all_nameservers
|
||||
export all_search_domains
|
||||
|
||||
get_interface_mac()
|
||||
(
|
||||
_macs=$(ifconfig | grep ether | awk '{print $2}')
|
||||
|
||||
for _mac in ${_macs} ; do
|
||||
_iface=$(ifconfig | grep -B 2 "$_mac" | head -n 1 | awk '{print $1}' | cut -d ':' -f 1)
|
||||
echo "${_iface} ${_mac}"
|
||||
done
|
||||
)
|
||||
|
||||
gen_iface_conf()
|
||||
{
|
||||
echo -n "ifconfig_${dev}=\"inet ${ip} netmask ${mask}"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo -n " mtu ${mtu}"
|
||||
fi
|
||||
|
||||
# WARNING: On FreeBSD the interface metrics are used only
|
||||
# by routing daemons (see man 8 ifconfig)
|
||||
if [ -n "${metric}" ]; then
|
||||
echo -n " metric ${metric}"
|
||||
fi
|
||||
|
||||
echo "\""
|
||||
|
||||
###
|
||||
|
||||
if [ -n "${gateway}" ]; then
|
||||
echo "defaultrouter=\"${gateway}\"" >> /etc/rc.conf.d/routing
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp_conf()
|
||||
{
|
||||
echo -n "ifconfig_${dev}=\"DHCP"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo -n " inet mtu ${mtu}"
|
||||
fi
|
||||
|
||||
echo "\""
|
||||
}
|
||||
|
||||
gen_alias_conf()
|
||||
{
|
||||
echo "ifconfig_${dev}_alias${alias_num}=\"inet ${ip} netmask ${mask}\""
|
||||
alias_num=$((alias_num + 1))
|
||||
}
|
||||
|
||||
gen_iface6_conf()
|
||||
{
|
||||
echo -n "ifconfig_${dev}_ipv6=\"inet6 ${ip6} prefixlen ${ip6_prefix_length:-64}"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo -n " mtu ${mtu}"
|
||||
fi
|
||||
|
||||
# WARNING: On FreeBSD the interface metrics are used only
|
||||
# by routing daemons (see man 8 ifconfig)
|
||||
if [ -n "${ip6_metric}" ]; then
|
||||
echo -n " metric ${ip6_metric}"
|
||||
fi
|
||||
|
||||
echo " -accept_rtadv\""
|
||||
|
||||
if [ -n "${ip6_ula}" ]; then
|
||||
echo "ifconfig_${dev}_alias${alias_num}=\"inet6 ${ip6_ula} prefixlen 64\""
|
||||
alias_num=$((alias_num + 1))
|
||||
fi
|
||||
|
||||
###
|
||||
|
||||
if [ -n "${ip6_gateway}" ]; then
|
||||
echo "ipv6_defaultrouter=\"${ip6_gateway}\"" >> /etc/rc.conf.d/routing
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp6_conf()
|
||||
{
|
||||
echo -n "ifconfig_${dev}_ipv6=\""
|
||||
|
||||
if [ "${ip6_method}" = "dhcp" ] ; then
|
||||
echo -n "DHCP "
|
||||
|
||||
# FreeBSD support for DHCP6 does not seem to be great:
|
||||
# https://forums.freebsd.org/threads/ipv6-dhcpv6-client-and-accept_rtadv-vs-rtsold.77421/
|
||||
# https://forums.freebsd.org/threads/is-there-a-working-dhcpv6-client-for-freebsd.60168/
|
||||
# https://subatomicsolutions.org/8-freebsd/13-ipv4-ipv6-client-addresses-via-dhcp
|
||||
_dhclient_program=$(sysrc -n dhclient_program 2>/dev/null)
|
||||
if [ -z "${_dhclient_program}" ] || [ "${_dhclient_program}" = '/sbin/dhclient' ]; then
|
||||
echo "WARNING [!]: DHCPv6 on '${os_id}' is poorly supported, you need a different DHCP client! You can install net/isc-dhcp44-client and put into /etc/rc.conf: dhclient_program=\"/usr/sbin/one-dual-dhclient\"" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -n "inet6 accept_rtadv"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo -n " mtu ${mtu}"
|
||||
fi
|
||||
|
||||
echo "\""
|
||||
|
||||
# Enable Router Solicitation Deaemon
|
||||
# NOTE: It's not enough to just enable the daemon during the current
|
||||
# boot process, since the services to run are already evaluated. We also
|
||||
# explicitly start the service on our own (but doesn't have to be correct!)
|
||||
sysrc rtsold_enable="YES" >/dev/null
|
||||
service rtsold start >/dev/null
|
||||
}
|
||||
|
||||
gen_alias6_conf()
|
||||
{
|
||||
# very first IPv6 can't be alias
|
||||
if [ -n "${has_ip6}" ]; then
|
||||
echo "ifconfig_${dev}_alias${alias_num}=\"inet6 ${ip6} prefixlen ${ip6_prefix_length:-64}\""
|
||||
alias_num=$((alias_num + 1))
|
||||
else
|
||||
echo -n "ifconfig_${dev}_ipv6=\"inet6 ${ip6} prefixlen ${ip6_prefix_length:-64}"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo -n " mtu ${mtu}"
|
||||
fi
|
||||
|
||||
# WARNING: On FreeBSD the interface metrics are used only
|
||||
# by routing daemons (see man 8 ifconfig)
|
||||
if [ -n "${ip6_metric}" ]; then
|
||||
echo -n " metric ${ip6_metric}"
|
||||
fi
|
||||
|
||||
echo " -accept_rtadv\""
|
||||
fi
|
||||
|
||||
if [ -n "${ip6_ula}" ]; then
|
||||
echo "ifconfig_${dev}_alias${alias_num}=\"inet6 ${ip6_ula} prefixlen 64\""
|
||||
alias_num=$((alias_num + 1))
|
||||
fi
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
# clean routing information
|
||||
echo '# Generated by one-context' | tee /etc/rc.conf.d/routing
|
||||
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
setup_iface_vars "$_iface"
|
||||
|
||||
skip_interface && continue
|
||||
|
||||
case "${method}" in
|
||||
''|static)
|
||||
[ -n "${ip}" ] && gen_iface_conf
|
||||
;;
|
||||
dhcp)
|
||||
gen_dhcp_conf
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
[ -n "${ip6}" ] && gen_iface6_conf
|
||||
;;
|
||||
auto|dhcp)
|
||||
gen_dhcp6_conf
|
||||
;;
|
||||
disable)
|
||||
:
|
||||
;;
|
||||
esac
|
||||
|
||||
has_ip6="${ip6}"
|
||||
_aliases=$(get_interface_alias "$_iface")
|
||||
alias_num=0
|
||||
|
||||
for _nic_alias in $_aliases; do
|
||||
setup_ipadr_vars "$_nic_alias"
|
||||
setup_ip6adr_vars "$_nic_alias"
|
||||
setup_alias_vars "$_nic_alias"
|
||||
|
||||
if [ -z "${detach}" ]; then
|
||||
if ! is_true "${external}" ; then
|
||||
[ -n "${ip}" ] && gen_alias_conf
|
||||
|
||||
if [ -n "${ip6}" ]; then
|
||||
gen_alias6_conf
|
||||
has_ip6="${ip6}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
@ -1,403 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#
|
||||
# network module implementation
|
||||
#
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
return 0
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_resolvconf
|
||||
gen_network_configuration > /etc/network/interfaces
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
service networking stop || true
|
||||
|
||||
# took from find_ifaces in the networking service
|
||||
_ifaces=$(\
|
||||
awk '$1 == "auto" {
|
||||
for (i = 2; i <= NF; i = i + 1) printf("%s ", $i)
|
||||
}' /etc/network/interfaces)
|
||||
|
||||
for _iface in $_ifaces; do
|
||||
if [ "${_iface}" != 'lo' ]; then
|
||||
/sbin/ip link set dev "${_iface}" down || true
|
||||
/sbin/ip addr flush dev "${_iface}" || true
|
||||
fi
|
||||
done
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
if [ -f "/usr/sbin/ifreload" ] ; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
_ifaces=$(/sbin/ifquery --list -a)
|
||||
|
||||
for _iface in $_ifaces; do
|
||||
if [ "${_iface}" != 'lo' ] ; then
|
||||
/sbin/ifdown "${_iface}"
|
||||
/sbin/ip link set dev "${_iface}" down || true
|
||||
/sbin/ip addr flush dev "${_iface}" || true
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
service networking start
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
if [ -f "/usr/sbin/ifreload" ] ; then
|
||||
/usr/sbin/ifreload -a
|
||||
return 0
|
||||
fi
|
||||
|
||||
_ifaces=$(/sbin/ifquery --list -a)
|
||||
|
||||
for _iface in $_ifaces; do
|
||||
/sbin/ifup "${_iface}"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
stop_network
|
||||
start_network
|
||||
}
|
||||
|
||||
#
|
||||
# helper functions
|
||||
#
|
||||
|
||||
# TODO: remove global variables and get rid off exports
|
||||
#
|
||||
# to satisfy shellcheck SC2154:
|
||||
export os_id
|
||||
export ip
|
||||
export network
|
||||
export mask
|
||||
export cidr
|
||||
export ip6
|
||||
export ip6_prefix_length
|
||||
export ip6_ula
|
||||
export mac
|
||||
export dev
|
||||
export mtu
|
||||
export gateway
|
||||
export ip6_gateway
|
||||
export method
|
||||
export ip6_method
|
||||
export metric
|
||||
export ip6_metric
|
||||
export dns
|
||||
export search_domains
|
||||
export external
|
||||
export detach
|
||||
export all_nameservers
|
||||
export all_search_domains
|
||||
|
||||
gen_iface_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
iface ${dev} inet static
|
||||
address ${ip}
|
||||
network ${network}
|
||||
netmask ${mask}
|
||||
EOT
|
||||
|
||||
if [ -n "$gateway" ]; then
|
||||
echo " gateway ${gateway}"
|
||||
|
||||
if [ -n "$metric" ]; then
|
||||
echo " metric ${metric}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$mtu" ]; then
|
||||
echo " mtu ${mtu}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_dhcp_conf()
|
||||
{
|
||||
echo "iface ${dev} inet dhcp"
|
||||
|
||||
if [ -n "$mtu" ]; then
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
echo " mtu ${mtu}"
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
echo " pre-up ip link set dev ${dev} mtu ${mtu}"
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_alias_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
iface ${dev} inet static
|
||||
address ${ip}
|
||||
network ${network}
|
||||
netmask ${mask}
|
||||
EOT
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_iface6_conf()
|
||||
{
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
cat <<EOT
|
||||
iface ${dev} inet6 static
|
||||
address ${ip6}
|
||||
netmask ${ip6_prefix_length:-64}
|
||||
pre-up echo 0 > /proc/sys/net/ipv6/conf/${dev}/autoconf
|
||||
pre-up echo 0 > /proc/sys/net/ipv6/conf/${dev}/accept_ra
|
||||
EOT
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
cat <<EOT
|
||||
iface ${dev} inet6 static
|
||||
address ${ip6}
|
||||
netmask ${ip6_prefix_length:-64}
|
||||
autoconf 0
|
||||
accept_ra 0
|
||||
EOT
|
||||
;;
|
||||
esac
|
||||
|
||||
# On Alpine Linux when using IPv6 gateway/metric options,
|
||||
# they override the metric on IPv4 routes. We better configure
|
||||
# default route via up script.
|
||||
if [ "${os_id}" = 'alpine' ] && \
|
||||
[ -n "${ip6_gateway}" ] && [ -n "${ip6_metric}" ];
|
||||
then
|
||||
echo " up ip -6 route add default via ${ip6_gateway} dev ${dev} metric ${ip6_metric}"
|
||||
|
||||
elif [ -n "${ip6_gateway}" ]; then
|
||||
echo " gateway ${ip6_gateway}"
|
||||
|
||||
if [ -n "${ip6_metric}" ]; then
|
||||
echo " metric ${ip6_metric}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
echo " mtu ${mtu}"
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
# Ignores "mtu x", IPv6-only interfaces would not be configured
|
||||
echo " pre-up ip link set dev ${dev} mtu ${mtu}"
|
||||
echo " pre-up echo ${mtu} > /proc/sys/net/ipv6/conf/${dev}/mtu"
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
if [ -n "${ip6_ula}" ]; then
|
||||
cat <<EOT
|
||||
iface ${dev} inet6 static
|
||||
address ${ip6_ula}
|
||||
netmask 64
|
||||
EOT
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_dhcp6_conf()
|
||||
{
|
||||
if [ "${ip6_method}" = "auto" ] ; then
|
||||
echo "iface ${dev} inet6 auto"
|
||||
else
|
||||
echo "iface ${dev} inet6 dhcp"
|
||||
fi
|
||||
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo " mtu ${mtu}"
|
||||
fi
|
||||
|
||||
echo " pre-up echo 0 > /proc/sys/net/ipv6/conf/${dev}/use_tempaddr"
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
# Privext might not be effective in "dhcp" mode, so we better
|
||||
# directly configure also sysctl parameters. Also, there might
|
||||
# be a race condition between activating IPv4 and IPv6 part of
|
||||
# interface if IPv4 is dhcp. As a aresult, IPv6 SLAAC privacy
|
||||
# address might appear. So, for safety we better drop any global
|
||||
# IPv6 addresses as part of pre-up.
|
||||
echo " privext 0"
|
||||
echo " pre-up echo 0 > /proc/sys/net/ipv6/conf/${dev}/use_tempaddr"
|
||||
echo " pre-up ip -6 addr flush dev ${dev} scope global || /bin/true"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
# Ignores "mtu x", IPv6-only interfaces would not be configured
|
||||
echo " pre-up ip link set dev ${dev} mtu ${mtu}"
|
||||
echo " pre-up echo ${mtu} > /proc/sys/net/ipv6/conf/${dev}/mtu"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_alias6_conf()
|
||||
{
|
||||
case "${os_id}" in
|
||||
alpine)
|
||||
cat <<EOT
|
||||
iface ${dev} inet6 static
|
||||
address ${ip6}
|
||||
netmask ${ip6_prefix_length:-64}
|
||||
EOT
|
||||
;;
|
||||
debian|ubuntu|devuan)
|
||||
cat <<EOT
|
||||
iface ${dev} inet6 static
|
||||
address ${ip6}
|
||||
netmask ${ip6_prefix_length:-64}
|
||||
EOT
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
|
||||
if [ -n "${ip6_ula}" ]; then
|
||||
cat <<EOT
|
||||
|
||||
iface ${dev} inet6 static
|
||||
address ${ip6_ula}
|
||||
netmask 64
|
||||
EOT
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
cat <<EOT
|
||||
# Generated by one-context
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
EOT
|
||||
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
setup_iface_vars "$_iface"
|
||||
|
||||
skip_interface && continue
|
||||
|
||||
echo "auto ${dev}"
|
||||
|
||||
case "${method}" in
|
||||
''|static)
|
||||
[ -n "${ip}" ] && gen_iface_conf
|
||||
;;
|
||||
dhcp)
|
||||
gen_dhcp_conf
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
[ -n "${ip6}" ] && gen_iface6_conf
|
||||
;;
|
||||
auto|dhcp)
|
||||
gen_dhcp6_conf
|
||||
;;
|
||||
disable)
|
||||
:
|
||||
;;
|
||||
esac
|
||||
|
||||
_aliases=$(get_interface_alias "$_iface")
|
||||
|
||||
for _nic_alias in $_aliases ; do
|
||||
setup_ipadr_vars "$_nic_alias"
|
||||
setup_ip6adr_vars "$_nic_alias"
|
||||
setup_alias_vars "$_nic_alias"
|
||||
|
||||
if [ -z "${detach}" ]; then
|
||||
if ! is_true "${external}" ; then
|
||||
[ -n "${ip}" ] && gen_alias_conf
|
||||
[ -n "${ip6}" ] && gen_alias6_conf
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
case "${os_id}" in
|
||||
debian|ubuntu|devuan)
|
||||
echo "source /etc/network/interfaces.d/*.cfg"
|
||||
;;
|
||||
esac
|
||||
}
|
@ -1,346 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#
|
||||
# network module implementation
|
||||
#
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
command -v netplan >/dev/null
|
||||
|
||||
return $?
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
init_netplan_renderer
|
||||
|
||||
gen_resolvconf
|
||||
gen_network_configuration > /etc/netplan/50-one-context.yaml
|
||||
netplan generate
|
||||
nm_symlink_run_connections
|
||||
|
||||
# On Debian 10 and Ubuntu 18.04 the initial netplan apply is needed to
|
||||
# set some interface parameters (e.g., MTU). Unfortunately, this deadlocks
|
||||
# booting of current systems, so we execute netplan apply on the background
|
||||
case "${NETCFG_NETPLAN_RENDERER}" in
|
||||
''|networkd)
|
||||
flock /var/run/one-context/netplan.lock nohup netplan apply &>/dev/null &
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
service networking stop
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
netplan generate
|
||||
nm_symlink_run_connections
|
||||
service networking start
|
||||
flock /var/run/one-context/netplan.lock netplan apply
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
netplan generate
|
||||
nm_symlink_run_connections
|
||||
flock /var/run/one-context/netplan.lock netplan apply
|
||||
}
|
||||
|
||||
#
|
||||
# helper functions
|
||||
#
|
||||
|
||||
# TODO: remove global variables and get rid off exports
|
||||
#
|
||||
# to satisfy shellcheck SC2154:
|
||||
export os_id
|
||||
export ip
|
||||
export network
|
||||
export mask
|
||||
export cidr
|
||||
export ip6
|
||||
export ip6_prefix_length
|
||||
export ip6_ula
|
||||
export mac
|
||||
export dev
|
||||
export mtu
|
||||
export gateway
|
||||
export ip6_gateway
|
||||
export method
|
||||
export ip6_method
|
||||
export metric
|
||||
export ip6_metric
|
||||
export dns
|
||||
export search_domains
|
||||
export external
|
||||
export detach
|
||||
export all_nameservers
|
||||
export all_search_domains
|
||||
|
||||
gen_addresses()
|
||||
{
|
||||
case "${method}" in
|
||||
''|static)
|
||||
[ -n "${ip}" ] && gen_addr_conf
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
[ -n "${ip6}" ] && gen_addr6_conf
|
||||
;;
|
||||
esac
|
||||
|
||||
_aliases=$(get_interface_alias "$_iface")
|
||||
|
||||
for _nic_alias in $_aliases; do
|
||||
setup_ipadr_vars "$_nic_alias"
|
||||
setup_ip6adr_vars "$_nic_alias"
|
||||
setup_alias_vars "$_nic_alias"
|
||||
|
||||
if [ -z "${detach}" ]; then
|
||||
if ! is_true "${external}" ; then
|
||||
[ -n "${ip}" ] && gen_addr_conf
|
||||
[ -n "${ip6}" ] && gen_addr6_conf
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
gen_routes()
|
||||
{
|
||||
if [ -n "${gateway}" ] && { [ -z "${method}" ] || [ "${method}" = 'static' ]; }; then
|
||||
cat <<EOT
|
||||
- to: "0.0.0.0/0"
|
||||
via: ${gateway}
|
||||
EOT
|
||||
|
||||
# Force default Linux IPv4 metric (man 8 route) to override
|
||||
# automatic metrics calculation done by NetworkManager and unify
|
||||
# behavior among different renderers.
|
||||
metric=${metric:-0}
|
||||
|
||||
if [ -n "${metric}" ] ; then
|
||||
echo " metric: ${metric}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${ip6_gateway}" ] && { [ -z "${ip6_method}" ] || [ "${ip6_method}" = 'static' ]; }; then
|
||||
cat <<EOT
|
||||
- to: "::/0"
|
||||
via: ${ip6_gateway}
|
||||
EOT
|
||||
|
||||
# Force default Linux IPv6 metric (man 8 route) to override
|
||||
# automatic metrics calculation done by NetworkManager and unify
|
||||
# behavior among different renderers.
|
||||
ip6_metric=${ip6_metric:-1}
|
||||
|
||||
if [ -n "${ip6_metric}" ] ; then
|
||||
echo " metric: ${ip6_metric}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
dhcp4: true
|
||||
EOT
|
||||
}
|
||||
|
||||
gen_addr_conf()
|
||||
{
|
||||
echo " - ${ip}/${cidr}"
|
||||
}
|
||||
|
||||
gen_addr6_conf()
|
||||
{
|
||||
echo " - ${ip6}/${ip6_prefix_length:-64}"
|
||||
|
||||
if [ -n "$ip6_ula" ]; then
|
||||
echo " - ${ip6_ula}/64"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp6_conf()
|
||||
{
|
||||
if [ "${ip6_method}" = "auto" ] ; then
|
||||
cat <<EOT
|
||||
accept-ra: true
|
||||
dhcp6: false
|
||||
EOT
|
||||
else
|
||||
cat <<EOT
|
||||
accept-ra: true
|
||||
dhcp6: true
|
||||
EOT
|
||||
fi
|
||||
|
||||
cat <<EOT
|
||||
ipv6-privacy: false
|
||||
EOT
|
||||
}
|
||||
|
||||
gen_ipv6_disable()
|
||||
{
|
||||
cat <<EOT
|
||||
accept-ra: false
|
||||
link-local: []
|
||||
EOT
|
||||
}
|
||||
|
||||
# Old NM doesn't read from /run/NetworkManager/system-connections,
|
||||
# so the generated Netplan configuration is not respected. As a workaround,
|
||||
# we symlink the connection files into /etc
|
||||
nm_symlink_run_connections()
|
||||
{
|
||||
if [ "${NETCFG_NETPLAN_RENDERER}" != 'NetworkManager' ] ||
|
||||
! [ -d /run/NetworkManager/system-connections ];
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
# cleanup any old symlinks
|
||||
rm -f /etc/NetworkManager/system-connections/netplan-*
|
||||
|
||||
case "$(NetworkManager --version 2>/dev/null)" in
|
||||
1.14.*) # Debian 10
|
||||
echo "WARNING: Symlinking NM's ephemeral connections into /etc" >&2
|
||||
;;
|
||||
*)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
# symlink Netplan connection files
|
||||
for _src in /run/NetworkManager/system-connections/netplan-*; do
|
||||
if [ -f "${_src}" ]; then
|
||||
_dst="/etc/NetworkManager/system-connections/$(basename "${_src}")"
|
||||
ln -s "${_src}" "${_dst}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
init_netplan_renderer()
|
||||
{
|
||||
if [ -z "${NETCFG_NETPLAN_RENDERER}" ] ; then
|
||||
if command -v networkctl >/dev/null ; then
|
||||
NETCFG_NETPLAN_RENDERER='networkd'
|
||||
elif command -v nmcli >/dev/null ; then
|
||||
NETCFG_NETPLAN_RENDERER='NetworkManager'
|
||||
else
|
||||
# fallback to networkd only not to leave the variable
|
||||
# uninitialized, deployment most likely won't work!
|
||||
NETCFG_NETPLAN_RENDERER='networkd'
|
||||
fi
|
||||
else
|
||||
# support alternative names for some configuration renderers
|
||||
_netcfg_netplan_renderer=$(echo "$NETCFG_NETPLAN_RENDERER" | \
|
||||
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | \
|
||||
tr '[:upper:]' '[:lower:]')
|
||||
|
||||
# normalize renderer names and support alternatives
|
||||
case "${_netcfg_netplan_renderer}" in
|
||||
systemd-networkd|systemd-network|systemd|networkd)
|
||||
NETCFG_NETPLAN_RENDERER='networkd'
|
||||
;;
|
||||
networkmanager|nm)
|
||||
NETCFG_NETPLAN_RENDERER='NetworkManager'
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
if [ "${NETCFG_NETPLAN_RENDERER}" = 'NetworkManager' ]; then
|
||||
nm_enable
|
||||
fi
|
||||
|
||||
cat <<EOT
|
||||
# Generated by one-context
|
||||
network:
|
||||
version: 2
|
||||
renderer: ${NETCFG_NETPLAN_RENDERER}
|
||||
EOT
|
||||
|
||||
# ethernets key must have at least one interface
|
||||
_ethernets_written=
|
||||
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
setup_iface_vars "$_iface"
|
||||
|
||||
skip_interface && continue
|
||||
|
||||
if [ -z "${_ethernets_written}" ] ; then
|
||||
echo " ethernets:"
|
||||
_ethernets_written=yes
|
||||
fi
|
||||
echo " ${dev}:"
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo " mtu: ${mtu}"
|
||||
fi
|
||||
|
||||
## Requires Netplan 0.98+
|
||||
# if [ -n "${mtu}" ]; then
|
||||
# echo " ip6-mtu: ${mtu}"
|
||||
# fi
|
||||
|
||||
case "${method}" in
|
||||
''|static)
|
||||
: # in gen_addresses
|
||||
;;
|
||||
dhcp)
|
||||
gen_dhcp_conf
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
: # in gen_addresses
|
||||
;;
|
||||
auto|dhcp)
|
||||
gen_dhcp6_conf
|
||||
;;
|
||||
disable)
|
||||
gen_ipv6_disable
|
||||
;;
|
||||
esac
|
||||
|
||||
_addresses=$(gen_addresses)
|
||||
if [ -n "${_addresses}" ] ; then
|
||||
echo " addresses:"
|
||||
echo "${_addresses}"
|
||||
fi
|
||||
|
||||
_routes=$(gen_routes)
|
||||
if [ -n "${_routes}" ] ; then
|
||||
echo " routes:"
|
||||
echo "${_routes}"
|
||||
fi
|
||||
done
|
||||
}
|
@ -1,380 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#
|
||||
# network module implementation
|
||||
#
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
command -v networkctl >/dev/null
|
||||
|
||||
return $?
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_resolvconf
|
||||
gen_network_configuration
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
systemctl stop systemd-networkd.service
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
systemctl start systemd-networkd.service
|
||||
|
||||
# Dummy query waits until networkd is running
|
||||
networkctl list &>/dev/null || :
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
# TODO: for newer systemd-networkd use
|
||||
# networkctl reload && networkctl reconfigure ethX
|
||||
# and fallback to service restart only if needed
|
||||
systemctl restart systemd-networkd.service
|
||||
|
||||
# Dummy query waits until networkd is running
|
||||
networkctl list &>/dev/null || :
|
||||
}
|
||||
|
||||
#
|
||||
# helper functions
|
||||
#
|
||||
|
||||
# TODO: remove global variables and get rid off exports
|
||||
#
|
||||
# to satisfy shellcheck SC2154:
|
||||
export os_id
|
||||
export ip
|
||||
export network
|
||||
export mask
|
||||
export cidr
|
||||
export ip6
|
||||
export ip6_prefix_length
|
||||
export ip6_ula
|
||||
export mac
|
||||
export dev
|
||||
export mtu
|
||||
export gateway
|
||||
export ip6_gateway
|
||||
export method
|
||||
export ip6_method
|
||||
export metric
|
||||
export ip6_metric
|
||||
export dns
|
||||
export search_domains
|
||||
export external
|
||||
export detach
|
||||
export all_nameservers
|
||||
export all_search_domains
|
||||
|
||||
gen_iface_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
[Network]
|
||||
Address=${ip}/${cidr}
|
||||
EOT
|
||||
|
||||
if [ -n "$dns" ]; then
|
||||
for _domain in $dns; do
|
||||
echo "DNS=${_domain}"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "$search_domains" ]; then
|
||||
for _search_domain in $search_domains; do
|
||||
echo "Domains=${_search_domain}"
|
||||
done
|
||||
fi
|
||||
|
||||
cat <<EOT
|
||||
[Route]
|
||||
EOT
|
||||
|
||||
if [ -n "$gateway" ]; then
|
||||
echo "Gateway=${gateway}"
|
||||
|
||||
if [ -n "$metric" ]; then
|
||||
echo "Metric=${metric}"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_dhcp_conf()
|
||||
{
|
||||
case "${dhcp_conf}" in
|
||||
ipv4)
|
||||
cat <<EOT
|
||||
[Network]
|
||||
DHCP=ipv4
|
||||
EOT
|
||||
;;
|
||||
ipv4+auto)
|
||||
cat <<EOT
|
||||
[Network]
|
||||
DHCP=ipv4
|
||||
IPv6AcceptRA=yes
|
||||
|
||||
[IPv6AcceptRA]
|
||||
DHCPv6Client=no
|
||||
EOT
|
||||
;;
|
||||
ipv6)
|
||||
cat <<EOT
|
||||
[Network]
|
||||
DHCP=ipv6
|
||||
IPv6AcceptRA=yes
|
||||
EOT
|
||||
;;
|
||||
both)
|
||||
cat <<EOT
|
||||
[Network]
|
||||
DHCP=yes
|
||||
IPv6AcceptRA=yes
|
||||
EOT
|
||||
;;
|
||||
auto)
|
||||
cat <<EOT
|
||||
[Network]
|
||||
DHCP=no
|
||||
IPv6AcceptRA=yes
|
||||
|
||||
[IPv6AcceptRA]
|
||||
DHCPv6Client=no
|
||||
EOT
|
||||
;;
|
||||
esac
|
||||
|
||||
cat <<EOT
|
||||
[Network]
|
||||
IPv6PrivacyExtensions=no
|
||||
EOT
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_alias_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
[Address]
|
||||
Address=${ip}/${cidr}
|
||||
EOT
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_iface6_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
[Network]
|
||||
Address=${ip6}/${ip6_prefix_length:-64}
|
||||
EOT
|
||||
|
||||
echo "IPv6AcceptRA=false"
|
||||
|
||||
if [ -n "$dns" ]; then
|
||||
for _domain in $dns; do
|
||||
echo "DNS=${_domain}"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "$search_domains" ]; then
|
||||
for _search_domain in $search_domains; do
|
||||
echo "Domains=${_search_domain}"
|
||||
done
|
||||
fi
|
||||
|
||||
cat <<EOT
|
||||
[Route]
|
||||
EOT
|
||||
|
||||
if [ -n "$ip6_gateway" ]; then
|
||||
echo "Gateway=${ip6_gateway}"
|
||||
|
||||
if [ -n "$ip6_metric" ]; then
|
||||
echo "Metric=${ip6_metric}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$ip6_ula" ]; then
|
||||
cat <<EOT
|
||||
[Network]
|
||||
Address=${ip6_ula}/64
|
||||
EOT
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_alias6_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
[Address]
|
||||
Address=${ip6}/${ip6_prefix_length:-64}
|
||||
EOT
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
gen_ipv6_disable()
|
||||
{
|
||||
cat <<EOT
|
||||
[Network]
|
||||
LinkLocalAddressing=no
|
||||
IPv6AcceptRA=no
|
||||
EOT
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
# arg: <interface>
|
||||
is_networkd_iface_managed()
|
||||
(
|
||||
_managed=$(LANG=C networkctl list -al --no-pager --no-legend | \
|
||||
awk -v dev="$1" '{if ($2 == dev) print $NF;}' | \
|
||||
tr '[:upper:]' '[:lower:]')
|
||||
|
||||
case "${_managed}" in
|
||||
''|unmanaged)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
return 0
|
||||
)
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
|
||||
_networkd_version=$(networkctl --version | head -1 | awk '{print $2}')
|
||||
|
||||
if [ -n "$_networkd_version" ]; then
|
||||
# put some dummy low version if not detected
|
||||
_networkd_version="100"
|
||||
fi
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
setup_iface_vars "$_iface"
|
||||
|
||||
skip_interface && continue
|
||||
|
||||
# NOTE: This is needed to workaround issue with the networkd metrics.
|
||||
#
|
||||
# When attaching new NIC from the same vnet on a running system then
|
||||
# the networkd will assign some metric to the prefix route of the first
|
||||
# NIC but leave out metric for the same prefix route of the new NIC.
|
||||
#
|
||||
# What happens is that outgoing packets on this subnet will now always
|
||||
# use the second NIC even while the incoming packets were targeted for
|
||||
# the IP on the first NIC - the result is a broken connection.
|
||||
#
|
||||
# This occurs at least with systemd/networkd version 248, which is on
|
||||
# Cent OS 8 for example.
|
||||
|
||||
|
||||
if [ $_networkd_version -le 250 ]; then
|
||||
if is_networkd_iface_managed "${dev}" ; then
|
||||
# networkctl up/down is not on ubuntu <21.04
|
||||
networkctl down "$dev" 2>/dev/null || true
|
||||
|
||||
# this is still necessary to really unconfigure the interface
|
||||
ip addr flush "$dev"
|
||||
fi
|
||||
fi
|
||||
|
||||
{
|
||||
cat <<EOT
|
||||
# Generated by one-context
|
||||
[Match]
|
||||
Name=${dev}
|
||||
EOT
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
cat <<EOT
|
||||
[Link]
|
||||
MTUBytes=${mtu}
|
||||
|
||||
## Supported since Debian 10, Ubuntu 18.04, CentOS 8
|
||||
# [Network]
|
||||
# IPv6MTUBytes=${mtu}
|
||||
EOT
|
||||
fi
|
||||
|
||||
dhcp_conf=''
|
||||
|
||||
case "${method}" in
|
||||
''|static)
|
||||
[ -n "${ip}" ] && gen_iface_conf
|
||||
;;
|
||||
dhcp)
|
||||
dhcp_conf='ipv4'
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
[ -n "${ip6}" ] && gen_iface6_conf
|
||||
;;
|
||||
auto)
|
||||
if [ -n "${dhcp_conf}" ] ; then
|
||||
dhcp_conf='ipv4+auto'
|
||||
else
|
||||
dhcp_conf='auto'
|
||||
fi
|
||||
;;
|
||||
dhcp)
|
||||
if [ -n "${dhcp_conf}" ] ; then
|
||||
dhcp_conf='both'
|
||||
else
|
||||
dhcp_conf='ipv6'
|
||||
fi
|
||||
;;
|
||||
disable)
|
||||
gen_ipv6_disable
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -n "${dhcp_conf}" ] && gen_dhcp_conf
|
||||
|
||||
_aliases=$(get_interface_alias "$_iface")
|
||||
|
||||
for _nic_alias in $_aliases ; do
|
||||
setup_ipadr_vars "$_nic_alias"
|
||||
setup_ip6adr_vars "$_nic_alias"
|
||||
setup_alias_vars "$_nic_alias"
|
||||
|
||||
if [ -z "${detach}" ]; then
|
||||
if ! is_true "${external}" ; then
|
||||
[ -n "${ip}" ] && gen_alias_conf
|
||||
[ -n "${ip6}" ] && gen_alias6_conf
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
} > "/etc/systemd/network/${dev}.network"
|
||||
|
||||
done
|
||||
}
|
@ -1,320 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#
|
||||
# network module implementation
|
||||
#
|
||||
|
||||
export required_context_type=online
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
command -v nmcli >/dev/null
|
||||
|
||||
return $?
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
wait_for_nm
|
||||
gen_resolvconf
|
||||
gen_network_configuration
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
service NetworkManager stop
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
service NetworkManager start
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
# VH-TODO: It only reloads configuration from a disk,
|
||||
# but we don't directly generate configuration files
|
||||
nmcli connection reload
|
||||
}
|
||||
|
||||
#
|
||||
# helper functions
|
||||
#
|
||||
|
||||
# TODO: remove global variables and get rid off exports
|
||||
#
|
||||
# to satisfy shellcheck SC2154:
|
||||
export os_id
|
||||
export ip
|
||||
export network
|
||||
export mask
|
||||
export cidr
|
||||
export ip6
|
||||
export ip6_prefix_length
|
||||
export ip6_ula
|
||||
export mac
|
||||
export dev
|
||||
export mtu
|
||||
export gateway
|
||||
export ip6_gateway
|
||||
export method
|
||||
export ip6_method
|
||||
export metric
|
||||
export ip6_metric
|
||||
export dns
|
||||
export search_domains
|
||||
export external
|
||||
export detach
|
||||
export all_nameservers
|
||||
export all_search_domains
|
||||
|
||||
wait_for_nm()
|
||||
{
|
||||
nm_enable
|
||||
|
||||
_timeout=30
|
||||
while [ "$_timeout" -gt 0 ] ; do
|
||||
if _nm_networking=$(nmcli networking 2>/dev/null) ; then
|
||||
break
|
||||
fi
|
||||
|
||||
_timeout=$(( _timeout - 1 ))
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ "${_timeout}" -eq 0 ] ; then
|
||||
echo "ERROR [!]: NetworkManager is not running" >&2
|
||||
exit 1
|
||||
elif [ "${_nm_networking}" = 'enabled' ] ; then
|
||||
return 0
|
||||
else
|
||||
echo "ERROR [!]: NetworkManager is disabled" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
gen_iface_conf()
|
||||
{
|
||||
nmcli con mod "${dev}" ipv4.method manual ipv4.addresses "${ip}/${cidr}"
|
||||
|
||||
if [ -n "$gateway" ]; then
|
||||
nmcli con mod "${dev}" ipv4.gateway "${gateway}"
|
||||
else
|
||||
nmcli con mod "${dev}" ipv4.gateway ""
|
||||
fi
|
||||
|
||||
if [ -n "$metric" ]; then
|
||||
nmcli con mod "${dev}" ipv4.route-metric "${metric}"
|
||||
else
|
||||
# Force default Linux IPv4 metric (man 8 route) to override
|
||||
# automatic metrics calculation done by NetworkManager and unify
|
||||
# behavior among different renderers.
|
||||
nmcli con mod "${dev}" ipv4.route-metric "0"
|
||||
fi
|
||||
}
|
||||
|
||||
reset_iface()
|
||||
{
|
||||
# the order is significant - ip.addresses cannot be erased while gateway is set
|
||||
nmcli con mod "${dev}" ipv4.route-metric ""
|
||||
nmcli con mod "${dev}" ipv4.gateway ""
|
||||
nmcli con mod "${dev}" ipv4.addresses ""
|
||||
}
|
||||
|
||||
gen_dhcp_conf()
|
||||
{
|
||||
nmcli con mod "${dev}" ipv4.method auto
|
||||
|
||||
# cleanup any leftover from the static method
|
||||
reset_iface
|
||||
}
|
||||
|
||||
gen_alias_conf()
|
||||
{
|
||||
nmcli con mod "${dev}" +ipv4.addresses "${ip}/${cidr}"
|
||||
}
|
||||
|
||||
gen_iface6_conf()
|
||||
{
|
||||
nmcli con mod "${dev}" ipv6.method manual \
|
||||
ipv6.addresses "${ip6}/${ip6_prefix_length:-64}"
|
||||
|
||||
if [ -n "$ip6_ula" ]; then
|
||||
nmcli con mod "${dev}" +ipv6.addresses "${ip6_ula}/64"
|
||||
fi
|
||||
|
||||
if [ -n "$ip6_gateway" ]; then
|
||||
nmcli con mod "${dev}" ipv6.gateway "${ip6_gateway}"
|
||||
else
|
||||
nmcli con mod "${dev}" ipv6.gateway ""
|
||||
fi
|
||||
|
||||
if [ -n "$ip6_metric" ]; then
|
||||
nmcli con mod "${dev}" ipv6.route-metric "${ip6_metric}"
|
||||
else
|
||||
# Force default Linux IPv6 metric (man 8 route) to override
|
||||
# automatic metrics calculation done by NetworkManager and unify
|
||||
# behavior among different renderers.
|
||||
nmcli con mod "${dev}" ipv6.route-metric "1"
|
||||
fi
|
||||
|
||||
# We need this to ensure link-local address has expected form
|
||||
nmcli con mod "${dev}" ipv6.addr-gen-mode eui64
|
||||
}
|
||||
|
||||
reset_iface6()
|
||||
{
|
||||
# the order is significant - ipv6.addresses cannot be erased while gateway is set
|
||||
nmcli con mod "${dev}" ipv6.route-metric ""
|
||||
nmcli con mod "${dev}" ipv6.gateway ""
|
||||
nmcli con mod "${dev}" ipv6.addresses ""
|
||||
}
|
||||
|
||||
gen_alias6_conf()
|
||||
{
|
||||
nmcli con mod "${dev}" +ipv6.addresses "${ip6}/${ip6_prefix_length:-64}"
|
||||
|
||||
if [ -n "$ip6_ula" ]; then
|
||||
nmcli con mod "${dev}" +ipv6.addresses "${ip6_ula}/64"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp6_conf()
|
||||
{
|
||||
if [ "${ip6_method}" = "auto" ] ; then
|
||||
# Method "ignore" relies only on SLAAC configured by the kernel,
|
||||
# while the "auto" might optionally trigger also DHCPv6 client!
|
||||
# https://unix.stackexchange.com/questions/440076/disable-dhcpv6-while-not-disabling-slaac-in-network-manager
|
||||
_dhcp=ignore
|
||||
else
|
||||
# Method "auto" optionally triggers DHCPv6 client if RA has relevant
|
||||
# flags (also netplan+nm configures "auto")! Method "dhcp" could
|
||||
# ignore RA.
|
||||
_dhcp=auto
|
||||
fi
|
||||
|
||||
nmcli con mod "${dev}" ipv6.method "${_dhcp}"
|
||||
nmcli con mod "${dev}" ipv6.addr-gen-mode eui64
|
||||
nmcli con mod "${dev}" ipv6.ip6-privacy 0
|
||||
|
||||
# cleanup any leftover from the static method
|
||||
reset_iface6
|
||||
}
|
||||
|
||||
# arg: <interface-connection>
|
||||
nm_connection_exist()
|
||||
(
|
||||
# VH-TODO: We should be better checking across all connections, if there
|
||||
# isn't any with our device to avoid clashes and drop/rename that one
|
||||
_iface=$(nmcli --field connection.interface-name con show "$1" | awk '{print $2}')
|
||||
if [ "${_iface}" = "$1" ] ; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
)
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
setup_iface_vars "$_iface"
|
||||
|
||||
skip_interface && continue
|
||||
|
||||
# We might need to disable IPv6 and privacy directly by sysctl
|
||||
_disable_ipv6=''
|
||||
_disable_ipv6_privacy=''
|
||||
|
||||
if ! nm_connection_exist "${dev}" ; then
|
||||
nmcli con add type ethernet \
|
||||
con-name "${dev}" ifname "${dev}" \
|
||||
ipv4.method disabled \
|
||||
ipv6.method ignore
|
||||
fi
|
||||
|
||||
nmcli con mod "${dev}" connection.autoconnect yes
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
nmcli con mod "${dev}" ethernet.mtu "${mtu}"
|
||||
else
|
||||
nmcli con mod "${dev}" ethernet.mtu ""
|
||||
fi
|
||||
|
||||
case "${method}" in
|
||||
''|static)
|
||||
[ -n "${ip}" ] && gen_iface_conf
|
||||
;;
|
||||
dhcp)
|
||||
gen_dhcp_conf
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
[ -n "${ip6}" ] && gen_iface6_conf
|
||||
;;
|
||||
auto)
|
||||
gen_dhcp6_conf
|
||||
|
||||
# NOTE: Hot plugged NICs configured with IPv6 method ignore
|
||||
# doesn't have to properly update the IPv6 privacy.
|
||||
# We better enforce them via direct sysctl.
|
||||
# VH-TODO: limit only for reconfigure action?
|
||||
_disable_ipv6_privacy='yes'
|
||||
;;
|
||||
dhcp)
|
||||
gen_dhcp6_conf
|
||||
;;
|
||||
disable)
|
||||
# NOTE: Older NMs don't support ipv6.method disabled,
|
||||
# in that case we rely on hard disablemenets via sysctl
|
||||
nmcli con mod "${dev}" ipv6.method disabled ||
|
||||
_disable_ipv6='yes'
|
||||
;;
|
||||
esac
|
||||
|
||||
_aliases=$(get_interface_alias "$_iface")
|
||||
|
||||
for _nic_alias in $_aliases; do
|
||||
setup_ipadr_vars "$_nic_alias"
|
||||
setup_ip6adr_vars "$_nic_alias"
|
||||
setup_alias_vars "$_nic_alias"
|
||||
|
||||
if [ -z "${detach}" ]; then
|
||||
if ! is_true "${external}" ; then
|
||||
[ -n "${ip}" ] && gen_alias_conf
|
||||
[ -n "${ip6}" ] && gen_alias6_conf
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 'nmcli con reload' is not enough
|
||||
nmcli con up "${dev}"
|
||||
|
||||
if [ -n "${_disable_ipv6}" ]; then
|
||||
disable_ipv6 "${dev}"
|
||||
fi
|
||||
|
||||
if [ -n "${_disable_ipv6_privacy}" ]; then
|
||||
disable_ipv6_privacy "${dev}"
|
||||
fi
|
||||
done
|
||||
}
|
@ -1,393 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
#
|
||||
# network module implementation
|
||||
#
|
||||
|
||||
is_network_supported()
|
||||
{
|
||||
# Red Hat family
|
||||
if [ -x /etc/sysconfig/network-scripts/ifup ]; then
|
||||
# On EL8, the network-scripts (package) is legacy
|
||||
# and network service is not even enabled by default.
|
||||
# For safety we check if network service is enabled
|
||||
# and if not, we better choose different renderer.
|
||||
if command -v systemctl &>/dev/null; then
|
||||
systemctl is-enabled network &>/dev/null && return 0
|
||||
|
||||
# NOTE: Probably not necessary test on old systems
|
||||
elif chkconfig network --level 3 &>/dev/null || \
|
||||
chkconfig network --level 5 &>/dev/null;
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# SUSE family
|
||||
elif [ -d /etc/sysconfig/network/ ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_resolvconf
|
||||
gen_network_configuration
|
||||
}
|
||||
|
||||
stop_network()
|
||||
{
|
||||
service network stop
|
||||
}
|
||||
|
||||
start_network()
|
||||
{
|
||||
service network start
|
||||
}
|
||||
|
||||
reload_network()
|
||||
{
|
||||
service network restart
|
||||
}
|
||||
|
||||
#
|
||||
# helper functions
|
||||
#
|
||||
|
||||
# TODO: remove global variables and get rid off exports
|
||||
#
|
||||
# to satisfy shellcheck SC2154:
|
||||
export os_id
|
||||
export ip
|
||||
export network
|
||||
export mask
|
||||
export cidr
|
||||
export ip6
|
||||
export ip6_prefix_length
|
||||
export ip6_ula
|
||||
export mac
|
||||
export dev
|
||||
export mtu
|
||||
export gateway
|
||||
export ip6_gateway
|
||||
export method
|
||||
export ip6_method
|
||||
export metric
|
||||
export ip6_metric
|
||||
export dns
|
||||
export search_domains
|
||||
export external
|
||||
export detach
|
||||
export all_nameservers
|
||||
export all_search_domains
|
||||
|
||||
gen_iface_conf()
|
||||
{
|
||||
cat <<EOT
|
||||
NETMASK="${mask}"
|
||||
IPADDR="${ip}"
|
||||
EOT
|
||||
|
||||
### SUSE family ###
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo 'BOOTPROTO=static'
|
||||
|
||||
if [ -n "${gateway}" ]; then
|
||||
echo "default ${gateway} - ${dev} ${metric:+metric ${metric}}" \
|
||||
>> "${config_path}/ifroute-${dev}"
|
||||
fi
|
||||
|
||||
### Red Hat family ###
|
||||
else
|
||||
echo 'BOOTPROTO=none'
|
||||
|
||||
if [ -n "${gateway}" ]; then
|
||||
echo "default via ${gateway} dev ${dev} ${metric:+metric ${metric}}" \
|
||||
>> "${config_path}/route-${dev}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo "MTU=${mtu}"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp_conf()
|
||||
{
|
||||
### SUSE family ###
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
if [ "${ip6_method}" = 'dhcp' ]; then
|
||||
echo 'BOOTPROTO=dhcp'
|
||||
else
|
||||
echo 'BOOTPROTO=dhcp4'
|
||||
fi
|
||||
|
||||
### Red Hat family ###
|
||||
else
|
||||
cat <<EOT
|
||||
BOOTPROTO=dhcp
|
||||
PERSISTENT_DHCLIENT=1
|
||||
EOT
|
||||
fi
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo "MTU=${mtu}"
|
||||
fi
|
||||
}
|
||||
|
||||
gen_alias_conf() {
|
||||
cat <<EOT
|
||||
IPADDR${alias_num}="${ip}"
|
||||
NETMASK${alias_num}="${mask}"
|
||||
EOT
|
||||
}
|
||||
|
||||
gen_iface6_conf()
|
||||
{
|
||||
### SUSE family ###
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo "IPADDR_6A=${ip6}/${ip6_prefix_length:-64}"
|
||||
|
||||
cat <<EOT >> "/etc/sysconfig/network/ifsysctl-${dev}"
|
||||
net.ipv6.conf.\$SYSCTL_IF.autoconf = 0
|
||||
net.ipv6.conf.\$SYSCTL_IF.accept_ra = 0
|
||||
EOT
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
# place only if not set via IPv4 parts
|
||||
if [ -z "${_set_ipv4}" ]; then
|
||||
echo "MTU=${mtu}"
|
||||
fi
|
||||
|
||||
cat <<EOT >> "/etc/sysconfig/network/ifsysctl-${dev}"
|
||||
net.ipv6.conf.\$SYSCTL_IF.mtu = ${mtu}
|
||||
EOT
|
||||
fi
|
||||
|
||||
### Red Hat family ###
|
||||
else
|
||||
cat <<EOT
|
||||
IPV6INIT=yes
|
||||
IPV6ADDR=${ip6}/${ip6_prefix_length:-64}
|
||||
IPV6_AUTOCONF=no
|
||||
EOT
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo "IPV6_MTU=${mtu}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${ip6_ula}" ]; then
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo "IPADDR_6B=${ip6_ula}/64"
|
||||
else
|
||||
ipv6addr_secondaries="${ipv6addr_secondaries} ${ip6_ula}/64"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${ip6_gateway}" ]; then
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo "default ${ip6_gateway} - ${dev} ${ip6_metric:+metric ${ip6_metric}}" \
|
||||
>> "/etc/sysconfig/network/ifroute-${dev}"
|
||||
else
|
||||
echo "default via ${ip6_gateway} dev ${dev} ${ip6_metric:+metric ${ip6_metric}}" \
|
||||
>> "${config_path}/route6-${dev}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
gen_dhcp6_conf()
|
||||
{
|
||||
### SUSE family ###
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
# On SUSE the BOOTPROTO is shared for both IPv4/6,
|
||||
# in case IPv4 is not dhcp we configure DHCPv6 only here
|
||||
# (if IPv4 is static, we unforunately overwrite that)
|
||||
if [ "${ip6_method}" = 'dhcp' ] && [ "${method}" != 'dhcp' ]; then
|
||||
echo 'BOOTPROTO=dhcp6'
|
||||
fi
|
||||
|
||||
cat <<EOT >> "/etc/sysconfig/network/ifsysctl-${dev}"
|
||||
net.ipv6.conf.\$SYSCTL_IF.autoconf = 1
|
||||
net.ipv6.conf.\$SYSCTL_IF.accept_ra = 1
|
||||
net.ipv6.conf.\$SYSCTL_IF.use_tempaddr = 0
|
||||
EOT
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
# place only if not set via IPv4 parts
|
||||
if [ -z "${_set_ipv4}" ]; then
|
||||
echo "MTU=${mtu}"
|
||||
fi
|
||||
|
||||
cat <<EOT >> "/etc/sysconfig/network/ifsysctl-${dev}"
|
||||
net.ipv6.conf.\$SYSCTL_IF.mtu = ${mtu}
|
||||
EOT
|
||||
fi
|
||||
|
||||
### Red Hat family ###
|
||||
else
|
||||
if [ "${ip6_method}" = "auto" ] ; then
|
||||
cat <<EOT
|
||||
IPV6INIT=yes
|
||||
IPV6_AUTOCONF=yes
|
||||
EOT
|
||||
else
|
||||
cat <<EOT
|
||||
IPV6INIT=yes
|
||||
IPV6_AUTOCONF=yes
|
||||
DHCPV6C=yes
|
||||
EOT
|
||||
fi
|
||||
|
||||
if [ -n "${mtu}" ]; then
|
||||
echo "IPV6_MTU=${mtu}"
|
||||
fi
|
||||
|
||||
echo 'IPV6_PRIVACY=no'
|
||||
fi
|
||||
}
|
||||
|
||||
gen_alias6_conf()
|
||||
{
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo "IPADDR_A6A${alias_num}=${ip6}/${ip6_prefix_length:-64}"
|
||||
else
|
||||
ipv6addr_secondaries="${ipv6addr_secondaries} ${ip6}/${ip6_prefix_length:-64}"
|
||||
fi
|
||||
|
||||
if [ -n "${ip6_ula}" ]; then
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo "IPADDR_A6B${alias_num}=${ip6_ula}/64"
|
||||
else
|
||||
ipv6addr_secondaries="${ipv6addr_secondaries} ${ip6_ula}/64"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
gen_network_configuration()
|
||||
{
|
||||
### Red Hat family ###
|
||||
if [ -d /etc/sysconfig/network-scripts ]; then
|
||||
config_path=/etc/sysconfig/network-scripts
|
||||
|
||||
# if disabled, enable networking via network scripts
|
||||
if [ -f /etc/sysconfig/network ] &&
|
||||
! grep -qx 'NETWORKING=yes' /etc/sysconfig/network;
|
||||
then
|
||||
sed -i -e '/^NETWORKING=/d' /etc/sysconfig/network
|
||||
echo 'NETWORKING=yes' >>/etc/sysconfig/network
|
||||
fi
|
||||
|
||||
### SUSE family ###
|
||||
elif [ -d /etc/sysconfig/network ]; then
|
||||
config_path=/etc/sysconfig/network
|
||||
fi
|
||||
|
||||
_context_interfaces=$(get_context_interfaces)
|
||||
|
||||
for _iface in $_context_interfaces; do
|
||||
setup_iface_vars "$_iface"
|
||||
|
||||
skip_interface && continue
|
||||
|
||||
# in IPv6 sections we might need to know if
|
||||
# any IPv4 configuration was already placed
|
||||
_set_ipv4=
|
||||
|
||||
# cumulative variable
|
||||
ipv6addr_secondaries=''
|
||||
|
||||
{
|
||||
rm -f "/etc/sysconfig/network-scripts/route-${dev}"
|
||||
rm -f "/etc/sysconfig/network-scripts/route6-${dev}"
|
||||
rm -f "/etc/sysconfig/network/ifroute-${dev}"
|
||||
rm -f "/etc/sysconfig/network/ifsysctl-${dev}"
|
||||
|
||||
cat <<EOT
|
||||
# Generated by one-context
|
||||
DEVICE=${dev}
|
||||
NM_CONTROLLED=no
|
||||
TYPE=Ethernet
|
||||
EOT
|
||||
|
||||
# SUSE family
|
||||
if [ "${config_path}" = "/etc/sysconfig/network" ]; then
|
||||
echo "STARTMODE=auto"
|
||||
else
|
||||
echo "ONBOOT=yes"
|
||||
fi
|
||||
|
||||
case "${method}" in
|
||||
''|static)
|
||||
if [ -n "${ip}" ]; then
|
||||
gen_iface_conf
|
||||
_set_ipv4=yes
|
||||
fi
|
||||
;;
|
||||
dhcp)
|
||||
gen_dhcp_conf
|
||||
_set_ipv4=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${ip6_method}" in
|
||||
''|static)
|
||||
[ -n "${ip6}" ] && gen_iface6_conf
|
||||
;;
|
||||
auto|dhcp)
|
||||
gen_dhcp6_conf
|
||||
;;
|
||||
disable)
|
||||
:
|
||||
;;
|
||||
esac
|
||||
|
||||
_aliases=$(get_interface_alias "$_iface")
|
||||
alias_num=0
|
||||
|
||||
for _nic_alias in $_aliases; do
|
||||
setup_ipadr_vars "$_nic_alias"
|
||||
setup_ip6adr_vars "$_nic_alias"
|
||||
setup_alias_vars "$_nic_alias"
|
||||
|
||||
if [ -z "${detach}" ]; then
|
||||
if ! is_true "${external}" ; then
|
||||
[ -n "${ip}" ] && gen_alias_conf
|
||||
[ -n "${ip6}" ] && gen_alias6_conf
|
||||
|
||||
if [ -n "${ip}${ip6}" ]; then
|
||||
alias_num=$((alias_num + 1))
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# on Red Hats, we need just a single configuration
|
||||
# entry with all additional IPv6 addresses
|
||||
if [ -n "${ipv6addr_secondaries}" ]; then
|
||||
echo "IPV6ADDR_SECONDARIES='${ipv6addr_secondaries## }'"
|
||||
fi
|
||||
} > "${config_path}/ifcfg-${dev}"
|
||||
|
||||
# TODO: do we want this here?
|
||||
ifup "${dev}"
|
||||
|
||||
done
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2010-2016, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
export DNS_VARIABLES="DNS $(env | sed 's/=.*$//' | grep -E '^ETH[0-9]+_DNS$' | sort)"
|
||||
|
||||
export SEARCH_VARIABLES="SEARCH_DOMAIN $(env | sed 's/=.*$//' | grep -E '^ETH[0-9]+_SEARCH_DOMAIN$' | sort)"
|
||||
|
||||
nameservers=$(
|
||||
for var in ${DNS_VARIABLES}; do
|
||||
value=$(eval "echo \"\${$var}\"")
|
||||
if [ -n "$value" ]; then
|
||||
echo "$value"
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
searchdomains=$(
|
||||
for var in ${SEARCH_VARIABLES}; do
|
||||
value=$(eval "echo \"\${$var}\"")
|
||||
if [ -n "$value" ]; then
|
||||
echo "$value"
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
[ -z "$nameservers" ] && exit 0
|
||||
|
||||
if [ -L /etc/resolv.conf ]; then
|
||||
unlink /etc/resolv.conf
|
||||
else
|
||||
echo -n '' > /etc/resolv.conf
|
||||
fi
|
||||
|
||||
for nameserver in $nameservers; do
|
||||
echo nameserver $nameserver >> /etc/resolv.conf
|
||||
done
|
||||
|
||||
if [ -f /etc/sysconfig/network/config ]; then
|
||||
sed -i "/^NETCONFIG_DNS_STATIC_SERVERS=/ s/=.*$/=\"$nameservers\"/" /etc/sysconfig/network/config
|
||||
fi
|
||||
|
||||
[ -z "$searchdomains" ] && exit 0
|
||||
|
||||
echo search $searchdomains >> /etc/resolv.conf
|
||||
|
||||
if [ -f /etc/sysconfig/network/config ]; then
|
||||
sed -i "/^NETCONFIG_DNS_STATIC_SEARCHLIST=/ s/=.*$/=\"$searchdomains\"/" /etc/sysconfig/network/config
|
||||
fi
|
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "${VROUTER_ID}${VROUTER_KEEPALIVED_ID}" ]; then
|
||||
if [ -f /etc/sysctl.d/01-one.conf ]; then
|
||||
unlink /etc/sysctl.d/01-one.conf
|
||||
sysctl -w net.ipv4.ip_forward=0
|
||||
fi
|
||||
else
|
||||
echo 'net.ipv4.ip_forward = 1' >/etc/sysctl.d/01-one.conf
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
fi
|
@ -1,32 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "${VROUTER_ID}${VROUTER_KEEPALIVED_ID}" ]; then
|
||||
if [ -f /etc/sysctl.d/01-one.conf ]; then
|
||||
unlink /etc/sysctl.d/01-one.conf
|
||||
sysctl -w net.ipv4.ip_forward=0
|
||||
fi
|
||||
else
|
||||
echo 'net.ipv4.ip_forward = 1' >/etc/sysctl.d/01-one.conf
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
fi
|
@ -1,57 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
#!/bin/bash
|
||||
|
||||
ENV_FILE=/var/run/one-context/one_env
|
||||
MOUNT_DIR="${MOUNT_DIR:-/mnt}"
|
||||
TOKEN_FILE="${MOUNT_DIR}/token.txt"
|
||||
MOUNT_DIR=${MOUNT_DIR:-/mnt}
|
||||
TOKENTXT=$(cat "${MOUNT_DIR}/token.txt")
|
||||
|
||||
if [ -n "$ONEGATE_TOKEN" ]; then
|
||||
TOKENTXT="$ONEGATE_TOKEN"
|
||||
elif [ -f "$TOKEN_FILE" ]; then
|
||||
TOKENTXT=$(cat "$TOKEN_FILE")
|
||||
fi
|
||||
|
||||
umask 0377
|
||||
echo "export TOKENTXT=\"$TOKENTXT\"" > "$ENV_FILE"
|
||||
echo "export VMID=\"$VMID\"" >> "$ENV_FILE"
|
||||
echo "export ONEGATE_ENDPOINT=\"$ONEGATE_ENDPOINT\"" >> "$ENV_FILE"
|
||||
echo "export TOKENTXT=\"$TOKENTXT\"" > $ENV_FILE
|
||||
echo "export VMID=\"$VMID\"" >> $ENV_FILE
|
||||
echo "export ONEGATE_ENDPOINT=\"$ONEGATE_ENDPOINT\"" >> $ENV_FILE
|
||||
|
||||
function export_rc_vars
|
||||
{
|
||||
if [ -n "$1" ] && [ -f "$1" ] ; then
|
||||
ONE_VARS=$(grep -E -e '^[a-zA-Z\-\_0-9]*=' "$1" | sed 's/=.*$//')
|
||||
if [ -f $1 ] ; then
|
||||
ONE_VARS=$(cat $1 | egrep -e '^[a-zA-Z\-\_0-9]*=' | sed 's/=.*$//')
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
. "$1"
|
||||
. $1
|
||||
|
||||
for v in $ONE_VARS; do
|
||||
echo "export $v=\"${!v}\"" >> "$ENV_FILE"
|
||||
echo "export $v=\"${!v}\"" >> $ENV_FILE
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
export_rc_vars "${CONTEXT_FILE}"
|
||||
export_rc_vars ${CONTEXT_FILE}
|
||||
|
||||
chown "root:$(id -gn root)" "$ENV_FILE"
|
||||
chmod 0400 "$ENV_FILE"
|
||||
chown root:root $ENV_FILE
|
||||
chmod a+r $ENV_FILE
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
[ -x /sbin/restorecon ] && restorecon -R -v /root/.ssh
|
@ -1,32 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
#!/bin/bash
|
||||
|
||||
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
|
||||
if ssh-keygen -A; then
|
||||
if type restorecon >/dev/null 2>&1; then
|
||||
restorecon -R -v /etc/ssh/
|
||||
fi
|
||||
else
|
||||
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure openssh-server
|
||||
fi
|
||||
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure openssh-server
|
||||
fi
|
||||
|
||||
|
@ -1,27 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Linux
|
||||
for _dev_tty in $(find /dev -type c -name 'tty[0-9]*'); do
|
||||
TERM=linux setterm -blank 0 -powerdown 0 >>"${_dev_tty}"
|
||||
done
|
@ -1,60 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# THIS IS A CONTEXTUALIZATION GUARD
|
||||
if [ "$1" != 'local' ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
_pam_file="/etc/pam.d/login"
|
||||
if [ ! -f "${_pam_file}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
_kernel="$(uname -s)"
|
||||
if [ "${_kernel}" = 'FreeBSD' ]; then
|
||||
SED_I="sed -i ''"
|
||||
else
|
||||
SED_I="sed -i''"
|
||||
fi
|
||||
|
||||
### Defaults
|
||||
|
||||
# By default, disable pam_securetty in the containers.
|
||||
# For virtualized machines, have the securetty enabled.
|
||||
if grep -qia 'container=' /proc/1/environ 2>/dev/null; then
|
||||
SECURETTY=${SECURETTY:-NO}
|
||||
fi
|
||||
|
||||
SECURETTY=${SECURETTY:-YES}
|
||||
SECURETTY=${SECURETTY^^}
|
||||
|
||||
###
|
||||
|
||||
_note='# one-contextd'
|
||||
|
||||
if [ "${SECURETTY}" = 'YES' ]; then
|
||||
if grep -qE "^#.*pam_securetty.*${_note}" "${_pam_file}"; then
|
||||
eval "${SED_I} -e 's/^#\([^#]*\)${_note}.*$/\1/' -e 's/[[:space:]]*$//' \"${_pam_file}\""
|
||||
fi
|
||||
|
||||
elif [ "${SECURETTY}" = 'NO' ]; then
|
||||
if grep -qE '^[^#]*pam_securetty' "${_pam_file}"; then
|
||||
eval "${SED_I} -e 's/^\([^#]*pam_securetty.*\)$/#\1 ${_note}/' \"${_pam_file}\""
|
||||
fi
|
||||
fi
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# Copyright 2010-2016, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
@ -1,48 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
set -e
|
||||
#!/bin/bash
|
||||
|
||||
MOUNT_DIR=${MOUNT_DIR:-/mnt}
|
||||
TMP_DIR=$(mktemp -d "${TMP_DIR:-/var/lib/one-context/tmp}/one-context.XXXXXX")
|
||||
START_SCRIPT_AVAILABLE=no
|
||||
|
||||
TMP_DIR=$(mktemp -d "/tmp/one-context.XXXXXX")
|
||||
TMP_FILE="${TMP_DIR}/one-start-script"
|
||||
START_SCRIPT_AVAILABLE=no
|
||||
|
||||
cleanup()
|
||||
{
|
||||
rm -rf "${TMP_DIR}"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
chmod 0700 "${TMP_DIR}"
|
||||
chmod 700 "${TMP_DIR}"
|
||||
|
||||
if [ -n "${START_SCRIPT_BASE64}" ]; then
|
||||
echo "${START_SCRIPT_BASE64}" | base64 -d > "${TMP_FILE}"
|
||||
if [ -n "$START_SCRIPT_BASE64" ]; then
|
||||
echo -en "$START_SCRIPT_BASE64" | base64 -d > $TMP_FILE
|
||||
START_SCRIPT_AVAILABLE=yes
|
||||
elif [ -n "${START_SCRIPT}" ]; then
|
||||
echo "${START_SCRIPT}" > "${TMP_FILE}"
|
||||
elif [ -n "$START_SCRIPT" ]; then
|
||||
echo -en "$START_SCRIPT" > $TMP_FILE
|
||||
START_SCRIPT_AVAILABLE=yes
|
||||
fi
|
||||
|
||||
if [ "${START_SCRIPT_AVAILABLE}" = "yes" ]; then
|
||||
cd "${MOUNT_DIR}"
|
||||
chmod +x "${TMP_FILE}"
|
||||
"${TMP_FILE}"
|
||||
if [ "$START_SCRIPT_AVAILABLE" = "yes" ]; then
|
||||
cd $MOUNT_DIR
|
||||
chmod +x $TMP_FILE
|
||||
$TMP_FILE
|
||||
fi
|
||||
|
||||
rm -rf "${TMP_DIR}"
|
||||
|
@ -1,55 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
#!/bin/bash
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
MOUNT_DIR=${MOUNT_DIR:-/mnt}
|
||||
TMP_DIR=$(mktemp -d "/tmp/one-context.XXXXXX")
|
||||
|
||||
set -e
|
||||
chmod 700 "${TMP_DIR}"
|
||||
|
||||
MOUNT_DIR="${MOUNT_DIR:-/mnt}"
|
||||
TMP_DIR=$(mktemp -d "${TMP_DIR:-/var/lib/one-context/tmp}/one-context.XXXXXX")
|
||||
|
||||
cleanup()
|
||||
{
|
||||
rm -rf "${TMP_DIR}"
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
chmod 0700 "${TMP_DIR}"
|
||||
|
||||
if [ -z "${INIT_SCRIPTS}" ]; then
|
||||
if [ -f "${MOUNT_DIR}/init.sh" ]; then
|
||||
if [ -z "$INIT_SCRIPTS" ]; then
|
||||
if [ -f "$MOUNT_DIR/init.sh" ]; then
|
||||
INIT_SCRIPTS=init.sh
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "${MOUNT_DIR}"
|
||||
cd $MOUNT_DIR
|
||||
|
||||
_result=0
|
||||
for f in $INIT_SCRIPTS; do
|
||||
f=$(basename "$f")
|
||||
|
||||
if [ -f "$f" ] ; then
|
||||
cp "${f}" "${TMP_DIR}/"
|
||||
chmod +x "${TMP_DIR}/${f}"
|
||||
"${TMP_DIR}/${f}" || _result=$?
|
||||
else
|
||||
echo "ERROR: Init script does not exist: ${f}" >&2
|
||||
_result=1
|
||||
fi
|
||||
cp "$f" "${TMP_DIR}/"
|
||||
chmod +x $TMP_DIR/$f
|
||||
$TMP_DIR/$f
|
||||
done
|
||||
|
||||
exit $_result
|
||||
rm -rf "${TMP_DIR}"
|
||||
|
@ -1,5 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Periodically run one-context-reconfigure on VMware
|
||||
if [ "$(virt-what 2>/dev/null)" = 'vmware' ]; then
|
||||
service one-context-reconfigure restart >/dev/null 2>&1
|
||||
fi
|
@ -1,67 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# PROVIDE: one-context
|
||||
# REQUIRE: LOGIN NETWORKING one-context-local
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context"
|
||||
desc="OpenNebula contextualization"
|
||||
rcvar="${name}_enable"
|
||||
start_precmd="${name}_prestart"
|
||||
stop_cmd="${name}_stop"
|
||||
command="/usr/sbin/one-contextd"
|
||||
command_args="network"
|
||||
|
||||
one_context_get_pids()
|
||||
{
|
||||
# get main process PID and direct children processes
|
||||
for _pid in $(pgrep -f "${command} ${command_args}$"); do
|
||||
echo "${_pid}"
|
||||
pgrep -P "${_pid}"
|
||||
done
|
||||
}
|
||||
|
||||
one_context_prestart()
|
||||
{
|
||||
if [ -f /var/run/one-context/context.sh.network ]; then
|
||||
warn "Service started once already."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
one_context_stop()
|
||||
{
|
||||
echo -n "Stopping ${name}"
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
for _pid in $_pids; do
|
||||
kill -- "${_pid}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
echo '.'
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_enable:="yes"}
|
||||
run_rc_command "$1"
|
@ -1,97 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# PROVIDE: one-context-force
|
||||
# REQUIRE: one-context-local one-context
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_force"
|
||||
desc="OpenNebula forced reconfiguration"
|
||||
rcvar="${name}_enable"
|
||||
start_precmd="${name}_prestart"
|
||||
stop_cmd="${name}_stop"
|
||||
status_cmd="${name}_status"
|
||||
command="/usr/sbin/one-context-run"
|
||||
command_args="force"
|
||||
|
||||
one_context_get_pids()
|
||||
{
|
||||
# get main process PID and direct children processes
|
||||
for _pid in $(pgrep -f "${command} ${command_args}$"); do
|
||||
echo "${_pid}"
|
||||
pgrep -P "${_pid}"
|
||||
done
|
||||
}
|
||||
|
||||
one_context_force_status()
|
||||
{
|
||||
_pids=$(one_context_get_pids)
|
||||
|
||||
if [ -z "${_pids}" ]; then
|
||||
echo "${name} is not running."
|
||||
return 1
|
||||
else
|
||||
echo "${name} is running as pids ${_pids}."
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
one_context_force_prestart()
|
||||
{
|
||||
if ! [ -f /var/run/one-context/context.sh.local ]; then
|
||||
warn "Service one-context-local must run first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! [ -f /var/run/one-context/context.sh.network ]; then
|
||||
warn "Service one-context must run first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
if [ -n "${_pids}" ]; then
|
||||
warn "${name} already running? (pids=${_pids})"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
one_context_force_stop()
|
||||
{
|
||||
echo -n "Stopping ${name}"
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
for _pid in $_pids; do
|
||||
kill -- "${_pid}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
echo '.'
|
||||
}
|
||||
|
||||
# run without any delay
|
||||
export TIMEOUT=0
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_force_enable:="no"}
|
||||
run_rc_command "$1"
|
@ -1,68 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# PROVIDE: one-context-local
|
||||
# REQUIRE: FILESYSTEMS ldconfig
|
||||
# BEFORE: NETWORKING hostname
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_local"
|
||||
desc="OpenNebula pre-networking contextualization"
|
||||
rcvar="${name}_enable"
|
||||
start_precmd="${name}_prestart"
|
||||
stop_cmd="${name}_stop"
|
||||
command="/usr/sbin/one-contextd"
|
||||
command_args="local"
|
||||
|
||||
one_context_get_pids()
|
||||
{
|
||||
# get main process PID and direct children processes
|
||||
for _pid in $(pgrep -f "${command} ${command_args}$"); do
|
||||
echo "${_pid}"
|
||||
pgrep -P "${_pid}"
|
||||
done
|
||||
}
|
||||
|
||||
one_context_local_prestart()
|
||||
{
|
||||
if [ -f /var/run/one-context/context.sh.local ]; then
|
||||
warn "Service started once already."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
one_context_local_stop()
|
||||
{
|
||||
echo -n "Stopping ${name}"
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
for _pid in $_pids; do
|
||||
kill -- "${_pid}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
echo '.'
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_local_enable:="yes"}
|
||||
run_rc_command "$1"
|
@ -1,99 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# PROVIDE: one-context-reconfigure
|
||||
# REQUIRE: one-context-local one-context
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_reconfigure"
|
||||
desc="OpenNebula reconfiguration"
|
||||
rcvar="${name}_enable"
|
||||
start_precmd="${name}_prestart"
|
||||
stop_cmd="${name}_stop"
|
||||
status_cmd="${name}_status"
|
||||
command="/usr/sbin/one-context-run"
|
||||
|
||||
one_context_get_pids()
|
||||
{
|
||||
# get main process PID and direct children processes
|
||||
for _pid in $(pgrep -f "${command}$"); do
|
||||
echo "${_pid}"
|
||||
pgrep -P "${_pid}"
|
||||
done
|
||||
}
|
||||
|
||||
one_context_reconfigure_status()
|
||||
{
|
||||
_pids=$(one_context_get_pids)
|
||||
|
||||
if [ -z "${_pids}" ]; then
|
||||
echo "${name} is not running."
|
||||
return 1
|
||||
else
|
||||
echo "${name} is running as pids ${_pids}."
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
one_context_reconfigure_prestart()
|
||||
{
|
||||
if ! [ -f /var/run/one-context/context.sh.local ]; then
|
||||
warn "Service one-context-local must run first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! [ -f /var/run/one-context/context.sh.network ]; then
|
||||
warn "Service one-context must run first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# immediate reconfiguration terminates delayed reconfiguration
|
||||
service one-context-reconfigure-delayed onestop >/dev/null 2>&1
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
if [ -n "${_pids}" ]; then
|
||||
warn "${name} already running? (pids=${_pids})"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
one_context_reconfigure_stop()
|
||||
{
|
||||
echo -n "Stopping ${name}"
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
for _pid in $_pids; do
|
||||
kill -- "${_pid}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
echo '.'
|
||||
}
|
||||
|
||||
# run without any delay
|
||||
export TIMEOUT=0
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_reconfigure_enable:="no"}
|
||||
run_rc_command "$1"
|
@ -1,93 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# PROVIDE: one-context-reconfigure-delayed
|
||||
# REQUIRE: one-context-local one-context
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_reconfigure_delayed"
|
||||
desc="OpenNebula delayed reconfiguration"
|
||||
rcvar="${name}_enable"
|
||||
start_precmd="${name}_prestart"
|
||||
stop_cmd="${name}_stop"
|
||||
status_cmd="${name}_status"
|
||||
command="/usr/sbin/one-context-run"
|
||||
|
||||
one_context_get_pids()
|
||||
{
|
||||
# get main process PID and direct children processes
|
||||
for _pid in $(pgrep -f "${command}$"); do
|
||||
echo "${_pid}"
|
||||
pgrep -P "${_pid}"
|
||||
done
|
||||
}
|
||||
|
||||
one_context_reconfigure_delayed_status()
|
||||
{
|
||||
_pids=$(one_context_get_pids)
|
||||
|
||||
if [ -z "${_pids}" ]; then
|
||||
echo "${name} is not running."
|
||||
return 1
|
||||
else
|
||||
echo "${name} is running as pids ${_pids}."
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
one_context_reconfigure_delayed_prestart()
|
||||
{
|
||||
if ! [ -f /var/run/one-context/context.sh.local ]; then
|
||||
warn "Service one-context-local must run first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! [ -f /var/run/one-context/context.sh.network ]; then
|
||||
warn "Service one-context must run first."
|
||||
return 1
|
||||
fi
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
if [ -n "${_pids}" ]; then
|
||||
warn "${name} already running? (pids=${_pids})"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
one_context_reconfigure_delayed_stop()
|
||||
{
|
||||
echo -n "Stopping ${name}"
|
||||
|
||||
_pids=$(one_context_get_pids)
|
||||
for _pid in $_pids; do
|
||||
kill -- "${_pid}" >/dev/null 2>&1
|
||||
done
|
||||
|
||||
echo '.'
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_reconfigure_delayed_enable:="no"}
|
||||
run_rc_command "$1"
|
@ -1,3 +0,0 @@
|
||||
[Unit]
|
||||
# https://github.com/OpenNebula/one/issues/5504
|
||||
ConditionVirtualization=!container
|
@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
poweroff
|
||||
|
@ -1,36 +1,12 @@
|
||||
# NIC detach workaround for recontextualization on OpenNebula < 5.10.3
|
||||
# https://github.com/OpenNebula/one/issues/4130
|
||||
# https://github.com/OpenNebula/one/issues/4194
|
||||
SUBSYSTEM=="net", ACTION=="remove", \
|
||||
ENV{ID_BUS}=="?*", \
|
||||
RUN+="/bin/sh -c 'test -f /var/run/one-context/context.sh.local && echo >> /var/run/one-context/context.sh.local; test -f /var/run/one-context/context.sh.network && echo >> /var/run/one-context/context.sh.network'"
|
||||
|
||||
# On NIC hotplug the delayed reconfiguration is triggered.
|
||||
# On NIC hogplug the delayed reconfiguration is triggered.
|
||||
SUBSYSTEM=="net", ACTION=="add", \
|
||||
RUN+="/bin/sh -c '/bin/systemctl --no-block start one-context-reconfigure-delayed.service || /usr/sbin/service one-context-reconfigure-delayed start'"
|
||||
|
||||
SUBSYSTEM=="net", ACTION=="remove", \
|
||||
RUN+="/bin/sh -c '/bin/systemctl --no-block start one-context-reconfigure-delayed.service || /usr/sbin/service one-context-reconfigure-delayed start'"
|
||||
|
||||
# Change of CONTEXT CD-ROM triggers immediate reconfiguration,
|
||||
# which stops any existing delayed reconfiguration.
|
||||
SUBSYSTEM=="block", ACTION=="change", \
|
||||
ENV{ID_CDROM}=="1", \
|
||||
ENV{ID_FS_TYPE}=="iso9660", \
|
||||
ENV{ID_FS_LABEL_ENC}=="CONTEXT", \
|
||||
RUN+="/bin/sh -c '/bin/systemctl --no-block start one-context-reconfigure.service || /usr/sbin/service one-context-reconfigure start'"
|
||||
TAG+="systemd", ENV{SYSTEMD_WANTS}+="one-context-reconfigure-delayed.service", \
|
||||
RUN+="/usr/bin/timeout 5 /usr/sbin/service one-context-reconfigure-delayed start"
|
||||
|
||||
# Handle disk resize
|
||||
# When CONTEXT CD-ROM is changed, it generates 2 events. This rule takes
|
||||
# every second event and triggers systemd service one-context-reconfigure.
|
||||
# This service also stops any existing delayed reconfiguration.
|
||||
SUBSYSTEM=="block", ACTION=="change", \
|
||||
ENV{RESIZE}=="1", \
|
||||
RUN+="/bin/sh -c '/bin/systemctl --no-block start one-context-force.service || /usr/sbin/service one-context-force start'"
|
||||
|
||||
SUBSYSTEM=="scsi", ACTION=="change", \
|
||||
ENV{SDEV_UA}=="CAPACITY_DATA_HAS_CHANGED", \
|
||||
RUN+="/bin/sh -c '/bin/systemctl --no-block start one-context-force.service || /usr/sbin/service one-context-force start'"
|
||||
|
||||
# Handle swap hot-attach
|
||||
SUBSYSTEM=="block", ACTION=="add", \
|
||||
ENV{ID_FS_TYPE}=="swap", \
|
||||
ENV{DM_ACTIVATION}!="1", \
|
||||
RUN+="/bin/sh -c '/bin/systemctl --no-block start one-context-force.service || /usr/sbin/service one-context-force start'"
|
||||
ENV{ID_FS_TYPE}=="iso9660" ENV{ID_FS_LABEL_ENC}=="CONTEXT", \
|
||||
ENV{SEQNUM}=="*[02468]", \
|
||||
RUN+="/usr/sbin/service one-context-reconfigure start"
|
||||
|
@ -1,36 +1,11 @@
|
||||
# NIC detach workaround for recontextualization on OpenNebula < 5.10.3
|
||||
# https://github.com/OpenNebula/one/issues/4130
|
||||
# https://github.com/OpenNebula/one/issues/4194
|
||||
SUBSYSTEM=="net", ACTION=="remove", \
|
||||
ENV{ID_BUS}=="?*", \
|
||||
RUN+="/bin/sh -c 'test -f /var/run/one-context/context.sh.local && echo >> /var/run/one-context/context.sh.local; test -f /var/run/one-context/context.sh.network && echo >> /var/run/one-context/context.sh.network'"
|
||||
|
||||
# On NIC hotplug the delayed reconfiguration is triggered.
|
||||
# On NIC hogplug the delayed reconfiguration is triggered.
|
||||
SUBSYSTEM=="net", ACTION=="add", \
|
||||
TAG+="systemd", ENV{SYSTEMD_WANTS}+="one-context-reconfigure-delayed.service"
|
||||
|
||||
SUBSYSTEM=="net", ACTION=="remove", \
|
||||
RUN+="/usr/bin/systemctl --no-block start one-context-reconfigure-delayed.service"
|
||||
|
||||
# Change of CONTEXT CD-ROM triggers immediate reconfiguration,
|
||||
# which stops any existing delayed reconfiguration.
|
||||
SUBSYSTEM=="block", ACTION=="change", \
|
||||
ENV{ID_CDROM}=="1", \
|
||||
ENV{ID_FS_TYPE}=="iso9660", \
|
||||
ENV{ID_FS_LABEL_ENC}=="CONTEXT", \
|
||||
RUN+="/usr/bin/systemctl --no-block start one-context-reconfigure.service"
|
||||
|
||||
# Handle disk resize
|
||||
# When CONTEXT CD-ROM is changed, it generates 2 events. This rule takes
|
||||
# every second event and triggers systemd service one-context-reconfigure.
|
||||
# This service also stops any existing delayed reconfiguration.
|
||||
SUBSYSTEM=="block", ACTION=="change", \
|
||||
ENV{RESIZE}=="1", \
|
||||
RUN+="/usr/bin/systemctl --no-block start one-context-force.service"
|
||||
|
||||
SUBSYSTEM=="scsi", ACTION=="change", \
|
||||
ENV{SDEV_UA}=="CAPACITY_DATA_HAS_CHANGED", \
|
||||
RUN+="/usr/bin/systemctl --no-block start one-context-force.service"
|
||||
|
||||
# Handle swap hot-attach
|
||||
SUBSYSTEM=="block", ACTION=="add", \
|
||||
ENV{ID_FS_TYPE}=="swap", \
|
||||
ENV{DM_ACTIVATION}!="1", \
|
||||
RUN+="/usr/bin/systemctl --no-block start one-context-force.service"
|
||||
ENV{ID_FS_TYPE}=="iso9660" ENV{ID_FS_LABEL_ENC}=="CONTEXT", \
|
||||
ENV{SEQNUM}=="*[02468]", \
|
||||
RUN+="/bin/systemctl start one-context-reconfigure.service"
|
||||
|
@ -1,15 +0,0 @@
|
||||
[Unit]
|
||||
Description=OpenNebula forced reconfiguration
|
||||
After=one-context.service
|
||||
Requisite=one-context.service
|
||||
ConditionPathExists=/var/run/one-context/context.sh.local
|
||||
ConditionPathExists=/var/run/one-context/context.sh.network
|
||||
StartLimitInterval=0
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Environment=TIMEOUT=0
|
||||
ExecStart=/usr/sbin/one-context-run force
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -1,17 +0,0 @@
|
||||
[Unit]
|
||||
Description=OpenNebula early-networking contextualization
|
||||
Requires=one-context-local.service
|
||||
After=one-context-local.service
|
||||
After=NetworkManager.service systemd-networkd.service
|
||||
Wants=network.target
|
||||
Before=network.target
|
||||
Before=NetworkManager-wait-online.service systemd-networkd-wait-online.service
|
||||
ConditionPathExists=!/var/run/one-context/context.sh.online
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/sbin/one-contextd online
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -1,13 +1,12 @@
|
||||
[Unit]
|
||||
Description=OpenNebula delayed reconfiguration
|
||||
Description=OpenNebula delayed reconfiguration script
|
||||
After=one-context.service
|
||||
Requisite=one-context.service
|
||||
ConditionPathExists=/var/run/one-context/context.sh.network
|
||||
StartLimitInterval=0
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
ExecStart=/usr/sbin/one-context-run
|
||||
ExecStart=/usr/sbin/one-context-reconfigure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
@ -1,15 +1,14 @@
|
||||
[Unit]
|
||||
Description=OpenNebula reconfiguration
|
||||
Description=OpenNebula reconfiguration script
|
||||
After=one-context.service
|
||||
Requisite=one-context.service
|
||||
Conflicts=one-context-reconfigure-delayed.service
|
||||
ConditionPathExists=/var/run/one-context/context.sh.network
|
||||
StartLimitInterval=0
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Environment=TIMEOUT=0
|
||||
ExecStart=/usr/sbin/one-context-run
|
||||
ExecStart=/usr/sbin/one-context-reconfigure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
@ -1,11 +0,0 @@
|
||||
[Unit]
|
||||
Description=Periodic OpenNebula reconfiguration
|
||||
After=one-context.service
|
||||
ConditionVirtualization=vmware
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* *:*:0
|
||||
AccuracySec=1s
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# REQUIRE: one-context-local one-context
|
||||
# PROVIDE: one-context-force
|
||||
# Short-Description: OpenNebula forced reconfiguration
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_force"
|
||||
desc="OpenNebula forced reconfiguration"
|
||||
rcvar="${name}_enable"
|
||||
|
||||
command="/usr/sbin/one-context-run"
|
||||
command_args="force"
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_force_enable:="yes"}
|
||||
run_rc_command "$1"
|
||||
|
@ -1,37 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# REQUIRE: FILESYSTEMS
|
||||
# PROVIDE: one-context-local
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_local"
|
||||
desc="OpenNebula pre-networking contextualization"
|
||||
rcvar="${name}_enable"
|
||||
|
||||
command="/usr/sbin/one-contextd"
|
||||
command_args="local"
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_local_enable:="yes"}
|
||||
run_rc_command "$1"
|
||||
|
@ -1,36 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2021, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
|
||||
# not use this file except in compliance with the License. You may obtain #
|
||||
# a copy of the License at #
|
||||
# #
|
||||
# http://www.apache.org/licenses/LICENSE-2.0 #
|
||||
# #
|
||||
# Unless required by applicable law or agreed to in writing, software #
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, #
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
||||
# See the License for the specific language governing permissions and #
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# REQUIRE: one-context-local one-context
|
||||
# PROVIDE: one-context-reconfigure-delayed
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.subr
|
||||
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
|
||||
|
||||
name="one_context_reconfigure_delayed"
|
||||
desc="OpenNebula delayed reconfiguration"
|
||||
rcvar="${name}_enable"
|
||||
|
||||
command="/usr/sbin/one-context-run"
|
||||
|
||||
load_rc_config $name
|
||||
: ${one_context_reconfigure_delayed_enable:="yes"}
|
||||
run_rc_command "$1"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue