diff options
Diffstat (limited to 'share/hydractl/system-upgrade')
l---------[-rwxr-xr-x] | share/hydractl/system-upgrade | 191 |
1 files changed, 1 insertions, 190 deletions
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 |