source: subversion/applications/utils/packaging/setup-chroot.sh @ 29923

Last change on this file since 29923 was 25356, checked in by joerg, 9 years ago

adapt used distributions, correct wrong usage of return. Also mount /proc /dev /sys. add fakeroot and aptitude to default tools. add workarround for initctl in ubuntu-maverick. Add seperate update option to keep the chroots up to date

File size: 22.1 KB
Line 
1#!/bin/bash
2# This script is intended to do the setup and chroot environment for
3# Various Distributions on one Machine.
4# For this we first do a setup of some chroot systems
5#
6# For now I started with the debian based ones.
7
8# TODO:
9# automatic answering Yes to java install
10# setting dpkg question verbosity very low
11# renaming from -64 --> amd64 to reflect debian naming
12
13# renaming from -32 --> i386  to reflect debian naming (including symlink to old)
14
15
16chroot_base_dir="/home/chroot"
17username=`grep 1000 /etc/passwd | sed 's/:.*//'`
18
19unset http_proxy
20unset HTTP_PROXY
21export LANG=C
22export DEB_BUILD_OPTIONS="parallel=4"
23
24
25distri=debian
26release=lenny
27architecture=32
28
29log_dir="/home/chroot/log-setup"
30svn_co_base_dir=${chroot_base_dir}/svn
31
32mkdir -p "${log_dir}"
33mkdir -p "${log_dir}/results/"
34
35verbose=true
36debug=false
37quiet=false
38force=false
39do_fast=false
40do_summarize=false
41do_install_dev_tools=false
42do_setup_distri=false
43do_apt_get_update=false
44do_all_distributions=false
45
46# ----------------------------------------------------------------------------------------
47function show_error () {
48    local logfile="$1"
49    local error_text="$2"
50
51    if [ -n "${logfile}" ] ; then
52        cat "${logfile}" >>${log_dir}/$chroot/errors.log
53
54        mv "${logfile}" "${logfile}.error"
55        logfile="${logfile}.error"
56        echo "Logfile: ${logfile}"
57        if $verbose ; then
58            echo "tail ${logfile} ... "
59            tail ${logfile}
60        fi
61    fi
62
63    echo "${BG_WHITE}${RED}!!!!!!! ERROR($chroot): $task_name: $error_text${NORMAL}"
64    echo "!!!!!!! ERROR($chroot): $task_name: $error_text" \
65        >> ${log_dir}/$chroot/results.log
66}
67# ------------------------------------------------------------------
68
69for arg in "$@" ; do
70    arg_true=true
71    arg_false=false
72    case $arg in
73        --no-*)
74            arg_true=false
75            arg_false=true
76            arg=${arg/--no-/--}
77    esac
78    case $arg in
79        --all) # do all install/build steps
80            do_setup_distri=$arg_true
81            do_install_dev_tools=$arg_true
82            do_apt_get_update=$arg_true
83            do_debuild_packages=$arg_true
84            ;;
85
86
87        --setup-distri) # Setup the chroot with the distribution
88            do_setup_distri=$arg_true
89            ;;
90
91        --install-dev-tools) # Install Devtools inside chroot
92            do_install_dev_tools=$arg_true
93            ;;
94
95        --apt-get-update) #  Update debian packages with 'apt-get update;apt-get dist-upgrade'
96            do_apt_get_update=$arg_true
97            ;;
98
99        --iterate-all-distributions) # iterate over all possibilities
100            do_all_distributions=$arg_true
101            ;;
102
103        --distri=*) #   Select distribution [debian|ubuntu|maemo]
104                    #   Default: debian
105                    #   Where * means iterate over all distributions
106        distri=${arg#*=}
107        if [ "$distri" = "*" ] ; then
108            do_all_distributions=$arg_true
109        fi
110        ;;
111       
112        --release=*) #  Specify Release
113                     #  debian: etch|lenny|squeeze|wheezy
114                     #  ubuntu: [dapper|feisty|gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty]
115                     #  maemo: [diablo]
116                     #  Default: debian squeeze
117                     #  If we recognize that it is debian/ubuntu we set this too
118                     #  lenny-64 for example also sets the architecture
119                     #   Where * means iterate over all distributions
120        release=${arg#*=}
121        if [ "$release" = "*" ] ; then
122            do_all_distributions=$arg_true
123            continue
124        fi
125       
126        case $release in
127            *-32)
128                architecture=32
129                release=${release%-32}
130                ;;
131            *-i386)
132                architecture=32
133                release=${release%-i386}
134                ;;
135            *-64)
136                architecture=64
137                release=${release%-64}
138                ;;
139            *-amd64)
140                architecture=64
141                release=${release%-amd64}
142                ;;
143        esac
144       
145        if [ -d "/usr/share/debootstrap/scripts/" -a \( ! -s "/usr/share/debootstrap/scripts/${release}" \) ] ; then
146            available_ubuntu_releases=`grep -i 'mirror.*ubuntu' /usr/share/debootstrap/scripts/* | sed 's,.*scripts/,,;s,:.*,,; s,\..*,,'  | sort -u`
147            echo  "Available Ubuntu Release scripts: " $available_ubuntu_releases
148            show_error '' "there is no debootstrap script for $release"
149            exit -1
150        elif grep -q ubuntu /usr/share/debootstrap/scripts/${release}; then
151            distri="ubuntu"
152        elif echo "${release}" | grep -q -e diablo; then
153            distri="maemo"
154        fi
155        ;;
156
157        --architecture=*) #Specify Architecture
158                     #  Default: 32-bit Linux
159                 #  Possible values: 32 64 arm
160        architecture=${arg#*=}
161        ;;
162
163        --chroot-base-dir=*) # The basedir where to store the chroot environments
164        chroot_base_dir=${arg#*=}
165        ;;
166       
167        --force) #      force some actions
168            force=$arg_true
169            ;;
170
171        -h)
172            help=$arg_true
173            ;;
174
175        --help)
176            help=$arg_true
177            ;;
178
179        -help)
180            help=$arg_true
181            ;;
182
183        --verbose) #    switch on verbose output
184            verbose=$arg_true
185            quiet=$arg_false
186            ;;
187
188        --debug) #      switch on debugging
189            debug=$arg_true
190            verbose=$arg_true
191            quiet=$arg_false
192            ;;
193
194        --quiet) #      switch on quiet Mode
195            debug=$arg_false
196            verbose=$arg_false
197            quiet=$arg_true
198            ;;
199
200        -debug)
201            debug=$arg_true
202            verbose=$arg_true
203            quiet=""
204            ;;
205        --nv) #         be a little bit less verbose
206            verbose=''
207            ;;
208
209        *)
210            echo ""
211            echo "${RED}!!!!!!!!! Unknown option $arg${NORMAL}"
212            echo ""
213            help=true
214            UNKNOWN_OPTION=true
215            ;;
216    esac
217done # END OF OPTIONS
218
219
220# define Colors
221ESC=`echo -e "\033"`
222RED="${ESC}[91m"
223GREEN="${ESC}[92m"
224YELLOW="${ESC}[93m"
225BLUE="${ESC}[94m"
226MAGENTA="${ESC}[95m"
227CYAN="${ESC}[96m"
228WHITE="${ESC}[97m"
229BG_RED="${ESC}[41m"
230BG_GREEN="${ESC}[42m"
231BG_YELLOW="${ESC}[43m"
232BG_BLUE="${ESC}[44m"
233BG_MAGENTA="${ESC}[45m"
234BG_CYAN="${ESC}[46m"
235BG_WHITE="${ESC}[47m"
236BRIGHT="${ESC}[01m"
237UNDERLINE="${ESC}[04m"
238BLINK="${ESC}[05m"
239REVERSE="${ESC}[07m"
240NORMAL="${ESC}[0m"
241
242# ----------------------------------------------------------------------------------------
243# HELP
244if [ "true" = "$help" ] ; then
245    # extract options from case commands above
246    options=`grep -E -e esac -e '\s*--.*\).*#' $0 | sed '/esac/,$d;s/.*--/ [--/; s/=\*)/=val]/; s/)[\s ]/]/; s/#.*\s*//; s/[\n/]//g;'`
247    options=`for a in $options; do echo -n " $a" ; done`
248    echo "$0 $options"
249    echo "
250
251    This script does set up some chroot environments.
252    This chroot environment then can be used to build
253    debian(for now) based Packages.
254    It also installes a basic set of tools inside the
255    chroot environment to later be able to do the packaging.
256    "
257    # extract options + description from case commands above
258    grep -E  \
259        -e 'END OF OPTIONS' \
260        -e '--.*\).*#' \
261        -e '^[\t\s      ]+#' \
262        $0 | \
263        grep -v /bin/bash | sed '/END OF OPTIONS/,$d;s/.*--/  --/;s/=\*)/=val/;s/)//;s/^[ \t]*#/\t\t/;;s/[ \t]*#/\t/;' 
264    echo "Using an option with --no-option-name switches off this option"
265    $UNKNOWN_OPTION && exit -1
266    exit;
267fi
268
269# ----------------------------------------------------------------------------------------
270
271if ! whoami | grep -q root ; then
272    echo "!!!!!! Need to be root"
273    exit
274fi
275
276if ps fauxwww | grep -v -e grep -e emacs -e "$$" | grep -B 5 -A 2 -e $0 ; then
277    echo "There is already another setup_chroot.sh running"
278    ps -eo "%t %u %p %C %y %x %c %a " |  (head -n 1 ; grep java)
279        if  ! $force ; then
280                exit -1
281        fi
282fi
283
284
285# ----------------------------------------------------------------------------------------
286
287if $debug ; then
288    echo "Started `date`"
289else
290    #exec 2>&4-
291    #exec 2<>/dev/null
292    true
293fi
294
295
296# ----------------------------------------------------------------------------------------
297function debug_out () {
298    task_name="$1"
299    description_string="$2"
300
301    LOGFILE="${log_dir}/$chroot/log-$task_name.log"
302
303    if $debug ; then
304                echo "DEBUG: -------- $chroot --- '$task_name': Trying '$description_string'"
305    fi
306
307    if $debug ; then
308                tee $LOGFILE
309                cat "${LOGFILE}" >>${log_dir}/$chroot/full-debug.log
310    else
311                cat >$LOGFILE
312    fi
313    rc=`tail -1 | grep "EXIT CODE" $LOGFILE`
314    rc=${rc##EXIT CODE=}
315    if [ "$rc" != "0" ] ; then   
316                echo "$task_name: Trying $description_string" >>${log_dir}/$chroot/errors.log
317                cat "${LOGFILE}" >>${log_dir}/$chroot/errors.log
318                show_error "${LOGFILE}" "cannot do '$description_string' Exit Code $rc" 
319                false
320                return 
321    fi
322       
323    $debug && echo "DEBUG: $LOGFILE"
324}
325
326function set_rc {
327    rc=$?
328    echo "EXIT CODE=$rc"
329}
330
331# ----------------------------------------------------------------------------------------
332
333prerequisites=true
334debootstrap --version >/dev/null || prerequisites=false
335dchroot --version >/dev/null || prerequisites=false
336rpm --version >/dev/null || prerequisites=false
337if ! $prerequisites; then
338    $quiet || echo "-- $chroot ----- install debootstrap,dchroot,rpm on host"
339    task_name="aptitide_install_debootstrap_dchroot"
340    aptitude --assume-yes install debootstrap dchroot rpm
341    if [ "$?" -ne "0" ] ; then
342        show_error "${LOGFILE}" "cannot install debootstrap dchroot rmp"
343        exit -1
344    fi
345fi
346
347
348# ----------------------------------------------------------------------------------------
349#                                         Functions
350# ----------------------------------------------------------------------------------------
351
352
353# ----------------------------------------------------------------------------------------
354function setup_variables {
355    $debug && echo ""
356
357    chroot="$distri-$release-$architecture"
358    chroot_dir="$chroot_base_dir/$chroot"
359
360
361    if $verbose || $debug ; then
362        echo
363        echo "Distribution: '$distri'"
364        echo "Release: '$release'"
365        echo "Architecture: '$architecture'"
366    fi
367
368    variant=" --variant=buildd "
369
370    # --------------------------------------------
371    # 32/64 -Bit
372    case $architecture in
373        linux32|32)
374            arch="  --arch i386"
375            personality="linux32"
376            ;;
377        amd64|64)
378            arch="  --arch amd64"
379            personality="linux"
380            ;;
381        arm)
382            arch="  --arch arm"
383            personality="linux"
384            ;;
385        *)
386            show_error "${LOGFILE}" "Uknown Architecture $architecture"
387                false
388            return 
389    esac
390
391    # --------------------------------------------
392    #  debian/ubuntu/maemo//Suse
393    debian_based=false
394    suse_based=false
395    case $distri in
396        debian)
397            archive_url="http://ftp.de.debian.org/debian"
398            debian_based=true
399            case $release in
400                etch|lenny|squeeze|wheezy)
401                    $debug && echo "Specified Release '$release' is OK"
402                    ;;
403                *)
404                    show_error "${LOGFILE}" "unknown Debian Release $release"
405                    false; return
406                    ;;
407            esac
408            ;;
409        ubuntu)
410            archive_url="http://archive.ubuntu.com/ubuntu/"
411            debian_based=true
412            case $release in
413                jaunty|hardy|karmic|dapper|lucid|intrepid|maverick|natty|feisty|gutsy)
414                    $debug && echo "Specified Release '$release' is OK"
415                    ;;
416                *)
417                    show_error "${LOGFILE}" "unknown Ubuntu Release $release"
418                    false; return
419                    ;;
420            esac
421            ;;
422        maemo)
423            archive_url="http://archive.maemo.com/"
424            debian_based=true
425            case $release in
426                diablo)
427                    $debug && echo "Specified Release '$release' is OK"
428                    ;;
429                *)
430                    show_error "${LOGFILE}" "unknown Ubuntu Release $release"
431                    false; return
432                    ;;
433            esac
434            ;;
435        suse)
436            archive_url="http://download.opensuse.org/distribution/11.1/repo/oss/"
437            suse_based=true
438            case $release in
439                11.1)
440                    $debug && echo "Installing Suse"
441                    ;;
442            esac
443            ;;
444        *)
445            show_error "${LOGFILE}" "Uknown Distribution $distri"
446            false; return
447    esac
448   
449
450    return 0
451}
452
453# ----------------------------------------------------------------------------------------
454function setup_distri {
455
456    $do_setup_distri || { true; return; }
457
458    $debug && echo ""
459    # --------------------------------------------
460    if $debian_based ; then
461                if  $force || [ ! -s "$chroot_dir/etc/debian_version" ]; then
462                        $quiet || echo "-- $chroot -- debootstrap ----------------------------------------"
463                        command="debootstrap $variant $arch $release $chroot_dir $archive_url"
464                        $debug && echo $command
465                        task_name="debootstrap"
466                        { debootstrap $variant $arch "$release" "$chroot_dir" "$archive_url" \
467                                2>&1 ;set_rc; } | debug_out "debootstrap" "$command"
468#           test "$?" -ne "2" && return -1
469                fi
470    fi
471       
472    if $suse_based ; then
473            # $archive_url/bla.rpm
474                rpm --root $chroot_dir -ihv `cat /tmp/rpms-suse`
475                echo "$chroot not implemented .... Ends here for now ..." \
476                        | tee -a ${log_dir}/$chroot/results.log
477                false; return
478    fi
479
480    # --------------------------------------------
481    if true; then
482        $quiet || echo "-- $chroot -- mount /proc, ... ----------------------------------------"
483
484        # Google: ...
485        # mount --bind /dev /path-to-your-chroot/dev
486        # mount --bind /dev/pts /path-to-your-chroot/dev/pts
487        # mount --bind /dev/shm /path-to-your-chroot/dev/shm
488        # mount -t proc none /path-to-your-chroot/proc
489        # mount -t sysfs none /path-to-your-chroot/sys
490
491        for dev_type  in dev proc sys ; do 
492        # mount -o bind /proc  $chroot_dir/proc
493            if ! grep -q -e "/${dev_type}.*$chroot_dir/${dev_type} ${dev_type} bind" /etc/fstab; then
494                        echo "/${dev_type}  $chroot_dir/${dev_type} ${dev_type} bind" >>/etc/fstab
495            fi
496            umount "$chroot_dir/${dev_type}"
497            mount "$chroot_dir/${dev_type}"
498            if $debug ; then
499                        echo "mounted:"
500                        mount | grep -e '^/${dev_type}'
501            fi
502        done
503    fi
504
505    # For DNS Lookup
506    cp /etc/resolv.conf $chroot_dir/etc/resolv.conf
507
508
509    $quiet || echo "-- $chroot -- Update Sources.list----------------------------------------"
510    if [ ! -s  "$chroot_dir/etc/apt/sources.list.DIST" ] ; then
511                mv "$chroot_dir/etc/apt/sources.list" "$chroot_dir/etc/apt/sources.list.DIST"
512    fi
513    case $distri in
514                ubuntu)
515                        cat <<EOF >$chroot_dir/etc/apt/sources.list
516deb http://archive.ubuntu.com/ubuntu/ $release main restricted multiverse universe
517deb http://de.archive.ubuntu.com/ubuntu $release main restricted
518deb-src http://de.archive.ubuntu.com/ubuntu $release main restricted
519deb http://security.ubuntu.com/ubuntu/ $release-security restricted main multiverse universe
520
521deb http://archive.ubuntu.com/ubuntu/ $release-updates restricted main multiverse universe
522deb http://archive.ubuntu.com/ubuntu/ $release universe
523EOF
524                        ;;
525
526                debian)
527                        cat >$chroot_dir/etc/apt/sources.list <<EOF
528deb http://ftp.de.debian.org/debian/ $release main contrib non-free
529deb-src http://ftp.de.debian.org/debian/ $release main contrib non-free
530
531deb http://security.debian.org/ $release/updates main contrib non-free
532deb-src http://security.debian.org/ $release/updates main contrib non-free
533EOF
534
535                        case $release in
536                                etch)
537                                        $quiet || echo "deb http://www.backports.org/debian $release-backports main contrib non-free" \
538                        >>$chroot_dir/etc/apt/sources.list
539#                   echo "deb http://volatile.debian.org/debian-volatile $release/volatile main contrib non-free" \
540#                         >>$chroot_dir/etc/apt/sources.list
541                                        ;;
542                        esac
543                       
544                        case $architecture in
545                                linux32|32)
546                                        cat >>$chroot_dir/etc/apt/sources.list <<EOF
547
548#deb     http://www.gpsdrive.de/debian testing main
549#deb-src http://www.gpsdrive.de/debian testing main
550EOF
551                                        ;;
552                        esac
553                        ;;
554    esac
555
556    # ----------------------------------------------------------------------------------------
557        apt_get_update || return
558
559        case $distri in
560                ubuntu)
561                        case $release in
562                                maverick)
563                                        for command in \
564                                                "dpkg-divert --local --rename --add /sbin/initctl" \
565                                                "ls -l /sbin/initctl | grep true || ln -s /bin/true /sbin/initctl" \
566                                                ; do
567                                                { chroot $chroot_dir "$command" \
568                                                        2>&1  ;set_rc; } | debug_out $task_name "$command"
569                                                test "$?" -ne "0" && return 
570                                        done
571                                        ;;
572                        esac
573                       
574                        $debug && echo "---- apt-get install gnupg"
575                        command="apt-get install aptitude"
576                        task_name="apt-get_install_gpg"
577                        { chroot $chroot_dir apt-get --assume-yes --force-yes install gnupg \
578                                2>&1  ;set_rc; } | debug_out $task_name "$command"
579                        test "$?" -ne "0" && return 
580                ;;
581        esac
582       
583
584        $debug && echo "---- apt-get install dialog apt-utils"
585        command="apt-get install dialog apt-utils"
586        task_name="apt-get_install_dialog_apt-utils"
587        if ! chroot $chroot_dir aptitude --version >/dev/null ; then
588                { chroot $chroot_dir apt-get --quiet --assume-yes --force-yes install dialog apt-utils \
589                        2>1   ;set_rc; } | debug_out $task_name "$command"
590                test "$?" -ne "0" && return 
591        fi
592       
593        $debug && echo "---- apt-get install aptitude"
594        command="apt-get install aptitude"
595        task_name="apt-get_install_aptitude"
596        if ! chroot $chroot_dir aptitude --version >/dev/null ; then
597                { chroot $chroot_dir apt-get --quiet --assume-yes --force-yes install aptitude \
598                        2>1   ;set_rc; } | debug_out $task_name "$command"
599                test "$?" -ne "0" && return 
600        fi
601       
602    # ----------------------------------------------------------------------------------------
603    $debug && echo "--- $chroot -- User Setup for '$username'"
604    chroot $chroot_dir ls -ld /home/$username | grep "$username root" >/dev/null 2>/dev/null
605    user_dir_ok=$?
606    id $username >/dev/null
607    user_id_ok=$?
608    if [ ! $force -a "$user_id_ok" -eq 0 -a "$user_dir_ok" -eq 0 ] ; then
609                $debug && echo "--- $chroot -- User Setup OK"
610    else
611                $debug && echo ""
612                echo "--- $chroot -- Add User"
613                chroot $chroot_dir useradd $username
614                if [ "$?" -ne "0" ] ; then
615                        echo "WARNING: cannot add user $username"
616                fi
617                chroot $chroot_dir mkdir -p /home/$username
618                if [ "$?" -ne "0" ] ; then
619                        show_error "${LOGFILE}" "cannot create homedir for $username"
620                        false; return
621                fi
622               
623        # Show Chroot Type in bash Prompt
624                echo '#!/bin/bash' > $chroot_dir/home/$username/.profile
625        echo 'PS1="`version`:\u@\h:\w\$"' >>$chroot_dir/home/$username/.profile
626       
627        # set Permissions for user home
628        chroot $chroot_dir chown -R $username /home/$username
629        if [ "$?" -ne "0" ] ; then
630            show_error "${LOGFILE}" "cannot grant user $username access to its home"
631            false; return
632        fi
633       
634    fi
635       
636
637    # ----------------------------------------------------------------------------------------
638    if ! grep -q -e "$chroot " /etc/dchroot.conf; then
639                $debug && echo ""
640                $quiet || echo "-- $chroot ---------- dchroot.conf"
641                $quiet || echo "-- $chroot ---------- add to dchroot.conf"
642                echo "$chroot $chroot_dir ${personality}" >>/etc/dchroot.conf
643    fi
644
645    if ! sudo -u $username dchroot -c $chroot "id $username" >/dev/null 2>&1 ; then
646                sudo -u $username dchroot -c $chroot "id $username"
647                show_error "${LOGFILE}" "calling dchroot"
648                false; return 
649    fi
650       
651
652    # ----------------------------------------------------------------------------------------
653    # Add a version command inside the chroot
654    echo "#!/bin/bash"  >$chroot_dir/bin/version
655    echo "echo \"$chroot\"" >>$chroot_dir/bin/version
656    chmod a+rx $chroot_dir/bin/version
657
658    return 0
659}
660
661# ----------------------------------------------------------------------------------------
662function install_devtools {
663    $do_install_dev_tools ||  { true; return; }
664
665    $debug && echo ""
666    $quiet || echo "-- $chroot -------------------- Install development Tools"
667
668    development_tools="pbuilder subversion wget gnupg nano subversion vim cmake less"
669    development_tools="$development_tools devscripts debconf debhelper fakeroot aptitude"
670    development_tools="$development_tools debian-archive-keyring debian-edu-archive-keyring debian-keyring"
671    development_tools="$development_tools sun-java6-jdk openssh-server apt-utils dpatch"
672    case $distri in
673        debian)
674            development_tools="$development_tools python-central"
675            ;;
676        ubuntu)
677            development_tools="$development_tools ubuntu-keyring python-central"
678            ;;
679    esac
680
681    $debug && echo "Check For Old dependencies: 'apt-get -f  --quiet --force-yes --assume-yes install'"
682    task_name="apt-get_-f_install"
683    command="Install development tools: apt-get -f install"
684    { chroot $chroot_dir apt-get -f install \
685                2>&1  ;set_rc; } | debug_out $task_name "$command"
686    test "$?" -ne "0" && return
687       
688    $debug && echo "Check For Packages: '$development_tools'"
689    task_name="aptitude_install_developmenttools"
690    command="Install development tools: aptitude --assume-yes install $development_tools"
691    { chroot $chroot_dir aptitude --assume-yes install $development_tools \
692                2>&1  ;set_rc; } | debug_out $task_name "$command"
693    test "$?" -ne "0" && return
694    return 0
695}
696
697# -------- apt-get update ; apt-get dist-upgrade
698function apt_get_update {
699    $do_apt_get_update ||  { true; return; }
700        $debug && echo ""
701        command="apt-get update"
702        $quiet || echo "-- $chroot ---------- Update to newest version (update;dist-upgrade)"
703
704        test -d $chroot_dir ||  { echo "!!!!!! ERROR --------- $chroot DIR is missing"; return; }
705
706        chroot $chroot_dir which apt-get | grep -q / || { echo "-- $chroot is missing apt-get"; return; }
707        chroot $chroot_dir which dpkg    | grep -q / || { echo "-- $chroot is missing dpkg"; return; }
708
709        for command in \
710                "apt-get --quiet --force-yes update" \
711                "dpkg --configure -a --force-confnew" \
712                "apt-get --quiet --quiet --assume-yes --force-yes -f install" \
713                "apt-get --quiet --quiet --assume-yes --force-yes dist-upgrade" \
714                ; do 
715                $debug && echo "---- $command"
716                task_name="${command// }"
717                { chroot $chroot_dir $command \
718                        2>&1  ;set_rc; } | debug_out "$task_name" "$command"
719                test "$?" -ne "0" && return
720        done
721       
722    return 0
723}
724
725
726# ----------------------------------------------------------------------------------------
727#                                          Main
728# ----------------------------------------------------------------------------------------
729function main_func {
730
731    setup_variables ||  { true; return; }
732
733
734    mkdir -p ${log_dir}-old
735    old_log=${log_dir}-old/$chroot
736    echo $old_log
737    rm -rf  ${log_dir}-old/$chroot
738    test -d ${log_dir}/$chroot && mv -f ${log_dir}/$chroot ${log_dir}-old/
739    mkdir -p ${log_dir}/$chroot
740
741    setup_distri || return
742    install_devtools || return
743        apt_get_update || return
744
745    echo "Usage of chroot $chroot with"
746    echo "        dchroot -c $chroot"
747    true; return
748}
749
750
751# ----------------------------------------------------------------------------------------
752
753if $do_all_distributions ; then
754   
755    for architecture in 64 32 ; do 
756       
757        $quiet || echo "# -------------------- Debian"
758        distri=debian
759        for release in squeeze lenny wheezy ; do 
760            main_func || echo "Incomplete $distri-$release-$architecture"
761        done
762
763        $quiet || echo "# -------------------- Ubuntu"
764        distri=ubuntu
765    #for release in dapper feisty  gutsy hardy intrepid jaunty; do
766        for release in  hardy karmic dapper lucid maverick natty ; do
767            main_func  || echo "Incomplete $distri-$release-$architecture"
768        done
769
770        if false; then # TODO: Not YET Implemented
771            echo "# SuSe"
772            distri=suse
773            for release in 11.1 11.0 10.3 10.2 ; do
774                main_func || echo "Incomplete $distri-$release-$architecture"
775            done 
776        fi
777    done
778   
779else
780    main_func || echo "Incomplete $distri-$release-$architecture"
781fi
782
783
784if $debug ; then
785    echo "Finished `date`"
786fi
787
Note: See TracBrowser for help on using the repository browser.