X-Git-Url: http://ftp.carnet.hr/pub/carnet-debian/scm?a=blobdiff_plain;f=usr%2Fshare%2Fcarnet-upgrade%2Ffunctions.sh;fp=usr%2Fshare%2Fcarnet-upgrade%2Ffunctions.sh;h=0000000000000000000000000000000000000000;hb=1e70ff3fe998033fd93c8cd177082b8cd566d2ce;hp=5de5d43bb273217d916853729a17c8035aa7978d;hpb=145b5a97d79f0305f0c6b56fc78437eac89ec94b;p=carnet-upgrade.git diff --git a/usr/share/carnet-upgrade/functions.sh b/usr/share/carnet-upgrade/functions.sh deleted file mode 100644 index 5de5d43..0000000 --- a/usr/share/carnet-upgrade/functions.sh +++ /dev/null @@ -1,678 +0,0 @@ -# last update: 2005-07-03 -# Ivan 'ico' Rako -# Zoran 'jelly' Dzelajlija - -notice () { - dialog --backtitle "$title" --msgbox "$*" 18 75 -} - -first_warning () { - dialog --backtitle "$title" --yesno "$msg_first_warning" 18 75 -} - -pkg() { - local version - dpkg -l "$1" 2> /dev/null | egrep -q "^.i" || return 1 - [ -z "$2" ] && return 0 - version=$(dpkg -s "$1" | awk '/^Version:/ {print $2}') - dpkg --compare-versions "$version" "$2" "$3" 2>&1 > /dev/null -} - -log() { - logfile=${logfile:=/var/log/carnet-upgrade.log} - touch $logfile - echo "$(date +'%Y-%m-%d %H:%M:%S') $*" >> $logfile - echo "CN: $*" -} - -# find first free uid/gid in range -# find_id passwd 100 999 -find_id() { - local 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 - local s sedcmd ret i - s="$1" - shift - sedcmd="$1" - shift - ret=2 - for i in $* - do - [ -e "$i" ] || continue - egrep -q "$s" "$i" || continue - [ -h "$i" ] && i=$(readlink -f "$i") - sed "$sedcmd" "$i" > "$i.dpkg-tmp" - chown --reference "$i" "$i.dpkg-tmp" - chmod --reference "$i" "$i.dpkg-tmp" - mv "$i.dpkg-tmp" "$i" - ret=0 - done - if [ "$ret" -eq 0 ]; then - log "Done \"$sedcmd\" to $*" - fi - 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 $* ..." - apt-get -y$s install $* || { - dpkg --configure -a - apt-get -yf install - apt-get -y$s install $* - } -} - -pkgrm () { - [ -n "$*" ] || return 0 - log "Removing $* ..." - apt-get -y$s --purge remove $* || { - dpkg --configure -a - apt-get -yf install - apt-get -y$s --purge remove $* - } -} - -update() { - log "Running apt-get update ..." - apt-get -y$s update || { - apt-get -yf install - apt-get -y$s update - } - apt-get autoclean - apt-get -dy$s dist-upgrade -} - -dist_upgrade () { - log "Running dist-upgrade ..." - apt-get -y$s dist-upgrade || { - dpkg --configure -a - apt-get -y$s dist-upgrade - } -} - -remove_bloat() { - local to_remove add_this i j n text to_show cmd tmpfile installed - local update_selections pkgs_to_deselect oldifs - text="$msg_remove_bloat" - - [ "$DEBUG" ] && set -x - n=0 - for i in $(echo "$bloats" | sed 's/ */ /g'| awk -F' ' '{print $2}') - do - if pkg $i; then - installed="$installed $i" - add_this="$(echo "$bloats" | egrep " .*\b${i}\b" | sed 's/ */ /g'| awk -F' ' '{print $1}')" - if ! echo "$to_show" | grep -q "$add_this"; then - to_show="$to_show \"$add_this\" \"\" on" - n=$(($n+1)) - fi - fi - done - [ -z "$to_show" ] && return 0 - tmpfile=$(mktemp /var/lib/carnet-upgrade/dialog-tmp.XXXXXX) - cmd="dialog --nocancel --backtitle \""$title"\" --checklist \""$text"\" 20 75 $n $to_show" - [ "$DEBUG" ] && set +x - eval $cmd 2> $tmpfile - [ "$DEBUG" ] && set -x - to_remove="$(cat $tmpfile | sed 's/\"\ \"/ /g; s/\"\ *//g; s/\\//g')" - [ "$DEBUG" ] || rm -f $tmpfile - [ "$DEBUG" ] && echo "DEBUG: to_remove=$to_remove" 1>&2 - oldifs="$IFS" - IFS=" " # tab - for i in $(echo "$to_remove") - do - IFS="$oldifs" - for j in $(echo "$bloats" | grep "^$i" | sed 's/ */ /g'| awk -F' ' '{print $2}') - do - # hopefully this will tell apt not to reinstall them at upgrade time - update_selections="${update_selections} - $j deinstall" - pkgs_to_deselect="$pkgs_to_deselect $j" - # only remove those that really are installed - if echo "$installed" | grep -q "$j"; then - pkgs_to_remove="$pkgs_to_remove $j" - fi - done - done - [ "$DEBUG" ] && echo "DEBUG: pkgs_to_remove=$pkgs_to_remove" 1>&2 - # Finally, remove those - if [ -n "$update_selections" ]; then - echo "$update_selections" | dpkg --set-selections - log "Deselected:${pkgs_to_deselect}" - fi - eval pkgrm $pkgs_to_remove -} - -post_upgrade() { - touch "$post_upgrade_queuetab" - if ! grep -q "true $*" "$post_upgrade_queuetab"; then - echo "true $*" >> "$post_upgrade_queuetab" - fi -} - -run_post_upgrade() { - if [ -f "$post_upgrade_queuetab" ]; then - run_actions post_upgrade "$post_upgrade_queuetab" - mv "$post_upgrade_queuetab" "${post_upgrade_queuetab}.done.$(date '+%Y-%m-%d.%H:%M:%S')" - fi -} - -### - -run_actions() { - local line lineno lineno2 f n name action testmsg - [ "$DEBUG" ] && set -vx - name="$1" - f="$2" - [ -f "$f" ] || return 2 # no such file - n=$(wc -l "$f" | awk '{print $1}') - [ "$n" -lt 1 ] && return 1 # no lines to process - log "run_actions ($name) started, processing $n lines from \"$f\"." - log "-----" - lineno=0 - lineno2=0 - while [ "$lineno" -lt "$n" ] - do - lineno=$(($lineno+1)) - lineno2=$lineno - line=$(head -$lineno "$f" | tail -1) - if echo $line | grep -q '^#'; then # comment - continue - fi - while echo "$line" | egrep -q '\\$' # continuation - do - lineno2=$(($lineno2+1)) - line=$(echo -n "$line"| sed 's/\\$//'; head -$lineno2 "$f" | tail -1) - done - test=$(echo "$line" | sed 's/ */ /g'| awk -F' ' '{print $1}') - action=$(echo "$line" | sed 's/ */ /g'| awk -F' ' '{print $2}') - testmsg="" - [ "$test" != "true" ] && testmsg="if '$test'" - if eval $test; then - log "$(printf 'action %02d' $lineno) starting: '${action}' $testmsg " - eval $action - log "$(printf 'action %02d' $lineno) finished: '${action}' $testmsg" - else - log "$(printf 'action %02d' $lineno) skipping: '${action}' $testmsg" - fi - [ "$lineno2" -gt "$lineno" ] && lineno=$lineno2 - done - log "run_actions ($1) finished" - log "-----" -} - -# funkcija vraca popis paketa koje treba upgradeati -what_upgrade () { - local IFSOLD name version package - - for package in `echo "$needed_versions" | awk '{print $1}'| grep -v ^$`; do - IFSOLD="$IFS" - IFS=" " # tab - read name version <<-EOPTS - $(echo "$needed_versions" | sed 's/ */ /g' | grep ^$package) - EOPTS - IFS="$IFSOLD" - if pkg "$name" lt "$version"; then - echo -n " $name" - fi - done -} - -# funkcija za ispis paketa koje treba upgradeati -check_upgrade () { - local upgrade - upgrade="`what_upgrade`" - - if [ "$upgrade" ]; then - notice " -Prije prelaska na Debian Etch potrebno je napraviti upgrade ovih paketa: - $upgrade - -Pokrenite: - 'apt-get dist-upgrade' -ili: - 'apt-get install${upgrade}' - -Nakon toga ponovno pozovite ovu skriptu." - log "carnet-upgrade aborted, upgrade of$upgrade needed." - exit 1 - fi -} - -upgrade () { - local to_install packages - case "$1" in - first) - packages="$packages_first" - ;; - second) - packages="$packages_second" - ;; - *) - return 1 - esac - - for i in $packages - do - pkg $i && to_install="$to_install $i" - done - - if [ -n "$to_install" ];then - eval pkgadd $to_install - else - return 0 - fi -} - -# funkcija utrpa ispravan sources.list -create_sources_list () { - [ -f /etc/apt/sources.list -a ! -f /etc/apt/sources.list.cn3-upgrade ] && mv /etc/apt/sources.list /etc/apt/sources.list.cn3-upgrade - cp /usr/share/carnet-upgrade/files/etc/apt/sources.list /etc/apt - notice "Novi sadrzaj datoteke /etc/apt/sources.list: - -`cat /etc/apt/sources.list`" -} - - -# funkcija koja brise grupu proc -remove_group_proc () { - if getent group proc > /dev/null; then - groupdel proc || true - log "groupdel proc (temporarily)" - post_upgrade add_group_proc - fi -} - -add_group_proc () { - if ! getent group proc > /dev/null; then - groupadd -g 99 proc - log "groupadd -g 99 proc" - if [ -x /etc/init.d/oidentd -a -f /etc/default/oidentd ] && \ - egrep -q 'OIDENT_GROUP.*proc' /etc/default/oidentd; then - /etc/init.d/oidentd restart || true - fi - fi -} - -# backup_slapd_db -backup_slapd_db () { - local ldap_backup=/var/backups/slapcat.cn3-upgrade - - if [ ! -f $ldap_backup ]; then - [ -x /etc/init.d/freeradius ] && /etc/init.d/freeradius stop || true - - if [ -x /etc/init.d/slapd -a -d /var/lib/ldap ]; then - /etc/init.d/slapd stop || true - if slapcat -l $ldap_backup; then - log "$ldap_backup created" - notice "Napravljen backup slapd baze u $ldap_backup." - fi - /etc/init.d/slapd start || true - fi - - [ -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!" - fi -} - -# backup etc direktorija -backup_etc_dir () { - local etc_backup=/var/backups/etc.cn3-upgrade.tar.gz - - if [ ! -f $etc_backup ]; then - if tar cfz $etc_backup /etc 2> /dev/null; then - log "$etc_backup created" - notice "Napravljen backup /etc direktorija u $etc_backup." - fi - else - log "/etc backup already present in $etc_backup, skipping." - notice "Backup /etc direktorija u $etc_backup vec postoji!" - 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.cn3-upgrade.$$ - chown --reference=/etc/default/raid2 /etc/default/raid2.cn3-upgrade.$$ - chmod --reference=/etc/default/raid2 /etc/default/raid2.cn3-upgrade.$$ - - if ! cmp -s /etc/default/raid2.cn3-upgrade.$$ /etc/default/raid2; then - log "Fixed /etc/default/raid2 AUTOSTART option." - mv /etc/default/raid2.cn3-upgrade.$$ /etc/default/raid2 - else - rm /etc/default/raid2.cn3-upgrade.$$ - fi - fi -} - -# restore distribution config file -restore_config () { - local file file_backup - - for file in "$@"; do - file_backup=$file.cn3-upgrade - if [ -e $file -a ! -e $file_backup ]; then - # backup file - mv $file $file_backup - - # install original - log Restoring config file $file - cp /usr/share/carnet-upgrade/files/$file $file - fi - done -} - -# restore modified config to their package defaults -# so the upgrade doesn't complain so much -restore_configs () { - restore_config /etc/bind/named.conf.options - restore_config /etc/default/ntpdate - restore_config /etc/default/oidentd - restore_config /etc/default/postgrey - restore_config /etc/default/saslauthd - restore_config /etc/default/slapd - restore_config /etc/dovecot/dovecot.conf - restore_config /etc/init.d/mysql - restore_config /etc/init.d/slapd - restore_config /etc/issue - restore_config /etc/issue.net - restore_config /etc/logrotate.d/mysql-server - restore_config /etc/mysql/my.cnf - restore_config /etc/ntp.conf - restore_config /etc/pam.d/login - restore_config /etc/php4/apache/php.ini - restore_config /etc/php4/cgi/php.ini - restore_config /etc/php4/cli/php.ini - restore_config /etc/postgrey/whitelist_clients - restore_config /etc/security/limits.conf - restore_config /etc/squirrelmail/apache.conf - restore_config /etc/sysctl.conf - restore_config /etc/vsftpd.conf - restore_config /etc/xinetd.conf - - # orphaned config file - no owner - rm -f /etc/logcheck/ignore.d.server/imap - - # aide switched to ucf, move old configs aside - for file in /etc/aide/aide.conf /etc/cron.daily/aide /etc/default/aide; do - [ ! -e "$file.cn3-upgrade" ] && mv "$file" "$file.cn3-upgrade" - rm -f "$file" - done -} - -# make a silent installation of carnet and srce keyrings -install_keyrings () { - pkgadd carnet-keyring srce-keyring - pkgadd dpkg apt debconf - - dpkg-reconfigure carnet-keyring srce-keyring - update -} - -# make a silent upgrade to new libc6 -upgrade_libc () { - DEBIAN_FRONTEND=noninteractive pkgadd libc6 -} - -# upgrade apache -> apache2 -upgrade_apache () { - # bugfix for apache2-cn postinst - mkdir -p /etc/apache2 - touch /etc/apache2/httpd.conf - - pkgadd php4-odbc php4-xslt - - # apache2 conflicts with these - pkgrm apache aosi-aai aosi-www-aai php4-cn squirrelmail-cn - - # apache2-cn postinst needs new mktemp - #pkgadd apache2-cn php5-cn aosi-aai aosi-www-aai # squirrelmail-cn - - pkgadd apache2 apache2-mpm-prefork libapache2-mod-php4 ssl-cert - apt-get install -y -d apache2-cn php4-cn - apt-get autoclean - dpkg -i --ignore-depends=apache2-cn \ - /var/cache/apt/archives/apache2-cn_* \ - /var/cache/apt/archives/php4-cn_* - - export CARNET_SCRIPT_DEBUG=1 - pkgadd aosi-aai aosi-www-aai # squirrelmail-cn - unset CARNET_SCRIPT_DEBUG - -} - -upgrade_amavis () { - # remove diversion - if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then - rm -f /etc/init.d/amavis - dpkg-divert --quiet --remove /etc/init.d/amavis - fi - - # move old config aside - local conf=/etc/amavis/amavisd.conf - if [ -e $conf -a ! -e $conf.cn3-upgrade ]; then - mv $conf $conf.cn3-upgrade - fi - - pkgadd amavisd-cn amavisd-new - - check_and_sed '^clamd.*5.clamav.log$' \ - 's/^\(clamd.*\)5.clamav.log$/\14\tsocket/g' \ - /etc/inet.d/amavisd-cn || true -} - -# fix openldap-aai postinst user handling -upgrade_openldap () { - #pkgrm openldap-cn # deprecated - apt-get -y$s install openldap-aai || true # postinst fails - chown -R openldap:openldap /var/lib/ldap # fix slapd - /etc/init.d/slapd restart - dpkg --configure -a # try postinst again -} - -# workaround postfix-cn dependencies -upgrade_postfix () { - pkgadd sasl2-bin - pkgadd postfix postfix-cn -} - -# workaround dovecot-cn dependencies -upgrade_dovecot () { - pkgadd dovecot-imapd dovecot-pop3d - pkgadd dovecot-cn -} - -# workaround ntp-cn dependencies -upgrade_ntp () { - pkgadd ntp ntpdate - # pkgrm ntp-server - pkgadd ntp-cn -} - -# instaliraj zadnji freeradius; uvjeti u queue fileovima -install_freeradius () { - pkgadd --force-yes freeradius-cn freeradius=1.0.5-0 freeradius-ldap=1.0.5-0 -} - -# tentatively remove obsolete option in xinetd.conf -fix_xinetd_conf () { - if [ -f /etc/xinetd.conf ]; then - check_and_sed 'log_on_failure.*RECORD' \ - 's/\(log_on_failure.*\)RECORD/\1/g' \ - /etc/xinetd.conf || true - fi -} - -# temporarily disable mod_ssl.conf in apache so that upgrade works -fix_mod_ssl_include() { - if [ -f /etc/apache/mod_ssl.conf ]; then - check_and_sed '^Include /etc/apache/mod_ssl\.conf' \ - 's,\(^Include[ ][ ]*/etc/apache/mod_ssl\.conf\),#\1,' \ - /etc/apache/httpd.conf || true - fi -} - -fix_proftpd_conf() { - if [ -f /etc/proftpd.conf ]; then - check_and_sed '^LsDefaultOptions' \ - 's,^LsDefaultOptions,ListOptions,' \ - /etc/proftpd.conf || true - fi - [ -x /etc/init.d/proftpd ] && /etc/init.d/proftpd restart || true -} - -# 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 -} - -fix_aidexfer_conf() { - if [ -f /etc/aide/aidexfer.conf ]; then - check_and_sed '/usr/local/lib/aidexfer' \ - 's,/usr/local/lib/aidexfer,/usr/share/aidexfer,' \ - /etc/aide/aidexfer.conf || true - fi -} - -fix_issue () { - cat > /etc/issue < /etc/issue.net <