source: live-build/trunk/fuentes/scripts/build/lb_binary_debian-installer @ 900

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

add original source

  • Property svn:executable set to *
File size: 23.3 KB
Line 
1#!/bin/sh
2
3## live-build(7) - System Build Scripts
4## Copyright (C) 2006-2012 Daniel Baumann <daniel@debian.org>
5##
6## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
7## This is free software, and you are welcome to redistribute it
8## under certain conditions; see COPYING for details.
9
10
11set -e
12
13# Including common functions
14( . "${LIVE_BUILD}/scripts/build.sh" > /dev/null 2>&1 || true ) || . /usr/lib/live/build.sh
15
16# Setting static variables
17DESCRIPTION="$(Echo 'install debian-installer into binary')"
18HELP=""
19USAGE="${PROGRAM} [--force]"
20
21Arguments "${@}"
22
23# Reading configuration files
24Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
25Set_defaults
26
27if [ "${LB_BINARY_IMAGES}" = "virtual-hdd" ]
28then
29        exit 0
30fi
31
32if [ "${_DEBUG}" = "true" ]
33then
34        WGET_OPTIONS="${WGET_OPTIONS} --verbose"
35elif [ "${_QUIET}" = "true" ]
36then
37        WGET_OPTIONS="${WGET_OPTIONS} --quiet"
38else
39        WGET_OPTIONS="${WGET_OPTIONS} --no-verbose"
40fi
41
42# Check d-i configuration
43case "${LB_DEBIAN_INSTALLER}" in
44        true|cdrom|netinst|netboot|businesscard|live)
45                ;;
46
47        false)
48                exit 0
49                ;;
50
51        *)
52                Echo_error "debian-installer flavour %s not supported." "${LB_DEBIAN_INSTALLER}"
53                exit 1
54                ;;
55esac
56
57Echo_message "Begin installing debian-installer..."
58
59# Requiring stage file
60Require_stagefile .build/config .build/bootstrap
61
62# Checking stage file
63Check_stagefile .build/binary_debian-installer
64
65# Checking lock file
66Check_lockfile .lock
67
68# Creating lock file
69Create_lockfile .lock
70
71# Checking depends
72Check_package chroot/usr/bin/wget wget
73Check_package chroot/usr/bin/apt-ftparchive apt-utils
74
75# Restoring cache
76Restore_cache cache/packages.binary
77
78# Installing depends
79Install_package
80
81# Setting destination directory
82case "${LB_BINARY_IMAGES}" in
83        netboot)
84                DESTDIR="tftpboot/debian-install/${LB_ARCHITECTURES}"
85                ;;
86
87        hdd*|tar)
88                DESTDIR="binary/install"
89                ;;
90
91        *)
92                DESTDIR="binary/install"
93                ;;
94esac
95
96# Set d-i image type
97case "${LB_DEBIAN_INSTALLER}" in
98        businesscard|netboot|netinst)
99                DI_IMAGE_TYPE="netboot"
100                ;;
101        *)
102                case "${LB_BINARY_IMAGES}" in
103                        netboot)
104                                DI_IMAGE_TYPE="netboot"
105                                ;;
106
107                        *)
108                                DI_IMAGE_TYPE="cdrom"
109                                ;;
110                esac
111                ;;
112esac
113
114# Set architecture-specific variables
115case "${LB_ARCHITECTURES}" in
116        armel)
117                DEFAULT_FLAVOUR="$(echo ${LH_LINUX_FLAVOURS} | awk '{ print $1 }')"
118                case "${DI_IMAGE_TYPE}" in
119                        cdrom)
120                                DI_REMOTE_BASE="${DEFAULT_FLAVOUR}/cdrom"
121                                ;;
122
123                        netboot)
124                                DI_REMOTE_BASE="${DEFAULT_FLAVOUR}/netboot"
125                                ;;
126                esac
127
128                DI_REMOTE_KERNEL="vmlinuz"
129                DI_REMOTE_BASE_GTK="${DI_REMOTE_BASE}/gtk"
130                ;;
131
132        powerpc)
133                case "${DI_IMAGE_TYPE}" in
134                        cdrom)
135                                DI_REMOTE_BASE="${LB_ARCHITECTURES}/cdrom"
136                        ;;
137
138                        netboot)
139                                DI_REMOTE_BASE="${LB_ARCHITECTURES}/netboot"
140                                ;;
141                esac
142
143                DI_REMOTE_KERNEL="vmlinux"
144                DI_REMOTE_BASE_GTK="${DI_REMOTE_BASE}/gtk"
145                ;;
146
147        sparc)
148                DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')"
149                DI_REMOTE_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})"
150                DI_REMOTE_BASE_GTK="none"
151
152                DI_REMOTE_BASE="cdrom"
153                ;;
154        *)
155                case "${DI_IMAGE_TYPE}" in
156                        netboot)
157                                DI_REMOTE_BASE="netboot/debian-installer/${LB_ARCHITECTURES}"
158                                DI_REMOTE_BASE_GTK="netboot/gtk/debian-installer/${LB_ARCHITECTURES}"
159                                DI_REMOTE_KERNEL="linux"
160                                ;;
161
162                        cdrom)
163                                DI_REMOTE_BASE="cdrom"
164                                DI_REMOTE_BASE_GTK="cdrom/gtk"
165                                DI_REMOTE_KERNEL="vmlinuz"
166                                ;;
167                esac
168                ;;
169esac
170
171Check_multiarchitectures
172
173Install_file() {
174        local FILE
175        FILE="${1}"
176
177        local ARCHIVE_AREA
178        ARCHIVE_AREA="$(dpkg -I ${FILE} | awk '/^.*Section: / { print $2 }')"
179
180        if echo "${ARCHIVE_AREA}" | grep -qs '/'
181        then
182                ARCHIVE_AREA="$(echo ${ARCHIVE_AREA} | awk -F/ '{ print $1 }')"
183        else
184                ARCHIVE_AREA="main"
185        fi
186
187        local TARGET
188        TARGET="${2}/${ARCHIVE_AREA}"
189
190        SOURCE="$(dpkg -f ${FILE} Source | awk '{ print $1 }')"
191
192        if [ -z "${SOURCE}" ]
193        then
194                SOURCE="$(basename ${FILE} | awk -F_ '{ print $1 }')"
195        fi
196
197        case "${SOURCE}" in
198                lib?*)
199                        LETTER="$(echo ${SOURCE} | sed 's|\(....\).*|\1|')"
200                        ;;
201
202                *)
203                        LETTER="$(echo ${SOURCE} | sed 's|\(.\).*|\1|')"
204                        ;;
205        esac
206
207        # Install directory
208        mkdir -p "${TARGET}"/"${LETTER}"/"${SOURCE}"
209
210        # Move files
211        cp "${FILE}" "${TARGET}"/"${LETTER}"/"${SOURCE}"
212}
213
214# Set absolute directory for caching; we require it when we call Download_file
215# from a non-standard cwd.
216_LB_CACHE_DIR="$(pwd)/cache/binary_debian-installer"
217
218Download_file () {
219        local _LB_TARGET
220        _LB_TARGET="${1}"
221
222        local _LB_URL
223        _LB_URL="${2}"
224
225        _LB_CACHE_FILE="${_LB_CACHE_DIR}/$(echo "${_LB_URL}" | sed 's|/|_|g')"
226
227        if [ ! -f "${_LB_CACHE_FILE}" ]
228        then
229                mkdir -p ${_LB_CACHE_DIR}
230                if ! wget ${WGET_OPTIONS} -O "${_LB_CACHE_FILE}" "${_LB_URL}"
231                then
232                        rm -f "${_LB_CACHE_FILE}"
233
234                        Echo_error "Could not download file: %s" "${_LB_URL}"
235                        exit 1
236                fi
237        fi
238
239        if [ "$(stat --printf %d "${_LB_CACHE_DIR}")" = "$(stat --printf %d ./)" ]
240        then
241                CP_OPTIONS="-l"
242        fi
243
244        cp -f ${CP_OPTIONS} -- "${_LB_CACHE_FILE}" "${_LB_TARGET}"
245}
246
247VMLINUZ_DI="vmlinuz"
248INITRD_DI="initrd.gz"
249DESTDIR_DI="${DESTDIR}"
250
251VMLINUZ_GI="gtk/vmlinuz"
252INITRD_GI="gtk/initrd.gz"
253DESTDIR_GI="${DESTDIR}/gtk"
254
255case "${LB_DERIVATIVE}" in
256        false)
257                if [ "${LB_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ]
258                then
259                        # FIXME: variable name should be decupled from derivatves
260                        LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="sid"
261
262                        # Debian Installer daily builds
263                        URL="http://d-i.debian.org/daily-images/${LB_ARCHITECTURES}/daily/"
264                else
265                        URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/"
266                fi
267                ;;
268
269        true)
270                if [ "${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ]
271                then
272                        LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="sid"
273
274                        # Debian Installer daily builds
275                        URL="http://d-i.debian.org/daily-images/${LB_ARCHITECTURES}/daily/"
276                else
277                        URL="${LB_PARENT_MIRROR_DEBIAN_INSTALLER}/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/"
278                fi
279
280                if [ "${LB_MODE}" = "progress" ]
281                then
282                        # FIXME: normal derivatives probably don't rebuild d-i,
283                        # but progress does.
284                        URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/"
285                fi
286                ;;
287esac
288
289mkdir -p "${DESTDIR_DI}"
290
291if [ "${LB_ARCHITECTURES}" = "sparc" ] && [ "${DI_IMAGE_TYPE}" = "netboot" ]
292then
293        # There are no prepared kernel/initrd pairs for sparc netboot so we
294        # must unpack them from a mini.iso
295        Download_file mini.iso ${URL}/mini.iso
296
297        mkdir mini.tmp
298        ${LB_ROOT_COMMAND} mount -o loop -t iso9660 mini.iso mini.tmp
299
300        cp mini.tmp/boot/vmlinuz-${DEFAULT_FLAVOUR} "${DESTDIR}"/"${VMLINUZ_DI}"
301        cp mini.tmp/boot/initrd.gz "${DESTDIR}"/"${INITRD_DI}"
302
303        ${LB_ROOT_COMMAND} umount mini.tmp
304        rm -rf mini.tmp mini.iso
305else
306        # Downloading debian-installer
307        Download_file "${DESTDIR}"/"${VMLINUZ_DI}" ${URL}/${DI_REMOTE_BASE}/${DI_REMOTE_KERNEL}
308        Download_file "${DESTDIR}"/"${INITRD_DI}" ${URL}/${DI_REMOTE_BASE}/initrd.gz
309
310        # Downloading graphical-installer
311        DOWNLOAD_GTK_INSTALLER=0
312        if [ "${LB_DEBIAN_INSTALLER_GUI}" = "true" ]
313        then
314                case "${LB_ARCHITECTURES}" in
315                        amd64|i386)
316                                DOWNLOAD_GTK_INSTALLER=1
317                                ;;
318
319                        powerpc)
320                                if [ "${LB_DEBIAN_INSTALLER}" = "netboot" ]
321                                then
322                                        DOWNLOAD_GTK_INSTALLER=1
323                                fi
324                                ;;
325                esac
326        fi
327
328        if [ ${DOWNLOAD_GTK_INSTALLER} -eq 1 ]
329        then
330                mkdir -p "${DESTDIR_GI}"
331                Download_file "${DESTDIR}"/"${VMLINUZ_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/${DI_REMOTE_KERNEL}
332                Download_file "${DESTDIR}"/"${INITRD_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/initrd.gz
333        fi
334fi
335
336# Only download additional packages if appropriate
337if [ "${DI_IMAGE_TYPE}" != "netboot" ]
338then
339        # Downloading additional packages
340        mkdir -p chroot/binary.deb/archives/partial
341
342        mv chroot/var/lib/dpkg/status chroot/var/lib/dpkg/status.tmp
343        touch chroot/var/lib/dpkg/status
344
345        case "${LB_ARCHITECTURES}" in
346                amd64)
347                        DI_REQ_PACKAGES="lilo grub grub-pc"
348
349                        case "${LB_MODE}" in
350                                ubuntu|kubuntu)
351                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-generic"
352                                        ;;
353
354                                *)
355                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-amd64"
356                                        ;;
357                        esac
358                        ;;
359
360                i386)
361                        DI_REQ_PACKAGES="elilo lilo grub grub-pc"
362
363                        case "${LB_MODE}" in
364                                ubuntu|kubuntu)
365                                        case "${LB_DISTRIBUTION}" in
366                                                precise)
367                                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-generic-pae"
368                                                        ;;
369                                                *)
370                                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-generic"
371                                                        ;;
372                                        esac
373                                        ;;
374
375                                *)
376                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-486 linux-image-2.6-686"
377                                        ;;
378                        esac
379                        ;;
380
381                sparc)
382                        DI_REQ_PACKAGES="silo"
383                        case "${LB_MODE}" in
384                                ubuntu|kubuntu)
385                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-sparc64"
386                                        ;;
387
388                                *)
389                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-sparc64 linux-image-2.6-sparc64-smp"
390                                        ;;
391                        esac
392                        ;;
393
394                powerpc)
395                        DI_REQ_PACKAGES="yaboot"
396                        case "${LB_MODE}" in
397                                ubuntu|kubuntu)
398                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-powerpc-smp linux-image-powerpc64-smp"
399                                        ;;
400
401                                *)
402                                        DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-powerpc linux-image-2.6-powerpc64 linux-image-2.6-powerpc-smp"
403                                        ;;
404                        esac
405                        ;;
406        esac
407
408        DI_PACKAGES="${DI_PACKAGES} busybox cryptsetup mdadm lvm2"
409
410        case "${LB_MODE}" in
411                debian)
412                        DI_REQ_PACKAGES="${DI_REQ_PACKAGES} console-setup keyboard-configuration kbd"
413                        DI_PACKAGES="${DI_PACKAGES} console-setup keyboard-configuration kbd"
414                        ;;
415        esac
416
417        # Include firmware packages
418        if [ "${LB_FIRMWARE_BINARY}" = "true" ]
419        then
420                # Assumption: firmware packages install files into /lib/firmware
421
422                # Get all firmware packages names
423                mkdir -p cache/contents.binary
424                wget ${WGET_OPTIONS} ${LB_PARENT_MIRROR_CHROOT}/dists/${LB_PARENT_DISTRIBUTION}/Contents-${LB_ARCHITECTURES}.gz -O - | gunzip -c > cache/contents.binary/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES}
425
426                FIRMWARE_PACKAGES=""
427                FIRMWARE_PACKAGES="$(awk '/^lib\/firmware/ { print $2 }' cache/contents.binary/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)"
428
429                if [ "${LB_DERIVATIVE}" = "true" ]
430                then
431                        wget {WGET_OPTIONS} ${LB_MIRROR_CHROOT}/dists/${LB_DISTRIBUTION}/Contents-${LB_ARCHITECTURES}.gz -O - | gunzip -c > cache/contents.binary/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES}
432
433                        FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} $(awk '/^lib\/firmware/ { print $2 }' cache/contents.binary/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)"
434                fi
435
436                # Filter out contrib packages if contrib is not enabled
437                if ! echo ${LB_ARCHIVE_AREAS} | grep -qs contrib
438                then
439                        _FIRMWARE_PACKAGES=""
440
441                        for _PACKAGE in ${FIRMWARE_PACKAGES}
442                        do
443                                _FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | sed -e 's|^contrib/.*$||')"
444                        done
445
446                        FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES}"
447                fi
448
449                # Filter out non-free packages if non-free is not enabled
450                if ! echo ${LB_ARCHIVE_AREAS} | grep -qs non-free
451                then
452                        _FIRMWARE_PACKAGES=""
453
454                        for _PACKAGE in ${FIRMWARE_PACKAGES}
455                        do
456                                _FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | sed -e 's|^non-free/.*$||')"
457                        done
458
459                        FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES}"
460
461                else
462                        # Manually add firmware-linux/non-free meta package
463                        FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux"
464                fi
465
466                # Drop section and keep package names only
467                for _PACKAGE in ${FIRMWARE_PACKAGES}
468                do
469                        DI_FIRMWARE_PACKAGES="${DI_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | awk -F/ '{ print $NF }')"
470                done
471        fi
472
473        # Set apt command prefix
474        _LB_APT_COMMAND="apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb -o APT::Install-Recommends=false --download-only"
475
476        if [ "${LB_DEBIAN_INSTALLER}" = "live" ]
477        then
478                # We don't want to duplicate .debs of packages in binary/pool that are already
479                # installed to target/ via live-installer.
480                #
481                # However, we need to force various packages' inclusion in binary/pool as
482                # d-i does not support (for example) re-installing grub from target/ - the grub
483                # .debs must actually exist.
484
485                # Modify dpkg status to show the required packages are not installed.
486                cp chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
487                for PACKAGE in ${DI_REQ_PACKAGES}
488                do
489                        awk -v f=0 '
490                                f == 1 { print "Status: purge ok not-installed"; f=0; next }
491                                /Package: '"${PACKAGE}"'/ { f=1; }
492                                { print }
493                                ' chroot/var/lib/dpkg/status > chroot/var/lib/dpkg/status.awk
494                        mv chroot/var/lib/dpkg/status.awk chroot/var/lib/dpkg/status
495                done
496
497                # Download .deb's that we just marked as "purged" which caused broken dependencies
498                Chroot chroot ${_LB_APT_COMMAND} -f dist-upgrade
499
500                # Revert dpkg status file
501                mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
502
503                # Download .debs of the required packages
504                Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES} ${DI_REQ_PACKAGES}
505        else
506                # Download .debs of the required packages
507                Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES}
508
509                # Revert dpkg status file
510                mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
511        fi
512
513        mv chroot/binary.deb ./
514
515        for _ARCHIVE_AREA in $(echo ${LB_PARENT_ARCHIVE_AREAS} ${LB_ARCHIVE_AREAS})
516        do
517                mkdir -p binary/pool/${_ARCHIVE_AREA}
518        done
519
520        if Find_files binary.deb/archives/*.deb
521        then
522                for FILE in binary.deb/archives/*.deb
523                do
524                        Install_file "${FILE}" "binary/pool"
525                done
526        fi
527
528        if [ "${LB_DEBIAN_INSTALLER}" != "live" ]
529        then
530                # Including base debian packages
531                if ls cache/packages.bootstrap/*.deb > /dev/null 2>&1
532                then
533                        for FILE in cache/packages.bootstrap/*.deb
534                        do
535                                Install_file "${FILE}" "binary/pool"
536                        done
537                else
538                        Echo_error "Could not find packages in cache/packages.bootstrap."
539                        Echo_error "You selected values of LB_CACHE, LB_CACHE_PACKAGES, LB_CACHE_STAGES and LB_DEBIAN_INSTALLER which will result in 'bootstrap' packages not being cached - these are required when integrating the Debian Installer."
540                        exit 1
541                fi
542        fi
543
544        # Including local debs
545        if Find_files config/packages.binary/*_"${LB_ARCHITECTURES}".deb || Find_files config/packages/*_"${LB_ARCHITECTURES}".deb
546        then
547                for FILE in config/packages.binary/*_"${LB_ARCHITECTURES}".deb config/packages/*_"${LB_ARCHITECTURES}".deb
548                do
549                        if [ -e "${FILE}" ]
550                        then
551                                Install_file "${FILE}" "binary/pool"
552                        fi
553                done
554        fi
555
556        if Find_files config/packages.binary/*_all.deb || Find_files config/packages/*_all.deb
557        then
558                for FILE in config/packages.binary/*_all.deb config/packages/*_all.deb
559                do
560                        if [ -e "${FILE}" ]
561                        then
562                                Install_file "${FILE}" "binary/pool"
563                        fi
564                done
565        fi
566
567        # Generating deb indices
568        for _ARCHIVE_AREA in $(cd binary/pool && ls)
569        do
570                mkdir -p binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}
571
572                mv binary chroot/root
573                echo "cd /root/binary && apt-ftparchive packages pool/${_ARCHIVE_AREA} > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages" > chroot/binary.sh
574                Chroot chroot "sh binary.sh"
575                rm -f chroot/binary.sh
576                mv chroot/root/binary ./
577
578                gzip -9 -c binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages > binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages.gz
579
580                # Fetching release
581                Download_file binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Release "${LB_PARENT_MIRROR_CHROOT}"/dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/${_ARCHIVE_AREA}/binary-"${LB_ARCHITECTURES}"/Release
582        done
583
584        # Symlink firmware packages to /firmware
585        if [ -n "${DI_FIRMWARE_PACKAGES}" ]
586        then
587                mkdir -p binary/firmware
588                cd binary/firmware
589
590                for _PACKAGE in ${DI_FIRMWARE_PACKAGES}
591                do
592                        for _FILE in $(find ../pool -name "${_PACKAGE}_*.deb")
593                        do
594                                ln -s ${_FILE} ./
595                        done
596                done
597
598                cd "${OLDPWD}"
599        fi
600
601        # Udeb handling
602        mkdir binary.udeb
603        cd binary.udeb
604
605        # Downloading udeb indices
606        Download_file Packages.gz "${LB_PARENT_MIRROR_CHROOT}"/dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"/Packages.gz
607        gunzip -c Packages.gz > Packages
608
609        if [ "${LB_DERIVATIVE}" = "true" ]
610        then
611                Download_file Packages.derivative.gz "${LB_MIRROR_CHROOT}"/dists/"${LB_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"/Packages.gz
612                gunzip -c Packages.derivative.gz > Packages.derivative
613        fi
614
615        # Sorting udebs
616        if [ "${LB_DERIVATIVE}" = true ]
617        then
618                UDEBS="$(awk '/Filename: / { print $2 }' Packages.derivative)"
619        fi
620
621        UDEBS="${UDEBS} $(awk '/Filename: / { print $2 }' Packages)"
622
623        # Downloading udebs packages
624        Echo_message "Downloading udebs..."
625
626        if [ "${LB_DERIVATIVE}" = "true" ]
627        then
628                Echo_message "Building in derivative mode in debian+ layout.. a lot of 404 errors are ok here."
629        fi
630
631        for UDEB in ${UDEBS}
632        do
633                if [ -f ../cache/packages.binary_debian-installer.udeb/"$(basename ${UDEB})" ]
634                then
635                        # Copying cached udebs
636                        cp ../cache/packages.binary_debian-installer.udeb/"$(basename ${UDEB})" ./
637                else
638                        # Downloading udebs
639                        if ! ls "$(basename ${UDEB} | awk -F_ '{ print $1 }')"_* > /dev/null 2>&1
640                        then
641                                wget ${WGET_OPTIONS} "${LB_MIRROR_CHROOT}"/${UDEB} || wget ${WGET_OPTIONS} "${LB_PARENT_MIRROR_CHROOT}"/${UDEB}
642                        fi
643                fi
644        done
645
646        # Caching udebs
647        rm -rf ../cache/packages.binary_debian-installer.udeb
648        mkdir -p ../cache/packages.binary_debian-installer.udeb
649        cp *.udeb ../cache/packages.binary_debian-installer.udeb
650
651        # Including local udebs
652        if Find_files ../config/packages.binary/*_"${LB_ARCHITECTURES}".udeb || Find_files ../config/packages/*_"${LB_ARCHITECTURES}".udeb
653        then
654                for FILE in ../config/packages.binary/*_"${LB_ARCHITECTURES}".udeb ../config/packages/*_"${LB_ARCHITECTURES}".udeb
655                do
656                        if [ -e "${FILE}" ]
657                        then
658                                Install_file "${FILE}" "pool"
659
660                                # Prefer local udebs over downloaded udebs
661                                rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb
662                        fi
663                done
664        fi
665
666        if Find_files ../config/packages.binary/*_all.udeb || Find_files ../config/packages/*_all.udeb
667        then
668                for FILE in ../config/packages.binary/*_all.udeb ../config/packages/*_all.udeb
669                do
670                        if [ -e "${FILE}" ]
671                        then
672                                Install_file "${FILE}" "pool"
673
674                                # Prefer local udebs over downloaded udebs
675                                rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb
676                        fi
677                done
678        fi
679
680        # Excluding udebs
681        for LOCATION in "${LIVE_BUILD}/data/debian-cd" /usr/share/live/build/data/debian-cd
682        do
683                if [ -e "${LOCATION}" ]
684                then
685                        grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/udeb_exclude" > exclude || true
686        grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/exclude-udebs" >> exclude || true
687        grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/exclude-udebs-${LB_ARCHITECTURES}" >> exclude || true
688
689                        continue
690                fi
691        done
692
693        # Local exclude file
694        if [ -e ../config/binary_debian-installer/udeb_exclude ]
695        then
696                cat ../config/binary_debian-installer/udeb_exclude >> exclude
697        fi
698
699        # Excluding udebs from excludes because we want them to be in the image on purpose
700        sed -i -e 's|di-utils-exit-installer||' exclude # used for live-installer-launcher
701
702        while read EXCLUDE
703        do
704                if [ "${LB_DEBIAN_INSTALLER}" = "live" ] && [ "${EXCLUDE}" = "live-installer" ]
705                then
706                        continue
707                fi
708
709                rm -f ${EXCLUDE}_*.udeb
710        done < exclude
711
712        # Moving udebs
713        for UDEB in ${UDEBS}
714        do
715                if [ -f "$(basename ${UDEB})" ]
716                then
717                        mkdir -p $(dirname ${UDEB})
718                        mv "$(basename ${UDEB})" "$(dirname ${UDEB})"
719                fi
720        done
721
722        # Creating udeb indices
723        mkdir -p dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"
724        cd "${OLDPWD}"
725
726        mv binary.udeb chroot/root
727        echo "cd /root/binary.udeb && apt-ftparchive packages pool/main > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages" > chroot/binary.sh
728        Chroot chroot "sh binary.sh"
729        rm -f chroot/binary.sh
730        mv chroot/root/binary.udeb ./
731
732        cd binary.udeb
733        gzip -9 -c dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages.gz
734
735        rm -f Packages* exclude
736        find . | cpio -dmpu "${OLDPWD}"/binary
737        cd "${OLDPWD}"
738
739        rm -rf binary.udeb
740        rm -rf binary.deb
741
742        # Generating release file
743        mv binary chroot/root
744
745        eval _VERSION="$`echo RELEASE_${LB_PARENT_DISTRIBUTION}`"
746
747        case "${LB_PARENT_DISTRIBUTION}" in
748                sid)
749                        _SUITE="unstable"
750                        ;;
751
752                *)
753                        _SUITE="${LB_PARENT_DISTRIBUTION}"
754                        ;;
755        esac
756
757cat > chroot/binary.sh << EOF
758cd /root/binary && apt-ftparchive \
759        -o APT::FTPArchive::Release::Origin="Debian" \
760        -o APT::FTPArchive::Release::Label="Debian" \
761        -o APT::FTPArchive::Release::Suite="${_SUITE}" \
762        -o APT::FTPArchive::Release::Version="${_VERSION}" \
763        -o APT::FTPArchive::Release::Codename="${LB_PARENT_DISTRIBUTION}" \
764        -o APT::FTPArchive::Release::Date="$(date -R)" \
765        -o APT::FTPArchive::Release::Architectures="${LB_ARCHITECTURES}" \
766        -o APT::FTPArchive::Release::Components="${LB_PARENT_ARCHIVE_AREAS}" \
767        -o APT::FTPArchive::Release::Description="Last updated: $(date -R)" \
768        release dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/Release
769EOF
770
771        Chroot chroot "sh binary.sh"
772        rm -f chroot/binary.sh
773        mv chroot/root/binary ./
774
775        DISTRIBUTIONS="stable testing unstable"
776
777        if [ "${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" != "${LB_PARENT_DISTRIBUTION}" ]
778        then
779                DISTRIBUTIONS="${DISTRIBUTIONS} ${LB_PARENT_DISTRIBUTION}"
780        fi
781
782        case "${LB_BINARY_IMAGES}" in
783                hdd)
784                        case "${LB_BINARY_FILESYSTEM}" in
785                                fat*|ntfs)
786                                        # Creating dist directories
787                                        for DISTRIBUTION in ${DISTRIBUTIONS}
788                                        do
789                                                cp -a binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} binary/dists/${DISTRIBUTION}
790                                        done
791                                        ;;
792                        esac
793                        ;;
794
795                *)
796                        # Creating dist symlinks
797                        for DISTRIBUTION in ${DISTRIBUTIONS}
798                        do
799                                ln -s ${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} binary/dists/${DISTRIBUTION}
800                        done
801
802                        ln -s . binary/debian
803                        ;;
804        esac
805
806        # Including preseeding files
807        if Find_files config/binary_debian-installer/*.cfg
808        then
809                cp config/binary_debian-installer/*.cfg binary/install
810        fi
811fi
812
813Repack_initrd()
814{
815        local TARGET_INITRD
816        local INCLUDE_PATH
817        TARGET_INITRD="${1}"
818        INCLUDE_PATH="${2}"
819        REPACK_TMPDIR="unpacked-initrd"
820
821        if [ -d "${INCLUDE_PATH}" ]
822        then
823                INCLUDE_PATH=$(readlink -f ${INCLUDE_PATH})
824        fi
825
826        # cpio does not have a "extract to directory", so we must change directory
827        mkdir -p ${REPACK_TMPDIR}
828        cd ${REPACK_TMPDIR}
829
830        gzip -d < ../${TARGET_INITRD} | cpio -i --make-directories --no-absolute-filenames
831        if [ ! -d "${INCLUDE_PATH}" ]
832        then
833                # Invoked the old way, just copy the preseeds
834                cp ../config/binary_debian-installer/*.cfg .
835        else
836                # New way, include target directory content in the initrd
837                REPACK_TMPDIR_ABS="${PWD}"
838                cd "${INCLUDE_PATH}"
839                find -print0 | cpio -pumd0 --no-preserve-owner "${REPACK_TMPDIR_ABS}/"
840                cd "${OLDPWD}"
841        fi
842        find -print0 | cpio -H newc -o0 | gzip -9 > ../${TARGET_INITRD}
843
844        cd ..
845        rm -rf ${REPACK_TMPDIR}
846}
847
848# Preseed d-i by repacking the initrd in certain situations
849if [ "${DI_IMAGE_TYPE}" = "netboot" ] && [ -e config/binary_debian-installer/preseed.cfg ]
850then
851        Repack_initrd "${DESTDIR}"/"${INITRD_DI}"
852
853        if [ -e "${DESTDIR}"/"${INITRD_GI}" ]
854        then
855                Repack_initrd "${DESTDIR}"/"${INITRD_GI}"
856        fi
857fi
858
859# Include content of config/includes.binary_debian-installer if exists and not empty
860if [ -d config/includes.binary_debian-installer ] && [ -n "$(ls -A config/includes.binary_debian-installer)" ]
861then
862        Repack_initrd "${DESTDIR}"/"${INITRD_DI}" config/includes.binary_debian-installer
863
864        if [ -e "${DESTDIR}"/"${INITRD_GI}" ]
865        then
866                Repack_initrd "${DESTDIR}"/"${INITRD_GI}" config/includes.binary_debian-installer
867        fi
868fi
869
870# Saving cache
871Save_cache cache/packages.binary
872
873# Removing depends
874Remove_package
875
876# Creating stage file
877Create_stagefile .build/binary_debian-installer
Note: See TracBrowser for help on using the repository browser.