X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=427e1a4eea1573e93c8b9923cc675a00255a743a;hb=410f0690ae0b4341dded36a74f2a222611d28b6d;hp=209d79aba5b861a58a3642c02f849545da7197d1;hpb=225e91339e9f16cf7e96c3be59d41c3d2927d2f1;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 209d79a..427e1a4 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -1,5 +1,11 @@ # Ivan 'ico' Rako # Zoran 'jelly' Dzelajlija +# Zeljko Boros + +PHPVER="7.3" +MDB="10.3" +PINFILE="/etc/apt/preferences.d/99-carnet" + notice () { LC_MESSAGES=hr_HR dialog --backtitle "$title" --msgbox "$*" 18 75 @@ -201,6 +207,7 @@ remove_bloat() { fi done done + IFS="$oldifs" [ "$DEBUG" ] && echo "DEBUG: pkgs_to_remove=$pkgs_to_remove" 1>&2 # Finally, remove those if [ -n "$update_selections" ]; then @@ -366,7 +373,7 @@ check_upgrade () { if [ "$upgrade" ]; then notice " -Prije prelaska na Debian Squeeze potrebno je napraviti nadogradnju ovih paketa: +Prije prelaska na Debian stretch potrebno je napraviti nadogradnju ovih paketa: $upgrade Pokrenite: @@ -479,7 +486,9 @@ reboot_required () { running_version=$( uname -v ) log "Running kernel: $running_release $running_version" - if grep -q "$running_release .* $running_version" $default_kernel; then + if [ "$kernel_package" != "${kernel_package#linux-image-3.2.0-}" ] || + grep -q "$running_release .* $running_version" $default_kernel + then log "Latest kernel version is running." return 1 else @@ -527,16 +536,18 @@ create_sources_list () { # backup old version if [ -f $sl -a ! -f $sl.$backup_ext ]; then - cp -av $sl $sl.$backup_ext + cp -v $sl $sl.$backup_ext fi # install new version - cp -av $sl_new $sl + cp -v $sl_new $sl notice "Novi sadrzaj datoteke /etc/apt/sources.list: `cat /etc/apt/sources.list`" fi + # make sure permissions are correct + chmod 0644 $sl rm $sl_new } @@ -692,78 +703,42 @@ restore_configs () { local hostname domain config_new memtotal memlimit # restore simple configs - if pkg ntp-cn && pkg ntp lt 1:4.2.6.p2+dfsg-1+b1; then + if pkg ntp-cn && pkg ntp lt 1:4.2.6.p5+dfsg-2; then if restore_file /etc/ntp.conf; then postupgrade_reconfigure ntp-cn fi fi - if pkg kernel-2.6-cn && pkg procps lt 1:3.2.8-9; then - if restore_file /etc/sysctl.conf; then - postupgrade_reconfigure kernel-2.6-cn - fi - fi - - if pkg kernel-2.6-cn && pkg libpam-modules lt 1.1.1-6.1; then - if restore_file /etc/security/limits.conf; then - postupgrade_reconfigure kernel-2.6-cn - fi - fi - - if pkg vsftpd-cn && pkg vsftpd lt 2.3.2-3+squeeze2; then + if pkg vsftpd-cn && pkg vsftpd lt 2.3.5-3; then if restore_file /etc/vsftpd.conf; then postupgrade_reconfigure vsftpd-cn fi fi - if pkg squirrelmail-cn && pkg squirrelmail lt 2:1.4.21-2; then - if restore_file /etc/squirrelmail/apache.conf; then - postupgrade_reconfigure squirrelmail-cn + if pkg amavisd-cn && pkg amavisd-new lt 1:2.7.1-2; then + if restore_file /etc/cron.d/amavisd-new; then + rm -f /etc/cron.d/amavisd-new.$backup_ext + postupgrade_reconfigure amavisd-cn fi fi - if pkg spamassassin-cn && pkg spamassassin lt 3.3.1-1; then - if restore_file /etc/spamassassin/v310.pre; then - postupgrade_reconfigure spamassassin-cn + if pkg ossec-hids lt 2.7-1; then + if restore_file /var/ossec/rules/local_rules.xml; then + postupgrade_reconfigure ossec-hids-cn fi fi - if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.4-3; then - if restore_file /etc/cron.daily/amavisd-new; then - rm -f /etc/cron.daily/amavisd-new.$backup_ext - postupgrade_reconfigure amavisd-cn - fi - - if restore_file /etc/amavis/conf.d/15-av_scanners; then - rm -f /etc/amavis/conf.d/15-av_scanners.$backup_ext - postupgrade_reconfigure amavisd-cn + if pkg sasl2-bin lt 2.1.25.dfsg1-6+deb7u1; then + if restore_file /etc/default/saslauthd; then + postupgrade_reconfigure postfix-cn fi fi - 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 - restore_file /etc/console-tools/config - fi - - if pkg base-files lt 6.0squeeze2; then + if pkg base-files lt 7.1wheezy2; then restore_file /etc/issue restore_file /etc/issue.net fi - if pkg slapd lt 2.4.23-7.2; then - restore_file /etc/default/slapd - fi - - # dovecot won't start with these options - if pkg dovecot-cn && pkg dovecot-common lt 1:1.2.15-7; then - sed -i 's/^\( *\)\(sieve\(_storage\)\?=.*\)/\1#\2/' \ - /etc/dovecot/dovecot.conf - fi - # check if monitrc is template based if [ -e /etc/monit/monitrc ]; then # monit is removed at this point # regenerate config from template @@ -777,6 +752,11 @@ restore_configs () { fi } +# load various debconf defaults +debconf_preload () { + echo libc6 libraries/restart-without-asking boolean true | debconf-set-selections +} + # temporary disable listchanges packages to reduce clutter during upgrade apt_listchanges () { local file command=$1 @@ -894,16 +874,12 @@ pkgupgrade () { fi } -# make a silent upgrade to new libc6 -upgrade_libc () { - DEBIAN_FRONTEND=noninteractive pkgupgrade libc6 libc6-dev tzdata -} - -# upgrade apache2/php5 +# upgrade apache2/php upgrade_apache2 () { - pkgrm apache-common # prevents installation of apache2-suexec - pkgupgrade libapache2-mod-php5 php5-cli php5-cn apache2-cn \ - php5-odbc php5-suhosin php-suhosin-cn +### ne treba od etcha +### pkgrm apache-common # prevents installation of apache2-suexec + pkgupgrade libapache2-mod-php$PHPVER php$PHPVER-cli php$PHPVER-cn apache2-cn \ + php$PHPVER-odbc mod-security-cn } upgrade_amavis () { @@ -916,30 +892,37 @@ upgrade_amavis () { fi done + # workaround for insserv complaining + if [ -x /sbin/insserv ]; then + if [ -r /etc/init.d/amavis.amavisd-new ]; then + /sbin/insserv amavis.amavisd-new + fi + fi + # install new packages pkgadd amavisd-cn amavisd-new - # start new packages - /etc/init.d/amavisd-cn restart -} - -# handle freerdius upgrade -upgrade_freeradius () { - pkg freeradius-aai lt 2.1.10-1 || return 0 + # workaround for insserv complaining + if [ -x /sbin/insserv ]; then + if [ -r /etc/init.d/amavis.amavisd-new ]; then + /sbin/insserv amavis.amavisd-new + fi + fi - # 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 + # start new packages + ### By zelja, nema vise amavisd-cn, vjerujemo systemd-u + ### /etc/init.d/amavisd-cn restart + /etc/init.d/amavis restart } -# handle mysql 5.0 to 5.1 upgrade +# handle mysql 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 + if pkg mysql-server || pkg mysql-server-5.5 || \ + pkg mariadb-server || pkg mariadb-server-$MDB + then + pkgadd default-mysql-server + dpkg -P mysql-server mysql-server-5.5 mariadb-server-$MDB + service mysql restart fi } @@ -959,6 +942,110 @@ upgrade_postfix () { fi } + +# pinning za baculu da se ne nadogradi sa 7.4.4 na 9.* u busteru +# istu stvar radi i bacula-cn.postinst + +fix_bacula() { + + echo "CN: Dodajem pinning bacule na inačicu 7.4.4..." + + test -f $PINFILE || touch $PINFILE + + cp-update bacula-cn $PINFILE < $local_conf + sed -i 's/\/user\/lib\/dovecot\/modules\/imap/\/usr\/lib\/dovecot\/modules/g' $local_conf + + pkgadd dovecot-cn + fi +} + # upgrade bind separately so DNS is not down for too long # or breaks postinst scripts of other cn packages that depend on # working resolver @@ -966,6 +1053,39 @@ upgrade_bind() { pkgadd bind9-cn } +# handle fail2ban upgrade due to error: +# trying to overwrite '/etc/fail2ban/filter.d/dovecot.conf', which is also in package fail2ban-cn +upgrade_fail2ban() { + if pkg fail2ban-cn && dpkg -L fail2ban-cn | grep -qF dovecot.conf; then + pkgrm fail2ban-cn + pkgadd fail2ban + pkgadd fail2ban-cn + fi +} + +# manual upgrade of mailman to avoid two copies of mailman running +# first started by python upgrade and second started by mailman itself +upgrade_mailman() { + if pkg mailman-cn lt 2:2.1.15~cn0; then + /etc/init.d/mailman stop || true + pkgadd python + pkgadd mailman mailman-cn + fi +} + +# manual upgrade of kernel due to new packet name +upgrade_kernel() { + if pkg kernel-2.6-cn; then + pkgrm kernel-2.6-cn + + if pkg grub-pc; then + pkgadd kernel-cn grub-pc + else + pkgadd kernel-cn + fi + fi +} + get_variable () { local name=$1 file=$2 val @@ -977,6 +1097,17 @@ get_variable () { echo $val } +# switch to rsyslog +upgrade_syslog() { + # libc6-dev prevents upgrade + if pkg libc6-dev; then + pkgrm libc6-dev + fi + + pkgadd rsyslog + dpkg -P sysklogd klogd > /dev/null 2>&1 +} + # restore munin configs for silent upgrade upgrade_munin () { local config backup hostname domain @@ -1008,24 +1139,6 @@ upgrade_munin () { dpkg-reconfigure munin-cn } -# try not to overwrite user modified issue files -fix_issue () { - if cmp /etc/issue $cnup/files/etc/issue.expect.new >/dev/null; then - cp -av /etc/issue /etc/issue.$backup_ext - cat > /etc/issue </dev/null; then - cp -av /etc/issue.net /etc/issue.net.$backup_ext - cat > /etc/issue.net </dev/null \ - | grep -q '^kernel-2.6-cn is already the newest version.$' + if LC_ALL=C apt-get -s install kernel-cn 2>/dev/null \ + | grep -q '^kernel-cn is already the newest version.$' then - log "Not checking free space in /: kernel-2.6-cn already installed" + log "Not checking free space in /: kernel-cn already installed" return fi @@ -1084,6 +1210,82 @@ check_kernel_space() { fi } +# free some space on / partition by cleaning old unused kernels +clean_old_kernels() { + local installed keep pkg keep remove delete name dialog_list selection + + # find all installed kernels + installed=$( + dpkg -l | egrep '^ii linux-image-[0-9]+[.][0-9]+[.][0-9]+-' \ + | awk '{print $2}' + ) + log "Found kernel packages: $installed" + + # leave current and new kernels + keep="linux-image-$(uname -r) $(get_cn_kernels)" + log "Keep kernel packages: $keep" + + # check what to remove + remove= + for pkg in $installed; do + delete=yes + for name in $keep; do + [ "$pkg" = "$name" ] && delete= + done + if [ "$delete" = yes ]; then + remove="$remove $pkg" + fi + done + log "Obsolete kernel packages: $remove" + + if [ "$remove" ]; then + for pkg in $remove; do + dialog_list="$dialog_list $pkg '' off" + done + + # user selects the packages to delete + selection=$( mktemp /var/lib/carnet-upgrade/selection.XXXXXX ) + eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \ + --checklist \""$msg_remove_kernels"\" 20 75 6 $dialog_list 2>$selection + + selected=$( tr -d \" < $selection ) + rm -f $selection + + if [ "$selected" ]; then + log "Removing kernel packages: $selected" + pkgrm $selected + fi + fi +} + +# prevent sysv-rc migration problems +clean_initd_packages() { + local list removed pkg dialog_list selection selected + + list=$( dpkg -S /etc/init.d/\* | grep -v ^diversion | cut -d: -f1 | sort -u ) + removed=$( dpkg -l $list | sed -n 's/^r.[[:space:]]\+\([^[:space:]]\+\).*/\1/p' ) + log "Found removed packages: $removed" + + if [ "$removed" ]; then + for pkg in $removed; do + dialog_list="$dialog_list $pkg '' off" + done + + # user selects the packages to delete + selection=$( mktemp /var/lib/carnet-upgrade/selection.XXXXXX ) + eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \ + --checklist \""$msg_remove_initd"\" 20 75 6 $dialog_list 2>$selection + + selected=$( tr -d \" < $selection ) + rm -f $selection + + if [ "$selected" ]; then + log "Purging packages: $selected" + dpkg -P $selected + fi + fi +} + free_space() { df --portability --block-size=1M "$1" | tail -1 | awk '{print $4}' }