X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=0fee7ca38ac0fa4b2ab36348633dcc205f107484;hb=a15294f52fc01f32e55378ef8f3ef8973700e743;hp=b1718c48a4eb393067f46f73735bc8e398e7d543;hpb=4c2c39354418f98a029d6142525042e73a506484;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index b1718c4..0fee7ca 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -35,24 +35,6 @@ log() { chmod og= $logfile } -# find first free uid/gid in range -# find_id passwd 100 999 -find_id() { - local i db first last ids - db=$1 - first=$2 - last=$3 - ids=$(getent $db | awk -F: "\$3 >= $first && \$3 <= $last {print \$3}") - for i in $(seq $first $last) - do - if ! echo $ids | grep -q $i; then - echo $i - return 0 - fi - done - return 1 -} - # safe in-place s/// check_and_sed() { [ "$DEBIAN_SCRIPT_DEBUG" ] && set -vx @@ -79,27 +61,6 @@ check_and_sed() { return $ret } -# -# Update uid for user from reserved system range (0-99) to dynamic system -# range (100-999). Optionally update ownerships of given directories. -# $0 user [directory ...] -# -check_and_update_ugid() { - local user newgid newuid - user=$1 - if [ "$(getent passwd $user | awk -F: '$3 >= 100 {print "ok"; exit 0}')" ]; then - return 0 - fi - shift - newgid=$(find_id group 100 999) - newuid=$(find_id passwd 100 999) - # other directories/files - chown -R $newuid:$newgid $* - groupmod -g $newgid $user - usermod -u $newuid -g $newgid $user - log "Fixed $user user uid/gid." -} - pkgadd () { [ -n "$*" ] || return 0 log "Installing $* ..." @@ -146,6 +107,12 @@ apt_download() { } dist_upgrade () { + log "Running upgrade ..." + apt-get -y$s upgrade || { + dpkg --configure -a + apt-get -y$s upgrade + } + log "Running dist-upgrade ..." apt-get -y$s dist-upgrade || { dpkg --configure -a @@ -153,11 +120,34 @@ dist_upgrade () { } } +apt_autoremove () { + log "Running autoremove ..." + apt-get -y$s --purge autoremove || { + dpkg --configure -a + apt-get -yf install + } +} + +# remove stale package information from available +# warning, in file '/var/lib/dpkg/available' +# near line 58185 package 'vim-cn': missing architecture +cleanup_available () { + log "Cleaning dpkg available file" + + available=$(mktemp /var/lib/carnet-upgrade/available.XXXXXX) + apt-cache dumpavail > $available + + dpkg --clear-avail + dpkg --update-avail $available + + rm -f $available +} + remove_x() { LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$msg_remove_x" 18 75 if [ $? -eq 0 ]; then log "Removing X Window System" - pkgrm x11-common + pkgrm xserver-xorg else log "Skipping X Window System removal" fi @@ -376,7 +366,7 @@ check_upgrade () { if [ "$upgrade" ]; then notice " -Prije prelaska na Debian Lenny potrebno je napraviti nadogradnju ovih paketa: +Prije prelaska na Debian Squeeze potrebno je napraviti nadogradnju ovih paketa: $upgrade Pokrenite: @@ -392,38 +382,6 @@ Nakon toga ponovno pozovite ovu skriptu." fi } -# update sarge urls in sources list -fix_sarge_sources () { - local apt_sources='/etc/apt/sources.list' - local fixed_sources=$(mktemp /var/lib/carnet-upgrade/sources.list.XXXXXX) - - # sarge (oldstable) was archived recently -> sources.list needs update - awk -v archive='http://archive.debian.org/debian' \ - -v security='http://archive.debian.org/debian-security' \ - '$3 == "sarge" && $2 ~ /[/]debian$/ { $2 = archive } - $3 == "sarge/updates" && $2 ~ /security\.debian\.org$/ { $2 = security } - { print }' $apt_sources > $fixed_sources - - # did anything get updated - if ! cmp $apt_sources $fixed_sources >/dev/null; then - log "sources.list fixed to use archive.debian.org" - - # backup current version - if [ ! -f "$apt_sources.$backup_ext.sarge" ]; then - cp -av $apt_sources "$apt_sources.$backup_ext.sarge" - fi - - # install fixed version - cp -av $fixed_sources $apt_sources - - # update the database - apt_update - fi - - # delete temporary - rm -f $fixed_sources -} - # try to check if we are using the latest version of carnet-upgrade script check_my_version () { local packages latest_version @@ -447,79 +405,6 @@ check_my_version () { rm -f $packages } -# if php is installed make sure it's version 5 -check_php_version () { - - if pkg php4-cn && ! pkg php5-cn; then - # prepare for php upgrade by installing php5 extensions - install_php5_extensions - - notice " -Prije prelaska na Debian Lenny potrebno je napraviti nadogradnju sa PHP 4 na PHP 5. - -Pokrenite: - # apt-get update - # apt-get install php5-cn - -Nakon sto provjerite da sve web aplikacije rade ispravno, ponovno pozovite ovu skriptu." - log "carnet-upgrade aborted, upgrade to php5-cn needed." - exit 1 - fi -} - -# install php5 extensions based on installed php4 extensions -install_php5_extensions () { - local php4_list php5_pkg - - # get a list of installed php4 packages - php4_list=$(mktemp /var/lib/carnet-upgrade/php4_list.XXXXXX) - dpkg -l php4-\* | awk '/^ii/ { - pkg=$2; sub("^php4", "php5", pkg); print pkg }' > $php4_list - - # compare it with the list of available php5 packages - php5_pkg=$(apt-cache search -n ^php5- | cut -d' ' -f 1 \ - | grep -F -x -f $php4_list | grep -F -x -v php5-cn) - - # handle special cases - if pkg php4-xslt; then - php5_pkg="$php5_pkg php5-xsl" - fi - - # install the required php5 modules - if [ "$php5_pkg" ]; then - pkgadd $php5_pkg - fi - - # cleanup - rm -f $php4_list -} - -# if grsec is installed make sure it is fresh -check_grsec_kernel () { - local ver=`uname -r` - - log "Kernel version: $ver" - if [ "$ver" = "${ver%-grsec}" ]; then - # not grsec variant - return 0 - fi - - if [ "$ver" = "${ver#2.6.2[4-9]}" ]; then - # kernel too old - notice " -Prije prelaska na Debian Lenny potrebno je napraviti nadogradnju na najnoviji kernel. - -Pokrenite: - # apt-get update - # apt-get install kernel-2.6-cn - # reboot - -Nakon toga ponovno pozovite ovu skriptu." - log "carnet-upgrade aborted, kernel upgrade needed." - exit 1 - fi -} - check_reboot () { reboot_required || return 0 @@ -536,23 +421,35 @@ check_reboot () { reboot_required () { local default_kernel kernel_package running_release running_version - # try to get default kernel from lilo - if type lilo >/dev/null 2>&1; then - default_kernel=$( lilo -t -v 2>/dev/null \ - | grep -B3 '[*]$' \ - | sed -n -e '/^Boot image: / { s///p; q; }' ) + # try to get default kernel from grub2 + if [ -z "$default_kernel" -a -r "/boot/grub/grub.cfg" ]; then + default_kernel=$( awk ' + $0 ~ /^set default=".*"/ { + def = gensub(/default="(.*)"/, "\\1", "1", $2); + if (def !~ /^[0-9]+$/) { exit } + } + $1 == "menuentry" { menuentry+=1 } + $1 == "linux" && menuentry==def+1 { print $2; exit }' \ + /boot/grub/grub.cfg 2>/dev/null ) fi - # fallback to grub if lilo not installed + # try to get default kernel from grub-legacy if [ -z "$default_kernel" -a -r "/boot/grub/menu.lst" ]; then default_kernel=$( awk ' - $1 == "default" { default = $2; - if (default !~ /^[0-9]+$/) { exit } } + $1 == "default" { def = $2; + if (def !~ /^[0-9]+$/) { exit } } $1 == "title" { title+=1 } - $1 == "kernel" && title==default+1 { print $2; exit }' \ + $1 == "kernel" && title==def+1 { print $2; exit }' \ /boot/grub/menu.lst 2>/dev/null ) fi + # try to get default kernel from lilo + if [ -z "$default_kernel" ] && type lilo >/dev/null 2>&1; then + default_kernel=$( lilo -t -v 2>/dev/null \ + | grep -B3 '[*]$' \ + | sed -n -e '/^Boot image: / { s///p; q; }' ) + fi + if [ -z "$default_kernel" ]; then log "Could not find default kernel" return 1 @@ -561,8 +458,12 @@ reboot_required () { log "Default kernel image: $default_kernel" if [ ! -e "$default_kernel" ]; then - log "Default kernel image doesn't exist!?" - return 1 + # /boot prefix might be missing + default_kernel="/boot/${default_kernel#/}" + if [ ! -e "$default_kernel" ]; then + log "Default kernel image doesn't exist!?" + return 1 + fi fi kernel_package=$( dpkg -S $default_kernel | cut -d: -f 1 ) @@ -600,7 +501,7 @@ upgrade () { return 1 esac - pkgadd_if_installed $packages + pkgupgrade $packages } # install packages introduced in this release @@ -614,7 +515,12 @@ install_new () { create_sources_list () { local sl sl_new sl=/etc/apt/sources.list - sl_new=/usr/share/carnet-upgrade/files/etc/apt/sources.list + sl_new=$( copy_template $sl ) + + # comment aai repository if not in use + if ! pkg srce-keyring; then + sed -i 's/^\(deb.*ftp.srce.hr\)/#\1/' $sl_new + fi # check if already installed if ! cmp $sl $sl_new >/dev/null; then @@ -630,8 +536,9 @@ create_sources_list () { `cat /etc/apt/sources.list`" fi -} + rm $sl_new +} # funkcija koja brise grupu proc remove_group_proc () { @@ -715,22 +622,6 @@ backup_etc_dir () { fi } -# fixaj /etc/default/raid2 -fix_etc_default_raid2 () { - if [ -f /etc/default/raid2 ]; then - sed "s/^AUTOSTART.*/AUTOSTART=true/g" /etc/default/raid2 > /etc/default/raid2.$backup_ext.$$ - chown --reference=/etc/default/raid2 /etc/default/raid2.$backup_ext.$$ - chmod --reference=/etc/default/raid2 /etc/default/raid2.$backup_ext.$$ - - if ! cmp -s /etc/default/raid2.$backup_ext.$$ /etc/default/raid2; then - log "Fixed /etc/default/raid2 AUTOSTART option." - mv -v /etc/default/raid2.$backup_ext.$$ /etc/default/raid2 - else - rm -v /etc/default/raid2.$backup_ext.$$ - fi - fi -} - # restore a configuration file if it contains only CN modifications restore_file () { local file file_expect file_restore file_backup @@ -801,98 +692,80 @@ restore_configs () { 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 + if pkg ntp-cn && pkg ntp lt 1:4.2.6.p2+dfsg-1+b1; then + if restore_file /etc/ntp.conf; then + postupgrade_reconfigure ntp-cn + fi + fi + + if pkg kernel-2.6-cn && pkg procps lt 1:3.2.8-9; then if restore_file /etc/sysctl.conf; then postupgrade_reconfigure kernel-2.6-cn fi fi - if pkg ntp-cn && pkg ntp lt 1:4.2.4p4+dfsg-8; then - if restore_file /etc/ntp.conf; then - postupgrade_reconfigure ntp-cn + if pkg kernel-2.6-cn && pkg libpam-modules lt 1.1.1-6.1; then + if restore_file /etc/security/limits.conf; then + postupgrade_reconfigure kernel-2.6-cn fi fi - if pkg apache2-cn && pkg apache2.2-common lt 2.2.9-10+lenny2; then - if restore_file /etc/apache2/ports.conf; then - postupgrade_reconfigure apache2-cn + if pkg vsftpd-cn && pkg vsftpd lt 2.3.2-3+squeeze2; then + if restore_file /etc/vsftpd.conf; then + postupgrade_reconfigure vsftpd-cn fi fi - if pkg postfix-cn && pkg sasl2-bin lt 2.1.22.dfsg1-23; then - if restore_file /etc/default/saslauthd; then - postupgrade_reconfigure postfix-cn + if pkg squirrelmail-cn && pkg squirrelmail lt 2:1.4.21-2; then + if restore_file /etc/squirrelmail/apache.conf; then + postupgrade_reconfigure squirrelmail-cn fi fi - if pkg bind9-cn && pkg bind9 lt 1:9.5.1.dfsg.P1-1; then - if restore_file /etc/bind/named.conf.options; then - postupgrade_reconfigure bind9-cn + if pkg spamassassin-cn && pkg spamassassin lt 3.3.1-1; then + if restore_file /etc/spamassassin/v310.pre; then + postupgrade_reconfigure spamassassin-cn fi fi - if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.1.dfsg-1; then + if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.4-3; then if restore_file /etc/cron.daily/amavisd-new; then rm -f /etc/cron.daily/amavisd-new.$backup_ext postupgrade_reconfigure amavisd-cn fi - fi - if pkg spamassassin-cn && pkg razor lt 1:2.85-1; then - if restore_file /etc/razor/razor-agent.conf; then - postupgrade_reconfigure spamassassin-cn + if restore_file /etc/amavis/conf.d/15-av_scanners; then + rm -f /etc/amavis/conf.d/15-av_scanners.$backup_ext + postupgrade_reconfigure amavisd-cn fi fi - if pkg kernel-2.6-cn && pkg libpam-modules lt 1.0.1-5; then - if restore_file /etc/security/limits.conf; then - postupgrade_reconfigure kernel-2.6-cn - fi + if pkg amavisd-cn lt 3:2.6.5; then + restore_file /etc/init.d/amavisd-cn + rm -f /etc/init.d/amavisd-cn.$backup_ext fi - if pkg samba-cn && pkg samba-common lt 2:3.2.5-4lenny2; then - if restore_file /etc/samba/smb.conf; then - postupgrade_reconfigure samba-cn - fi + if pkg console-tools lt 1:0.2.3dbs-69.1; then + restore_file /etc/console-tools/config fi - if pkg base-files lt 5lenny2; then + if pkg base-files lt 6.0squeeze2; then restore_file /etc/issue 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 - 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 + if pkg slapd lt 2.4.23-7.2; then + restore_file /etc/default/slapd fi - if pkg php5-cn && pkg libapache2-mod-php5 lt 5.2.6.dfsg.1-1+lenny2; 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 + # dovecot won't start with these options + if pkg dovecot-cn && pkg dovecot-common lt 1:1.2.15-7; then + sed -i 's/^\( *\)\(sieve\(_storage\)\?=.*\)/\1#\2/' \ + /etc/dovecot/dovecot.conf fi # check if monitrc is template based - if [ -f /etc/monit/monitrc ]; then + if [ -e /etc/monit/monitrc ]; then # monit is removed at this point # regenerate config from template hostname=$(hostname) domain=$(hostname --domain) @@ -914,15 +787,14 @@ apt_listchanges () { case $command in disable) if [ -f $file ]; then - dpkg-divert --local --rename --divert $file.$backup_ext \ + dpkg-divert --local --rename --divert $file.disabled \ --add $file || true fi ;; enable) - if [ -f $file.$backup_ext ]; then - dpkg-divert --remove $file || true - fi + # cleanup the diversion even if the file is already removed + dpkg-divert --rename --remove $file || true ;; esac done @@ -930,29 +802,15 @@ apt_listchanges () { # make a silent installation of carnet and srce keyrings install_keyrings () { - pkgadd carnet-keyring srce-keyring debian-archive-keyring - pkgadd_if_installed dpkg apt debconf python-apt dpkg-dev - - dpkg-reconfigure carnet-keyring srce-keyring debian-archive-keyring - apt_update -} - -# remove skey (not supported anymore) -remove_skey () { - pkgrm skey-cn libpam-skey + pkgadd carnet-keyring debian-archive-keyring + dpkg-reconfigure carnet-keyring debian-archive-keyring - if getent group skey > /dev/null; then - groupdel skey || true - log "groupdel skey" + if pkg srce-keyring; then + pkgadd srce-keyring + dpkg-reconfigure srce-keyring fi -} -# remove unsupported php version -# but leave the configuration just in case -remove_php4 () { - if pkg php5-cn && pkg php4-common; then - pkgrm_only php4-common - fi + apt_update } # check if package is orphaned (nothing depends on it) @@ -970,13 +828,20 @@ is_orphaned () { # remove old and unused libraries remove_orphaned () { - local package + local package remove + apt_autoremove + + remove= for package in $orphaned_packages; do if is_orphaned $package; then - pkgrm $package + remove="$remove $package" fi done + + if [ "$remove" ]; then + pkgrm $remove + fi } # monit it causing problems for postinst scripts @@ -992,9 +857,19 @@ disable_monit () { apt-get remove --yes monit # stop the binary pkill -9 monit || true + # move away init for insserv to work + mv /etc/init.d/monit /var/lib/carnet-upgrade/ fi } +# allow monit to run again +enable_monit () { + if [ -f /var/lib/carnet-upgrade/monit ]; then + mv /var/lib/carnet-upgrade/monit /etc/init.d/monit + pkgadd monit-cn + fi +} + # check which of the given packages are installed grep_installed () { local package installed @@ -1009,7 +884,7 @@ grep_installed () { } # only upgrade packages if they are already installed -pkgadd_if_installed () { +pkgupgrade () { local packages packages=$( grep_installed $* ) @@ -1021,27 +896,19 @@ pkgadd_if_installed () { # make a silent upgrade to new libc6 upgrade_libc () { - DEBIAN_FRONTEND=noninteractive pkgadd_if_installed libc6 libc6-dev tzdata + DEBIAN_FRONTEND=noninteractive pkgupgrade libc6 libc6-dev tzdata } -# upgrade apache2/php5 to lenny +# upgrade apache2/php5 upgrade_apache2 () { pkgrm apache-common # prevents installation of apache2-suexec - pkgadd_if_installed libapache2-mod-php5 php5-cli php5-cn apache2-cn \ + pkgupgrade libapache2-mod-php5 php5-cli php5-cn apache2-cn \ php5-odbc php5-suhosin php-suhosin-cn } upgrade_amavis () { local conf - # remove init script diversion before upgrade - if pkg amavisd-cn lt 3:2.6.1-1; then - if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then - rm -vf /etc/init.d/amavis - dpkg-divert --remove /etc/init.d/amavis - fi - fi - # move old config aside for conf in /etc/amavisd.conf /etc/amavis/amavisd.conf; do if [ -e $conf -a ! -e $conf.$backup_ext ]; then @@ -1052,72 +919,43 @@ upgrade_amavis () { # install new packages pkgadd amavisd-cn amavisd-new - # fix new packages - check_and_sed '^clamd.*5.clamav.log$' \ - 's/^\(clamd.*\)5.clamav.log$/\14\tsocket/g' \ - /etc/init.d/amavisd-cn || true - - # check if link got lost - if pkg amavisd-cn && [ ! -L /etc/init.d/amavis ]; then - apt-get install --reinstall --yes amavisd-cn - fi - # start new packages - /etc/init.d/amavis restart + /etc/init.d/amavisd-cn restart } # handle freerdius upgrade upgrade_freeradius () { - local template config_new password realm hostname basedn + local password - pkg freeradius-aai lt 2.1.3-0lenny0 || return 0 + pkg freeradius-aai lt 2.1.10-1 || return 0 - # aai team prevents a clean lenny upgrade + # aai team prevents a normal upgrade cp -av /etc/freeradius /etc/freeradius.$backup_ext pkgrm freeradius-aai freeradius-ldap freeradius + rm -rf /etc/freeradius/certs pkgadd freeradius-aai -} - -# prepare for slapd upgrade (caused by freeradius installation) -prepare_openldap () { - pkg openldap-aai lt 2.4 || return 0 - # openldap-aai expects org.ldif to exists - local ldif=/var/lib/ldap/org.ldif - local ldif_backup=/var/lib/carnet-upgrade/org.ldif - if [ -f $ldif ]; then - cp -v $ldif $ldif_backup + # sync localhost passwords + if pkg libpam-radius-auth && [ -f "/etc/pam_radius_auth.conf" ]; then + pkgadd libpam-radius-auth + password=$( + sed -n '/^[[:space:]]*client[[:space:]]\+localhost/,/^[[:space:]]*}/ { /^[[:space:]]*secret[[:space:]]*=[[:space:]]*\([^[:space:]]*\)/s//\1/p }' /etc/freeradius/clients.conf + ) + if [ "$password" ] \ + && ! grep -q "^127.0.0.1[[:space:]]\+$password[[:space:]]\+" \ + /etc/pam_radius_auth.conf + then + sed -i.$backup_ext "s/^\(127.0.0.1[[:space:]]*\)[^[:space:]]*\(.*\)/\1$password\2/" /etc/pam_radius_auth.conf + fi fi } -# fix openldap-aai postinst user handling -upgrade_openldap () { - pkg openldap-aai lt 2.4 || return 0 - - # slapd postinst fails if move_old_database is false - echo 'slapd slapd/move_old_database boolean true' | debconf-set-selections - pkgadd slapd - - # slapd removes org.ldif during switch from ldap -> openldap user - local ldif=/var/lib/ldap/org.ldif - local ldif_backup=/var/lib/carnet-upgrade/org.ldif - if [ -f $ldif_backup -a ! -f $ldif ]; then - cp -v $ldif_backup $ldif - fi - - # openldap-aai postinst fails here because of database permissions - apt-get -y install openldap-aai || true - chown -R openldap:openldap /var/lib/ldap - /etc/init.d/slapd restart - dpkg --configure -a - - # remove ldap user if openldap works - if getent passwd ldap > /dev/null && \ - getent passwd openldap > /dev/null && \ - pgrep -U openldap slapd > /dev/null - then - log "userdel ldap (replaced by openldap)" - userdel ldap || true +# handle mysql 5.0 to 5.1 upgrade +upgrade_mysql () { + if pkg mysql-server || pkg mysql-server-5.0; then + pkgadd mysql-server + dpkg -P mysql-server-5.0 + /etc/init.d/mysql restart fi } @@ -1137,6 +975,13 @@ upgrade_postfix () { fi } +# upgrade bind separately so DNS is not down for too long +# or breaks postinst scripts of other cn packages that depend on +# working resolver +upgrade_bind() { + pkgadd bind9-cn +} + get_variable () { local name=$1 file=$2 val @@ -1152,8 +997,14 @@ get_variable () { upgrade_munin () { local config backup hostname domain + # new htmldir location + if [ -d /var/www/munin -a ! -e /var/cache/munin/www ]; then + mkdir -p /var/cache/munin + mv /var/www/munin /var/cache/munin/www + fi + for pkg_name in munin munin-node; do - pkg $pkg_name lt '1.2.6-10~lenny1' || continue + pkg $pkg_name lt '1.4.5-3' || continue config=/etc/munin/$pkg_name.conf backup=$config.$backup_ext @@ -1173,51 +1024,20 @@ upgrade_munin () { dpkg-reconfigure munin-cn } -# udev.preinst fails if devfs configs still exist -upgrade_udev () { - local config - - for config in /etc/udev/rules.d/devfs.rules \ - /etc/udev/rules.d/compat-full.rules \ - /etc/udev/rules.d/compat.rules - do - if [ -e $config ]; then - rm -v -f $config - fi - done - - if [ -f /etc/udev/udev.rules -a ! -f /etc/udev/rules.d/udev.rules ]; then - ln -sfv ../udev.rules /etc/udev/rules.d/ - fi - - pkgadd udev -} - -# fix /etc/dpkg/dpkg.cfg -comment_force_overwrite () { - if [ -f /etc/dpkg/dpkg.cfg ]; then - if check_and_sed '^force-overwrite' \ - 's,\(^force-overwrite\),#\1,' \ - /etc/dpkg/dpkg.cfg; then - notice "$msg_comment_force_overwrite" - fi - fi -} - # try not to overwrite user modified issue files fix_issue () { - if cmp /etc/issue $cnup/files/etc/issue.expect.lenny >/dev/null; then + if cmp /etc/issue $cnup/files/etc/issue.expect.new >/dev/null; then cp -av /etc/issue /etc/issue.$backup_ext cat > /etc/issue </dev/null; then + if cmp /etc/issue.net $cnup/files/etc/issue.net.expect.new >/dev/null; then cp -av /etc/issue.net /etc/issue.net.$backup_ext cat > /etc/issue.net </dev/null \ | grep -q '^kernel-2.6-cn is already the newest version.$' then log "Not checking free space in /: kernel-2.6-cn already installed" @@ -1276,6 +1113,82 @@ check_kernel_space() { fi } +# free some space on / partition by cleaning old unused kernels +clean_old_kernels() { + local installed keep pkg keep remove delete name dialog_list selection + + # find all installed kernels + installed=$( + dpkg -l | egrep '^ii linux-image-[0-9]+[.][0-9]+[.][0-9]+-' \ + | awk '{print $2}' + ) + log "Found kernel packages: $installed" + + # leave current and new kernels + keep="linux-image-$(uname -r) $(get_cn_kernels)" + log "Keep kernel packages: $keep" + + # check what to remove + remove= + for pkg in $installed; do + delete=yes + for name in $keep; do + [ "$pkg" = "$name" ] && delete= + done + if [ "$delete" = yes ]; then + remove="$remove $pkg" + fi + done + log "Obsolete kernel packages: $remove" + + if [ "$remove" ]; then + for pkg in $remove; do + dialog_list="$dialog_list $pkg '' off" + done + + # user selects the packages to delete + selection=$( mktemp /var/lib/carnet-upgrade/selection.XXXXXX ) + eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \ + --checklist \""$msg_remove_kernels"\" 20 75 6 $dialog_list 2>$selection + + selected=$( tr -d \" < $selection ) + rm -f $selection + + if [ "$selected" ]; then + log "Removing kernel packages: $selected" + pkgrm $selected + fi + fi +} + +# prevent sysv-rc migration problems +clean_initd_packages() { + local list removed pkg dialog_list selection selected + + list=$( dpkg -S /etc/init.d/\* | grep -v ^diversion | cut -d: -f1 | sort -u ) + removed=$( dpkg -l $list | sed -n 's/^r.[[:space:]]\+\([^[:space:]]\+\).*/\1/p' ) + log "Found removed packages: $removed" + + if [ "$removed" ]; then + for pkg in $removed; do + dialog_list="$dialog_list $pkg '' off" + done + + # user selects the packages to delete + selection=$( mktemp /var/lib/carnet-upgrade/selection.XXXXXX ) + eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \ + --checklist \""$msg_remove_initd"\" 20 75 6 $dialog_list 2>$selection + + selected=$( tr -d \" < $selection ) + rm -f $selection + + if [ "$selected" ]; then + log "Purging packages: $selected" + dpkg -P $selected + fi + fi +} + free_space() { df --portability --block-size=1M "$1" | tail -1 | awk '{print $4}' }