}
upgrade () {
- local i to_install packages
+ local packages
case "$1" in
first)
packages="$packages_first"
return 1
esac
- for i in $(echo $packages)
- do
- pkg $i && to_install="$to_install $i"
- done
-
- if [ -n "$to_install" ];then
- eval pkgadd $to_install
- else
- return 0
- fi
+ pkgadd_if_installed $packages
}
# funkcija utrpa ispravan sources.list
fi
}
-# restore original config file (if the new package version is not
-# installed already)
-restore_config () {
- local file file_backup file_expect file_restore config_changed
- local cn_package cn_version package version
+# restore a configuration file if it contains only CN modifications
+restore_file () {
+ local file file_expect file_restore file_backup
- # check if new package version is installed
- cn_package=$1
- package=$2
- version=$3
+ file=$1
+ file_expect=$2
+ file_restore=$3
+ file_backup=$file.$backup_ext
- if [ "$cn_package" ]; then
- if ! pkg $cn_package; then
- # do nothing if cn package is not installed
- return 0
- fi
- fi
+ [ "$file_expect" ] || file_expect=$cnup/files/$file.expect
+ [ "$file_restore" ] || file_restore=$cnup/files/$file.restore
- if [ "$package" ]; then
- if [ "$version" ]; then
- # do nothing if package is already upgraded to new version
- pkg $package lt $version || return 0
- else
- # do nothing if package is not installed
- pkg $package || return 0
- fi
+ # check if all required files are there
+ if ! [ -e $file -a -e $file_expect -a -e $file_restore ]; then
+ log "Required files missing, skipping $file restore."
+ return 1
+ fi
+
+ # is restore needed
+ if ! cmp $file_expect $file >/dev/null; then
+ log "Config doesn't match the template, skipping $file restore."
+ return 1
fi
- shift 3
- # restore package files
- for file in $*; do
- file_expect=/usr/share/carnet-upgrade/files/$file.expect
- file_restore=/usr/share/carnet-upgrade/files/$file.restore
- file_backup=$file.$backup_ext
+ # backup and restore
+ if [ ! -e $file_backup ]; then
+ log "Restoring config file $file."
- # is config files are there
- if ! [ -e $file -a -e $file_expect -a -e $file_restore ]; then
- continue
- fi
+ # backup local changes
+ cp -av $file $file_backup
- # is restore needed
- if ! cmp $file_expect $file >/dev/null; then
- continue
- fi
+ # restore original
+ cp -v $file_restore $file
- # backup and restore
- if [ ! -e $file_backup ]; then
- log "Restoring config file $file"
+ # restore succedded
+ return 0
+ else
+ log "Backup file exists, skipping $file restore."
+ return 1
+ fi
+}
- # backup local changes
- cp -av $file $file_backup
+# force reconfiguration at the end if package is not upgraded automatically
+postupgrade_reconfigure () {
+ local cn_package cn_version
- # restore original
- cp -v $file_restore $file
+ cn_package=$1
+ cn_version=$( dpkg -s "$cn_package" | awk '/^Version:/ {print $2}' )
+ post_upgrade "pkg $cn_package gt $cn_version || dpkg-reconfigure $cn_package"
+}
- config_changed=1
- fi
- done
+# copy template into a temporary file
+copy_template () {
+ local path file template config_new
- # 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 gt $cn_version || dpkg-reconfigure $cn_package"
- fi
+ path=$1
+ file=$(basename $path)
+ template=$cnup/files/$path.template
+ config_new=$(mktemp /var/lib/carnet-upgrade/$file.XXXXXX)
+ cp $template $config_new
+
+ echo $config_new
}
# restore modified config to their package defaults
# so the upgrade doesn't complain so much
restore_configs () {
- local hostname domain template config_new
- local config_backup
+ local hostname domain config_new memtotal memlimit
# restore simple configs
- restore_config kernel-2.6-cn procps 1:3.2.7-11 /etc/sysctl.conf
- restore_config ntp-cn ntp 1:4.2.4p4+dfsg-8 /etc/ntp.conf
- restore_config apache2-cn apache2.2-common 2.2.9-10+lenny2 /etc/apache2/ports.conf
- restore_config postfix-cn sasl2-bin 2.1.22.dfsg1-23 /etc/default/saslauthd
- restore_config bind9-cn bind9 1:9.5.1.dfsg.P1-1 /etc/bind/named.conf.options
- restore_config amavisd-cn amavisd-new 1:2.6.1.dfsg-1 /etc/cron.daily/amavisd-new
- rm -f /etc/cron.daily/amavisd-new.$backup_ext
- 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
- restore_config php5-cn php5-cli 5.2.6.dfsg.1-1+lenny2 /etc/php5/cli/php.ini
- restore_config php5-cn libapache2-mod-php5 5.2.6.dfsg.1-1+lenny2 /etc/php5/apache2/php.ini
+ if pkg kernel-2.6-cn && pkg procps lt 1:3.2.7-11; then
+ if restore_file /etc/sysctl.conf; then
+ postupgrade_reconfigure kernel-2.6-cn
+ fi
+ fi
+
+ if pkg ntp-cn && pkg ntp lt 1:4.2.4p4+dfsg-8; then
+ if restore_file /etc/ntp.conf; then
+ postupgrade_reconfigure ntp-cn
+ fi
+ fi
+
+ if pkg apache2-cn && pkg apache2.2-common lt 2.2.9-10+lenny2; then
+ if restore_file /etc/apache2/ports.conf; then
+ postupgrade_reconfigure apache2-cn
+ fi
+ fi
+
+ if pkg postfix-cn && pkg sasl2-bin lt 2.1.22.dfsg1-23; then
+ if restore_file /etc/default/saslauthd; then
+ postupgrade_reconfigure postfix-cn
+ fi
+ fi
+
+ if pkg bind9-cn && pkg bind9 lt 1:9.5.1.dfsg.P1-1; then
+ if restore_file /etc/bind/named.conf.options; then
+ postupgrade_reconfigure bind9-cn
+ fi
+ fi
+
+ if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.1.dfsg-1; then
+ if restore_file /etc/cron.daily/amavisd-new; then
+ rm -f /etc/cron.daily/amavisd-new.$backup_ext
+ postupgrade_reconfigure amavisd-cn
+ fi
+ fi
+
+ if pkg spamassassin-cn && pkg razor lt 1:2.85-1; then
+ if restore_file /etc/razor/razor-agent.conf; then
+ postupgrade_reconfigure spamassassin-cn
+ fi
+ fi
+
+ if pkg kernel-2.6-cn && pkg libpam-modules lt 1.0.1-5; then
+ if restore_file /etc/security/limits.conf; then
+ postupgrade_reconfigure kernel-2.6-cn
+ fi
+ fi
+
+ if pkg samba-cn && pkg samba-common lt 2:3.2.5-4lenny2; then
+ if restore_file /etc/samba/smb.conf; then
+ postupgrade_reconfigure samba-cn
+ fi
+ fi
+
+ if pkg base-files lt 5lenny2; then
+ restore_file /etc/issue
+ restore_file /etc/issue.net
+ fi
+
+ # restore php.ini
+ memtotal=$(awk '$1 == "MemTotal:" { print int($2/1024) }' /proc/meminfo)
+ if [ $memtotal -gt 1024 ]; then
+ memlimit=64
+ elif [ $memtotal -ge 512 ]; then
+ memlimit=32
+ else
+ memlimit=16
+ fi
+
+ if pkg php5-cn && pkg php5-cli lt 5.2.6.dfsg.1-1+lenny2; then
+ config_new=$(copy_template /etc/php5/cli/php.ini)
+ sed -i "s/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = ${memlimit}M/" $config_new
+ sed -i "s/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = ${memlimit}M/" $config_new
+ if restore_file /etc/php5/cli/php.ini $config_new; then
+ postupgrade_reconfigure php5-cn
+ fi
+ rm -f $config_new
+ fi
+
+ if pkg php5-cn && pkg libapache2-mod-php5 lt 5.2.6.dfsg.1-1+lenny2; then
+ config_new=$(copy_template /etc/php5/apache2/php.ini)
+ sed -i "s/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = ${memlimit}M/" $config_new
+ sed -i "s/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = ${memlimit}M/" $config_new
+ if restore_file /etc/php5/apache2/php.ini $config_new; then
+ postupgrade_reconfigure php5-cn
+ fi
+ rm -f $config_new
+ fi
# check if monitrc is template based
- if [ -f /etc/monit/monitrc -a ! -f /etc/monit/monitrc.$backup_ext ]; then
- template=/usr/share/carnet-upgrade/files/etc/monit/monitrc.template
- config_new=$(mktemp /var/lib/carnet-upgrade/monitrc.XXXXXX)
+ if [ -f /etc/monit/monitrc ]; then
+ # regenerate config from template
hostname=$(hostname)
domain=$(hostname --domain)
-
- # generate config from template
- cp $template $config_new
+ config_new=$(copy_template /etc/monit/monitrc)
check_and_sed "@localhost" \
"s/@localhost/@$hostname.$domain/g" $config_new || true
-
- # compare with running config
- if cmp -s /etc/monit/monitrc $config_new; then
- # restore if running config is generated template
- log "Restoring config file /etc/monit/monitrc"
- cp -av /etc/monit/monitrc /etc/monit/monitrc.$backup_ext
- cp -v /usr/share/carnet-upgrade/files/etc/monit/monitrc.restore \
- /etc/monit/monitrc
- fi
+ restore_file /etc/monit/monitrc $config_new
rm -f $config_new
fi
-
-# 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 \
-# /etc/mysql/my.cnf
-# restore_config ntpdate 1:4.2.2 /etc/default/ntpdate
-# restore_config oidentd 2.0.8 /etc/default/oidentd
-# restore_config slapd 2.3.30 /etc/default/slapd /etc/init.d/slapd
-# restore_config squirrelmail 2:1.4.9a /etc/squirrelmail/apache.conf
-# restore_config vsftpd 2.0.5 /etc/vsftpd.conf
-# restore_config xinetd 1:2.3.14 /etc/xinetd.conf
-#
-# # orphaned config file - no owner
-# if pkg logcheck-database lt 1.2.54; then
-# rm -vf /etc/logcheck/ignore.d.server/imap
-# fi
-#
-# # aide switched to ucf, move old configs aside
-# if pkg aide lt 0.13.1; then
-# for file in /etc/aide/aide.conf \
-# /etc/cron.daily/aide \
-# /etc/default/aide;
-# do
-# if [ ! -e "$file.$backup_ext" ]; then
-# mv -v "$file" "$file.$backup_ext"
-# fi
-#
-# rm -vf "$file"
-# done
-# fi
-#
-# # register cn changes in ucf managed files
-# for config in /etc/apache/modules.conf \
-# /etc/clamav/clamd.conf \
-# /etc/clamav/freshclam.conf
-# do
-# config_backup=$config.$backup_ext
-# if [ -e $config -a ! -e $config_backup ]; then
-# log "Saving config file $config"
-# cp -av $config $config_backup
-# ucf $config_backup $config
-# fi
-# done
}
# temporary disable listchanges packages to reduce clutter during upgrade
# make a silent installation of carnet and srce keyrings
install_keyrings () {
pkgadd carnet-keyring srce-keyring debian-archive-keyring
- pkgadd dpkg apt debconf python-apt
+ pkgadd_if_installed dpkg apt debconf python-apt dpkg-dev
dpkg-reconfigure carnet-keyring srce-keyring debian-archive-keyring
apt_update
}
# remove unsupported php version
+# but leave the configuration just in case
remove_php4 () {
- # leave the configuration just in case
- pkgrm_only php4-common
+ if pkg php5-cn && pkg php4-common; then
+ pkgrm_only php4-common
+ fi
}
# check if package is orphaned (nothing depends on it)
fi
}
+# check which of the given packages are installed
+grep_installed () {
+ local package installed
+
+ for package in $*; do
+ if pkg $package; then
+ installed="$installed $package"
+ fi
+ done
+
+ echo $installed
+}
+
+# only upgrade packages if they are already installed
+pkgadd_if_installed () {
+ local packages
+
+ packages=$( grep_installed $* )
+
+ if [ "$packages" ]; then
+ eval pkgadd $packages
+ fi
+}
+
# make a silent upgrade to new libc6
upgrade_libc () {
- DEBIAN_FRONTEND=noninteractive pkgadd libc6 tzdata
+ DEBIAN_FRONTEND=noninteractive pkgadd_if_installed libc6 libc6-dev tzdata
}
-# upgrade apache2 to lenny
+# upgrade apache2/php5 to lenny
upgrade_apache2 () {
- local package packages
-
- for package in \
- libapache2-mod-php5 \
- php5-cli \
- php5-cn \
- apache2-cn \
- php5-odbc \
- php5-suhosin \
- php-suhosin-cn
- do
- if pkg $package; then
- packages="$packages $package"
- fi
- done
-
- eval pkgadd $packages
+ pkgadd_if_installed libapache2-mod-php5 php5-cli php5-cn apache2-cn \
+ php5-odbc php5-suhosin php-suhosin-cn
}
upgrade_amavis () {
# handle freerdius config files upgrade
upgrade_freeradius () {
- local template config_new password realm
+ local template config_new password realm hostname basedn
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
+ restore_file /etc/freeradius/clients.conf
+ restore_file /etc/freeradius/hints
+ restore_file /etc/freeradius/ldap.attrmap
# 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)
+ basedn=$(sed -n '/^[[:space:]]*suffix[[:space:]]*/ {
+ s///; s/"//g; p; q }' /etc/ldap/slapd.conf)
+ hostname=$(hostname -f)
+ config_new=$(copy_template /etc/freeradius/radiusd.conf)
+ sed -i "s/#HOSTNAME#/$hostname/" $config_new
+ sed -i "s/#BASEDN#/$basedn/" $config_new
+ restore_file /etc/freeradius/radiusd.conf $config_new
+ rm -f $config_new
+
password=$(grep -s '^[[:space:]]*private_key_password[[:space:]]*=' \
/etc/freeradius/eap.conf)
- cp $template $config_new
+ config_new=$(copy_template /etc/freeradius/eap.conf)
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
+ restore_file /etc/freeradius/eap.conf $config_new
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
+ config_new=$(copy_template /etc/freeradius/proxy.conf)
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
+ restore_file /etc/freeradius/proxy.conf $config_new
rm -f $config_new
# install the new packages
# upgrade the MTA
upgrade_postfix () {
- pkgadd postfix-cn
+ pkgadd sasl2-bin postfix-cn
if pkg postgrey; then
pkgrm postgrey # not used by postfix-cn anymore
default_mail_env=$(get_variable default_mail_env /etc/dovecot/dovecot.conf)
# silently upgrade package
- restore_config dovecot-cn dovecot-common 1.0 /etc/dovecot/dovecot.conf
+ restore_file /etc/dovecot/dovecot.conf
pkgadd dovecot-cn
# insert old mail location