+# 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 php is installed make sure it's version 5
+check_php_version () {
+
+ if pkg php4-cn && ! pkg php5-cn; then
+ # prepare for php upgrade by installing php5 extensions
+ install_php5_extensions
+
+ notice "
+Prije prelaska na Debian Lenny potrebno je napraviti nadogradnju sa PHP 4 na PHP 5.
+
+Pokrenite:
+ # apt-get update
+ # apt-get install php5-cn
+
+Nakon sto provjerite da sve web aplikacije rade ispravno, ponovno pozovite ovu skriptu."
+ log "carnet-upgrade aborted, upgrade to php5-cn needed."
+ exit 1
+ fi
+}
+
+# install php5 extensions based on installed php4 extensions
+install_php5_extensions () {
+ local php4_list php5_pkg
+
+ # get a list of installed php4 packages
+ php4_list=$(mktemp /var/lib/carnet-upgrade/php4_list.XXXXXX)
+ dpkg -l php4-\* | awk '/^ii/ {
+ pkg=$2; sub("^php4", "php5", pkg); print pkg }' > $php4_list
+
+ # compare it with the list of available php5 packages
+ php5_pkg=$(apt-cache search -n ^php5- | cut -d' ' -f 1 \
+ | grep -F -x -f $php4_list | grep -F -x -v php5-cn)
+
+ # handle special cases
+ if pkg php4-xslt; then
+ php5_pkg="$php5_pkg php5-xsl"
+ fi
+
+ # install the required php5 modules
+ if [ "$php5_pkg" ]; then
+ pkgadd $php5_pkg
+ fi
+
+ # cleanup
+ rm -f $php4_list
+}
+
+# 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 Lenny potrebno je napraviti nadogradnju na najnoviji 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
+}
+
+check_reboot () {
+ reboot_required || return 0
+
+ LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$reboot_warning" 18 +75
+ if [ $? -eq 0 ]; then
+ log "Reboot before continuing."
+ exit 0
+ else
+ log "Proceed without reboot."
+ fi
+}
+
+# check if the latest kernel is booted
+reboot_required () {
+ local default_kernel kernel_package running_release running_version
+
+ # try to get default kernel from lilo
+ if type lilo >/dev/null 2>&1; then
+ default_kernel=$( lilo -t -v 2>/dev/null \
+ | grep -B3 '[*]$' \
+ | sed -n -e '/^Boot image: / { s///p; q; }' )
+ fi
+
+ # fallback to grub if lilo not installed
+ if [ -z "$default_kernel" -a -r "/boot/grub/menu.lst" ]; then
+ default_kernel=$( awk '
+ $1 == "default" { default = $2;
+ if (default !~ /^[0-9]+$/) { exit } }
+ $1 == "title" { title+=1 }
+ $1 == "kernel" && title==default+1 { print $2; exit }' \
+ /boot/grub/menu.lst 2>/dev/null )
+ fi
+
+ if [ -z "$default_kernel" ]; then
+ log "Could not find default kernel"
+ return 1
+ fi
+
+ log "Default kernel image: $default_kernel"
+
+ if [ ! -e "$default_kernel" ]; then
+ log "Default kernel image doesn't exist!?"
+ return 1
+ fi
+
+ kernel_package=$( dpkg -S $default_kernel | cut -d: -f 1 )
+
+ if [ -z "$kernel_package" ]; then
+ log "Default kernel not installed from a package"
+ return 1
+ fi
+
+ log "Default kernel package: $kernel_package"
+
+ running_release=$( uname -r )
+ running_version=$( uname -v )
+ log "Running kernel: $running_release $running_version"
+
+ if grep -q "$running_release .* $running_version" $default_kernel; then
+ log "Latest kernel version is running."
+ return 1
+ else
+ log "Reboot to latest version required."
+ return 0
+ fi
+}
+