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
724 rm -f /etc/init.d/amavisd-cn.$backup_ext
727 if pkg console-tools lt 1:0.2.3dbs-69.1; then
728 restore_file /etc/console-tools/config
731 if pkg base-files lt 6.0squeeze2; then
732 restore_file /etc/issue
733 restore_file /etc/issue.net
736 # dovecot won't start with these options
737 if pkg dovecot-cn && pkg dovecot-common lt 1:1.2.15-7; then
738 sed -i 's/^\( *\)\(sieve\(_storage\)\?=.*\)/\1#\2/' \
739 /etc/dovecot/dovecot.conf
742 # check if monitrc is template based
743 if [ -e /etc/monit/monitrc ]; then # monit is removed at this point
744 # regenerate config from template
746 domain=$(hostname --domain)
747 config_new=$(copy_template /etc/monit/monitrc)
748 check_and_sed "@localhost" \
749 "s/@localhost/@$hostname.$domain/g" $config_new || true
750 restore_file /etc/monit/monitrc $config_new
755 # temporary disable listchanges packages to reduce clutter during upgrade
757 local file command=$1
759 for file in /etc/apt/apt.conf.d/20listchanges \
760 /etc/apt/apt.conf.d/20listchanges-cn
764 if [ -f $file ]; then
765 dpkg-divert --local --rename --divert $file.$backup_ext \
771 if [ -f $file.$backup_ext ]; then
772 dpkg-divert --remove $file || true
779 # make a silent installation of carnet and srce keyrings
780 install_keyrings () {
781 pkgadd carnet-keyring srce-keyring debian-archive-keyring
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 pkg freeradius-aai lt 2.1.10-1 || return 0
886 # aai team prevents a clean upgrade
887 cp -av /etc/freeradius /etc/freeradius.$backup_ext
888 pkgrm freeradius-aai freeradius-ldap freeradius
889 pkgadd freeradius-aai
892 # handle openldap upgrade
893 upgrade_openldap () {
894 # aai does not depend on the new openldap version
899 # fix postgresql deinstallation during upgrade
900 upgrade_postgresql () {
901 if check_services show 2>&1 | grep -qw postgresql; then
902 apt-get install -y postgresql || apt-get -yf install
908 pkgadd sasl2-bin postfix-cn
910 if pkg postgrey; then
911 pkgrm postgrey # not used by postfix-cn anymore
915 # upgrade bind separately so DNS is not down for too long
916 # or breaks postinst scripts of other cn packages that depend on
923 local name=$1 file=$2 val
925 if [ -f "$file" ]; then
926 val=$(sed -n "/^[[:space:]]*$name[[:space:]]*=/s/[[:space:]]*//gp" $file)
933 # restore munin configs for silent upgrade
935 local config backup hostname domain
937 for pkg_name in munin munin-node; do
938 pkg $pkg_name lt '1.4.5-3' || continue
940 config=/etc/munin/$pkg_name.conf
941 backup=$config.$backup_ext
942 if [ -f $config -a ! -f $backup ]; then
944 domain=$(hostname --domain)
946 cp -av $config $backup
947 check_and_sed "$hostname.$domain" \
948 "s/$hostname.$domain/localhost.localdomain/g" $config
953 # force localhost -> hostname replacement in config files
955 dpkg-reconfigure munin-cn
958 # try not to overwrite user modified issue files
960 if cmp /etc/issue $cnup/files/etc/issue.expect.new >/dev/null; then
961 cp -av /etc/issue /etc/issue.$backup_ext
962 cat > /etc/issue <<EOF
963 Debian GNU/Linux 6.0 (CARNet Debian 6.0) \\n \\l
968 if cmp /etc/issue.net $cnup/files/etc/issue.net.expect.new >/dev/null; then
969 cp -av /etc/issue.net /etc/issue.net.$backup_ext
970 cat > /etc/issue.net <<EOF
971 Debian GNU/Linux 6.0 (CARNet Debian 6.0) %h
976 check_archives_space() {
977 local available_disk_space archives_size
978 available_disk_space=$(free_space /var/cache/apt/archives/)
979 archives_size=$(download_size dist-upgrade)
981 if [ $? -ne 0 ]; then
982 log "Failed to get download size, skipping check."
986 log "Archives space: ${available_disk_space}MB"
987 log "Download size: ${archives_size}MB"
989 if [ $available_disk_space -lt $archives_size ]; then
990 log "carnet-upgrade aborted: not enough space in /var/cache/apt/archives/ (have ${available_disk_space}MB, need ${archives_size}MB)"
991 notice "Premalo slobodnog mjesta u /var/cache/apt/archives/ za skidanje paketa (potrebno je barem ${archives_size}MB). Procitajte poglavlje 'Izvanredne situacije' u dokumentaciji."
996 check_kernel_space() {
997 local available_disk_space kernel_size linux_images metapkg pkg ret
998 available_disk_space=$(free_space /)
999 linux_images=$(apt-cache show kernel-2.6-cn | grep ^Depends: \
1000 | grep -o 'linux-image[^, ]*')
1001 for metapkg in $linux_images; do
1002 pkg=$(apt-cache show $metapkg | grep ^Depends: \
1003 | grep -o 'linux-image[^, ]*' | head -1)
1004 [ "$pkg" ] || continue
1006 kernel_size=$(installed_size $pkg)
1008 [ $ret -eq 0 ] && break
1011 if [ $ret -ne 0 ]; then
1012 log "Failed to get installed size, skipping check."
1016 log "Free space in /: ${available_disk_space}MB"
1017 log "Kernel package: $pkg"
1018 log "Kernel size: ${kernel_size}MB"
1020 if LC_ALL=C apt-get -s install kernel-2.6-cn 2>/dev/null \
1021 | grep -q '^kernel-2.6-cn is already the newest version.$'
1023 log "Not checking free space in /: kernel-2.6-cn already installed"
1027 if [ $available_disk_space -lt $kernel_size ]; then
1028 log "carnet-upgrade aborted: not enough space in / (have ${available_disk_space}MB, need ${kernel_size}MB)"
1029 notice "Premalo mjesta u / za instalaciju kernela (potrebno je barem ${kernel_size}MB). Procitajte poglavlje 'Izvanredne situacije' u dokumentaciji."
1035 df --portability --block-size=1M "$1" | tail -1 | awk '{print $4}'
1040 size=$(LC_ALL=C apt-get --yes --print-uris "$@" | grep '^Need to get ')
1042 if [ $? -ne 0 ]; then
1043 log "Failed to get download size for 'apt-get $@'."
1047 size=${size#Need to get }
1050 size_to_mb "${size}B"
1056 size=$(apt-cache show $package | grep '^Installed-Size:')
1058 if [ $? -ne 0 ]; then
1059 log "Failed to get installed size for '$package'."
1065 size_to_mb "${size}kB"
1071 if [ -z "$size" ]; then
1075 if [ "${size%kB}" != "$size" ]; then
1076 size=$(round ${size%kB})
1077 size=$(($size/1024+1))
1078 elif [ "${size%MB}" != "$size" ]; then
1079 size=$(round ${size%MB})
1080 elif [ "${size%GB}" != "$size" ]; then
1081 size=$(round ${size%GB})
1082 size=$(($size*1024))
1083 elif [ "${size%[0-9]B}" != "$size" ]; then
1084 size=$(round ${size%B})
1085 size=$(($size/1024/1024+1))
1087 log "unrecognized size unit: $size"
1098 if [ "${num%.*}" != "$num" ]; then
1106 # make sure carnet-upgrade doesn't get upgraded until the end
1107 hold_carnet_upgrade() {
1108 echo carnet-upgrade hold | dpkg --set-selections
1111 release_carnet_upgrade() {
1112 echo carnet-upgrade install | dpkg --set-selections