rhtyd closed pull request #2214: Speed-up VR initialisation/configuration URL: https://github.com/apache/cloudstack/pull/2214
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/systemvm/patches/debian/buildsystemvm.sh b/systemvm/patches/debian/buildsystemvm.sh index a34b1dd0a61..f8726439925 100755 --- a/systemvm/patches/debian/buildsystemvm.sh +++ b/systemvm/patches/debian/buildsystemvm.sh @@ -228,7 +228,7 @@ cat > etc/init.d/iptables-persistent << EOF #!/bin/sh ### BEGIN INIT INFO # Provides: iptables -# Required-Start: mountkernfs $local_fs +# Required-Start: mountkernfs $local_fs cloud-early-init # Required-Stop: $local_fs # Should-Start: cloud-early-config # Default-Start: S @@ -418,6 +418,8 @@ services() { /bin/cp -r ${scriptdir}/config/* ./ chroot . chkconfig xl2tpd off + chroot . chkconfig --add cloud-early-init + chroot . chkconfig cloud-early-init on chroot . chkconfig --add cloud-early-config chroot . chkconfig cloud-early-config on chroot . chkconfig --add iptables-persistent diff --git a/systemvm/patches/debian/config/etc/init.d/cloud b/systemvm/patches/debian/config/etc/init.d/cloud index f9a9915223e..47dd47b74da 100755 --- a/systemvm/patches/debian/config/etc/init.d/cloud +++ b/systemvm/patches/debian/config/etc/init.d/cloud @@ -1,11 +1,11 @@ -#!/bin/bash +#!/bin/bash ### BEGIN INIT INFO # Provides: cloud -# Required-Start: mountkernfs $local_fs cloud-early-config +# Required-Start: mountkernfs $local_fs cloud-early-init # Required-Stop: $local_fs -# Should-Start: -# Should-Stop: -# Default-Start: +# Should-Start: +# Should-Stop: +# Default-Start: # Default-Stop: 0 1 6 # Short-Description: Start up the CloudStack cloud service ### END INIT INFO @@ -44,7 +44,7 @@ for i in $CMDLINE do # search for foo=bar pattern and cut out foo FIRSTPATTERN=$(echo $i | cut -d= -f1) - case $FIRSTPATTERN in + case $FIRSTPATTERN in type) TYPE=$(echo $i | cut -d= -f2) ;; @@ -104,7 +104,7 @@ start() { then (cd $CLOUDSTACK_HOME/systemvm; nohup ./run.sh > $LOG_FILE 2>&1 & ) pid=$(get_pids) - echo $pid > /var/run/cloud.pid + echo $pid > /var/run/cloud.pid fi _success else @@ -137,7 +137,7 @@ status() { return 0 } -[ "$ENABLED" != 0 ] || exit 0 +[ "$ENABLED" != 0 ] || exit 0 case "$1" in start) start diff --git a/systemvm/patches/debian/config/etc/init.d/cloud-early-config b/systemvm/patches/debian/config/etc/init.d/cloud-early-config index 3bdebdbb798..cfbdd90f1cb 100755 --- a/systemvm/patches/debian/config/etc/init.d/cloud-early-config +++ b/systemvm/patches/debian/config/etc/init.d/cloud-early-config @@ -1,10 +1,10 @@ #!/bin/bash ### BEGIN INIT INFO # Provides: cloud-early-config -# Required-Start: mountkernfs $local_fs -# Required-Stop: $local_fs -# Should-Start: -# Should-Stop: +# Required-Start: mountkernfs $local_fs cloud-early-init +# Required-Stop: $local_fs cloud-early-init +# Should-Start: +# Should-Stop: # Default-Start: S # Default-Stop: 0 6 # Short-Description: configure according to cmdline @@ -43,7 +43,7 @@ rm -f /var/cache/cloud/boot_up_done . /lib/lsb/init-functions log_it() { - echo "$(date) $@" >> /var/log/cloud.log + echo "$(date) cloud-early-config $@" >> /var/log/cloud.log log_action_msg "$@" } @@ -52,11 +52,11 @@ init_interfaces_orderby_macs() { total_nics=${#macs[@]} interface_file=${2:-"/etc/network/interfaces"} rule_file=${3:-"/etc/udev/rules.d/70-persistent-net.rules"} - + echo -n "auto lo" > $interface_file for((i=0; i<total_nics; i++)) do - if [[ $i < 3 ]] + if [[ $i < 3 ]] then echo -n " eth$i" >> $interface_file fi @@ -70,7 +70,7 @@ EOF echo "" > $rule_file for((i=0; i < ${#macs[@]}; i++)) do - echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"${macs[$i]}\", NAME=\"eth$i\"" >> $rule_file + echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"${macs[$i]}\", NAME=\"eth$i\"" >> $rule_file done } @@ -151,7 +151,7 @@ get_boot_params() { chmod go-rwx /root/.ssh/authorized_keys ;; vmware) - vmtoolsd --cmd 'machine.id.get' > /var/cache/cloud/cmdline + vmtoolsd --cmd 'machine.id.get' > /var/cache/cloud/cmdline ;; virtualpc|hyperv) # Hyper-V is recognized as virtualpc hypervisor type. Boot args are passed using KVP Daemon @@ -183,7 +183,6 @@ patch() { local cdrom_dev= mkdir -p $PATCH_MOUNT - if [ -e /dev/xvdd ]; then cdrom_dev=/dev/xvdd elif [ -e /dev/cdrom ]; then @@ -204,11 +203,11 @@ patch() { [ -f ${md5file} ] && oldmd5=$(cat ${md5file}) local newmd5= [ -f ${patchfile} ] && newmd5=$(md5sum ${patchfile} | awk '{print $1}') - + if [ "$oldmd5" != "$newmd5" ] && [ -f ${patchfile} ] && [ "$newmd5" != "" ] then shouldpatch=true - log_it "Patching scripts oldmd5=$oldmd5 newmd5=$newmd5" + log_it "Patching scripts oldmd5=$oldmd5 newmd5=$newmd5 with $patchfile" tar xzf $patchfile -C / echo ${newmd5} > ${md5file} fi @@ -216,8 +215,8 @@ patch() { hyperVisor=$(hypervisor) /opt/cloud/bin/patchsystemvm.sh $PATCH_MOUNT $hyperVisor umount $PATCH_MOUNT - - if [ "$shouldpatch" == "true" ] + + if [ "$shouldpatch" == "true" ] then log_it "Rebooting system since we patched init scripts" sync @@ -355,7 +354,7 @@ setup_interface() { local mask=$3 local gw=$4 local force=$5 - local intf=eth${intfnum} + local intf=eth${intfnum} local bootproto="static" @@ -449,7 +448,7 @@ enable_fwding() { disable_rpfilter() { log_it "cloud: disable rp_filter" log_it "disable rpfilter" - sed -i "s/net.ipv4.conf.default.rp_filter.*$/net.ipv4.conf.default.rp_filter = 0/" /etc/sysctl.conf + sed -i "s/net.ipv4.conf.default.rp_filter.*$/net.ipv4.conf.default.rp_filter = 0/" /etc/sysctl.conf } get_public_vif_list() { @@ -461,32 +460,32 @@ get_public_vif_list() { vif_list="$vif_list $vif"; fi done - + echo $vif_list } disable_rpfilter_domR() { log_it "cloud: Tuning rp_filter on public interfaces" - + VIF_LIST=$(get_public_vif_list) log_it "rpfilter public interfaces : $VIF_LIST" if [ "$DISABLE_RP_FILTER" == "true" ] then log_it "cloud: disable rp_filter on public interfaces" - sed -i "s/net.ipv4.conf.default.rp_filter.*$/net.ipv4.conf.default.rp_filter = 0/" /etc/sysctl.conf + sed -i "s/net.ipv4.conf.default.rp_filter.*$/net.ipv4.conf.default.rp_filter = 0/" /etc/sysctl.conf echo "0" > /proc/sys/net/ipv4/conf/default/rp_filter for vif in $VIF_LIST; do log_it "cloud: disable rp_filter on public interface: $vif" - sed -i "s/net.ipv4.conf.$vif.rp_filter.*$/net.ipv4.conf.$vif.rp_filter = 0/" /etc/sysctl.conf + sed -i "s/net.ipv4.conf.$vif.rp_filter.*$/net.ipv4.conf.$vif.rp_filter = 0/" /etc/sysctl.conf echo "0" > /proc/sys/net/ipv4/conf/$vif/rp_filter done else log_it "cloud: enable rp_filter on public interfaces" - sed -i "s/net.ipv4.conf.default.rp_filter.*$/net.ipv4.conf.default.rp_filter = 1/" /etc/sysctl.conf + sed -i "s/net.ipv4.conf.default.rp_filter.*$/net.ipv4.conf.default.rp_filter = 1/" /etc/sysctl.conf echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter for vif in $VIF_LIST; do log_it "cloud: enable rp_filter on public interface: $vif" - sed -i "s/net.ipv4.conf.$vif.rp_filter.*$/net.ipv4.conf.$vif.rp_filter = 1/" /etc/sysctl.conf + sed -i "s/net.ipv4.conf.$vif.rp_filter.*$/net.ipv4.conf.$vif.rp_filter = 1/" /etc/sysctl.conf echo "1" > /proc/sys/net/ipv4/conf/$vif/rp_filter done fi @@ -593,11 +592,11 @@ setup_common() { then setup_interface "2" $ETH2_IP $ETH2_MASK $GW fi - + echo $NAME > /etc/hostname echo 'AVAHI_DAEMON_DETECT_LOCAL=0' > /etc/default/avahi-daemon hostname $NAME - + #Nameserver sed -i -e "/^nameserver.*$/d" /etc/resolv.conf # remove previous entries sed -i -e "/^nameserver.*$/d" /etc/dnsmasq-resolv.conf # remove previous entries @@ -606,7 +605,7 @@ setup_common() { echo "nameserver $internalNS1" > /etc/dnsmasq-resolv.conf echo "nameserver $internalNS1" > /etc/resolv.conf fi - + if [ -n "$internalNS2" ] then echo "nameserver $internalNS2" >> /etc/dnsmasq-resolv.conf @@ -617,7 +616,7 @@ setup_common() { echo "nameserver $NS1" >> /etc/dnsmasq-resolv.conf echo "nameserver $NS1" >> /etc/resolv.conf fi - + if [ -n "$NS2" ] then echo "nameserver $NS2" >> /etc/dnsmasq-resolv.conf @@ -652,7 +651,7 @@ setup_common() { ip route add default via $GW dev $gwdev fi - + # a hacking way to activate vSwitch under VMware ping -n -c 3 $GW & sleep 3 @@ -667,7 +666,7 @@ setup_common() { ping -n -c 3 $MGMT_GW & sleep 3 pkill ping - + fi local hyp=$(hypervisor) @@ -689,7 +688,7 @@ setup_dnsmasq() { #get the template cp /etc/dnsmasq.conf.tmpl /etc/dnsmasq.conf - + if [ -n "$DOMAIN" ] then #send domain name to dhcp clients @@ -699,17 +698,17 @@ setup_dnsmasq() { #answer all local domain queries sed -i -e "s/^[#]*local=.*$/local=\/$DOMAIN\//" /etc/dnsmasq.conf fi - + if [ -n "$DNS_SEARCH_ORDER" ] then sed -i -e "/^[#]*dhcp-option.*=119.*$/d" /etc/dnsmasq.conf echo "dhcp-option-force=119,$DNS_SEARCH_ORDER" >> /etc/dnsmasq.conf # set the domain search order as a space seprated list for option 15 DNS_SEARCH_ORDER=$(echo $DNS_SEARCH_ORDER | sed 's/,/ /g') - #send domain name to dhcp clients + #send domain name to dhcp clients sed -i s/[#]*dhcp-option=15.*$/dhcp-option=15,\""$DNS_SEARCH_ORDER"\"/ /etc/dnsmasq.conf fi - + if [ $DHCP_RANGE ] then sed -i -e "s/^dhcp-range_ip4=.*$/dhcp-range=$DHCP_RANGE,static/" /etc/dnsmasq.conf @@ -880,11 +879,11 @@ setup_router() { oldmd5= [ -f "/etc/udev/rules.d/70-persistent-net.rules" ] && oldmd5=$(md5sum "/etc/udev/rules.d/70-persistent-net.rules" | awk '{print $1}') - + if [ -n "$ETH2_IP" ] then setup_common eth0 eth1 eth2 - + if [ -n "$EXTRA_PUBNICS" ] then for((i = 3; i < 3 + $EXTRA_PUBNICS; i++)) @@ -902,13 +901,13 @@ setup_router() { done fi fi - - # Moved to Cs Python code + + # Moved to Cs Python code #if [ -n "$ETH2_IP" -a "$RROUTER" == "1" ] #then #setup_redundant_router #fi - + log_it "Checking udev NIC assignment order changes" if [ "$NIC_MACS" != "" ] then @@ -916,7 +915,7 @@ setup_router() { newmd5=$(md5sum "/tmp/udev-rules" | awk '{print $1}') rm /tmp/interfaces rm /tmp/udev-rules - + if [ "$oldmd5" != "$newmd5" ] then log_it "udev NIC assignment requires reboot to take effect" @@ -925,7 +924,7 @@ setup_router() { reboot fi fi - + setup_aesni setup_dnsmasq setup_apache2 $ETH0_IP @@ -933,7 +932,6 @@ setup_router() { sed -i /gateway/d /etc/hosts echo "$ETH0_IP $NAME" >> /etc/hosts - enable_svc dnsmasq 1 enable_svc haproxy 1 enable_irqbalance 1 @@ -957,10 +955,8 @@ setup_router() { #setup hourly logrotate mv -n /etc/cron.daily/logrotate /etc/cron.hourly 2>&1 - -} - +} setup_vpcrouter() { log_it "Setting up VPC virtual router system vm" @@ -974,11 +970,11 @@ auto lo eth0 iface lo inet loopback EOF setup_interface "0" $ETH0_IP $ETH0_MASK $GW - + echo $NAME > /etc/hostname echo 'AVAHI_DAEMON_DETECT_LOCAL=0' > /etc/default/avahi-daemon hostname $NAME - + #Nameserver sed -i -e "/^nameserver.*$/d" /etc/resolv.conf # remove previous entries sed -i -e "/^nameserver.*$/d" /etc/dnsmasq-resolv.conf # remove previous entries @@ -987,7 +983,7 @@ EOF echo "nameserver $internalNS1" > /etc/dnsmasq-resolv.conf echo "nameserver $internalNS1" > /etc/resolv.conf fi - + if [ -n "$internalNS2" ] then echo "nameserver $internalNS2" >> /etc/dnsmasq-resolv.conf @@ -998,7 +994,7 @@ EOF echo "nameserver $NS1" >> /etc/dnsmasq-resolv.conf echo "nameserver $NS1" >> /etc/resolv.conf fi - + if [ -n "$NS2" ] then echo "nameserver $NS2" >> /etc/dnsmasq-resolv.conf @@ -1009,7 +1005,7 @@ EOF if [ "$hyp" == "vmware" ] || [ "$hyp" == "hyperv" ]; then ip route add $MGMTNET via $LOCAL_GW dev eth0 - + # a hacking way to activate vSwitch under VMware ping -n -c 3 $LOCAL_GW & sleep 3 @@ -1065,8 +1061,6 @@ EOF } - - setup_dhcpsrvr() { log_it "Setting up dhcp server system vm" setup_common eth0 eth1 @@ -1108,10 +1102,10 @@ setup_storage_network() { log_it "Incompleted parameters STORAGE_IP:$STORAGE_IP, STORAGE_NETMASK:$STORAGE_NETMASK, STORAGE_CIDR:$STORAGE_CIDR. Cannot setup storage network" return fi - + echo "" >> /etc/network/interfaces echo "auto eth3" >> /etc/network/interfaces - + setup_interface "3" "$STORAGE_IP" "$STORAGE_NETMASK" [ -n "$MTU" ] && ifconfig eth3 mtu $MTU && echo " mtu $MTU" >> /etc/network/interfaces #ip route add "$STORAGE_CIDR" via "$STORAGE_IP" @@ -1260,7 +1254,7 @@ setup_elbvm() { else setup_sshd $ETH1_IP "eth1" fi - + enable_fwding 0 enable_svc haproxy 0 enable_irqbalance 0 @@ -1283,7 +1277,7 @@ setup_ilbvm() { cp /etc/iptables/iptables-ilbvm /etc/iptables/rules.v4 cp /etc/iptables/iptables-ilbvm /etc/iptables/rules setup_sshd $ETH1_IP "eth1" - + enable_fwding 0 enable_svc haproxy 1 enable_irqbalance 1 @@ -1317,11 +1311,11 @@ start() { [ $? -ne 0 ] && log_it "Failed to detect hypervisor type, bailing out of early init" && exit 10 log_it "Detected that we are running inside $hyp guest" get_boot_params - patch + # patch - removed since this was done by cloud-early-init patch_log4j parse_cmd_line change_password - case $TYPE in + case $TYPE in router) [ "$NAME" == "" ] && NAME=router setup_router @@ -1400,7 +1394,7 @@ for i in $CMDLINE # Two lines so values do not accidently interpretted as escapes!! echo -n \"${KEY}\"': '\"${VALUE}\" >> ${CHEF_TMP_FILE} COMMA=",\n\t" - case $KEY in + case $KEY in disable_rp_filter) DISABLE_RP_FILTER=$VALUE ;; @@ -1483,13 +1477,13 @@ for i in $CMDLINE DHCP_RANGE=$(echo $VALUE | tr ':' ',') ;; bootproto) - BOOTPROTO=$VALUE + BOOTPROTO=$VALUE ;; type) - TYPE=$VALUE + TYPE=$VALUE ;; defaultroute) - DEFAULTROUTE=$VALUE + DEFAULTROUTE=$VALUE ;; redundant_router) RROUTER=$VALUE @@ -1556,7 +1550,7 @@ case "$1" in start) log_action_begin_msg "Executing cloud-early-config" - log_it "Executing cloud-early-config" + log_it "Executing cloud-early-config" if start; then log_action_end_msg $? else diff --git a/systemvm/patches/debian/config/etc/init.d/cloud-early-init b/systemvm/patches/debian/config/etc/init.d/cloud-early-init new file mode 100644 index 00000000000..ea7690d7ba3 --- /dev/null +++ b/systemvm/patches/debian/config/etc/init.d/cloud-early-init @@ -0,0 +1,222 @@ +#!/bin/bash +### BEGIN INIT INFO +# Provides: cloud-early-init +# Required-Start: mountkernfs $local_fs +# Required-Stop: $local_fs +# Should-Start: +# Should-Stop: +# Default-Start: S +# Default-Stop: 0 6 +# Short-Description: configure according to cmdline +### END INIT INFO +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" + +# include req for patchsystemvm +. /lib/lsb/init-functions + +log_it() { + echo "$(date) cloud-early-init $@" >> /var/log/cloud.log + log_action_msg "$@" +} + +hypervisor() { + [ -d /proc/xen ] && mount -t xenfs none /proc/xen + [ -d /proc/xen ] && echo "xen-domU" && return 0 + + local try=$([ -x /usr/sbin/virt-what ] && virt-what | tail -1) + [ "$try" != "" ] && echo $try && return 0 + + vmware-checkvm &> /dev/null && echo "vmware" && return 0 + + grep -q QEMU /proc/cpuinfo && echo "kvm" && return 0 + grep -q QEMU /var/log/messages && echo "kvm" && return 0 + + echo "unknown" && return 1 + +} + +get_boot_params() { + local EXTRA_MOUNT=/media/extra + local hyp=$(hypervisor) + [ $? -ne 0 ] && log_it "Failed to detect hypervisor type, bailing out of early init" && exit 10 + + case $hyp in + xen-domU|xen-hvm) + cat /proc/cmdline > /var/cache/cloud/cmdline + sed -i "s/%/ /g" /var/cache/cloud/cmdline + ;; + kvm) + VPORT=$(find /dev/virtio-ports -type l -name '*.vport' 2>/dev/null|head -1) + + if [ -z "$VPORT" ]; then + log_it "No suitable VirtIO port was found in /dev/virtio-ports" && exit 2 + fi + + if [ ! -e "$VPORT" ]; then + log_it "${VPORT} not loaded, perhaps guest kernel is too old." && exit 2 + fi + + local factor=2 + local progress=1 + for i in {1..5} + do + while read line; do + if [[ $line == cmdline:* ]]; then + cmd=${line//cmdline:/} + echo $cmd > /var/cache/cloud/cmdline + elif [[ $line == pubkey:* ]]; then + pubkey=${line//pubkey:/} + echo $pubkey > /var/cache/cloud/authorized_keys + echo $pubkey > /root/.ssh/authorized_keys + fi + done < $VPORT + # In case of reboot we do not send the boot args again. + # So, no need to wait for them, as the boot args are already set at startup + if [ -s /var/cache/cloud/cmdline ] + then + log_it "Found a non empty cmdline file. Will now exit the loop and proceed with configuration." + break; + fi + sleep ${progress}s + progress=$[ progress * factor ] + done + chmod go-rwx /root/.ssh/authorized_keys + ;; + vmware) + vmtoolsd --cmd 'machine.id.get' > /var/cache/cloud/cmdline + ;; + virtualpc|hyperv) + # Hyper-V is recognized as virtualpc hypervisor type. Boot args are passed using KVP Daemon + #waiting for the hv_kvp_daemon to start up + #sleep need to fix the race condition of hv_kvp_daemon and cloud-early-config + sleep 5 + cp -f /var/opt/hyperv/.kvp_pool_0 /var/cache/cloud/cmdline + cat /dev/null > /var/opt/hyperv/.kvp_pool_0 + ;; + virtualbox) + # Virtualbox is used to test the virtual router + # get the commandline from a dmistring (yes, hacky!) + dmidecode | grep cmdline | sed 's/^.*cmdline://' > /var/cache/cloud/cmdline + RV=$? + if [ $RV -ne 0 ] ; then + log_it "Failed to get cmdline from a virtualbox dmi property" + fi + ;; + esac + +} + +patch() { + local PATCH_MOUNT=/media/cdrom + local patchfile=$PATCH_MOUNT/cloud-scripts.tgz + local md5file=/var/cache/cloud/cloud-scripts-signature + local privkey=$PATCH_MOUNT/authorized_keys + local shouldpatch=false + local cdrom_dev= + mkdir -p $PATCH_MOUNT + + if [ -e /dev/xvdd ]; then + cdrom_dev=/dev/xvdd + elif [ -e /dev/cdrom ]; then + cdrom_dev=/dev/cdrom + elif [ -e /dev/cdrom1 ]; then + cdrom_dev=/dev/cdrom1 + elif [ -e /dev/cdrom2 ]; then + cdrom_dev=/dev/cdrom2 + elif [ -e /dev/cdrom3 ]; then + cdrom_dev=/dev/cdrom3 + fi + [ -f /var/cache/cloud/authorized_keys ] && privkey=/var/cache/cloud/authorized_keys + + if [ -n "$cdrom_dev" ]; then + mount -o ro $cdrom_dev $PATCH_MOUNT + [ -f $privkey ] && cp -f $privkey /root/.ssh/ && chmod go-rwx /root/.ssh/authorized_keys + local oldmd5= + [ -f ${md5file} ] && oldmd5=$(cat ${md5file}) + local newmd5= + [ -f ${patchfile} ] && newmd5=$(md5sum ${patchfile} | awk '{print $1}') + + if [ "$oldmd5" != "$newmd5" ] && [ -f ${patchfile} ] && [ "$newmd5" != "" ] + then + shouldpatch=true + log_it "Patching scripts oldmd5=$oldmd5 newmd5=$newmd5" + tar xzf $patchfile -C / + echo ${newmd5} > ${md5file} + else + log_it "Scripts up to date oldmd5=$oldmd5 newmd5=$newmd5" + fi + log_it "Patching cloud service" + hyperVisor=$(hypervisor) + /opt/cloud/bin/patchsystemvm.sh $PATCH_MOUNT $hyperVisor + log_it "Unmounting $PATCH_MOUNT" + umount $PATCH_MOUNT + + # Historical reboot removed due to cloud-early-init now running before services started + + fi + + if [ -f /mnt/cmdline ]; then + cat /mnt/cmdline > /var/cache/cloud/cmdline + fi + return 0 +} + +start() { + + local hyp=$(hypervisor) + [ $? -ne 0 ] && log_it "Failed to detect hypervisor type, bailing out of cloud-early-init" && exit 10 + log_it "Detected that we are running inside $hyp guest." + get_boot_params + patch + if [ "$hyp" == "hyperv" ]; then + # eject the systemvm.iso + eject + fi + return 0 +} + +case "$1" in +start) + log_action_begin_msg "Executing cloud-early-init." + log_it "Executing cloud-early-init." + if start; then + log_action_end_msg $? + else + log_action_end_msg $? + fi + ;; + +stop) + log_action_begin_msg "Stopping cloud-early-init." + log_it "Stopping cloud-early-init." + log_action_end_msg 0 + ;; + +*) + echo "Usage: /etc/init.d/cloud-early-init {start|stop}." + exit 1 + ;; +esac + +# Serialize cloud-early-init and cloud-early-config +log_it "Calling cloud-early-config." +/etc/init.d/cloud-early-config start + +exit 0 diff --git a/systemvm/patches/debian/config/etc/init.d/cloud-passwd-srvr b/systemvm/patches/debian/config/etc/init.d/cloud-passwd-srvr index 33b0ea310cb..41a1a782dbe 100755 --- a/systemvm/patches/debian/config/etc/init.d/cloud-passwd-srvr +++ b/systemvm/patches/debian/config/etc/init.d/cloud-passwd-srvr @@ -1,11 +1,11 @@ -#!/bin/bash +#!/bin/bash ### BEGIN INIT INFO # Provides: cloud-passwd-srvr -# Required-Start: mountkernfs $local_fs cloud-early-config iptables-persistent +# Required-Start: mountkernfs $local_fs cloud-early-init iptables-persistent # Required-Stop: $local_fs -# Should-Start: -# Should-Stop: -# Default-Start: +# Should-Start: +# Should-Stop: +# Default-Start: # Default-Stop: 0 6 # Short-Description: Web server that sends passwords to User VMs ### END INIT INFO @@ -74,7 +74,7 @@ remove_iptables_rules() } start() { - [ "$ENABLED" != 0 ] || exit 0 + [ "$ENABLED" != 0 ] || exit 0 pid=$(getpid) [ "$pid" != "" ] && echo "Password server is already running (pid=$pid)" && return 0 add_iptables_rules diff --git a/systemvm/patches/debian/config/etc/init.d/postinit b/systemvm/patches/debian/config/etc/init.d/postinit index 818959fde3b..9af911fc40a 100755 --- a/systemvm/patches/debian/config/etc/init.d/postinit +++ b/systemvm/patches/debian/config/etc/init.d/postinit @@ -1,10 +1,10 @@ #!/bin/bash -e ### BEGIN INIT INFO # Provides: postinit -# Required-Start: mountkernfs $local_fs cloud-early-config +# Required-Start: mountkernfs $local_fs cloud-early-init # Required-Stop: $local_fs -# Should-Start: -# Should-Stop: +# Should-Start: +# Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: post-init @@ -19,7 +19,7 @@ # 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 @@ -61,7 +61,7 @@ setup_redundant_router() { } start() { - case $TYPE in + case $TYPE in secstorage) [ "$NAME" == "" ] && NAME=secstorage setup_secstorage; @@ -95,7 +95,7 @@ for i in $CMDLINE # search for foo=bar pattern and cut out foo KEY=$(echo $i | cut -d= -f1) VALUE=$(echo $i | cut -d= -f2) - case $KEY in + case $KEY in eth0ip) ETH0_IP=$VALUE ;; @@ -142,10 +142,10 @@ for i in $CMDLINE DHCP_RANGE=$(echo $VALUE | tr ':' ',') ;; bootproto) - BOOTPROTO=$VALUE + BOOTPROTO=$VALUE ;; type) - TYPE=$VALUE + TYPE=$VALUE ;; redundant_router) RROUTER=$VALUE diff --git a/systemvm/patches/debian/config/opt/cloud/bin/patchsystemvm.sh b/systemvm/patches/debian/config/opt/cloud/bin/patchsystemvm.sh index 9222a8c89b7..f5154fff409 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/patchsystemvm.sh +++ b/systemvm/patches/debian/config/opt/cloud/bin/patchsystemvm.sh @@ -17,18 +17,26 @@ # under the License. #set -x -logfile="/var/log/patchsystemvm.log" +logfile="/var/log/cloud.log" + +log_it() { + echo "$(date) patchsystemvm.sh $@" >> $logfile +} + # To use existing console proxy .zip-based package file patch_console_proxy() { local patchfile=$1 + log_it "Patching CPVM/SSVM with cloud agent jars from $patchfile" rm /usr/local/cloud/systemvm -rf mkdir -p /usr/local/cloud/systemvm - echo "All" | unzip $patchfile -d /usr/local/cloud/systemvm >$logfile 2>&1 + log_it "Patching /usr/local/cloud/systemvm:" + echo "All" | unzip $patchfile -d /usr/local/cloud/systemvm >>$logfile 2>&1 find /usr/local/cloud/systemvm/ -name \*.sh | xargs chmod 555 return 0 } consoleproxy_svcs() { + log_it "Configuring console proxy services" chkconfig cloud on chkconfig postinit on chkconfig cloud-passwd-srvr off @@ -46,6 +54,7 @@ consoleproxy_svcs() { } secstorage_svcs() { + log_it "Configuring SSVM services" chkconfig cloud on chkconfig postinit on chkconfig cloud-passwd-srvr off @@ -63,10 +72,11 @@ secstorage_svcs() { } routing_svcs() { + log_it "Configuring VR services" grep "redundant_router=1" /var/cache/cloud/cmdline > /dev/null RROUTER=$? chkconfig cloud off - chkconfig haproxy on ; + chkconfig haproxy on ; chkconfig ssh on chkconfig nfs-common off chkconfig portmap off @@ -74,6 +84,7 @@ routing_svcs() { echo "cloud nfs-common portmap" > /var/cache/cloud/disabled_svcs if [ $RROUTER -eq 0 ] then + log_it "Configuring redundant VR services" chkconfig dnsmasq off chkconfig cloud-passwd-srvr off chkconfig keepalived on @@ -82,6 +93,7 @@ routing_svcs() { echo "keepalived conntrackd postinit" >> /var/cache/cloud/enabled_svcs echo "dnsmasq cloud-passwd-srvr" >> /var/cache/cloud/disabled_svcs else + log_it "Configuring non-redundant VR services" chkconfig dnsmasq on chkconfig cloud-passwd-srvr on chkconfig keepalived off @@ -92,9 +104,10 @@ routing_svcs() { } dhcpsrvr_svcs() { + log_it "Configuring DHCP services" chkconfig cloud off - chkconfig cloud-passwd-srvr on ; - chkconfig haproxy off ; + chkconfig cloud-passwd-srvr on ; + chkconfig haproxy off ; chkconfig dnsmasq on chkconfig ssh on chkconfig nfs-common off @@ -106,8 +119,9 @@ dhcpsrvr_svcs() { } elbvm_svcs() { + log_it "Configuring external load balancing VM services" chkconfig cloud off - chkconfig haproxy on ; + chkconfig haproxy on ; chkconfig ssh on chkconfig nfs-common off chkconfig portmap off @@ -117,10 +131,10 @@ elbvm_svcs() { echo "cloud dnsmasq cloud-passwd-srvr apache2 nfs-common portmap" > /var/cache/cloud/disabled_svcs } - ilbvm_svcs() { + log_it "Configuring internal load balancing VM services" chkconfig cloud off - chkconfig haproxy on ; + chkconfig haproxy on ; chkconfig ssh on chkconfig nfs-common off chkconfig portmap off @@ -131,6 +145,7 @@ ilbvm_svcs() { } enable_pcihotplug() { + log_it "Configuring PCI hot plug" sed -i -e "/acpiphp/d" /etc/modules sed -i -e "/pci_hotplug/d" /etc/modules echo acpiphp >> /etc/modules @@ -138,6 +153,7 @@ enable_pcihotplug() { } enable_serial_console() { + log_it "Enabling serial console" sed -i -e "/^serial.*/d" /boot/grub/grub.conf sed -i -e "/^terminal.*/d" /boot/grub/grub.conf sed -i -e "/^default.*/a\serial --unit=0 --speed=115200 --parity=no --stop=1" /boot/grub/grub.conf @@ -147,8 +163,11 @@ enable_serial_console() { sed -i -e "/6:23:respawn/a\s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102" /etc/inittab } +log_it "Starting $0 $*" CMDLINE=$(cat /var/cache/cloud/cmdline) +log_it "CMDLINE passed to system VM patch process: $CMDLINE" + TYPE="router" PATCH_MOUNT=$1 Hypervisor=$2 @@ -169,10 +188,11 @@ done if [ "$TYPE" == "consoleproxy" ] || [ "$TYPE" == "secstorage" ] && [ -f ${PATCH_MOUNT}/systemvm.zip ] then + log_it "Patching ${TYPE}." patch_console_proxy ${PATCH_MOUNT}/systemvm.zip if [ $? -gt 0 ] then - printf "Failed to apply patch systemvm\n" >$logfile + log_it "Failed to apply patch systemvm" exit 5 fi fi @@ -183,26 +203,29 @@ echo "" > /root/.ssh/known_hosts if [ "$Hypervisor" == "kvm" ] then + log_it "Enabling PCI hotplug and serial console for KVM" enable_pcihotplug enable_serial_console fi if [ "$TYPE" == "router" ] || [ "$TYPE" == "vpcrouter" ] then + log_it "Updating ${TYPE} services" routing_svcs if [ $? -gt 0 ] then - printf "Failed to execute routing_svcs\n" >$logfile + log_it "Failed to execute routing_svcs" exit 6 fi fi if [ "$TYPE" == "dhcpsrvr" ] then + log_it "Updating ${TYPE} services" dhcpsrvr_svcs if [ $? -gt 0 ] then - printf "Failed to execute dhcpsrvr_svcs\n" >$logfile + log_it "Failed to execute dhcpsrvr_svcs" exit 6 fi fi @@ -210,40 +233,44 @@ fi if [ "$TYPE" == "consoleproxy" ] then + log_it "Updating ${TYPE} services" consoleproxy_svcs if [ $? -gt 0 ] then - printf "Failed to execute consoleproxy_svcs\n" >$logfile + log_it "Failed to execute consoleproxy_svcs" exit 7 fi fi if [ "$TYPE" == "secstorage" ] then + log_it "Updating ${TYPE} services" secstorage_svcs if [ $? -gt 0 ] then - printf "Failed to execute secstorage_svcs\n" >$logfile + log_it "Failed to execute secstorage_svcs" exit 8 fi fi if [ "$TYPE" == "elbvm" ] then + log_it "Updating ${TYPE} services" elbvm_svcs if [ $? -gt 0 ] then - printf "Failed to execute elbvm svcs\n" >$logfile + log_it "Failed to execute elbvm svcs" exit 9 fi fi if [ "$TYPE" == "ilbvm" ] then + log_it "Updating ${TYPE} services" ilbvm_svcs if [ $? -gt 0 ] then - printf "Failed to execute ilbvm svcs\n" >$logfile + log_it "Failed to execute ilbvm svcs" exit 9 fi fi diff --git a/tools/appliance/definitions/systemvmtemplate/configure_systemvm_services.sh b/tools/appliance/definitions/systemvmtemplate/configure_systemvm_services.sh index 60082e380a0..477e140e16b 100644 --- a/tools/appliance/definitions/systemvmtemplate/configure_systemvm_services.sh +++ b/tools/appliance/definitions/systemvmtemplate/configure_systemvm_services.sh @@ -36,11 +36,14 @@ function install_cloud_scripts() { rsync -av ./cloud_scripts/ / chmod +x /opt/cloud/bin/* \ /root/{clearUsageRules.sh,reconfigLB.sh,monitorServices.py} \ - /etc/init.d/{cloud,cloud-early-config,cloud-passwd-srvr,postinit} \ + /etc/init.d/{cloud,cloud-early-init,cloud-early-config,cloud-passwd-srvr,postinit} \ /etc/profile.d/cloud.sh - chkconfig --add cloud-early-config - chkconfig cloud-early-config on + chkconfig --add cloud-early-init + chkconfig cloud-early-init on + # Testing serialized cloud-early-init and cloud-early-config + # chkconfig --add cloud-early-config + # chkconfig cloud-early-config on chkconfig --add cloud-passwd-srvr chkconfig cloud-passwd-srvr off chkconfig --add cloud ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services