source: ubiquity/trunk/fuentes/d-i/source/base-installer/library.sh @ 3069

Last change on this file since 3069 was 3069, checked in by kbut, 3 years ago

Update from upstream

File size: 28.4 KB
Line 
1# waypoint vars
2WAYPOINTS=""
3NUM_STEPS=0
4
5# progress bar vars
6export PB_POSITION=0
7export PB_WAYPOINT_LENGTH=0
8
9# used for setting up apt
10PROTOCOL=
11MIRROR=
12DIRECTORY=
13COMPONENTS=
14DISTRIBUTION=
15
16# used by kernel installation code
17KERNEL=
18KERNEL_LIST=/tmp/available_kernels.txt
19KERNEL_NAME=`udpkg --print-os`
20case $KERNEL_NAME in
21        linux)          KERNEL_MAJOR="$(uname -r | cut -d - -f 1 | cut -d . -f 1,2)" ;;
22        kfreebsd)       KERNEL_MAJOR="$(uname -r | cut -d . -f 1)" ;;
23        hurd)           KERNEL_NAME=gnumach ; KERNEL_MAJOR="$(uname -v | cut -d ' ' -f 2 | cut -d . -f 1)" ;;
24esac
25KERNEL_VERSION="$(uname -r | cut -d - -f 1)"
26KERNEL_ABI="$(uname -r | cut -d - -f 1,2)"
27KERNEL_FLAVOUR=$(uname -r | cut -d - -f 3-)
28MACHINE="$(uname -m)"
29NUMCPUS=$(cat /var/numcpus 2>/dev/null) || true
30CPUINFO=/proc/cpuinfo
31OFCPUS=/proc/device-tree/cpus/
32
33# files and directories
34APT_SOURCES=/target/etc/apt/sources.list
35APT_CONFDIR=/target/etc/apt/apt.conf.d
36IT_CONFDIR=/target/etc/initramfs-tools/conf.d
37DPKG_CONFDIR=/target/etc/dpkg/dpkg.cfg.d
38
39IFS_ORIG="$IFS"
40NL="
41"
42
43TITLE_TEMPLATE=debian-installer/bootstrap-base/title
44
45log() {
46        logger -t base-installer "$@"
47}
48error() {
49        log "error: $*"
50}
51warning() {
52        log "warning: $*"
53}
54info() {
55        log "info: $*"
56}
57
58exit_error() {
59        error "exiting on error $1"
60        db_progress stop
61        db_input critical $1 || [ $? -eq 30 ]
62        db_go
63        exit 1
64}
65
66waypoint () {
67        WAYPOINTS="$WAYPOINTS $1:$2"
68        NUM_STEPS=$(($NUM_STEPS + $1)) || true
69}
70
71run_waypoints () {
72        db_progress START 0 $NUM_STEPS $1
73        for item in $WAYPOINTS; do
74                PB_WAYPOINT_LENGTH=$(echo $item | cut -d: -f 1)
75                WAYPOINT=$(echo $item | cut -d: -f 2)
76                # Not all of the section headers need exist.
77                db_progress INFO "base-installer/section/$WAYPOINT" || true
78                eval $WAYPOINT
79                PB_POSITION=$(($PB_POSITION + $PB_WAYPOINT_LENGTH)) || true
80                db_progress SET $PB_POSITION
81        done
82        db_progress STOP
83}
84
85update_progress () {
86        # Updates the progress bar to a new position within the space allocated
87        # for the current waypoint.
88        NW_POS=$(($PB_POSITION + $PB_WAYPOINT_LENGTH * $1 / $2))
89        db_progress SET $NW_POS
90}
91
92check_target () {
93        # Make sure something is mounted on the target.
94        # Partconf causes the latter format.
95        if [ -e /proc/mounts ] && \
96           ! grep -q '/target ' /proc/mounts && \
97           ! grep -q '/target/ ' /proc/mounts; then
98                exit_error base-installer/no_target_mounted
99        fi
100
101        # Warn about installation over an existing unix.
102        if [ -e /target/bin/sh -o -L /target/bin/sh ]; then
103                warning "attempting to install to unclean target"
104                db_capb ""
105                db_input high base-installer/use_unclean_target || true
106                db_go || exit 10
107                db_capb backup
108                db_get base-installer/use_unclean_target
109                if [ "$RET" = false ]; then
110                        db_reset base-installer/use_unclean_target
111                        exit_error base-installer/unclean_target_cancel
112                fi
113                db_reset base-installer/use_unclean_target
114        fi
115
116        # Undo dev bind mounts for idempotency.
117        if grep -qE '^[^ ]+ /target/dev' /proc/mounts; then
118                umount /target/dev
119        fi
120        # Unmount /dev/.static/dev if mounted on same device as /target
121        mp_stdev=$(grep -E '^[^ ]+ /dev/\.static/dev' /proc/mounts | \
122                   cut -d" " -f1)
123        if [ "$mp_stdev" ] && grep -q "^$mp_stdev /target " /proc/mounts; then
124                umount /dev/.static/dev
125        fi
126}
127
128setup_dev_linux () {
129        # Ensure static device nodes created during install are preserved
130        # Tests in MAKEDEV require this is done in the D-I environment
131        mkdir -p /dev/.static/dev
132        chmod 700 /dev/.static/
133        mount --bind /target/dev /dev/.static/dev
134        # Mirror device nodes in D-I environment to target
135        mount --bind /dev /target/dev/
136}
137
138setup_dev_kfreebsd() {
139        mount -t devfs devfs /target/dev
140}
141
142setup_dev() {
143        case "$OS" in
144                linux) setup_dev_linux ;;
145                kfreebsd) setup_dev_kfreebsd ;;
146                hurd) : ;;
147                *) warning "setup_dev called for an unknown OS ($OS)." ;;
148        esac   
149}
150
151configure_apt_preferences () {
152        [ ! -d "$APT_CONFDIR" ] && mkdir -p "$APT_CONFDIR"
153
154        # Don't install Recommends during base-installer
155        cat >$APT_CONFDIR/00InstallRecommends <<EOT
156APT::Install-Recommends "false";
157EOT
158
159        # Make apt trust Debian CDs. This is not on by default (we think).
160        # This will be left in place on the installed system.
161        cat > $APT_CONFDIR/00trustcdrom <<EOT
162APT::Authentication::TrustCDROM "true";
163EOT
164
165        # Avoid clock skew causing gpg verification issues.
166        # This file will be left in place until the end of the install.
167        cat > $APT_CONFDIR/00IgnoreTimeConflict << EOT
168Acquire::gpgv::Options { "--ignore-time-conflict"; };
169EOT
170
171        if db_get debian-installer/allow_unauthenticated && [ "$RET" = true ]; then
172                # This file will be left in place until the end of the install.
173                cat > $APT_CONFDIR/00AllowUnauthenticated << EOT
174APT::Get::AllowUnauthenticated "true";
175Aptitude::CmdLine::Ignore-Trust-Violations "true";
176EOT
177        fi
178
179        if [ "$PROTOCOL" = https ] && db_get debian-installer/allow_unauthenticated_ssl && [ "$RET" = true ]; then
180                # This file will be left in place on the installed system.
181                cat > $APT_CONFDIR/00AllowUnauthenticatedSSL << EOT
182Acquire::https::Verify-Host "false";
183Acquire::https::Verify-Peer "false";
184EOT
185        fi
186
187        [ ! -d "$DPKG_CONFDIR" ] && mkdir -p "$DPKG_CONFDIR"
188
189        # Disable all syncing; it's unnecessary in an installation context,
190        # and can slow things down quite a bit.
191        # This file will be left in place until the end of the install.
192        cat > $DPKG_CONFDIR/force-unsafe-io <<EOT
193force-unsafe-io
194EOT
195}
196
197final_apt_preferences () {
198        # From here on install Recommends as configured
199        db_get base-installer/install-recommends
200        if [ "$RET" = true ]; then
201                rm -f $APT_CONFDIR/00InstallRecommends
202        fi
203}
204
205apt_update () {
206        log-output -t base-installer chroot /target apt-get update \
207                || apt_update_failed=$?
208
209        if [ "$apt_update_failed" ]; then
210                warning "apt update failed: $apt_update_failed"
211        fi
212}
213
214install_extra () {
215        local IFS
216        info "Installing queued packages into /target/."
217
218        if [ -f /var/lib/apt-install/queue ]; then
219                # We need to install these one by one in case one fails.
220                PKG_COUNT=$(cat /var/lib/apt-install/queue | wc -w)
221                CURR_PKG=0
222                IFS="$NL"
223                for LINE in $(cat /var/lib/apt-install/queue); do
224                        IFS="$IFS_ORIG"
225                        PKG=${LINE%% *}
226                        OPTS=$(echo "$LINE" | sed "s/$PKG *//")
227                        db_subst base-installer/section/install_extra_package SUBST0 "$PKG"
228                        db_progress INFO base-installer/section/install_extra_package
229
230                        log-output -t base-installer apt-install $OPTS $PKG || \
231                                warning "Failed to install $PKG into /target/: $?"
232
233                        # Advance progress bar within space allocated for install_extra
234                        CURR_PKG=$(($CURR_PKG + 1))
235                        update_progress $CURR_PKG $PKG_COUNT
236                done
237        fi
238}
239
240pre_install_hooks () {
241        # avoid apt-install installing things; apt is not configured yet
242        rm -f $APT_SOURCES
243
244        partsdir="/usr/lib/base-installer.d"
245        if [ -d "$partsdir" ]; then
246                for script in `ls "$partsdir"/* 2>/dev/null`; do
247                        base=$(basename $script | sed 's/[0-9]*//')
248                        if ! db_progress INFO base-installer/progress/$base; then
249                                db_subst base-installer/progress/fallback SCRIPT "$base"
250                                db_progress INFO base-installer/progress/fallback
251                        fi
252
253                        if [ -x "$script" ] ; then
254                                # be careful to preserve exit code
255                                if log-output -t base-installer "$script"; then
256                                        :
257                                else
258                                        warning "$script returned error code $?"
259                                fi
260                        else
261                                error "Unable to execute $script"
262                        fi
263                done
264        fi
265}
266
267post_install_hooks () {
268        # locales will now be installed, so unset
269        unset IT_LANG_OVERRIDE
270
271        partsdir="/usr/lib/post-base-installer.d"
272        if [ -d "$partsdir" ]; then
273                scriptcount=`ls "$partsdir"/* 2>/dev/null | wc -l`
274                scriptcur=0
275                for script in "$partsdir"/*; do
276                        base="$(basename "$script" | sed 's/[0-9]*//')"
277                        if ! db_progress INFO base-installer/progress/$base && \
278                           ! db_progress INFO finish-install/progress/$base; then
279                                db_subst base-installer/progress/fallback SCRIPT "$base"
280                                db_progress INFO base-installer/progress/fallback
281                        fi
282
283                        if [ -x "$script" ]; then
284                                # be careful to preserve exit code
285                                if log-output -t base-installer "$script"; then
286                                        :
287                                else
288                                        warning "$script returned error code $?"
289                                fi
290                        else
291                                error "Unable to execute $script"
292                        fi
293
294                        scriptcur="$(($scriptcur + 1))"
295                        update_progress "$scriptcur" "$scriptcount"
296                done
297        fi
298}
299
300get_mirror_info () {
301        if [ -f /cdrom/.disk/base_installable ]; then
302                if db_get cdrom/codename && [ "$RET" ] ; then
303                        DISTRIBUTION=$RET
304                else
305                        exit_error base-installer/no_codename
306                fi
307
308                PROTOCOL=file
309                MIRROR=""
310                DIRECTORY="/cdrom/"
311                if [ -s /cdrom/.disk/base_components ]; then
312                        if db_get apt-setup/restricted && [ "$RET" = false ]; then
313                                COMPONENTS=`grep -v '^#' /cdrom/.disk/base_components | egrep -v '^(restricted|multiverse)$' | tr '\n' , | sed 's/,$//'`
314                        else
315                                COMPONENTS=`grep -v '^#' /cdrom/.disk/base_components | tr '\n' , | sed 's/,$//'`
316                        fi
317                else
318                        COMPONENTS="*"
319                fi
320
321                # Sanity check: an error reading /cdrom/.disk/base_components can
322                # cause ugly errors in debootstrap because $COMPONENTS will be empty
323                if [ -z "$COMPONENTS" ]; then
324                        exit_error base-installer/cannot_install
325                fi
326        else
327                if db_get mirror/codename && [ "$RET" ] ; then
328                        DISTRIBUTION=$RET
329                else
330                        exit_error base-installer/no_codename
331                fi
332
333                mirror_error=""
334
335                db_get mirror/protocol || mirror_error=1
336                PROTOCOL="$RET"
337
338                db_get mirror/$PROTOCOL/hostname || mirror_error=1
339                MIRROR="$RET"
340
341                db_get mirror/$PROTOCOL/directory || mirror_error=1
342                DIRECTORY="$RET"
343
344                if db_get apt-setup/restricted && [ "$RET" = false ]; then
345                        COMPONENTS="main"
346                else
347                        COMPONENTS="main,restricted"
348                fi
349
350                if [ "$mirror_error" = 1 ] || [ -z "$PROTOCOL" ] || [ -z "$MIRROR" ]; then
351                        exit_error base-installer/cannot_install
352                fi
353        fi
354}
355
356kernel_update_list () {
357        # Use 'uniq' to avoid listing the same kernel more then once
358        (set +e;
359        # Hack to get the metapackages in the right order; should be
360        # replaced by something better at some point.
361        chroot /target apt-cache search ^linux-signed- | grep '^linux-signed-\(generic\|server\|virtual\|preempt\|rt\|xen\)';
362        chroot /target apt-cache search ^linux- | grep '^linux-\(amd64\|686\|k7\|generic\|server\|virtual\|preempt\|rt\|xen\|power\|cell\|omap\|omap4\|keystone\)';
363        chroot /target apt-cache search ^linux-signed-image- | grep -v '^linux-signed-image-[2-9]\.';
364        chroot /target apt-cache search ^linux-image- | grep -v '^linux-image-[2-9]\.';
365        chroot /target apt-cache search '^linux-signed-image-[2-9]\.' | sort -r;
366        chroot /target apt-cache search '^linux-image-[2-9]\.' | sort -r;
367        chroot /target apt-cache search ^kfreebsd-image;
368        chroot /target apt-cache search ^gnumach-image) | \
369        cut -d" " -f1 | uniq > "$KERNEL_LIST.unfiltered"
370        kernels=`< "$KERNEL_LIST.unfiltered" tr '\n' ' ' | sed -e 's/ $//'`
371        for candidate in $kernels; do
372                if [ -n "$FLAVOUR" ]; then
373                        if arch_check_usable_kernel "$candidate" "$FLAVOUR"; then
374                                echo "$candidate"
375                                info "kernel $candidate usable on $FLAVOUR"
376                        else
377                                info "kernel $candidate not usable on $FLAVOUR"
378                        fi
379                else
380                        info "could not determine kernel flavour"
381                fi
382        done > "$KERNEL_LIST"
383}
384
385kernel_present () {
386        [ "$1" ] || return 1
387        grep -q "^$1\$" $KERNEL_LIST
388}
389
390pick_kernel () {
391        kernel_update_list
392       
393        db_settitle "$TITLE_TEMPLATE"
394
395        # Check for overrides
396        if db_get base-installer/kernel/override-image && [ "$RET" ]; then
397                if kernel_present "$RET"; then
398                        KERNEL="$RET"
399                        info "Using kernel '$KERNEL'"
400                        db_set base-installer/kernel/image "$KERNEL"
401                        return
402                else
403                        warning "Kernel override '$RET' not present"
404                fi
405        fi
406
407        # For now, only present kernels we believe to be usable. We may have
408        # to rethink this later, but if there are no usable kernels it
409        # should be accompanied by an error message. The default must still
410        # be usable if possible.
411        kernels=`< "$KERNEL_LIST" tr '\n' ',' | sed -e 's/,$//'`
412
413        info "Found kernels '$kernels'"
414
415        if [ "$kernels" ]; then
416                db_subst base-installer/kernel/image KERNELS "$kernels"
417        else
418                db_input high base-installer/kernel/skip-install || true
419                db_go || true
420                db_get base-installer/kernel/skip-install
421                if [ "$RET" != true ]; then
422                        exit_error base-installer/kernel/no-kernels-found
423                else
424                        db_set base-installer/kernel/image "none"
425                        KERNEL=none
426                        return
427                fi
428        fi
429
430        # Allow for preseeding first, try to determine a default next.
431        db_get base-installer/kernel/image
432        if kernel_present "$RET" || [ "$RET" = none ]; then
433                KERNEL="$RET"
434                info "preseeded/current kernel: $KERNEL"
435        else
436                # Unset seen flag in case we had an incorrect preseeded value.
437                db_fset base-installer/kernel/image seen false || true
438
439                if [ -n "$FLAVOUR" ]; then
440                        arch_kernel="$(arch_get_kernel "$FLAVOUR")"
441
442                        # Hack to support selection of meta packages with a postfix
443                        # added to the normal name (for updated kernels in stable).
444                        if db_get base-installer/kernel/altmeta && [ "$RET" ]; then
445                                arch_kernel="$(echo "$arch_kernel" | \
446                                        sed "s/$/-$RET/"; \
447                                        echo "$arch_kernel")"
448                        fi
449                else
450                        arch_kernel=""
451                fi
452
453                got_arch_kernel=
454                if [ "$arch_kernel" ]; then
455                        info "arch_kernel candidates: $arch_kernel"
456                        # Walk through recommended list for this architecture in order.
457                        for candidate in $arch_kernel; do
458                                if kernel_present "$candidate"; then
459                                        info "arch_kernel: $candidate (present)"
460                                        KERNEL="$candidate"
461                                        break
462                                else
463                                        info "arch_kernel: $candidate (absent)"
464                                fi
465                        done
466                fi
467        fi
468
469        KERNEL_PRIO=high
470        if kernel_present "$KERNEL" || [ "$KERNEL" = none ]; then
471                # Current selection is available
472                KERNEL_PRIO=medium
473        else
474                # No recommendations available; try to guess.
475                kernels="$(echo "$kernels" | sed 's/,/\n/g')"
476
477                # Take the first on the list. kernel_update_list orders the
478                # list in such a way that the metapackages always come
479                # first, in the right order.
480                KERNEL=$(echo "$kernels" | head -n 1)
481        fi
482
483        if [ "$KERNEL" ]; then
484                db_set base-installer/kernel/image "$KERNEL"
485        else
486                # We have no reasonable default at all.
487                KERNEL_PRIO=critical
488        fi
489
490        db_input $KERNEL_PRIO base-installer/kernel/image || [ $? -eq 30 ]
491        if ! db_go; then
492                db_progress stop
493                exit 10
494        fi
495
496        db_get base-installer/kernel/image
497        KERNEL=$RET
498        info "Using kernel '$KERNEL'"
499}
500
501install_kernel_linux () {
502        if [ "$KERNEL" = none ]; then
503                info "Not installing any kernel"
504                return
505        fi
506
507        target_kernel_major="$(echo "$KERNEL" | sed 's/^kernel-image-//; s/^linux-\(\|signed-\)image-//; s/-.*//' | cut -d . -f 1,2)"
508        case $target_kernel_major in
509                2.?)    ;;
510                [3-9].*)
511                        # As far as our debconf templates are concerned,
512                        # this is essentially 2.6.
513                        target_kernel_major=2.6
514                        ;;
515                *)
516                        # something went wrong; use major version of
517                        # installation kernel
518                        target_kernel_major="$(uname -r | cut -d . -f 1,2)"
519                        ;;
520        esac
521
522        do_initrd=no
523        if db_get "base-installer/kernel/linux/initrd-$target_kernel_major"; then
524                if [ "$RET" = true ]; then
525                        do_initrd=yes
526                fi
527        # Note: this template currently does not exist
528        elif db_get base-installer/kernel/linux/initrd; then
529                if [ "$RET" = true ]; then
530                        do_initrd=yes
531                fi
532        else
533                warning "Failed to get debconf answer 'base-installer/kernel/linux/initrd'."
534                do_initrd=yes
535        fi
536
537        if db_get base-installer/kernel/linux/link_in_boot ; then
538                if [ "$RET" = "true" ]; then
539                        link_in_boot=yes
540                else
541                        link_in_boot=no
542                fi
543        else
544                warning "Failed to get debconf answer 'base-installer/kernel/linux/link_in_boot'."
545                link_in_boot=no
546        fi
547
548        # Create configuration file for kernel-package
549        if [ -f /target/etc/kernel-img.conf ]; then
550                # Backup old kernel-img.conf
551                mv /target/etc/kernel-img.conf /target/etc/kernel-img.conf.$$
552        fi
553
554        info "Setting do_initrd='$do_initrd'."
555        info "Setting link_in_boot='$link_in_boot'."
556        cat > /target/etc/kernel-img.conf <<EOF
557# Kernel image management overrides
558# See kernel-img.conf(5) for details
559do_symlinks = yes
560do_bootloader = no
561do_initrd = $do_initrd
562link_in_boot = $link_in_boot
563EOF
564
565        rd_generator=""
566        if [ "$do_initrd" = yes ]; then
567                rd_generator=initramfs-tools
568
569                # initramfs-tools needs busybox-initramfs pre-installed (and
570                # only recommends it)
571                if ! log-output -t base-installer apt-install busybox-initramfs; then
572                        db_subst base-installer/kernel/failed-package-install PACKAGE busybox-initramfs
573                        exit_error base-installer/kernel/failed-package-install
574                fi
575
576                # Make sure the ramdisk creation tool is installed before we
577                # change its configuration
578                db_subst base-installer/section/install_kernel_package SUBST0 "$rd_generator"
579                db_progress INFO base-installer/section/install_kernel_package
580                if ! log-output -t base-installer apt-install "$rd_generator"; then
581                        db_subst base-installer/kernel/failed-package-install PACKAGE "$rd_generator"
582                        exit_error base-installer/kernel/failed-package-install
583                fi
584
585                # Add modules that have been queued for inclusion in the initrd
586                FIRSTMODULE=1
587                for QUEUEFILE in /var/lib/register-module/*.initrd; do
588                        [ ! -e $QUEUEFILE ] && break
589                        MODULE=$(basename $QUEUEFILE ".initrd")
590                        addmodule_initramfs_tools "$MODULE" $FIRSTMODULE
591                        rm $QUEUEFILE
592                        FIRSTMODULE=0
593                done
594
595                # Select and set driver inclusion policy for initramfs-tools
596                if db_get base-installer/initramfs-tools/driver-policy && \
597                   [ -z "$RET" ]; then
598                        # Get default for architecture
599                        db_get base-installer/kernel/linux/initramfs-tools/driver-policy
600                        db_set base-installer/initramfs-tools/driver-policy "$RET"
601                fi
602                db_settitle "$TITLE_TEMPLATE"
603                db_input medium base-installer/initramfs-tools/driver-policy || true
604                if ! db_go; then
605                        db_progress stop
606                        exit 10
607                fi
608
609                db_get base-installer/initramfs-tools/driver-policy
610                if [ "$RET" != most ]; then
611                        cat > $IT_CONFDIR/driver-policy <<EOF
612# Driver inclusion policy selected during installation
613# Note: this setting overrides the value set in the file
614# /etc/initramfs-tools/initramfs.conf
615MODULES=$RET
616EOF
617                fi
618        else
619                info "Not installing an initrd generator."
620        fi
621
622        # Install any extra (kernel related) packages
623        EXTRAS=
624        if db_get "base-installer/kernel/linux/extra-packages-$target_kernel_major"; then
625                EXTRAS="$EXTRAS $RET"
626        fi
627        if db_get base-installer/kernel/linux/extra-packages; then
628                EXTRAS="$EXTRAS $RET"
629        fi
630        for package in $EXTRAS; do
631                info "Installing $package."
632                db_subst base-installer/section/install_kernel_package SUBST0 "$package"
633                db_progress INFO base-installer/section/install_kernel_package
634                # The package might not exist; don't worry about it.
635                log-output -t base-installer apt-install "$package" || true
636        done
637
638        if [ "$do_initrd" = yes ]; then
639                # Set up a default resume partition.
640                case $rd_generator in
641                    initramfs-tools)
642                        resumeconf=$IT_CONFDIR/resume
643                        ;;
644                    *)
645                        resumeconf=
646                        ;;
647                esac
648                resume_devfs="$(get_resume_partition)" || resume_devfs=
649                if [ "$resume_devfs" ] && [ -e "$resume_devfs" ]; then
650                        resume="$(mapdevfs "$resume_devfs")" || resume=
651                else
652                        resume=
653                fi
654                if [ "$resume" ] && ! echo "$resume" | grep -q "^/dev/mapper/"; then
655                        resume_uuid="$(block-attr --uuid "$resume" || true)"
656                        if [ "$resume_uuid" ]; then
657                                resume="UUID=$resume_uuid"
658                        fi
659                fi
660                if [ -n "$resumeconf" ] && [ "$resume" ]; then
661                        if [ -f $resumeconf ] ; then
662                                sed -e "s@^#* *RESUME=.*@RESUME=$resume@" < $resumeconf > $resumeconf.new &&
663                                        mv $resumeconf.new $resumeconf
664                        else
665                                echo "RESUME=$resume" >> $resumeconf
666                        fi
667                fi
668
669                # Set PReP root partition
670                if [ "$ARCH" = powerpc ] && [ "$SUBARCH" = prep ] && \
671                   [ "$rd_generator" = initramfs-tools ]; then
672                        prepconf=$IT_CONFDIR/prep-root
673                        rootpart_devfs=$(mount | grep "on /target " | cut -d' ' -f1)
674                        rootpart=$(mapdevfs $rootpart_devfs)
675                        if [ -f $prepconf ] && grep -q "^#* *ROOT=" $prepconf; then
676                                sed -e "s@^#* *ROOT=.*@ROOT=$rootpart@" < $prepconf > $prepconf.new &&
677                                        mv $prepconf.new $prepconf
678                        else
679                                echo "ROOT=$rootpart" >> $prepconf
680                        fi
681                fi
682        fi
683
684        # Advance progress bar to 30% of allocated space for install_kernel_linux
685        update_progress 30 100
686
687        # Install the kernel
688        db_subst base-installer/section/install_kernel_package SUBST0 "$KERNEL"
689        db_progress INFO base-installer/section/install_kernel_package
690        log-output -t base-installer apt-install "$KERNEL" || kernel_install_failed=$?
691
692        db_get base-installer/kernel/headers
693        if [ "$RET" = true ]; then
694                # Advance progress bar to 80% of allocated space for install_kernel_linux
695                update_progress 80 100
696
697                # Install kernel headers if possible
698                HEADERS="$(echo "$KERNEL" | sed 's/linux\(-image\|\)/linux-headers/')"
699                db_subst base-installer/section/install_kernel_package SUBST0 "$HEADERS"
700                db_progress INFO base-installer/section/install_kernel_package
701                log-output -t base-installer apt-install "$HEADERS" || true
702        fi
703
704        db_get base-installer/kernel/backports-modules
705        if [ "$RET" ]; then
706                BACKPORTS_MODULES="$RET"
707
708                # Advance progress bar to 85% of allocated space for install_kernel_linux
709                update_progress 85 100
710
711                # Install kernel backports modules if possible
712                for backports_module in $BACKPORTS_MODULES; do
713                        LBM="$(echo "$KERNEL" | sed "s/linux\\(-image\\|\\)/linux-backports-modules-$backports_module-$DISTRIBUTION/")"
714                        db_subst base-installer/section/install_kernel_package SUBST0 "$LBM"
715                        db_progress INFO base-installer/section/install_kernel_package
716                        log-output -t base-installer apt-install "$LBM" || true
717                done
718        fi
719
720        # Advance progress bar to 90% of allocated space for install_linux
721        update_progress 90 100
722
723        if [ -f /target/etc/kernel-img.conf.$$ ]; then
724                # Revert old kernel-img.conf
725                mv /target/etc/kernel-img.conf.$$ /target/etc/kernel-img.conf
726        fi
727
728        if [ "$kernel_install_failed" ]; then
729                db_subst base-installer/kernel/failed-install KERNEL "$KERNEL"
730                exit_error base-installer/kernel/failed-install
731        fi
732}
733
734get_resume_partition () {
735        biggest_size=0
736        biggest_partition=
737        while read filename type size other; do
738                if [ "$type" != partition ]; then
739                        continue
740                fi
741                if [ ! -e "$filename" ]; then
742                        continue
743                fi
744                if [ "${filename#/dev/ramzswap}" != "$filename" ]; then
745                        continue
746                fi
747                if [ "$size" -gt "$biggest_size" ]; then
748                        biggest_size="$size"
749                        biggest_partition="$filename"
750                fi
751        done < /proc/swaps
752        echo "$biggest_partition"
753}
754
755addmodule_easy () {
756        if [ -f "$CFILE" ]; then
757                if [ "$2" = 1 ]; then
758                        echo -e "\n# Added by Debian Installer" >>$CFILE
759                fi
760                echo "$1" >> $CFILE
761        fi
762}
763
764addmodule_initramfs_tools () {
765        CFILE='/target/etc/initramfs-tools/modules'
766        addmodule_easy "$1" "$2"
767}
768
769install_kernel_kfreebsd() {
770        if [ "$KERNEL" = none ]; then
771                info "Not installing any kernel"
772                return
773        fi
774
775        # Create configuration file for kernel-package
776        if [ -f /target/etc/kernel-img.conf ]; then
777                # Backup old kernel-img.conf
778                mv /target/etc/kernel-img.conf /target/etc/kernel-img.conf.$$
779        fi
780
781        cat > /target/etc/kernel-img.conf <<EOF
782# Kernel image management overrides
783# See kernel-img.conf(5) for details
784do_symlinks = no
785EOF
786        # Advance progress bar to 10% of allocated space for install_kfreebsd
787        update_progress 10 100
788
789        # Install the kernel
790        db_subst base-installer/section/install_kernel_package SUBST0 "$KERNEL"
791        db_progress INFO base-installer/section/install_kernel_package
792        log-output -t base-installer apt-install "$KERNEL" || kernel_install_failed=$?
793
794        # Advance progress bar to 90% of allocated space for install_kfreebsd
795        update_progress 90 100
796
797        if [ -f /target/etc/kernel-img.conf.$$ ]; then
798                # Revert old kernel-img.conf
799                mv /target/etc/kernel-img.conf.$$ /target/etc/kernel-img.conf
800        fi
801
802        if [ "$kernel_install_failed" ]; then
803                db_subst base-installer/kernel/failed-install KERNEL "$KERNEL"
804                exit_error base-installer/kernel/failed-install
805        fi
806}
807
808install_kernel_hurd() {
809        if [ "$KERNEL" = none ]; then
810                info "Not installing any kernel"
811                return
812        fi
813
814        # Create configuration file for kernel-package
815        if [ -f /target/etc/kernel-img.conf ]; then
816                # Backup old kernel-img.conf
817                mv /target/etc/kernel-img.conf /target/etc/kernel-img.conf.$$
818        fi
819
820        cat > /target/etc/kernel-img.conf <<EOF
821# Kernel image management overrides
822# See kernel-img.conf(5) for details
823do_symlinks = no
824EOF
825        # Advance progress bar to 10% of allocated space for install_kfreebsd
826        update_progress 10 100
827
828        # Install the kernel
829        db_subst base-installer/section/install_kernel_package SUBST0 "$KERNEL"
830        db_progress INFO base-installer/section/install_kernel_package
831        log-output -t base-installer apt-install "$KERNEL" || kernel_install_failed=$?
832
833        # Advance progress bar to 90% of allocated space for install_kernel_hurd
834        update_progress 90 100
835
836        if [ -f /target/etc/kernel-img.conf.$$ ]; then
837                # Revert old kernel-img.conf
838                mv /target/etc/kernel-img.conf.$$ /target/etc/kernel-img.conf
839        fi
840
841        if [ "$kernel_install_failed" ]; then
842                db_subst base-installer/kernel/failed-install KERNEL "$KERNEL"
843                exit_error base-installer/kernel/failed-install
844        fi
845}
846
847install_kernel() {
848        case "$OS" in
849                linux) install_kernel_linux ;;
850                kfreebsd) install_kernel_kfreebsd ;;
851                hurd) install_kernel_hurd ;;
852                *) warning "install_kernel called for an unknown OS ($OS)." ;;
853        esac   
854}
855
856
857# Assumes the file protocol is only used for CD (image) installs
858configure_apt () {
859        if [ "$PROTOCOL" = file ]; then
860                local tdir=/target/media$DIRECTORY
861                rm -f /var/lib/install-cd.id
862
863                # Let apt inside the chroot see the cdrom
864                umount $tdir 2>/dev/null || true
865                if [ ! -e $tdir ]; then
866                        mkdir -p $tdir
867                fi
868
869                # The bind mount is left mounted, for future apt-install
870                # calls to use.
871                case "$OS" in
872                        linux)
873                        if ! mount -o bind $DIRECTORY $tdir; then
874                                warning "failed to bind mount $tdir"
875                        fi
876                        ;;
877                        kfreebsd)
878                        if ! mount -t nullfs $DIRECTORY $tdir ; then
879                                warning "failed to bind mount $tdir"
880                        fi
881                        ;;
882                        hurd)
883                        if ! mount -t firmlink $DIRECTORY $tdir > /dev/null 2>&1 ; then
884                                warning "failed to bind mount $tdir"
885                        fi
886                        ;;
887                        *)
888                        warning "configure_apt called with unknown OS ($OS)."
889                        ;;
890                esac
891
892                # Define the mount point for apt-cdrom
893                cat > $APT_CONFDIR/00CDMountPoint << EOT
894Acquire::cdrom {
895  mount "/media/cdrom";
896};
897Dir::Media::MountPath "/media/cdrom";
898EOT
899                # Make apt-cdrom and apt not unmount/mount CD-ROMs;
900                # needed to support CD images (hd-media installs).
901                # This file will be left in place until the end of the
902                # install for hd-media installs, but is removed again
903                # during apt-setup for installs using real CD/DVDs.
904                cat > $APT_CONFDIR/00NoMountCDROM << EOT
905APT::CDROM::NoMount "true";
906Acquire::cdrom {
907  "/media/cdrom/" {
908    Mount  "true";
909    UMount "true";
910  };
911  AutoDetect "false";
912}
913EOT
914
915                # Scan CD-ROM or CD image; start with clean sources.list
916                # Prevent apt-cdrom from prompting
917                : > $APT_SOURCES
918                if ! log-output -t base-installer \
919                     chroot /target apt-cdrom add </dev/null; then
920                        error "error while running apt-cdrom"
921                fi
922                if db_get apt-setup/restricted && [ "$RET" = false ]; then
923                        sed -i 's/ \(restricted\|multiverse\)//g' $APT_SOURCES
924                fi
925        else
926                # sources.list uses space to separate the components, not comma
927                COMPONENTS=$(echo $COMPONENTS | tr , " ")
928                APTSOURCE="$PROTOCOL://$MIRROR$DIRECTORY"
929
930                echo "deb $APTSOURCE $DISTRIBUTION $COMPONENTS" > $APT_SOURCES
931                echo "deb $APTSOURCE $DISTRIBUTION-updates $COMPONENTS" >> $APT_SOURCES
932                if db_get apt-setup/security_host; then
933                        SECMIRROR="$RET"
934                else
935                        SECMIRROR="$MIRROR"
936                fi
937                if db_get apt-setup/security_path; then
938                        SECDIRECTORY="$RET"
939                else
940                        SECDIRECTORY=/ubuntu
941                fi
942               
943                if [ "$MIRROR" = ports.ubuntu.com ]; then
944                        # Awful Ubuntu-specific hack. *-security suites for ports
945                        # architectures aren't available on security.ubuntu.com, only on
946                        # ports.ubuntu.com.
947                        SECMIRROR="$MIRROR"
948                        SECDIRECTORY="$DIRECTORY"
949                fi
950               
951                echo "deb $PROTOCOL://$SECMIRROR$SECDIRECTORY $DISTRIBUTION-security $COMPONENTS" >> $APT_SOURCES
952                if db_get apt-setup/proposed && [ "$RET" = true ]; then
953                        echo "deb $APTSOURCE $DISTRIBUTION-proposed $COMPONENTS" >> $APT_SOURCES
954                fi
955                if db_get apt-setup/overlay && [ "$RET" = true ]; then
956                        db_get apt-setup/overlay_host
957                        overlay_host="$RET"
958                        db_get apt-setup/overlay_directory
959                        overlay_directory="$RET"
960                        db_get apt-setup/overlay_components
961                        overlay_components="$RET"
962
963                        echo "deb $PROTOCOL://$overlay_host$overlay_directory $DISTRIBUTION $overlay_components" >> $APT_SOURCES
964                fi
965                if db_get apt-setup/local0/repository; then
966                        repository="${RET#deb }"
967                        echo "deb $repository" >> $APT_SOURCES
968                fi
969        fi
970}
971
972cleanup () {
973        rm -f "$KERNEL_LIST" "$KERNEL_LIST.unfiltered"
974}
975
976configure_apt_overlay () {
977        if db_get apt-setup/overlay && [ "$RET" = true ]; then
978                if db_get apt-setup/overlay_early_apt_pkg_install && [ "$RET" ]; then
979                        early_pkg_list=$RET 
980
981                        # We need to run apt-get update to get the PPA's package list
982                        # Don't check error codes here; we will have a GPG error
983                        log-output -t base-installer chroot /target apt-get update
984
985                        # Install our packages
986                        #
987                        # We force GPG checks and assume the packages we install
988                        # will give us our keyring. At this pount, we've already
989                        # run debootstrap, and haven't checked its GPG key
990                        # so its sane to force this through.
991                        #
992                        # apt_update will check all the keys it has for all releases
993                        log-output -t base-installer chroot /target \
994                                apt-get -o APT::Get::AllowUnauthenticated=true install $early_pkg_list || apt_overlay_install_failed=$?
995
996                        if [ "$apt_overlay_install_failed" ]; then
997                                warning "apt overlay install failed: $apt_overlay_install_failed"
998                        fi
999                fi
1000        fi
1001}
Note: See TracBrowser for help on using the repository browser.