X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=de8f4f97bef77020f90fb7ae61219799c6b85e6c;hb=55434bf060284ccf0f512c044ce4681b182ca6e8;hp=1ac813bf90ddd36c3c72aa695c4f2a35d4c883ed;hpb=36c8fe6512a81e75fe60e2e1ae31a6eccb481031;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 1ac813b..de8f4f9 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -467,7 +467,7 @@ check_grsec_kernel () { return 0 fi - if [ "$ver" = "${ver#2.6.2[4-9]}" ] || reboot_required; then + 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. @@ -483,6 +483,18 @@ Nakon toga ponovno pozovite ovu skriptu." fi } +check_reboot () { + reboot_required || return 0 + + LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$reboot_warning" 18 +75 + if [ $? -eq 0 ]; then + log "Reboot before continuing." + exit 0 + else + log "Proceed without reboot." + fi +} + # check if the latest kernel is booted reboot_required () { local default_kernel kernel_package running_release running_version @@ -498,7 +510,7 @@ reboot_required () { if [ -z "$default_kernel" -a -r "/boot/grub/menu.lst" ]; then default_kernel=$( awk ' $1 == "default" { default = $2; - if (default != /^[[:digit:]]+$/) { exit } } + if (default !~ /^[0-9]+$/) { exit } } $1 == "title" { title+=1 } $1 == "kernel" && title==default+1 { print $2; exit }' \ /boot/grub/menu.lst 2>/dev/null ) @@ -525,11 +537,6 @@ reboot_required () { log "Default kernel package: $kernel_package" - if [ "$kernel_package" != "kernel-2.6-cn" ]; then - log "Default kernel package is not kernel-2.6-cn" - return 1 - fi - running_release=$( uname -r ) running_version=$( uname -v ) log "Running kernel: $running_release $running_version" @@ -751,7 +758,7 @@ restore_config () { # force reconfiguration at the end if package is not upgraded automatically if [ "$config_changed" -a "$cn_package" ]; then cn_version=$( dpkg -s "$cn_package" | awk '/^Version:/ {print $2}' ) - post_upgrade "pkg $cn_package eq $cn_version && dpkg-reconfigure $cn_package" + post_upgrade "pkg $cn_package gt $cn_version || dpkg-reconfigure $cn_package" fi } @@ -885,6 +892,30 @@ remove_skey () { fi } +# check if package is orphaned (nothing depends on it) +is_orphaned () { + local package deps + + package=$1 + deps=$(apt-get remove -s $package | grep ^Remv | wc -l) + if [ "$deps" -eq 1 ]; then + return 0 + else + return 1 + fi +} + +# remove old and unused libraries +remove_orphaned () { + local package + + for package in $orphaned_packages; do + if is_orphaned $package; then + pkgrm $package + fi + done +} + # monit it causing problems for postinst scripts # restarting daemons so try to disable it disable_monit () { @@ -937,7 +968,7 @@ upgrade_amavis () { local conf # remove init script diversion before upgrade - if pkg amavisd-cn lt 3:2.4.2-4; then + 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 @@ -968,9 +999,62 @@ upgrade_amavis () { /etc/init.d/amavis restart } -# fix openldap-aai postinst user handling -upgrade_openldap () { - pkg openldap-aai lt 2.3 || return 0 +# handle freerdius config files upgrade +upgrade_freeradius () { + local template config_new password realm + + pkg freeradius-aai lt 2.1.3-0lenny0 || return 0 + + # handle static configs + restore_config freeradius-aai freeradius 2.1.3-0lenny0 \ + /etc/freeradius/clients.conf \ + /etc/freeradius/hints \ + /etc/freeradius/ldap.attrmap \ + /etc/freeradius/radiusd.conf + + # handle template based configs + template=/usr/share/carnet-upgrade/files/etc/freeradius/eap.conf.template + config_new=$(mktemp /var/lib/carnet-upgrade/eap.conf.XXXXXX) + password=$(grep -s '^[[:space:]]*private_key_password[[:space:]]*=' \ + /etc/freeradius/eap.conf) + cp $template $config_new + sed -i "s/.*#PASSWORD#.*/$password/" $config_new + if cmp -s $config_new /etc/freeradius/eap.conf >/dev/null; then + log "Restoring config file /etc/freeradius/eap.conf" + cp -v /usr/share/carnet-upgrade/files/etc/freeradius/eap.conf.restore \ + /etc/freeradius/eap.conf + fi + rm -f $config_new + + template=/usr/share/carnet-upgrade/files/etc/freeradius/proxy.conf.template + config_new=$(mktemp /var/lib/carnet-upgrade/proxy.conf.XXXXXX) + realm=$(sed -n '/^[[:space:]]*suffix[[:space:]]*/ { + s///; s/"//g; s/,dc=/./g; s/dc=//; s/.hr$//; p; q }' /etc/ldap/slapd.conf) + cp $template $config_new + sed -i "s/#REALM#/$realm/" $config_new + if cmp -s $config_new /etc/freeradius/proxy.conf >/dev/null; then + log "Restoring config file /etc/freeradius/proxy.conf" + cp -v /usr/share/carnet-upgrade/files/etc/freeradius/proxy.conf.restore \ + /etc/freeradius/proxy.conf + fi + rm -f $config_new + + # install the new packages + if ! apt-get -y install freeradius; then + # freeradius upgrade fails here, try to fix it by creating certificates + [ -x /etc/freeradius/certs/bootstrap ] && /etc/freeradius/certs/bootstrap + + dpkg --configure -a + apt-get -y -f install + fi + + # finally try to cleanup this mess + 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 @@ -978,12 +1062,19 @@ upgrade_openldap () { if [ -f $ldif ]; then cp -v $ldif $ldif_backup 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 @@ -1088,6 +1179,26 @@ 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