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=$( copy_template $sl )
505 # comment aai repository if not in use
506 if ! pkg srce-keyring; then
507 sed -i 's/^\(deb.*ftp.srce.hr\)/#\1/' $sl_new
510 # check if already installed
511 if ! cmp $sl $sl_new >/dev/null; then
514 if [ -f $sl -a ! -f $sl.$backup_ext ]; then
515 cp -av $sl $sl.$backup_ext
518 # install new version
520 notice "Novi sadrzaj datoteke /etc/apt/sources.list:
522 `cat /etc/apt/sources.list`"
528 # funkcija koja brise grupu proc
529 remove_group_proc () {
530 if getent group proc > /dev/null; then
531 groupdel proc || true
532 log "groupdel proc (temporarily)"
533 post_upgrade add_group_proc
538 if ! getent group proc > /dev/null; then
539 # grsec uses gid 99 for /proc files
541 log "groupadd -g 99 proc"
543 # update oidentd so it uses the proc group
544 if [ -x /etc/init.d/oidentd ]; then
545 if gpasswd -a oident proc; then
546 /etc/init.d/oidentd restart
552 # backup ldap database
554 local ldap_backup=/var/backups/slapcat.$backup_ext.gz
555 local old_umask result
557 if [ ! -f $ldap_backup ]; then
558 [ -x /etc/init.d/freeradius ] && /etc/init.d/freeradius stop || true
560 if [ -x /etc/init.d/slapd -a -d /var/lib/ldap ]; then
561 /etc/init.d/slapd stop || true
563 umask 0077 # protect the backup file
564 slapcat | gzip --best > $ldap_backup
567 /etc/init.d/slapd start || true
569 if [ "$result" -eq 0 ]; then
570 log "$ldap_backup created"
571 notice "Napravljen backup slapd baze u $ldap_backup."
573 log "$ldap_backup was not created"
574 notice "Backup slapd baze u $ldap_backup nije uspio."
579 [ -x /etc/init.d/freeradius ] && /etc/init.d/freeradius start || true
581 log "slapd backup already at $ldap_backup, skipping."
582 #notice "Backup slapd baze u $ldap_backup vec postoji!"
586 # backup etc direktorija
588 local etc_backup=/var/backups/etc.$backup_ext.tar.gz
591 if [ ! -f $etc_backup ]; then
593 umask 0077 # protect the backup file
595 if tar cfz $etc_backup /etc 2> /dev/null; then
596 log "$etc_backup created"
597 notice "Napravljen backup /etc direktorija u $etc_backup."
599 log "$etc_backup was not created"
600 notice "Backup /etc direktorija u $etc_backup nije uspio."
605 log "/etc backup already present in $etc_backup, skipping."
606 #notice "Backup /etc direktorija u $etc_backup vec postoji!"
610 # restore a configuration file if it contains only CN modifications
612 local file file_expect file_restore file_backup
617 file_backup=$file.$backup_ext
619 [ "$file_expect" ] || file_expect=$cnup/files/$file.expect
620 [ "$file_restore" ] || file_restore=$cnup/files/$file.restore
622 # check if all required files are there
623 if ! [ -e $file -a -e $file_expect -a -e $file_restore ]; then
624 log "Required files missing, skipping $file restore."
629 if ! cmp $file_expect $file >/dev/null; then
630 log "Config doesn't match the template, skipping $file restore."
635 if [ ! -e $file_backup ]; then
636 log "Restoring config file $file."
638 # backup local changes
639 cp -av $file $file_backup
642 cp -v $file_restore $file
647 log "Backup file exists, skipping $file restore."
652 # force reconfiguration at the end if package is not upgraded automatically
653 postupgrade_reconfigure () {
654 local cn_package cn_version
657 cn_version=$( dpkg -s "$cn_package" | awk '/^Version:/ {print $2}' )
658 post_upgrade "pkg $cn_package gt $cn_version || dpkg-reconfigure $cn_package"
661 # copy template into a temporary file
663 local path file template config_new
666 file=$(basename $path)
667 template=$cnup/files/$path.template
668 config_new=$(mktemp /var/lib/carnet-upgrade/$file.XXXXXX)
669 cp $template $config_new
674 # restore modified config to their package defaults
675 # so the upgrade doesn't complain so much
677 local hostname domain config_new memtotal memlimit
679 # restore simple configs
680 if pkg ntp-cn && pkg ntp lt 1:4.2.6.p2+dfsg-1+b1; then
681 if restore_file /etc/ntp.conf; then
682 postupgrade_reconfigure ntp-cn
686 if pkg kernel-2.6-cn && pkg procps lt 1:3.2.8-9; then
687 if restore_file /etc/sysctl.conf; then
688 postupgrade_reconfigure kernel-2.6-cn
692 if pkg kernel-2.6-cn && pkg libpam-modules lt 1.1.1-6.1; then
693 if restore_file /etc/security/limits.conf; then
694 postupgrade_reconfigure kernel-2.6-cn
698 if pkg vsftpd-cn && pkg vsftpd lt 2.3.2-3+squeeze2; then
699 if restore_file /etc/vsftpd.conf; then
700 postupgrade_reconfigure vsftpd-cn
704 if pkg squirrelmail-cn && pkg squirrelmail lt 2:1.4.21-2; then
705 if restore_file /etc/squirrelmail/apache.conf; then
706 postupgrade_reconfigure squirrelmail-cn
710 if pkg spamassassin-cn && pkg spamassassin lt 3.3.1-1; then
711 if restore_file /etc/spamassassin/v310.pre; then
712 postupgrade_reconfigure spamassassin-cn
716 if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.4-3; then
717 if restore_file /etc/cron.daily/amavisd-new; then
718 rm -f /etc/cron.daily/amavisd-new.$backup_ext
719 postupgrade_reconfigure amavisd-cn
722 if restore_file /etc/amavis/conf.d/15-av_scanners; then
723 rm -f /etc/amavis/conf.d/15-av_scanners.$backup_ext
724 postupgrade_reconfigure amavisd-cn
728 if pkg amavisd-cn lt 3:2.6.5; then
729 restore_file /etc/init.d/amavisd-cn
730 rm -f /etc/init.d/amavisd-cn.$backup_ext
733 if pkg console-tools lt 1:0.2.3dbs-69.1; then
734 restore_file /etc/console-tools/config
737 if pkg base-files lt 6.0squeeze2; then
738 restore_file /etc/issue
739 restore_file /etc/issue.net
742 if pkg slapd lt 2.4.23-7.2; then
743 restore_file /etc/default/slapd
746 # dovecot won't start with these options
747 if pkg dovecot-cn && pkg dovecot-common lt 1:1.2.15-7; then
748 sed -i 's/^\( *\)\(sieve\(_storage\)\?=.*\)/\1#\2/' \
749 /etc/dovecot/dovecot.conf
752 # check if monitrc is template based
753 if [ -e /etc/monit/monitrc ]; then # monit is removed at this point
754 # regenerate config from template
756 domain=$(hostname --domain)
757 config_new=$(copy_template /etc/monit/monitrc)
758 check_and_sed "@localhost" \
759 "s/@localhost/@$hostname.$domain/g" $config_new || true
760 restore_file /etc/monit/monitrc $config_new
765 # temporary disable listchanges packages to reduce clutter during upgrade
767 local file command=$1
769 for file in /etc/apt/apt.conf.d/20listchanges \
770 /etc/apt/apt.conf.d/20listchanges-cn
774 if [ -f $file ]; then
775 dpkg-divert --local --rename --divert $file.$backup_ext \
781 if [ -f $file.$backup_ext ]; then
782 dpkg-divert --remove $file || true
789 # make a silent installation of carnet and srce keyrings
790 install_keyrings () {
791 pkgadd carnet-keyring debian-archive-keyring
792 dpkg-reconfigure carnet-keyring debian-archive-keyring
794 if pkg srce-keyring; then
796 dpkg-reconfigure srce-keyring
802 # check if package is orphaned (nothing depends on it)
807 deps=$(apt-get remove -s $package | grep ^Remv | wc -l)
808 if [ "$deps" -eq 1 ]; then
815 # remove old and unused libraries
821 for package in $orphaned_packages; do
822 if is_orphaned $package; then
828 # monit it causing problems for postinst scripts
829 # restarting daemons so try to disable it
831 if pkg monit-cn; then
832 pkgrm monit-cn # disables monit in prerm
835 # if configured manually
837 # remove the binary but leave the config
838 apt-get remove --yes monit
840 pkill -9 monit || true
841 # move away init for insserv to work
842 mv /etc/init.d/monit /var/lib/carnet-upgrade/
846 # allow monit to run again
848 if [ -f /var/lib/carnet-upgrade/monit ]; then
849 mv /var/lib/carnet-upgrade/monit /etc/init.d/monit
854 # check which of the given packages are installed
856 local package installed
858 for package in $*; do
859 if pkg $package; then
860 installed="$installed $package"
867 # only upgrade packages if they are already installed
871 packages=$( grep_installed $* )
873 if [ "$packages" ]; then
874 eval pkgadd $packages
878 # make a silent upgrade to new libc6
880 DEBIAN_FRONTEND=noninteractive pkgupgrade libc6 libc6-dev tzdata
883 # upgrade apache2/php5
885 pkgrm apache-common # prevents installation of apache2-suexec
886 pkgupgrade libapache2-mod-php5 php5-cli php5-cn apache2-cn \
887 php5-odbc php5-suhosin php-suhosin-cn
893 # move old config aside
894 for conf in /etc/amavisd.conf /etc/amavis/amavisd.conf; do
895 if [ -e $conf -a ! -e $conf.$backup_ext ]; then
896 mv -v $conf $conf.$backup_ext
900 # install new packages
901 pkgadd amavisd-cn amavisd-new
904 /etc/init.d/amavisd-cn restart
907 # handle freerdius upgrade
908 upgrade_freeradius () {
909 pkg freeradius-aai lt 2.1.10-1 || return 0
911 # aai team prevents a normal upgrade
912 cp -av /etc/freeradius /etc/freeradius.$backup_ext
913 pkgrm freeradius-aai freeradius-ldap freeradius
914 rm -rf /etc/freeradius/certs
915 pkgadd freeradius-aai
918 # handle mysql 5.0 to 5.1 upgrade
920 if pkg mysql-server || pkg mysql-server-5.0; then
922 dpkg -P mysql-server-5.0
923 /etc/init.d/mysql restart
927 # fix postgresql deinstallation during upgrade
928 upgrade_postgresql () {
929 if check_services show 2>&1 | grep -qw postgresql; then
930 apt-get install -y postgresql || apt-get -yf install
936 pkgadd sasl2-bin postfix-cn
938 if pkg postgrey; then
939 pkgrm postgrey # not used by postfix-cn anymore
943 # upgrade bind separately so DNS is not down for too long
944 # or breaks postinst scripts of other cn packages that depend on
951 local name=$1 file=$2 val
953 if [ -f "$file" ]; then
954 val=$(sed -n "/^[[:space:]]*$name[[:space:]]*=/s/[[:space:]]*//gp" $file)
961 # restore munin configs for silent upgrade
963 local config backup hostname domain
965 # new htmldir location
966 if [ -d /var/www/munin -a ! -e /var/cache/munin/www ]; then
967 mkdir -p /var/cache/munin
968 mv /var/www/munin /var/cache/munin/www
971 for pkg_name in munin munin-node; do
972 pkg $pkg_name lt '1.4.5-3' || continue
974 config=/etc/munin/$pkg_name.conf
975 backup=$config.$backup_ext
976 if [ -f $config -a ! -f $backup ]; then
978 domain=$(hostname --domain)
980 cp -av $config $backup
981 check_and_sed "$hostname.$domain" \
982 "s/$hostname.$domain/localhost.localdomain/g" $config
987 # force localhost -> hostname replacement in config files
989 dpkg-reconfigure munin-cn
992 # try not to overwrite user modified issue files
994 if cmp /etc/issue $cnup/files/etc/issue.expect.new >/dev/null; then
995 cp -av /etc/issue /etc/issue.$backup_ext
996 cat > /etc/issue <<EOF
997 Debian GNU/Linux 6.0 (CARNet Debian 6.0) \\n \\l
1002 if cmp /etc/issue.net $cnup/files/etc/issue.net.expect.new >/dev/null; then
1003 cp -av /etc/issue.net /etc/issue.net.$backup_ext
1004 cat > /etc/issue.net <<EOF
1005 Debian GNU/Linux 6.0 (CARNet Debian 6.0) %h
1010 check_archives_space() {
1011 local available_disk_space archives_size
1012 available_disk_space=$(free_space /var/cache/apt/archives/)
1013 archives_size=$(download_size dist-upgrade)
1015 if [ $? -ne 0 ]; then
1016 log "Failed to get download size, skipping check."
1020 log "Archives space: ${available_disk_space}MB"
1021 log "Download size: ${archives_size}MB"
1023 if [ $available_disk_space -lt $archives_size ]; then
1024 log "carnet-upgrade aborted: not enough space in /var/cache/apt/archives/ (have ${available_disk_space}MB, need ${archives_size}MB)"
1025 notice "Premalo slobodnog mjesta u /var/cache/apt/archives/ za skidanje paketa (potrebno je barem ${archives_size}MB). Procitajte poglavlje 'Izvanredne situacije' u dokumentaciji."
1030 check_kernel_space() {
1031 local available_disk_space kernel_size linux_images metapkg pkg ret
1032 available_disk_space=$(free_space /)
1033 linux_images=$(apt-cache show kernel-2.6-cn | grep ^Depends: \
1034 | grep -o 'linux-image[^, ]*')
1035 for metapkg in $linux_images; do
1036 pkg=$(apt-cache show $metapkg | grep ^Depends: \
1037 | grep -o 'linux-image[^, ]*' | head -1)
1038 [ "$pkg" ] || continue
1040 kernel_size=$(installed_size $pkg)
1042 [ $ret -eq 0 ] && break
1045 if [ $ret -ne 0 ]; then
1046 log "Failed to get installed size, skipping check."
1050 log "Free space in /: ${available_disk_space}MB"
1051 log "Kernel package: $pkg"
1052 log "Kernel size: ${kernel_size}MB"
1054 if LC_ALL=C apt-get -s install kernel-2.6-cn 2>/dev/null \
1055 | grep -q '^kernel-2.6-cn is already the newest version.$'
1057 log "Not checking free space in /: kernel-2.6-cn already installed"
1061 if [ $available_disk_space -lt $kernel_size ]; then
1062 log "carnet-upgrade aborted: not enough space in / (have ${available_disk_space}MB, need ${kernel_size}MB)"
1063 notice "Premalo mjesta u / za instalaciju kernela (potrebno je barem ${kernel_size}MB). Procitajte poglavlje 'Izvanredne situacije' u dokumentaciji."
1069 df --portability --block-size=1M "$1" | tail -1 | awk '{print $4}'
1074 size=$(LC_ALL=C apt-get --yes --print-uris "$@" | grep '^Need to get ')
1076 if [ $? -ne 0 ]; then
1077 log "Failed to get download size for 'apt-get $@'."
1081 size=${size#Need to get }
1084 size_to_mb "${size}B"
1090 size=$(apt-cache show $package | grep '^Installed-Size:')
1092 if [ $? -ne 0 ]; then
1093 log "Failed to get installed size for '$package'."
1099 size_to_mb "${size}kB"
1105 if [ -z "$size" ]; then
1109 if [ "${size%kB}" != "$size" ]; then
1110 size=$(round ${size%kB})
1111 size=$(($size/1024+1))
1112 elif [ "${size%MB}" != "$size" ]; then
1113 size=$(round ${size%MB})
1114 elif [ "${size%GB}" != "$size" ]; then
1115 size=$(round ${size%GB})
1116 size=$(($size*1024))
1117 elif [ "${size%[0-9]B}" != "$size" ]; then
1118 size=$(round ${size%B})
1119 size=$(($size/1024/1024+1))
1121 log "unrecognized size unit: $size"
1132 if [ "${num%.*}" != "$num" ]; then
1140 # make sure carnet-upgrade doesn't get upgraded until the end
1141 hold_carnet_upgrade() {
1142 echo carnet-upgrade hold | dpkg --set-selections
1145 release_carnet_upgrade() {
1146 echo carnet-upgrade install | dpkg --set-selections