diff options
Diffstat (limited to 'share')
-rwxr-xr-x | share/hydractl/dist-upgrade | 190 | ||||
l---------[-rwxr-xr-x] | share/hydractl/system-upgrade | 191 |
2 files changed, 191 insertions, 190 deletions
diff --git a/share/hydractl/dist-upgrade b/share/hydractl/dist-upgrade new file mode 100755 index 0000000..f0c42b1 --- /dev/null +++ b/share/hydractl/dist-upgrade @@ -0,0 +1,190 @@ +#!/bin/bash +# +# Do a system upgrade, from a version to the next. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/>. + +# Load +source $APP_BASE/lib/hydra/functions || exit 1 +hydra_config_load + +# Parameters +TMP="/tmp" +STATE="$TMP/system-upgrade" +ENV="$TMP/system-upgrade-env" + +# Command line arguments +BASENAME="`basename $0`" +NEXTRELEASE="$1" + +# Proceed to the next upgrade stage +function hydra_system_upgrade_stage { + STAGE="$1" + echo $STAGE > $STATE + hydra_system_upgrade_$STAGE +} + +# Set and check upgrade environment +function hydra_system_upgrade_env { + # Set initial state + hydra_system_upgrade_stage env + + # Available releases + #release="`facter lsbdistcodename`" # this doesn't work on squeeze + release="`facter 2> /dev/null | grep lsbdistcodename | sed -e 's/lsbdistcodename => //'`" + nextrelease="`hydra_next_debian_release $release`" + + # Is a virtual machine? + virtual="`facter 2> /dev/null | grep virtual | grep -v '^is_virtual' | sed -e 's/virtual => //'`" + + # Save environment + echo "release=$release" > $ENV + echo "nextrelease=$nextrelease" >> $ENV + echo "nextrelease=$nextrelease" >> $ENV + echo "virtual=$virtual" >> $ENV + + # Check release + if [ "$?" != "0" ]; then + echo "Unsupported release" + exit 1 + fi + + # Check optional parameter + if [ ! -z "$NEXTRELEASE" ]; then + if [ "$NEXTRELEASE" == "$release" ]; then + echo "System is already upgraded to $NEXTRELEASE" + exit 1 + fi + + if [ "$NEXTRELEASE" != "$nextrelease" ]; then + echo "Cannot upgrade: next release for this system is $nextrelease" + exit 1 + fi + fi + + # Set next state + hydra_system_upgrade_stage prepare +} + +# Prepare the environment for a system upgrade +function hydra_system_upgrade_prepare { + # Ensure puppet is stopped during the process + if [ -e "/etc/default/puppet" ]; then + echo "Disabling puppet agent..." + sed -i -e 's/START=yes/START=no/' /etc/default/puppet + service puppet stop + fi + + # Configure apt for the next debian release + echo "" + echo "Updating apt configuration..." + sed -i -e "s/$release/$nextrelease/g" /etc/apt/sources.list + sed -i -e "s/$release/$nextrelease/g" /etc/apt/preferences + sed -i -e 's|^deb http://backports.debian.org/debian-backports|#deb http://backports.debian.org/debian-backports|' /etc/apt/sources.list + + # These will be generated by puppet and can be safely removed + rm -f /etc/apt/sources.list.d/* + rm -f /etc/apt/preferences.d/* + + # These might lead in upgrade errors + if [ "$virtual" == "vserver" ] && [ "$nextrelease" == "wheezy" ]; then + apt-get remove makedev -y + apt-get remove colord -y + fi + + # Set next state + hydra_system_upgrade_stage download +} + +# Update package listing and download new packages +function hydra_system_upgrade_download { + echo "" + echo "Updating package listing..." + apt-get update + echo "" + echo "Downloading packages..." + apt-get dist-upgrade -d -y + hydra_system_upgrade_stage upgrade +} + +# Proceed with the actual upgrade +function hydra_system_upgrade_upgrade { + echo "" + echo "Upgrading the system..." + DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade + + if [ "$?" != "0" ]; then + echo "Upgrade failed. Please fix it manually and run this command again." + exit 1 + fi + + hydra_system_upgrade_stage custom +} + +# Custom upgrade procedures +function hydra_system_upgrade_custom { + if [ "$nextrelease" == "wheezy" ]; then + # Old suhosin config + rm -f /etc/php5/conf.d/suhosin.ini + + # This has to be manually installed again + if [ -f "/etc/php5/cli/conf.d/uploadprogress.ini" ]; then + pecl uninstall uploadprogress + pecl install uploadprogress + fi + fi + + if [ "$nextrelease" == "jessie" ]; then + # We're using a masterless puppet setup, so no agent + apt-get install puppet-common + apt-get purge puppet + + # Purge old monitoring infrastructure + apt-get purge 'munin*' 'nagios*' + rm -rf /etc/nagios* /etc/munin* /etc/munin* /usr/share/munin* + + # Cleanup old scripts + rm -f /usr/local/sbin/check-puppetd.sh + rm -f remove /etc/cron.d/puppetd + fi + + hydractl trac-upgrade + hydra_system_upgrade_stage cleanup +} + +# Cleanup procedures +function hydra_system_upgrade_cleanup { + apt-get autoremove --purge -y + apt-get clean +} + +# Initialize +if [ ! -e "$STATE" ]; then + hydra_system_upgrade_env +else + # Resume from the previous state + STAGE="`cat $STATE`" + + # Restore environment + if [ -e "$ENV" ]; then + source $ENV + fi + + hydra_system_upgrade_$STAGE +fi + +# Teardown +rm -f $STATE +rm -f $ENV diff --git a/share/hydractl/system-upgrade b/share/hydractl/system-upgrade index f0c42b1..bb7a06e 100755..120000 --- a/share/hydractl/system-upgrade +++ b/share/hydractl/system-upgrade @@ -1,190 +1 @@ -#!/bin/bash -# -# Do a system upgrade, from a version to the next. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -# Load -source $APP_BASE/lib/hydra/functions || exit 1 -hydra_config_load - -# Parameters -TMP="/tmp" -STATE="$TMP/system-upgrade" -ENV="$TMP/system-upgrade-env" - -# Command line arguments -BASENAME="`basename $0`" -NEXTRELEASE="$1" - -# Proceed to the next upgrade stage -function hydra_system_upgrade_stage { - STAGE="$1" - echo $STAGE > $STATE - hydra_system_upgrade_$STAGE -} - -# Set and check upgrade environment -function hydra_system_upgrade_env { - # Set initial state - hydra_system_upgrade_stage env - - # Available releases - #release="`facter lsbdistcodename`" # this doesn't work on squeeze - release="`facter 2> /dev/null | grep lsbdistcodename | sed -e 's/lsbdistcodename => //'`" - nextrelease="`hydra_next_debian_release $release`" - - # Is a virtual machine? - virtual="`facter 2> /dev/null | grep virtual | grep -v '^is_virtual' | sed -e 's/virtual => //'`" - - # Save environment - echo "release=$release" > $ENV - echo "nextrelease=$nextrelease" >> $ENV - echo "nextrelease=$nextrelease" >> $ENV - echo "virtual=$virtual" >> $ENV - - # Check release - if [ "$?" != "0" ]; then - echo "Unsupported release" - exit 1 - fi - - # Check optional parameter - if [ ! -z "$NEXTRELEASE" ]; then - if [ "$NEXTRELEASE" == "$release" ]; then - echo "System is already upgraded to $NEXTRELEASE" - exit 1 - fi - - if [ "$NEXTRELEASE" != "$nextrelease" ]; then - echo "Cannot upgrade: next release for this system is $nextrelease" - exit 1 - fi - fi - - # Set next state - hydra_system_upgrade_stage prepare -} - -# Prepare the environment for a system upgrade -function hydra_system_upgrade_prepare { - # Ensure puppet is stopped during the process - if [ -e "/etc/default/puppet" ]; then - echo "Disabling puppet agent..." - sed -i -e 's/START=yes/START=no/' /etc/default/puppet - service puppet stop - fi - - # Configure apt for the next debian release - echo "" - echo "Updating apt configuration..." - sed -i -e "s/$release/$nextrelease/g" /etc/apt/sources.list - sed -i -e "s/$release/$nextrelease/g" /etc/apt/preferences - sed -i -e 's|^deb http://backports.debian.org/debian-backports|#deb http://backports.debian.org/debian-backports|' /etc/apt/sources.list - - # These will be generated by puppet and can be safely removed - rm -f /etc/apt/sources.list.d/* - rm -f /etc/apt/preferences.d/* - - # These might lead in upgrade errors - if [ "$virtual" == "vserver" ] && [ "$nextrelease" == "wheezy" ]; then - apt-get remove makedev -y - apt-get remove colord -y - fi - - # Set next state - hydra_system_upgrade_stage download -} - -# Update package listing and download new packages -function hydra_system_upgrade_download { - echo "" - echo "Updating package listing..." - apt-get update - echo "" - echo "Downloading packages..." - apt-get dist-upgrade -d -y - hydra_system_upgrade_stage upgrade -} - -# Proceed with the actual upgrade -function hydra_system_upgrade_upgrade { - echo "" - echo "Upgrading the system..." - DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade - - if [ "$?" != "0" ]; then - echo "Upgrade failed. Please fix it manually and run this command again." - exit 1 - fi - - hydra_system_upgrade_stage custom -} - -# Custom upgrade procedures -function hydra_system_upgrade_custom { - if [ "$nextrelease" == "wheezy" ]; then - # Old suhosin config - rm -f /etc/php5/conf.d/suhosin.ini - - # This has to be manually installed again - if [ -f "/etc/php5/cli/conf.d/uploadprogress.ini" ]; then - pecl uninstall uploadprogress - pecl install uploadprogress - fi - fi - - if [ "$nextrelease" == "jessie" ]; then - # We're using a masterless puppet setup, so no agent - apt-get install puppet-common - apt-get purge puppet - - # Purge old monitoring infrastructure - apt-get purge 'munin*' 'nagios*' - rm -rf /etc/nagios* /etc/munin* /etc/munin* /usr/share/munin* - - # Cleanup old scripts - rm -f /usr/local/sbin/check-puppetd.sh - rm -f remove /etc/cron.d/puppetd - fi - - hydractl trac-upgrade - hydra_system_upgrade_stage cleanup -} - -# Cleanup procedures -function hydra_system_upgrade_cleanup { - apt-get autoremove --purge -y - apt-get clean -} - -# Initialize -if [ ! -e "$STATE" ]; then - hydra_system_upgrade_env -else - # Resume from the previous state - STAGE="`cat $STATE`" - - # Restore environment - if [ -e "$ENV" ]; then - source $ENV - fi - - hydra_system_upgrade_$STAGE -fi - -# Teardown -rm -f $STATE -rm -f $ENV +dist-upgrade
\ No newline at end of file |