}
}
+# remove stale package information from available
+# warning, in file '/var/lib/dpkg/available'
+# near line 58185 package 'vim-cn': missing architecture
+cleanup_available () {
+ log "Cleaning dpkg available file"
+
+ available=$(mktemp /var/lib/carnet-upgrade/available.XXXXXX)
+ apt-cache dumpavail > $available
+
+ dpkg --clear-avail
+ dpkg --update-avail $available
+
+ rm -f $available
+}
+
remove_x() {
LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$msg_remove_x" 18 75
if [ $? -eq 0 ]; then
log "Removing X Window System"
- pkgrm x11-common
+ pkgrm xserver-xorg
else
log "Skipping X Window System removal"
fi
fi
done
done
+ IFS="$oldifs"
[ "$DEBUG" ] && echo "DEBUG: pkgs_to_remove=$pkgs_to_remove" 1>&2
# Finally, remove those
if [ -n "$update_selections" ]; then
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
create_sources_list () {
local sl sl_new
sl=/etc/apt/sources.list
- sl_new=/usr/share/carnet-upgrade/files/etc/apt/sources.list
+ sl_new=$( copy_template $sl )
+
+ # comment aai repository if not in use
+ if ! pkg srce-keyring; then
+ sed -i 's/^\(deb.*ftp.srce.hr\)/#\1/' $sl_new
+ fi
# check if already installed
if ! cmp $sl $sl_new >/dev/null; then
`cat /etc/apt/sources.list`"
fi
-}
+ rm $sl_new
+}
# funkcija koja brise grupu proc
remove_group_proc () {
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/' \
case $command in
disable)
if [ -f $file ]; then
- dpkg-divert --local --rename --divert $file.$backup_ext \
+ dpkg-divert --local --rename --divert $file.disabled \
--add $file || true
fi
;;
enable)
- if [ -f $file.$backup_ext ]; then
- dpkg-divert --remove $file || true
- fi
+ # cleanup the diversion even if the file is already removed
+ dpkg-divert --rename --remove $file || true
;;
esac
done
# make a silent installation of carnet and srce keyrings
install_keyrings () {
- pkgadd carnet-keyring srce-keyring debian-archive-keyring
+ pkgadd carnet-keyring debian-archive-keyring
+ dpkg-reconfigure carnet-keyring debian-archive-keyring
+
+ if pkg srce-keyring; then
+ pkgadd srce-keyring
+ dpkg-reconfigure srce-keyring
+ fi
- dpkg-reconfigure carnet-keyring srce-keyring debian-archive-keyring
apt_update
}
# remove old and unused libraries
remove_orphaned () {
- local package
+ local package remove
apt_autoremove
+ remove=
for package in $orphaned_packages; do
if is_orphaned $package; then
- pkgrm $package
+ remove="$remove $package"
fi
done
+
+ if [ "$remove" ]; then
+ pkgrm $remove
+ fi
}
# monit it causing problems for postinst scripts
apt-get remove --yes monit
# stop the binary
pkill -9 monit || true
+ # move away init for insserv to work
+ mv /etc/init.d/monit /var/lib/carnet-upgrade/
fi
}
+# allow monit to run again
+enable_monit () {
+ if [ -f /var/lib/carnet-upgrade/monit ]; then
+ mv /var/lib/carnet-upgrade/monit /etc/init.d/monit
+ pkgadd monit-cn
+ fi
+}
+
# check which of the given packages are installed
grep_installed () {
local package installed
# upgrade apache2/php5
upgrade_apache2 () {
pkgrm apache-common # prevents installation of apache2-suexec
+ pkgrm php5-suhosin # not available for wheezy
pkgupgrade libapache2-mod-php5 php5-cli php5-cn apache2-cn \
- php5-odbc php5-suhosin php-suhosin-cn
+ php5-odbc
}
upgrade_amavis () {
# handle freerdius upgrade
upgrade_freeradius () {
- pkg freeradius-aai lt 2.1.10-1 || return 0
+ local password
+
+ pkg freeradius-aai lt 2.1.12~srce1 || return 0
# 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
-}
-# handle openldap upgrade
-upgrade_openldap () {
- # 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
+ # sync localhost passwords
+ if pkg libpam-radius-auth && [ -f "/etc/pam_radius_auth.conf" ]; then
+ pkgadd libpam-radius-auth
+ password=$(
+ sed -n '/^[[:space:]]*client[[:space:]]\+localhost/,/^[[:space:]]*}/ { /^[[:space:]]*secret[[:space:]]*=[[:space:]]*\([^[:space:]]*\)/s//\1/p }' /etc/freeradius/clients.conf
+ )
+ if [ "$password" ] \
+ && ! grep -q "^127.0.0.1\(:[[:digit:]]\+\)\?[[:space:]]\+$password[[:space:]]\+" \
+ /etc/pam_radius_auth.conf
+ then
+ sed -i.$backup_ext "s/^\(127.0.0.1\(:[[:digit:]]\+\)\?[[:space:]]\+\)[^[:space:]]\+\(.*\)/\1$password\3/" /etc/pam_radius_auth.conf
+ fi
fi
-
- # aai does not depend on the new openldap version
- pkgadd slapd
- pkgadd openldap-aai
}
# handle mysql 5.0 to 5.1 upgrade
upgrade_mysql () {
- if pkg mysql-server || pkg mysql-server-5.0; then
+ if pkg mysql-server || pkg mysql-server-5.1; then
pkgadd mysql-server
- dpkg -P mysql-server-5.0
+ dpkg -P mysql-server-5.1
/etc/init.d/mysql restart
fi
}
upgrade_munin () {
local config backup hostname domain
+ # new htmldir location
+ if [ -d /var/www/munin -a ! -e /var/cache/munin/www ]; then
+ mkdir -p /var/cache/munin
+ mv /var/www/munin /var/cache/munin/www
+ fi
+
for pkg_name in munin munin-node; do
pkg $pkg_name lt '1.4.5-3' || continue
fi
}
-check_kernel_space() {
- local available_disk_space kernel_size linux_images metapkg pkg ret
- available_disk_space=$(free_space /)
+# calculate the list of linux-image packages from kernel-2.6-cn dependencies
+get_cn_kernels() {
+ local cn_kernels linux_images metapkg pkg
+
+ cn_kernels=
linux_images=$(apt-cache show kernel-2.6-cn | grep ^Depends: \
| grep -o 'linux-image[^, ]*')
for metapkg in $linux_images; do
pkg=$(apt-cache show $metapkg | grep ^Depends: \
| grep -o 'linux-image[^, ]*' | head -1)
- [ "$pkg" ] || continue
+ [ "$pkg" ] && cn_kernels="$cn_kernels $pkg"
+ done
+
+ echo $cn_kernels
+}
+
+# check if there is enough space on / for the new kernel package
+check_kernel_space() {
+ local available_disk_space kernel_size linux_images pkg ret
+ available_disk_space=$(free_space /)
+ linux_images=$( get_cn_kernels )
+ for pkg in $linux_images; do
kernel_size=$(installed_size $pkg)
ret=$?
[ $ret -eq 0 ] && break
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}'
}