1 # Ivan 'ico' Rako <irako@srce.hr>
2 # Zoran 'jelly' Dzelajlija <jelly@srce.hr>
5 LC_MESSAGES=hr_HR dialog --backtitle "$title" --msgbox "$*" 18 75
9 LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$msg_first_warning" 18 75
11 log "Upgrade canceled."
18 dpkg -l "$1" 2> /dev/null | egrep -q "^.i" || return 1
19 [ -z "$2" ] && return 0
20 version=$(dpkg -s "$1" | awk '/^Version:/ {print $2}')
21 dpkg --compare-versions "$version" "$2" "$3" 2>&1 > /dev/null
26 logfile=${logfile:=/var/log/carnet-upgrade.log}
31 echo "$(date +'%Y-%m-%d %H:%M:%S') $*" >> $logfile
40 [ "$DEBIAN_SCRIPT_DEBUG" ] && set -vx
49 [ -e "$i" ] || continue
50 egrep -q "$s" "$i" || continue
51 [ -h "$i" ] && i=$(readlink -f "$i")
52 sed "$sedcmd" "$i" > "$i.dpkg-tmp"
53 chown --reference "$i" "$i.dpkg-tmp"
54 chmod --reference "$i" "$i.dpkg-tmp"
58 if [ "$ret" -eq 0 ]; then
59 log "Done \"$sedcmd\" to $*"
65 [ -n "$*" ] || return 0
66 log "Installing $* ..."
67 apt-get -y$s install $* || {
70 apt-get -y$s install $*
75 [ -n "$*" ] || return 0
77 apt-get -y$s --purge remove $* || {
80 apt-get -y$s --purge remove $*
85 [ -n "$*" ] || return 0
87 apt-get -y$s remove $* || {
90 apt-get -y$s remove $*
96 log "Running apt-get update ..."
97 apt-get -y$s update || {
105 log "Running apt-get download ..."
106 apt-get -dy$s dist-upgrade
110 log "Running upgrade ..."
111 apt-get -y$s upgrade || {
116 log "Running dist-upgrade ..."
117 apt-get -y$s dist-upgrade || {
119 apt-get -y$s dist-upgrade
124 log "Running autoremove ..."
125 apt-get -y$s --purge autoremove || {
132 LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$msg_remove_x" 18 75
133 if [ $? -eq 0 ]; then
134 log "Removing X Window System"
137 log "Skipping X Window System removal"
142 local to_remove add_this i j n text to_show cmd tmpfile installed
143 local update_selections pkgs_to_deselect pkgs_to_remove oldifs pkglist
144 text="$msg_remove_bloat"
146 [ "$DEBUG" ] && set -x
148 pkglist=$(mktemp /var/lib/carnet-upgrade/pkglist.XXXXXX)
149 COLUMNS=200 dpkg -l | awk '$1 ~ /^.i/ { print $2 }' > $pkglist
150 for i in $(echo "$bloats" | sed 's/ */ /g'| awk -F' ' '{print $2}')
152 if grep -q "^$i$" $pkglist; then
153 installed="$installed $i"
154 add_this="$(echo "$bloats" | egrep " .*\b${i}\b" | sed 's/ */ /g'| awk -F' ' '{print $1}')"
155 if ! echo "$to_show" | grep -q "$add_this"; then
156 to_show="$to_show \"$add_this\" \"\" on"
161 [ "$DEBUG" ] || rm -f $pkglist
162 [ -z "$to_show" ] && return 0
164 tmpfile=$(mktemp /var/lib/carnet-upgrade/dialog-tmp.XXXXXX)
165 cmd="LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" --checklist \""$text"\" 20 75 $n $to_show"
166 [ "$DEBUG" ] && set +x
167 eval $cmd 2> $tmpfile
168 [ "$DEBUG" ] && set -x
169 to_remove="$(cat $tmpfile | sed 's/\"\ \"/ /g; s/\"\ *//g; s/\\//g')"
170 [ "$DEBUG" ] || rm -f $tmpfile
171 [ "$DEBUG" ] && echo "DEBUG: to_remove=$to_remove" 1>&2
174 for i in $(echo "$to_remove")
177 for j in $(echo "$bloats" | grep "^$i" | sed 's/ */ /g'| awk -F' ' '{print $2}')
179 # hopefully this will tell apt not to reinstall them at upgrade time
180 update_selections="${update_selections}
182 pkgs_to_deselect="$pkgs_to_deselect $j"
183 # only remove those that really are installed
184 if echo "$installed" | grep -q "$j"; then
185 pkgs_to_remove="$pkgs_to_remove $j"
189 [ "$DEBUG" ] && echo "DEBUG: pkgs_to_remove=$pkgs_to_remove" 1>&2
190 # Finally, remove those
191 if [ -n "$update_selections" ]; then
192 echo "$update_selections" | dpkg --set-selections
193 log "Deselected:${pkgs_to_deselect}"
195 eval pkgrm $pkgs_to_remove
199 local installed pkg cn_pkgs dialog_list selection cn_del to_del del_pkgs
201 # get installed packages
202 installed=$(mktemp /var/lib/carnet-upgrade/pkglist.XXXXXX)
203 COLUMNS=200 dpkg -l | awk '$1 ~ /^.i/ { print $2 }' >$installed
205 # detect installed CN packagees
206 for pkg in $(echo "$cn_bloats" | cut -d' ' -f1); do
207 if grep -qx $pkg $installed; then
208 cn_pkgs="$cn_pkgs $pkg"
209 dialog_list="$dialog_list $pkg '' off"
214 # report status or finish if no CN packages found
215 if [ "$cn_pkgs" ]; then
216 log "Found CN packages:$cn_pkgs"
218 log "No CN packages found."
222 # user selects the packages to delete
223 selection=$(mktemp /var/lib/carnet-upgrade/selection.XXXXXX)
224 eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \
225 --checklist \""$msg_remove_cn_bloat"\" 20 75 6 $dialog_list 2>$selection
227 # expand the package list to include the services
228 for pkg in $(cat $selection); do
231 cn_del="$cn_del $pkg"
232 to_del=$(echo "$cn_bloats" | grep ^$pkg)
233 del_pkgs="$del_pkgs $to_del"
237 # report selection or finish if no service selected
238 if [ "$cn_del" ]; then
239 log "Removing CN services:$cn_del"
241 log "No CN services selected for removal."
245 # delete the cn packages and relevant services
250 touch "$post_upgrade_queuetab"
251 if ! grep -q "true $*" "$post_upgrade_queuetab"; then
252 echo "true $*" >> "$post_upgrade_queuetab"
257 if [ -f "$post_upgrade_queuetab" ]; then
258 run_actions post_upgrade "$post_upgrade_queuetab"
259 mv "$post_upgrade_queuetab" "${post_upgrade_queuetab}.done.$(date '+%Y-%m-%d.%H:%M:%S')"
266 local line lineno lineno2 f n name action checkmsg check
267 [ "$DEBUG" ] && set -vx
270 [ -f "$f" ] || return 2 # no such file
271 n=$(wc -l "$f" | awk '{print $1}')
272 [ "$n" -lt 1 ] && return 1 # no lines to process
273 log "run_actions ($name) started, processing $n lines from \"$f\"."
277 while [ "$lineno" -lt "$n" ]
279 lineno=$(($lineno+1))
281 line=$(head -$lineno "$f" | tail -1)
282 if echo $line | grep -q '^#'; then # comment
285 while echo "$line" | egrep -q '\\$' # continuation
287 lineno2=$(($lineno2+1))
288 line=$(echo -n "$line"| sed 's/\\$//'; head -$lineno2 "$f" | tail -1)
290 check=$(echo "$line" | sed 's/ */ /g'| awk -F' ' '{print $1}')
291 action=$(echo "$line" | sed 's/ */ /g'| awk -F' ' '{print $2}')
293 [ "$check" != "true" ] && checkmsg="if '$check'"
295 log "$(printf 'action %02d' $lineno) starting: '${action}' $checkmsg "
296 if ! eval $action; then
297 log "$(printf 'action %02d' $lineno) failed: '${action}' $checkmsg "
298 display_action_failure "$action"
301 log "$(printf 'action %02d' $lineno) finished: '${action}' $checkmsg"
304 log "$(printf 'action %02d' $lineno) skipping: '${action}' $checkmsg"
306 [ "$lineno2" -gt "$lineno" ] && lineno=$lineno2
308 log "run_actions ($1) finished"
312 # report action failure
313 display_action_failure () {
317 Doslo je do greske prilikom izvrsavanja akcije '$action'. Detalje problema moguce je vidjeti u log datotekama:
319 /var/log/carnet-upgrade.log
320 /var/log/carnet-upgrade.typescript
322 Da bi dovrsili zapocete operacije nad paketima pokrenite:
324 # dpkg --configure -a
327 Nakon toga ponovno pozovite carnet-upgrade skriptu."
330 # funkcija vraca popis paketa koje treba upgradeati
332 local IFSOLD name version package
334 for package in `echo "$needed_versions" | awk '{print $1}'| grep -v ^$`; do
337 read name version <<-EOPTS
338 $(echo "$needed_versions" | sed 's/ */ /g' | grep ^$package)
341 if pkg "$name" lt "$version"; then
347 # funkcija za ispis paketa koje treba upgradeati
350 upgrade=${1:-"`what_upgrade`"}
352 if [ "$upgrade" ]; then
354 Prije prelaska na Debian Squeeze potrebno je napraviti nadogradnju ovih paketa:
359 # apt-get dist-upgrade
362 # apt-get install${upgrade}
364 Nakon toga ponovno pozovite ovu skriptu."
365 log "carnet-upgrade aborted, upgrade of$upgrade needed."
370 # try to check if we are using the latest version of carnet-upgrade script
371 check_my_version () {
372 local packages latest_version
374 packages=$(mktemp /var/lib/carnet-upgrade/Packages.XXXXXX)
375 if wget -q -O$packages $packages_uri; then
376 latest_version=$(sed -ne \
377 '/Package: carnet-upgrade/,/Description:/{ /Version: /s///p }' \
381 if [ "$latest_version" ]; then
382 log "Running carnet-upgrade version is $version"
383 log "Latest carnet-upgrade version is $latest_version"
384 if dpkg --compare-versions "$version" lt "$latest_version"; then
385 check_upgrade " carnet-upgrade"
386 else log "Already using the latest carnet-upgrade version."; fi
387 else log "Failed to get latest version, skipping check."; fi
388 else log "Failed to download Packages file, skipping check."; fi
394 reboot_required || return 0
396 LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$reboot_warning" 18 +75
397 if [ $? -eq 0 ]; then
398 log "Reboot before continuing."
401 log "Proceed without reboot."
405 # check if the latest kernel is booted
407 local default_kernel kernel_package running_release running_version
409 # try to get default kernel from grub2
410 if [ -z "$default_kernel" -a -r "/boot/grub/grub.cfg" ]; then
411 default_kernel=$( awk '
412 $0 ~ /^set default=".*"/ {
413 def = gensub(/default="(.*)"/, "\\1", "1", $2);
414 if (def !~ /^[0-9]+$/) { exit }
416 $1 == "menuentry" { menuentry+=1 }
417 $1 == "linux" && menuentry==def+1 { print $2; exit }' \
418 /boot/grub/grub.cfg 2>/dev/null )
421 # try to get default kernel from grub-legacy
422 if [ -z "$default_kernel" -a -r "/boot/grub/menu.lst" ]; then
423 default_kernel=$( awk '
424 $1 == "default" { def = $2;
425 if (def !~ /^[0-9]+$/) { exit } }
426 $1 == "title" { title+=1 }
427 $1 == "kernel" && title==def+1 { print $2; exit }' \
428 /boot/grub/menu.lst 2>/dev/null )
431 # try to get default kernel from lilo
432 if [ -z "$default_kernel" ] && type lilo >/dev/null 2>&1; then
433 default_kernel=$( lilo -t -v 2>/dev/null \
435 | sed -n -e '/^Boot image: / { s///p; q; }' )
438 if [ -z "$default_kernel" ]; then
439 log "Could not find default kernel"
443 log "Default kernel image: $default_kernel"
445 if [ ! -e "$default_kernel" ]; then
446 # /boot prefix might be missing
447 default_kernel="/boot/${default_kernel#/}"
448 if [ ! -e "$default_kernel" ]; then
449 log "Default kernel image doesn't exist!?"
454 kernel_package=$( dpkg -S $default_kernel | cut -d: -f 1 )
456 if [ -z "$kernel_package" ]; then
457 log "Default kernel not installed from a package"
461 log "Default kernel package: $kernel_package"
463 running_release=$( uname -r )
464 running_version=$( uname -v )
465 log "Running kernel: $running_release $running_version"
467 if grep -q "$running_release .* $running_version" $default_kernel; then
468 log "Latest kernel version is running."
471 log "Reboot to latest version required."
480 packages="$packages_first"
483 packages="$packages_second"
492 # install packages introduced in this release
494 if [ "$new_packages" ]; then
499 # funkcija utrpa ispravan sources.list
500 create_sources_list () {
502 sl=/etc/apt/sources.list
503 sl_new=/usr/share/carnet-upgrade/files/etc/apt/sources.list
505 # check if already installed
506 if ! cmp $sl $sl_new >/dev/null; then
509 if [ -f $sl -a ! -f $sl.$backup_ext ]; then
510 cp -av $sl $sl.$backup_ext
513 # install new version
515 notice "Novi sadrzaj datoteke /etc/apt/sources.list:
517 `cat /etc/apt/sources.list`"
522 # funkcija koja brise grupu proc
523 remove_group_proc () {
524 if getent group proc > /dev/null; then
525 groupdel proc || true
526 log "groupdel proc (temporarily)"
527 post_upgrade add_group_proc
532 if ! getent group proc > /dev/null; then
533 # grsec uses gid 99 for /proc files
535 log "groupadd -g 99 proc"
537 # update oidentd so it uses the proc group
538 if [ -x /etc/init.d/oidentd ]; then
539 if gpasswd -a oident proc; then
540 /etc/init.d/oidentd restart
546 # backup ldap database
548 local ldap_backup=/var/backups/slapcat.$backup_ext.gz
549 local old_umask result
551 if [ ! -f $ldap_backup ]; then
552 [ -x /etc/init.d/freeradius ] && /etc/init.d/freeradius stop || true
554 if [ -x /etc/init.d/slapd -a -d /var/lib/ldap ]; then
555 /etc/init.d/slapd stop || true
557 umask 0077 # protect the backup file
558 slapcat | gzip --best > $ldap_backup
561 /etc/init.d/slapd start || true
563 if [ "$result" -eq 0 ]; then
564 log "$ldap_backup created"
565 notice "Napravljen backup slapd baze u $ldap_backup."
567 log "$ldap_backup was not created"
568 notice "Backup slapd baze u $ldap_backup nije uspio."
573 [ -x /etc/init.d/freeradius ] && /etc/init.d/freeradius start || true
575 log "slapd backup already at $ldap_backup, skipping."
576 #notice "Backup slapd baze u $ldap_backup vec postoji!"
580 # backup etc direktorija
582 local etc_backup=/var/backups/etc.$backup_ext.tar.gz
585 if [ ! -f $etc_backup ]; then
587 umask 0077 # protect the backup file
589 if tar cfz $etc_backup /etc 2> /dev/null; then
590 log "$etc_backup created"
591 notice "Napravljen backup /etc direktorija u $etc_backup."
593 log "$etc_backup was not created"
594 notice "Backup /etc direktorija u $etc_backup nije uspio."
599 log "/etc backup already present in $etc_backup, skipping."
600 #notice "Backup /etc direktorija u $etc_backup vec postoji!"
604 # restore a configuration file if it contains only CN modifications
606 local file file_expect file_restore file_backup
611 file_backup=$file.$backup_ext
613 [ "$file_expect" ] || file_expect=$cnup/files/$file.expect
614 [ "$file_restore" ] || file_restore=$cnup/files/$file.restore
616 # check if all required files are there
617 if ! [ -e $file -a -e $file_expect -a -e $file_restore ]; then
618 log "Required files missing, skipping $file restore."
623 if ! cmp $file_expect $file >/dev/null; then
624 log "Config doesn't match the template, skipping $file restore."
629 if [ ! -e $file_backup ]; then
630 log "Restoring config file $file."
632 # backup local changes
633 cp -av $file $file_backup
636 cp -v $file_restore $file
641 log "Backup file exists, skipping $file restore."
646 # force reconfiguration at the end if package is not upgraded automatically
647 postupgrade_reconfigure () {
648 local cn_package cn_version
651 cn_version=$( dpkg -s "$cn_package" | awk '/^Version:/ {print $2}' )
652 post_upgrade "pkg $cn_package gt $cn_version || dpkg-reconfigure $cn_package"
655 # copy template into a temporary file
657 local path file template config_new
660 file=$(basename $path)
661 template=$cnup/files/$path.template
662 config_new=$(mktemp /var/lib/carnet-upgrade/$file.XXXXXX)
663 cp $template $config_new
668 # restore modified config to their package defaults
669 # so the upgrade doesn't complain so much
671 local hostname domain config_new memtotal memlimit
673 # restore simple configs
674 if pkg ntp-cn && pkg ntp lt 1:4.2.6.p2+dfsg-1+b1; then
675 if restore_file /etc/ntp.conf; then
676 postupgrade_reconfigure ntp-cn
680 if pkg kernel-2.6-cn && pkg procps lt 1:3.2.8-9; then
681 if restore_file /etc/sysctl.conf; then
682 postupgrade_reconfigure kernel-2.6-cn
686 if pkg kernel-2.6-cn && pkg libpam-modules lt 1.1.1-6.1; then
687 if restore_file /etc/security/limits.conf; then
688 postupgrade_reconfigure kernel-2.6-cn
692 if pkg vsftpd-cn && pkg vsftpd lt 2.3.2-3+squeeze2; then
693 if restore_file /etc/vsftpd.conf; then
694 postupgrade_reconfigure vsftpd-cn
698 if pkg squirrelmail-cn && pkg squirrelmail lt 2:1.4.21-2; then
699 if restore_file /etc/squirrelmail/apache.conf; then
700 postupgrade_reconfigure squirrelmail-cn
704 if pkg spamassassin-cn && pkg spamassassin lt 3.3.1-1; then
705 if restore_file /etc/spamassassin/v310.pre; then
706 postupgrade_reconfigure spamassassin-cn
710 if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.4-3; then
711 if restore_file /etc/cron.daily/amavisd-new; then
712 rm -f /etc/cron.daily/amavisd-new.$backup_ext
713 postupgrade_reconfigure amavisd-cn
716 if restore_file /etc/amavis/conf.d/15-av_scanners; then
717 rm -f /etc/amavis/conf.d/15-av_scanners.$backup_ext
718 postupgrade_reconfigure amavisd-cn
722 if pkg amavisd-cn lt 3:2.6.5; then
723 restore_file /etc/init.d/amavisd-cn
726 if pkg console-tools lt 1:0.2.3dbs-69.1; then
727 restore_file /etc/console-tools/config
730 if pkg base-files lt 6.0squeeze2; then
731 restore_file /etc/issue
732 restore_file /etc/issue.net
735 # dovecot won't start with these options
736 if pkg dovecot-cn && pkg dovecot-common lt 1:1.2.15-7; then
737 sed -i 's/^\( *\)\(sieve\(_storage\)\?=.*\)/\1#\2/' \
738 /etc/dovecot/dovecot.conf
741 # check if monitrc is template based
742 if [ -e /etc/monit/monitrc ]; then # monit is removed at this point
743 # regenerate config from template
745 domain=$(hostname --domain)
746 config_new=$(copy_template /etc/monit/monitrc)
747 check_and_sed "@localhost" \
748 "s/@localhost/@$hostname.$domain/g" $config_new || true
749 restore_file /etc/monit/monitrc $config_new
754 # temporary disable listchanges packages to reduce clutter during upgrade
756 local file command=$1
758 for file in /etc/apt/apt.conf.d/20listchanges \
759 /etc/apt/apt.conf.d/20listchanges-cn
763 if [ -f $file ]; then
764 dpkg-divert --local --rename --divert $file.$backup_ext \
770 if [ -f $file.$backup_ext ]; then
771 dpkg-divert --remove $file || true
778 # make a silent installation of carnet and srce keyrings
779 install_keyrings () {
780 pkgadd carnet-keyring srce-keyring debian-archive-keyring
781 pkgupgrade dpkg apt debconf python-apt dpkg-dev
783 dpkg-reconfigure carnet-keyring srce-keyring debian-archive-keyring
787 # check if package is orphaned (nothing depends on it)
792 deps=$(apt-get remove -s $package | grep ^Remv | wc -l)
793 if [ "$deps" -eq 1 ]; then
800 # remove old and unused libraries
806 for package in $orphaned_packages; do
807 if is_orphaned $package; then
813 # monit it causing problems for postinst scripts
814 # restarting daemons so try to disable it
816 if pkg monit-cn; then
817 pkgrm monit-cn # disables monit in prerm
820 # if configured manually
822 # remove the binary but leave the config
823 apt-get remove --yes monit
825 pkill -9 monit || true
829 # check which of the given packages are installed
831 local package installed
833 for package in $*; do
834 if pkg $package; then
835 installed="$installed $package"
842 # only upgrade packages if they are already installed
846 packages=$( grep_installed $* )
848 if [ "$packages" ]; then
849 eval pkgadd $packages
853 # make a silent upgrade to new libc6
855 DEBIAN_FRONTEND=noninteractive pkgupgrade libc6 libc6-dev tzdata udev
858 # upgrade apache2/php5
860 pkgrm apache-common # prevents installation of apache2-suexec
861 pkgupgrade libapache2-mod-php5 php5-cli php5-cn apache2-cn \
862 php5-odbc php5-suhosin php-suhosin-cn
868 # move old config aside
869 for conf in /etc/amavisd.conf /etc/amavis/amavisd.conf; do
870 if [ -e $conf -a ! -e $conf.$backup_ext ]; then
871 mv -v $conf $conf.$backup_ext
875 # install new packages
876 pkgadd amavisd-cn amavisd-new
879 /etc/init.d/amavisd-cn restart
882 # handle freerdius upgrade
883 upgrade_freeradius () {
884 local template config_new password realm hostname basedn
886 pkg freeradius-aai lt 2.1.3-0lenny0 || return 0
888 # aai team prevents a clean upgrade
889 cp -av /etc/freeradius /etc/freeradius.$backup_ext
890 pkgrm freeradius-aai freeradius-ldap freeradius
891 pkgadd freeradius-aai
894 # prepare for slapd upgrade (caused by freeradius installation)
895 prepare_openldap () {
896 pkg openldap-aai lt 2.4 || return 0
898 # openldap-aai expects org.ldif to exists
899 local ldif=/var/lib/ldap/org.ldif
900 local ldif_backup=/var/lib/carnet-upgrade/org.ldif
901 if [ -f $ldif ]; then
902 cp -v $ldif $ldif_backup
906 # fix openldap-aai postinst user handling
907 upgrade_openldap () {
908 pkg openldap-aai lt 2.4 || return 0
910 # slapd postinst fails if move_old_database is false
911 echo 'slapd slapd/move_old_database boolean true' | debconf-set-selections
914 # slapd removes org.ldif during switch from ldap -> openldap user
915 local ldif=/var/lib/ldap/org.ldif
916 local ldif_backup=/var/lib/carnet-upgrade/org.ldif
917 if [ -f $ldif_backup -a ! -f $ldif ]; then
918 cp -v $ldif_backup $ldif
921 # openldap-aai postinst fails here because of database permissions
922 apt-get -y install openldap-aai || true
923 chown -R openldap:openldap /var/lib/ldap
924 /etc/init.d/slapd restart
927 # remove ldap user if openldap works
928 if getent passwd ldap > /dev/null && \
929 getent passwd openldap > /dev/null && \
930 pgrep -U openldap slapd > /dev/null
932 log "userdel ldap (replaced by openldap)"
937 # fix postgresql deinstallation during upgrade
938 upgrade_postgresql () {
939 if check_services show 2>&1 | grep -qw postgresql; then
940 apt-get install -y postgresql || apt-get -yf install
946 pkgadd sasl2-bin postfix-cn
948 if pkg postgrey; then
949 pkgrm postgrey # not used by postfix-cn anymore
953 # upgrade bind separately so DNS is not down for too long
954 # or breaks postinst scripts of other cn packages that depend on
961 local name=$1 file=$2 val
963 if [ -f "$file" ]; then
964 val=$(sed -n "/^[[:space:]]*$name[[:space:]]*=/s/[[:space:]]*//gp" $file)
971 # restore munin configs for silent upgrade
973 local config backup hostname domain
975 for pkg_name in munin munin-node; do
976 pkg $pkg_name lt '1.4.5-3' || continue
978 config=/etc/munin/$pkg_name.conf
979 backup=$config.$backup_ext
980 if [ -f $config -a ! -f $backup ]; then
982 domain=$(hostname --domain)
984 cp -av $config $backup
985 check_and_sed "$hostname.$domain" \
986 "s/$hostname.$domain/localhost.localdomain/g" $config
991 # force localhost -> hostname replacement in config files
993 dpkg-reconfigure munin-cn
996 # try not to overwrite user modified issue files
998 if cmp /etc/issue $cnup/files/etc/issue.expect.new >/dev/null; then
999 cp -av /etc/issue /etc/issue.$backup_ext
1000 cat > /etc/issue <<EOF
1001 Debian GNU/Linux 6.0 (CARNet Debian 6.0) \\n \\l
1006 if cmp /etc/issue.net $cnup/files/etc/issue.net.expect.new >/dev/null; then
1007 cp -av /etc/issue.net /etc/issue.net.$backup_ext
1008 cat > /etc/issue.net <<EOF
1009 Debian GNU/Linux 6.0 (CARNet Debian 6.0) %h
1014 check_archives_space() {
1015 local available_disk_space archives_size
1016 available_disk_space=$(free_space /var/cache/apt/archives/)
1017 archives_size=$(download_size dist-upgrade)
1019 if [ $? -ne 0 ]; then
1020 log "Failed to get download size, skipping check."
1024 log "Archives space: ${available_disk_space}MB"
1025 log "Download size: ${archives_size}MB"
1027 if [ $available_disk_space -lt $archives_size ]; then
1028 log "carnet-upgrade aborted: not enough space in /var/cache/apt/archives/ (have ${available_disk_space}MB, need ${archives_size}MB)"
1029 notice "Premalo slobodnog mjesta u /var/cache/apt/archives/ za skidanje paketa (potrebno je barem ${archives_size}MB). Procitajte poglavlje 'Izvanredne situacije' u dokumentaciji."
1034 check_kernel_space() {
1035 local available_disk_space kernel_size linux_images metapkg pkg ret
1036 available_disk_space=$(free_space /)
1037 linux_images=$(apt-cache show kernel-2.6-cn | grep ^Depends: \
1038 | grep -o 'linux-image[^, ]*')
1039 for metapkg in $linux_images; do
1040 pkg=$(apt-cache show $metapkg | grep ^Depends: \
1041 | grep -o 'linux-image[^, ]*' | head -1)
1042 [ "$pkg" ] || continue
1044 kernel_size=$(installed_size $pkg)
1046 [ $ret -eq 0 ] && break
1049 if [ $ret -ne 0 ]; then
1050 log "Failed to get installed size, skipping check."
1054 log "Free space in /: ${available_disk_space}MB"
1055 log "Kernel package: $pkg"
1056 log "Kernel size: ${kernel_size}MB"
1058 if LC_ALL=C apt-get -s install kernel-2.6-cn \
1059 | grep -q '^kernel-2.6-cn is already the newest version.$'
1061 log "Not checking free space in /: kernel-2.6-cn already installed"
1065 if [ $available_disk_space -lt $kernel_size ]; then
1066 log "carnet-upgrade aborted: not enough space in / (have ${available_disk_space}MB, need ${kernel_size}MB)"
1067 notice "Premalo mjesta u / za instalaciju kernela (potrebno je barem ${kernel_size}MB). Procitajte poglavlje 'Izvanredne situacije' u dokumentaciji."
1073 df --portability --block-size=1M "$1" | tail -1 | awk '{print $4}'
1078 size=$(LC_ALL=C apt-get --yes --print-uris "$@" | grep '^Need to get ')
1080 if [ $? -ne 0 ]; then
1081 log "Failed to get download size for 'apt-get $@'."
1085 size=${size#Need to get }
1088 size_to_mb "${size}B"
1094 size=$(apt-cache show $package | grep '^Installed-Size:')
1096 if [ $? -ne 0 ]; then
1097 log "Failed to get installed size for '$package'."
1103 size_to_mb "${size}kB"
1109 if [ -z "$size" ]; then
1113 if [ "${size%kB}" != "$size" ]; then
1114 size=$(round ${size%kB})
1115 size=$(($size/1024+1))
1116 elif [ "${size%MB}" != "$size" ]; then
1117 size=$(round ${size%MB})
1118 elif [ "${size%GB}" != "$size" ]; then
1119 size=$(round ${size%GB})
1120 size=$(($size*1024))
1121 elif [ "${size%[0-9]B}" != "$size" ]; then
1122 size=$(round ${size%B})
1123 size=$(($size/1024/1024+1))
1125 log "unrecognized size unit: $size"
1136 if [ "${num%.*}" != "$num" ]; then
1144 # make sure carnet-upgrade doesn't get upgraded until the end
1145 hold_carnet_upgrade() {
1146 echo carnet-upgrade hold | dpkg --set-selections
1149 release_carnet_upgrade() {
1150 echo carnet-upgrade install | dpkg --set-selections