# funkcija za ispis paketa koje treba upgradeati
check_upgrade () {
local upgrade
- upgrade="`what_upgrade`"
+ upgrade=${1:-"`what_upgrade`"}
if [ "$upgrade" ]; then
notice "
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
+
+ packages=$(mktemp /var/lib/carnet-upgrade/Packages.XXXXXX)
+ if wget -q -O$packages $packages_uri; then
+ latest_version=$(sed -ne \
+ '/Package: carnet-upgrade/,/Description:/{ /Version: /s///p }' \
+ $packages)
+ rm -f $packages
+
+ if [ "$latest_version" ]; then
+ log "Running carnet-upgrade version is $version"
+ log "Latest carnet-upgrade version is $latest_version"
+ if dpkg --compare-versions "$version" lt "$latest_version"; then
+ check_upgrade " carnet-upgrade"
+ else log "Already using the latest carnet-upgrade version."; fi
+ else log "Failed to get latest version, skipping check."; fi
+ else log "Failed to download Packages file, skipping check."; fi
+
+ rm -f $packages
+}
+
# if apache is installed make sure it's version 2
check_apache_version () {
fi
}
+# 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 Etch potrebno je napraviti nadogradnju na najnoviji grsec 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
+}
+
upgrade () {
local i to_install packages
case "$1" in
upgrade_amavis () {
local conf
- # remove init script diversion
- if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then
- rm -vf /etc/init.d/amavis
- dpkg-divert --quiet --remove /etc/init.d/amavis
+ # remove init script diversion before upgrade
+ if pkg amavisd-cn lt 3:2.4.2-4; then
+ if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then
+ rm -vf /etc/init.d/amavis
+ dpkg-divert --remove /etc/init.d/amavis
+ fi
fi
# move old config aside
's/^\(clamd.*\)5.clamav.log$/\14\tsocket/g' \
/etc/init.d/amavisd-cn || true
+ # check if link got lost
+ if pkg amavisd-cn && [ ! -L /etc/init.d/amavis ]; then
+ apt-get install --reinstall --yes amavisd-cn
+ fi
+
# start new packages
/etc/init.d/amavis restart
}
available_disk_space=$(free_space /var/cache/apt/archives/)
archives_size=$(download_size dist-upgrade)
+ if [ $? -ne 0 ]; then
+ log "Failed to get download size, skipping check."
+ return 0
+ fi
+
log "Archives space: ${available_disk_space}MB"
log "Download size: ${archives_size}MB"
available_disk_space=$(free_space /)
kernel_size=$(installed_size kernel-2.6-cn)
+ if [ $? -ne 0 ]; then
+ log "Failed to get installed size, skipping check."
+ return 0
+ fi
+
log "Free space in /: ${available_disk_space}MB"
log "Kernel size: ${kernel_size}MB"
download_size() {
local size
- size=$(LC_ALL=C apt-get --yes --print-uris "$@" \
- | sed -n '/^Need to get / {s///; s/B.*//; p}')
+ size=$(LC_ALL=C apt-get --yes --print-uris "$@" | grep '^Need to get ')
+
+ if [ $? -ne 0 ]; then
+ log "Failed to get download size for 'apt-get $@'."
+ return 1
+ fi
+
+ size=${size#Need to get }
+ size=${size%%B*}
size_to_mb "${size}B"
}
installed_size() {
local package size
package=$1
- size=$(apt-cache show $package \
- | awk '$1 == "Installed-Size:" {print $2; exit}')
+ size=$(apt-cache show $package | grep '^Installed-Size:')
+
+ if [ $? -ne 0 ]; then
+ log "Failed to get installed size for '$package'."
+ return 1
+ fi
+
+ size=${size#*: }
size_to_mb "${size}kB"
}
echo $num
}
+
+# make sure carnet-upgrade doesn't get upgraded until the end
+hold_carnet_upgrade() {
+ echo carnet-upgrade hold | dpkg --set-selections
+}
+
+release_carnet_upgrade() {
+ echo carnet-upgrade install | dpkg --set-selections
+}