#!/bin/bash # 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. set -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" # Clear boot up flag, it would be created by rc.local after boot up done mkdir -p /var/cache/cloud rm -f /var/cache/cloud/boot_up_done [ -x /sbin/ifup ] || exit 0 . /lib/lsb/init-functions log_it() { echo "$(date) $@" >> /var/log/cloud.log log_action_msg "$@" } validate_checksums() { local oldmd5= [ -f ${1} ] && oldmd5=$(cat ${1}) local newmd5= [ -f ${2} ] && newmd5=$(md5sum ${2} | awk '{print $1}') log_it "Scripts checksum detected: oldmd5=$oldmd5 newmd5=$newmd5" >> /dev/null 2>&1 echo "oldmd5='${oldmd5}'; newmd5='${newmd5}'" } patch() { local PATCH_MOUNT=/tmp local PATCH_SCRIPTS=cloud-scripts.tgz local oldpatchfile=/usr/share/cloud/$PATCH_SCRIPTS local patchfile=$PATCH_MOUNT/$PATCH_SCRIPTS local privkey=$PATCH_MOUNT/authorized_keys local md5file=/var/cache/cloud/cloud-scripts-signature mkdir -p $PATCH_MOUNT if [ -f /var/cache/cloud/authorized_keys ]; then privkey=/var/cache/cloud/authorized_keys fi eval $(validate_checksums $md5file $oldpatchfile) if [ "$oldmd5" == "$newmd5" ] && [ -d /usr/local/cloud/systemvm ] && [ "$(ls -A /usr/local/cloud/systemvm)" ]; then log_it "Checksum matches, no need to patch" return 0 fi CMDLINE=/var/cache/cloud/cmdline export TYPE=$(grep -Po 'type=\K[a-zA-Z]*' $CMDLINE) retry=60 local patched=false if [ "$TYPE" != "cksnode" ]; then while [ $retry -gt 0 ] do if [ -f $patchfile ]; then eval $(validate_checksums $md5file $patchfile) if [ "$oldmd5" != "$newmd5" ] && [ -f ${patchfile} ] && [ "$newmd5" != "" ] then tar xzf $patchfile -C / echo ${newmd5} > ${md5file} log_it "Patched scripts using $patchfile" touch /var/cache/cloud/patch.required fi if [ -f $privkey ]; then cp -f $privkey /root/.ssh/ chmod go-rwx /root/.ssh/authorized_keys fi patched=true break fi sleep 2 retry=$(($retry-1)) log_it "Could not find patch file, retrying" done if [ $retry -eq 0 ] && [ "$patched" == "false" ]; then return 2 fi return 0 fi } cleanup() { rm -rf /tmp/agent.zip mv /tmp/cloud-scripts.tgz /usr/share/cloud/cloud-scripts.tgz } start() { log_it "Executing cloud-early-config" # Clear /tmp for file lock rm -f /tmp/*.lock rm -f /tmp/rrouter_bumped rm -f /root/.rnd echo "" > /root/.ssh/known_hosts if which growpart > /dev/null; then ROOT_MOUNT_POINT=$(df -h / | tail -n 1 | cut -d' ' -f1) ROOT_DISK=$(echo $ROOT_MOUNT_POINT | sed 's/[0-9]*$//g') growpart $ROOT_DISK 2 growpart $ROOT_DISK 6 resize2fs $ROOT_MOUNT_POINT fi patch sync /opt/cloud/bin/setup/bootstrap.sh cleanup log_it "Finished setting up systemvm" exit 0 } start