X-Git-Url: http://ftp.carnet.hr/pub/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=ff9003333cff112b3df17d727654439e8c394df9;hb=bf6e2a53d68e0eb92c170a04747cc18c28df84d5;hp=da07bc4ee129325c8b8011d4f4bbc7ba254a6a88;hpb=17a03476144e52e609b5ce79c4ebd16b488a6a6c;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index da07bc4..ff90033 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -22,10 +22,17 @@ pkg() { } log() { + local old_umask logfile=${logfile:=/var/log/carnet-upgrade.log} - touch $logfile + + old_umask=$(umask) + umask 0077 + echo "$(date +'%Y-%m-%d %H:%M:%S') $*" >> $logfile echo "CN: $*" + + umask $old_umask + chmod og= $logfile } # find first free uid/gid in range @@ -440,19 +447,19 @@ check_my_version () { rm -f $packages } -# if apache is installed make sure it's version 2 -check_apache_version () { +# if php is installed make sure it's version 5 +check_php_version () { - if pkg apache-cn && ! pkg apache2-cn; then + if pkg php4-cn && ! pkg php5-cn; then notice " -Prije prelaska na Debian Etch potrebno je napraviti nadogradnju sa Apache 1.3 na Apache 2.0. +Prije prelaska na Debian Etch potrebno je napraviti nadogradnju sa PHP 4 na PHP 5. Pokrenite: # apt-get update - # apt-get install apache2-cn + # apt-get install php5-cn -Nakon toga ponovno pozovite ovu skriptu." - log "carnet-upgrade aborted, upgrade to apache2-cn needed." +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 } @@ -467,7 +474,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 +490,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 +517,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 +544,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 +765,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 } @@ -772,6 +786,7 @@ restore_configs () { restore_config spamassassin-cn razor 1:2.85-1 /etc/razor/razor-agent.conf restore_config kernel-2.6-cn libpam-modules 1.0.1-5 /etc/security/limits.conf restore_config samba-cn samba-common 2:3.2.5-4lenny2 /etc/samba/smb.conf + restore_config '' base-files 5lenny2 /etc/issue /etc/issue.net # check if monitrc is template based if [ -f /etc/monit/monitrc -a ! -f /etc/monit/monitrc.$backup_ext ]; then @@ -796,8 +811,6 @@ restore_configs () { rm -f $config_new fi -# restore_config base-files 4 /etc/issue /etc/issue.net -# restore_config base-files 4 /etc/issue /etc/issue.net # 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 \ @@ -885,6 +898,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 () { @@ -903,7 +940,7 @@ disable_monit () { # make a silent upgrade to new libc6 upgrade_libc () { - DEBIAN_FRONTEND=noninteractive pkgadd libc6 + DEBIAN_FRONTEND=noninteractive pkgadd libc6 tzdata } # upgrade apache2 to etch @@ -937,7 +974,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,8 +1005,61 @@ upgrade_amavis () { /etc/init.d/amavis restart } -# fix openldap-aai postinst user handling -upgrade_openldap () { +# 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 @@ -978,12 +1068,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 @@ -1097,7 +1194,7 @@ upgrade_udev () { /etc/udev/rules.d/compat.rules do if [ -e $config ]; then - mv -v $config /etc/udev/ + rm -v -f $config fi done @@ -1122,6 +1219,7 @@ comment_force_overwrite () { fix_issue () { cat > /etc/issue < /etc/issue.net <