X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?p=carnet-upgrade.git;a=blobdiff_plain;f=src%2Ffunctions.sh;h=59cd2af2fb3629198489556d54a8e7f4b8b56a0a;hp=79c2bfded0ea2916b3847bb2e08cbac77c2df91b;hb=7a7cf98189a94ee061e88f1807a6d9d11e447ea0;hpb=aedd23b3aa1a52574a2cb53ff47b89a8830eeba9 diff --git a/src/functions.sh b/src/functions.sh index 79c2bfd..59cd2af 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 $* ..." @@ -159,6 +120,14 @@ dist_upgrade () { } } +apt_autoremove () { + log "Running autoremove ..." + apt-get -y$s --purge autoremove || { + dpkg --configure -a + apt-get -yf install + } +} + remove_x() { LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$msg_remove_x" 18 75 if [ $? -eq 0 ]; then @@ -398,38 +367,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 @@ -453,79 +390,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 Squeeze 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 Squeeze 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 @@ -737,22 +601,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 @@ -873,6 +721,7 @@ restore_configs () { 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 console-tools lt 1:0.2.3dbs-69.1; then @@ -930,30 +779,11 @@ apt_listchanges () { # make a silent installation of carnet and srce keyrings install_keyrings () { pkgadd carnet-keyring srce-keyring debian-archive-keyring - pkgupgrade 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 - - if getent group skey > /dev/null; then - groupdel skey || true - log "groupdel skey" - 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 -} - # check if package is orphaned (nothing depends on it) is_orphaned () { local package deps @@ -971,6 +801,8 @@ is_orphaned () { remove_orphaned () { local package + apt_autoremove + for package in $orphaned_packages; do if is_orphaned $package; then pkgrm $package @@ -1049,56 +881,34 @@ upgrade_amavis () { # handle freerdius upgrade upgrade_freeradius () { - local template config_new password realm hostname basedn - - 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 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 - fi -} - -# fix openldap-aai postinst user handling +# handle openldap upgrade 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 + # aai discovers database type from debconf + if [ -f /etc/ldap/slapd.conf ] && grep -q ^database.*bdb /etc/ldap/slapd.conf + then + echo set slapd/backend BDB | debconf-communicate >/dev/null 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 + # aai does not depend on the new openldap version + pkgadd slapd + pkgadd openldap-aai +} - # 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 } @@ -1140,6 +950,10 @@ get_variable () { upgrade_munin () { local config backup hostname domain + # new htmldir location + mkdir -p /var/cache/munin + mv /var/www/munin /var/cache/munin/www + for pkg_name in munin munin-node; do pkg $pkg_name lt '1.4.5-3' || continue @@ -1161,37 +975,6 @@ 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.new >/dev/null; then @@ -1254,7 +1037,7 @@ check_kernel_space() { log "Kernel package: $pkg" log "Kernel size: ${kernel_size}MB" - if LC_ALL=C apt-get -s install kernel-2.6-cn \ + if LC_ALL=C apt-get -s install kernel-2.6-cn 2>/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"