X-Git-Url: http://ftp.carnet.hr/pub/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=7511bc2908664605644bf434db4b09165dcf7b9c;hb=3d86bafffc213b905aa72dfcaba045d22997e7c2;hp=8e09d21437b324ce3f0fb1bba2303ccfc84de906;hpb=cd8d314efd5ddbf380c1fe3154a8f4c1547ea22e;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 8e09d21..7511bc2 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,23 +447,53 @@ 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 php4-cn && ! pkg php5-cn; then + # prepare for php upgrade by installing php5 extensions + install_php5_extensions - if pkg apache-cn && ! pkg apache2-cn; then notice " -Prije prelaska na Debian Etch potrebno je napraviti nadogradnju sa Apache 1.3 na Apache 2.0. +Prije prelaska na Debian Lenny 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 } +# 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` @@ -510,7 +547,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 ) @@ -537,11 +574,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" @@ -657,7 +689,7 @@ backup_slapd_db () { [ -x /etc/init.d/freeradius ] && /etc/init.d/freeradius start || true else log "slapd backup already at $ldap_backup, skipping." - notice "Backup slapd baze u $ldap_backup vec postoji!" + #notice "Backup slapd baze u $ldap_backup vec postoji!" fi } @@ -681,7 +713,7 @@ backup_etc_dir () { umask $old_umask else log "/etc backup already present in $etc_backup, skipping." - notice "Backup /etc direktorija u $etc_backup vec postoji!" + #notice "Backup /etc direktorija u $etc_backup vec postoji!" fi } @@ -763,7 +795,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 } @@ -784,6 +816,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 @@ -808,8 +841,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 \ @@ -897,6 +928,36 @@ remove_skey () { fi } +# remove unsupported php version +remove_php4 () { + # leave the configuration just in case + pkgrm_only php4-common +} + +# 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 () { @@ -915,7 +976,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 @@ -980,8 +1041,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 @@ -990,12 +1104,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 @@ -1109,7 +1230,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 @@ -1134,6 +1255,7 @@ comment_force_overwrite () { fix_issue () { cat > /etc/issue < /etc/issue.net <