diff --git a/base_arch/etc/one-context.d/00-network b/base_arch/etc/one-context.d/00-network new file mode 100755 index 0000000..e34693b --- /dev/null +++ b/base_arch/etc/one-context.d/00-network @@ -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 < /etc/systemd/network/${DEV}.network + + done +} + +configure_network() +{ + gen_network_configuration + + systemctl restart systemd-networkd + + sleep 2 +} + +configure_network + diff --git a/base_arch/etc/one-context.d/05-hostname b/base_arch/etc/one-context.d/05-hostname new file mode 100755 index 0000000..c5f9e1d --- /dev/null +++ b/base_arch/etc/one-context.d/05-hostname @@ -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 diff --git a/base_arch/usr/bin/one-context b/base_arch/usr/bin/one-context new file mode 100755 index 0000000..bfd0486 --- /dev/null +++ b/base_arch/usr/bin/one-context @@ -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 +} \ No newline at end of file diff --git a/base_arch/usr/lib/systemd/system/one-context.service b/base_arch/usr/lib/systemd/system/one-context.service new file mode 100644 index 0000000..f1d8b12 --- /dev/null +++ b/base_arch/usr/lib/systemd/system/one-context.service @@ -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 \ No newline at end of file diff --git a/base/etc/init.d/vmcontext b/base_deb/etc/init.d/vmcontext similarity index 100% rename from base/etc/init.d/vmcontext rename to base_deb/etc/init.d/vmcontext diff --git a/base_rpm/etc/init.d/vmcontext b/base_rpm/etc/init.d/vmcontext new file mode 100755 index 0000000..8ba3fcc --- /dev/null +++ b/base_rpm/etc/init.d/vmcontext @@ -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 +