X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=c5156e60ff70a0954269729b1c2272a80f772569;hb=d3408f34d10c3b52d90b46293ec576a0a273b349;hp=ef321d692cc05c9f093e6612e601739bb67de2f3;hpb=01011c3d05d7338500acb42d7da17a3ba8ca63cd;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index ef321d6..c5156e6 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -588,7 +588,7 @@ reboot_required () { } upgrade () { - local i to_install packages + local packages case "$1" in first) packages="$packages_first" @@ -600,16 +600,7 @@ upgrade () { return 1 esac - for i in $(echo $packages) - do - pkg $i && to_install="$to_install $i" - done - - if [ -n "$to_install" ];then - eval pkgadd $to_install - else - return 0 - fi + pkgadd_if_installed $packages } # funkcija utrpa ispravan sources.list @@ -800,7 +791,7 @@ copy_template () { # restore modified config to their package defaults # so the upgrade doesn't complain so much restore_configs () { - local hostname domain template config_new + local hostname domain config_new memtotal memlimit # restore simple configs if pkg kernel-2.6-cn && pkg procps lt 1:3.2.7-11; then @@ -863,16 +854,34 @@ restore_configs () { restore_file /etc/issue.net fi + # restore php.ini + memtotal=$(awk '$1 == "MemTotal:" { print int($2/1024) }' /proc/meminfo) + if [ $memtotal -gt 1024 ]; then + memlimit=64 + elif [ $memtotal -ge 512 ]; then + memlimit=32 + else + memlimit=16 + fi + if pkg php5-cn && pkg php5-cli lt 5.2.6.dfsg.1-1+lenny2; then - if restore_file /etc/php5/cli/php.ini; then + config_new=$(copy_template /etc/php5/cli/php.ini) + sed -i "s/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = ${memlimit}M/" $config_new + sed -i "s/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = ${memlimit}M/" $config_new + if restore_file /etc/php5/cli/php.ini $config_new; then postupgrade_reconfigure php5-cn fi + rm -f $config_new fi if pkg php5-cn && pkg libapache2-mod-php5 lt 5.2.6.dfsg.1-1+lenny2; then - if restore_file /etc/php5/apache2/php.ini; then + config_new=$(copy_template /etc/php5/apache2/php.ini) + sed -i "s/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = ${memlimit}M/" $config_new + sed -i "s/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = ${memlimit}M/" $config_new + if restore_file /etc/php5/apache2/php.ini $config_new; then postupgrade_reconfigure php5-cn fi + rm -f $config_new fi # check if monitrc is template based @@ -886,49 +895,6 @@ restore_configs () { restore_file /etc/monit/monitrc $config_new rm -f $config_new fi - -# restore_config login 1:4.0.18.1 /etc/pam.d/login -# restore_config mysql-server 5.0.3 /etc/init.d/mysql \ -# /etc/logrotate.d/mysql-server \ -# /etc/mysql/my.cnf -# restore_config ntpdate 1:4.2.2 /etc/default/ntpdate -# restore_config oidentd 2.0.8 /etc/default/oidentd -# restore_config slapd 2.3.30 /etc/default/slapd /etc/init.d/slapd -# restore_config squirrelmail 2:1.4.9a /etc/squirrelmail/apache.conf -# restore_config vsftpd 2.0.5 /etc/vsftpd.conf -# restore_config xinetd 1:2.3.14 /etc/xinetd.conf -# -# # orphaned config file - no owner -# if pkg logcheck-database lt 1.2.54; then -# rm -vf /etc/logcheck/ignore.d.server/imap -# fi -# -# # aide switched to ucf, move old configs aside -# if pkg aide lt 0.13.1; then -# for file in /etc/aide/aide.conf \ -# /etc/cron.daily/aide \ -# /etc/default/aide; -# do -# if [ ! -e "$file.$backup_ext" ]; then -# mv -v "$file" "$file.$backup_ext" -# fi -# -# rm -vf "$file" -# done -# fi -# -# # register cn changes in ucf managed files -# for config in /etc/apache/modules.conf \ -# /etc/clamav/clamd.conf \ -# /etc/clamav/freshclam.conf -# do -# config_backup=$config.$backup_ext -# if [ -e $config -a ! -e $config_backup ]; then -# log "Saving config file $config" -# cp -av $config $config_backup -# ucf $config_backup $config -# fi -# done } # temporary disable listchanges packages to reduce clutter during upgrade @@ -958,7 +924,7 @@ apt_listchanges () { # make a silent installation of carnet and srce keyrings install_keyrings () { pkgadd carnet-keyring srce-keyring debian-archive-keyring - pkgadd dpkg apt debconf python-apt + pkgadd_if_installed dpkg apt debconf python-apt dpkg-dev dpkg-reconfigure carnet-keyring srce-keyring debian-archive-keyring apt_update @@ -1022,30 +988,40 @@ disable_monit () { fi } +# check which of the given packages are installed +grep_installed () { + local package installed + + for package in $*; do + if pkg $package; then + installed="$installed $package" + fi + done + + echo $installed +} + +# only upgrade packages if they are already installed +pkgadd_if_installed () { + local packages + + packages=$( grep_installed $* ) + + if [ "$packages" ]; then + eval pkgadd $packages + fi +} + # make a silent upgrade to new libc6 upgrade_libc () { - DEBIAN_FRONTEND=noninteractive pkgadd libc6 tzdata + DEBIAN_FRONTEND=noninteractive pkgadd_if_installed libc6 libc6-dev tzdata } -# upgrade apache2 to lenny +# upgrade apache2/php5 to lenny upgrade_apache2 () { - local package packages - - for package in \ - libapache2-mod-php5 \ - php5-cli \ - php5-cn \ - apache2-cn \ - php5-odbc \ - php5-suhosin \ - php-suhosin-cn - do - if pkg $package; then - packages="$packages $package" - fi - done - - eval pkgadd $packages + pkgrm apache-common # prevents installation of apache2-suexec + pkgadd_if_installed libapache2-mod-php5 php5-cli php5-cn apache2-cn \ + php5-odbc php5-suhosin php-suhosin-cn } upgrade_amavis () { @@ -1201,38 +1177,6 @@ get_variable () { echo $val } -# preserve mail location on upgrade -upgrade_dovecot () { - local default_mail_env mail_location - - # check if already upgraded - if ! pkg dovecot-common lt 1.0; then - return - fi - - # save old mail location - default_mail_env=$(get_variable default_mail_env /etc/dovecot/dovecot.conf) - - # silently upgrade package - restore_file /etc/dovecot/dovecot.conf - pkgadd dovecot-cn - - # insert old mail location - mail_location=$(get_variable mail_location /etc/dovecot/dovecot.conf) - if [ "$default_mail_env" -a ! "$mail_location" ]; then - check_and_sed '^#mail_location[[:space:]]*=' \ - "s|#mail_location[[:space:]]*=.*|mail_location = $default_mail_env|" /etc/dovecot/dovecot.conf || return 0 - - if [ -x /etc/init.d/dovecot ]; then - if [ -x /usr/sbin/invoke-rc.d ]; then - /usr/sbin/invoke-rc.d dovecot restart - else - /etc/init.d/dovecot restart - fi - fi - fi -} - # restore munin configs for silent upgrade upgrade_munin () { local config backup hostname domain @@ -1321,19 +1265,26 @@ check_archives_space() { } check_kernel_space() { - local available_disk_space kernel_size + local available_disk_space kernel_size linux_images pkg ret available_disk_space=$(free_space /) - kernel_size=$(installed_size kernel-2.6-cn) + linux_images=$(apt-cache show kernel-2.6-cn | grep ^Depends: \ + | grep -o 'linux-image[^ ]*') + for pkg in $linux_images; do + kernel_size=$(installed_size $pkg) + ret=$? + [ $ret -eq 0 ] && break + done - if [ $? -ne 0 ]; then + if [ $ret -ne 0 ]; then log "Failed to get installed size, skipping check." return 0 fi log "Free space in /: ${available_disk_space}MB" + log "Kernel package: $pkg" log "Kernel size: ${kernel_size}MB" - if LC_ALL=C apt-get --yes --print-uris install kernel-2.6-cn \ + if LC_ALL=C apt-get -s install kernel-2.6-cn \ | grep -q '^kernel-2.6-cn is already the newest version.$' then log "Not checking free space in /: kernel-2.6-cn already installed"