Addded Arch linux support for one-context. Moved the init.d directory to distro specific directories in order at add systemd compatability. 00-Network was also reworked to use systemd-networkd.pull/14/head
parent
8669f28e45
commit
ffdebdb018
@ -0,0 +1,239 @@
|
||||
#!/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. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
# 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")
|
||||
|
||||
if [ -z "$ip" ]; then
|
||||
ip=$(mac2ip $MAC)
|
||||
fi
|
||||
|
||||
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")
|
||||
|
||||
(
|
||||
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
|
||||
}
|
||||
|
||||
configure_network()
|
||||
{
|
||||
gen_network_configuration
|
||||
|
||||
systemctl restart systemd-networkd
|
||||
|
||||
sleep 2
|
||||
}
|
||||
|
||||
configure_network
|
||||
|
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
CONFIG_FILE="/etc/hostname"
|
||||
|
||||
function set_hostname() {
|
||||
NAME=$1
|
||||
|
||||
[ -n "$NAME" ] || exit 0
|
||||
|
||||
echo $NAME > $CONFIG_FILE
|
||||
|
||||
hostname $NAME
|
||||
}
|
||||
|
||||
function get_dns_name() {
|
||||
first_ip=$(hostname -I | cut -d' ' -f1)
|
||||
text=$(host $first_ip)
|
||||
[ $? = 0 ] || exit 0
|
||||
[[ $text == *"has no PTR record" ]] && exit 0
|
||||
name=$(echo "$text" | awk '{print $(NF)}' | sed 's/\.$//')
|
||||
echo $name
|
||||
}
|
||||
|
||||
if [ -n "$SET_HOSTNAME" ]; then
|
||||
set_hostname $SET_HOSTNAME
|
||||
elif [ -n "$DNS_HOSTNAME" ]; then
|
||||
set_hostname $(get_dns_name)
|
||||
fi
|
@ -0,0 +1,58 @@
|
||||
#!/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. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
function export_rc_vars
|
||||
{
|
||||
if [ -f $1 ] ; then
|
||||
ONE_VARS=`cat $1 | egrep -e '^[a-zA-Z\-\_0-9]*=' | sed 's/=.*$//'`
|
||||
|
||||
. $1
|
||||
|
||||
for v in $ONE_VARS; do
|
||||
export $v
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
function execute_scripts {
|
||||
SCRIPTS_DIR="/etc/one-context.d"
|
||||
for script in $SCRIPTS_DIR/*; do
|
||||
$script
|
||||
done
|
||||
}
|
||||
|
||||
function start {
|
||||
CONTEXT_DEV=`blkid -l -t LABEL="CONTEXT" -o device`
|
||||
if [ -e "$CONTEXT_DEV" ]; then
|
||||
mount -t iso9660 -L CONTEXT -o ro /mnt
|
||||
if [ -f /mnt/context.sh ]; then
|
||||
export_rc_vars /mnt/context.sh
|
||||
fi
|
||||
|
||||
execute_scripts
|
||||
|
||||
umount /mnt
|
||||
else
|
||||
if type vmtoolsd ; then
|
||||
vmtoolsd --cmd 'info-get guestinfo.opennebula.context' | openssl base64 -d > /tmp/context.sh
|
||||
export_rc_vars /tmp/context.sh
|
||||
fi
|
||||
|
||||
execute_scripts
|
||||
fi
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=Context script for open nebula
|
||||
Requires=network.target
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/one-context start
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=one-context
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# chkconfig: 2345 9 99
|
||||
# description: network reconfigure
|
||||
#
|
||||
# -------------------------------------------------------------------------- #
|
||||
# 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. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: vmcontext
|
||||
# Required-Start: $all
|
||||
# Required-Stop:
|
||||
# Should-Start: networking
|
||||
# Should-Stop: networking
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: OpenNebula contextualization script
|
||||
### END INIT INFO
|
||||
|
||||
function export_rc_vars
|
||||
{
|
||||
if [ -f $1 ] ; then
|
||||
ONE_VARS=`cat $1 | egrep -e '^[a-zA-Z\-\_0-9]*=' | sed 's/=.*$//'`
|
||||
|
||||
. $1
|
||||
|
||||
for v in $ONE_VARS; do
|
||||
export $v
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
function execute_scripts {
|
||||
SCRIPTS_DIR="/etc/one-context.d"
|
||||
for script in $SCRIPTS_DIR/*; do
|
||||
$script
|
||||
done
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
"start")
|
||||
CONTEXT_DEV=`blkid -l -t LABEL="CONTEXT" -o device`
|
||||
if [ -e "$CONTEXT_DEV" ]; then
|
||||
mount -t iso9660 -L CONTEXT -o ro /mnt
|
||||
if [ -f /mnt/context.sh ]; then
|
||||
export_rc_vars /mnt/context.sh
|
||||
fi
|
||||
|
||||
execute_scripts
|
||||
|
||||
umount /mnt
|
||||
else
|
||||
if type vmtoolsd ; then
|
||||
vmtoolsd --cmd 'info-get guestinfo.opennebula.context' | openssl base64 -d > /tmp/context.sh
|
||||
export_rc_vars /tmp/context.sh
|
||||
fi
|
||||
|
||||
execute_scripts
|
||||
fi
|
||||
;;
|
||||
|
||||
esac
|
||||
|
Loading…
Reference in new issue