source: live-build/trunk/fuentes/scripts/build/lb_chroot_archives @ 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: 27.6 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 'manage /etc/apt/sources.list')"
18HELP=""
19USAGE="${PROGRAM} {install|remove} [--force]"
20
21_PASS="${1}"
22shift
23
24Arguments "${@}"
25
26# Reading configuration files
27Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
28Set_defaults
29
30# Requiring stage file
31Require_stagefile .build/config .build/bootstrap
32
33_LB_LOCAL_KEY_EMAIL="live-build-local-key@invalid"
34
35# FIXME: this is ugly
36if [ -n "${LIVE_BUILD}" ]
37then
38        _BASE="${LIVE_BUILD}"
39else
40        _BASE="/usr/share/live/build"
41fi
42
43case "${LB_DERIVATIVE}" in
44        true)
45                _PARENT_FILE="sources.list.d/debian.list"
46        ;;
47
48        false)
49                _PARENT_FILE="sources.list"
50                ;;
51esac
52
53case "${1}" in
54        install)
55                Echo_message "Configuring file /etc/apt/sources.list"
56
57                # Checking stage file
58                Check_stagefile .build/chroot_archives
59
60                # Checking lock file
61                Check_lockfile .lock
62
63                # Creating lock file
64                Create_lockfile .lock
65
66                # Restoring cache
67                Restore_cache cache/packages.chroot
68
69                # Configure custom sources.list
70
71cat > chroot/etc/apt/${_PARENT_FILE} << EOF
72deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}
73EOF
74
75                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
76                then
77                        echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
78                fi
79
80                if [ "${LB_DERIVATIVE}" = "true" ]
81                then
82                        rm -f chroot/etc/apt/sources.list.d/${LB_MODE}.list
83
84                        _DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | sed -e 's|-backports||')"
85
86                        echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
87
88                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
89                        then
90                                echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
91                        fi
92                fi
93
94                if [ "${LB_SECURITY}" = "true" ]
95                then
96                        case "${LB_MODE}" in
97                                debian|progress)
98                                        case "${LB_PARENT_DISTRIBUTION}" in
99                                                sid)
100
101                                                        ;;
102
103                                                *)
104                                                        echo "deb ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
105
106                                                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
107                                                        then
108                                                                echo "deb-src ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
109                                                        fi
110                                                        ;;
111                                        esac
112
113                                        if [ "${LB_MODE}" = progress ]
114                                        then
115                                                echo "deb ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
116
117                                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
118                                                then
119                                                        echo "deb-src ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
120                                                fi
121                                        else
122                                                if [ "${LB_DERIVATIVE}" = "true" ]
123                                                then
124                                                        echo "deb ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
125
126                                                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
127                                                        then
128                                                                echo "deb-src ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
129                                                        fi
130                                                fi
131                                        fi
132                                        ;;
133
134                                ubuntu|kubuntu)
135                                        echo "deb ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}-security ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
136
137                                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
138                                        then
139                                                echo "deb-src ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}-security ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
140                                        fi
141                                        ;;
142                        esac
143                fi
144
145                if [ "${LB_VOLATILE}" = "true" ]
146                then
147                        echo "deb ${LB_PARENT_MIRROR_CHROOT_VOLATILE} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
148
149                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
150                        then
151                                echo "deb-src ${LB_PARENT_MIRROR_CHROOT_VOLATILE} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
152                        fi
153
154                        if [ "${LB_DERIVATIVE}" = "true" ] && [ "${LB_MIRROR_CHROOT_VOLATILE}" != "none" ]
155                        then
156                                echo "deb ${LB_MIRROR_CHROOT_VOLATILE} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
157
158                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
159                                then
160                                        echo "deb-src ${LB_MIRROR_CHROOT_VOLATILE} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
161                                fi
162                        fi
163                fi
164
165                if [ "${LB_BACKPORTS}" = "true" ]
166                then
167                        case "${LB_MODE}" in
168                                debian)
169                                        if [ "${LB_PARENT_DISTRIBUTION}" != "sid" ]
170                                        then
171                                                echo "deb ${LB_PARENT_MIRROR_CHROOT_BACKPORTS} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
172
173                                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
174                                                then
175                                                        echo "deb-src ${LB_PARENT_MIRROR_CHROOT_BACKPORTS} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
176                                                fi
177                                        fi
178                                        ;;
179                        esac
180
181                        if [ "${LB_DERIVATIVE}" = "true" ] && [ "${LB_MIRROR_CHROOT_BACKPORTS}" != "none" ]
182                        then
183                                echo "deb ${LB_MIRROR_CHROOT_BACKPORTS} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
184
185                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
186                                then
187                                        echo "deb-src ${LB_MIRROR_CHROOT_BACKPORTS} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
188                                fi
189                        fi
190                fi
191
192                # probably too bold, needs refinment (FIXME)
193                rm -f chroot/etc/apt/preferences.d/*
194
195                # Configure third-party archives
196                if [ -n "${LB_ARCHIVES}" ]
197                then
198                        for REPOSITORY in ${LB_ARCHIVES}
199                        do
200                                # ubuntu workaround to allow using live.debian.net
201                                case "${LB_MODE}" in
202                                        ubuntu|kubuntu)
203                                                if [ "${REPOSITORY}" = "live.debian.net" ]
204                                                then
205                                                        _DISTRIBUTION="sid"
206                                                else
207                                                        _DISTRIBUTION="${LB_PARENT_DISTRIBUTION}"
208                                                fi
209                                                ;;
210
211                                        *)
212                                                _DISTRIBUTION="${LB_PARENT_DISTRIBUTION}"
213                                                ;;
214                                esac
215
216                                # Prefer archives from the config tree
217                                # over the global ones.
218                                if ! ls "${_BASE}/archives/${REPOSITORY}"* > /dev/null 2>&1
219                                then
220                                        continue
221                                fi
222
223                                # Adding sources.list entries (chroot)
224                                if [ -e "${_BASE}/archives/${REPOSITORY}.chroot" ]
225                                then
226                                        sed -e "s|@DISTRIBUTION@|${_DISTRIBUTION}|g" \
227                                            -e "s|@ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \
228                                        "${_BASE}/archives/${REPOSITORY}.chroot" > \
229                                        "chroot/etc/apt/sources.list.d/${REPOSITORY}.list"
230                                elif [ -e "${_BASE}/archives/${REPOSITORY}" ]
231                                then
232                                        sed -e "s|@DISTRIBUTION@|${_DISTRIBUTION}|g" \
233                                            -e "s|@ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \
234                                        "${_BASE}/archives/${REPOSITORY}" > \
235                                        "chroot/etc/apt/sources.list.d/${REPOSITORY}.list"
236                                fi
237
238                                # Adding pinning preferences (chroot)
239                                if [ -e "${_BASE}/archives/${REPOSITORY}.pref" ]
240                                then
241                                        cp "${_BASE}/archives/${REPOSITORY}.pref" chroot/etc/apt/sources.list.d
242                                elif [ -e "${_BASE}/archives/${REPOSITORY}.pref.chroot" ]
243                                then
244                                        cp "${_BASE}/archives/${REPOSITORY}.pref.chroot" "chroot/etc/apt/sources.list.d/${REPOSITORY}.pref"
245                                fi
246
247                                if [ "${LB_APT_SECURE}" != false ]
248                                then
249                                        # Adding archive signing keys (chroot)
250                                        if [ -e "${_BASE}/archives/${REPOSITORY}.key.chroot" ]
251                                        then
252                                                cat "${_BASE}/archives/${REPOSITORY}.key.chroot" | Chroot chroot "apt-key add -"
253                                        elif [ -e "${_BASE}/archives/${REPOSITORY}.key" ]
254                                        then
255                                                cat "${_BASE}/archives/${REPOSITORY}.key" | Chroot chroot "apt-key add -"
256                                        fi
257                                fi
258                        done
259                fi
260
261                # Check local sources.list
262                if Find_files config/archives/*.list || \
263                   Find_files config/archives/*.list.chroot
264                then
265                        for FILE in config/archives/*.list \
266                                    config/archives/*.list.chroot
267                        do
268                                if [ -e "${FILE}" ]
269                                then
270                                        sed -e "s|@DISTRIBUTION@|${LB_DISTRIBUTION}|g" \
271                                            -e "s|@ARCHIVE_AREAS@|${LB_ARCHIVE_AREAS}|g" \
272                                            -e "s|@PARENT_DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \
273                                            -e "s|@PARENT_ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \
274                                        "${FILE}" > "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)"
275
276                                        if [ "${_PASS}" != "source" ] && [ "${LB_APT_SOURCE_ARCHIVES}" = "false" ]
277                                        then
278                                                # Strip out source archives
279                                                sed "/^deb-src /d" "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)"
280                                        fi
281                                fi
282                        done
283                fi
284
285                # Check local pinning preferences
286                if Find_files config/archives/*.pref || \
287                   Find_files config/archives/*.pref.chroot
288                then
289                        for FILE in config/archives/*.pref \
290                                    config/archives/*.pref.chroot
291                        do
292                                if [ -e "${FILE}" ]
293                                then
294                                        cp ${FILE} chroot/etc/apt/preferences.d/$(basename ${FILE} .chroot)
295                                fi
296                        done
297                fi
298
299                # Configure local package repository
300                if Find_files config/packages.chroot/*.deb || Find_files config/packages/*.deb
301                then
302                        rm -rf chroot/root/packages
303                        mkdir -p chroot/root/packages
304
305                        if [ "$(stat --printf %d config/packages.chroot)" = "$(stat --printf %d chroot/root/packages)" ] ||
306                           [ "$(stat --printf %d config/packages)" = "$(stat --printf %d chroot/root/packages)" ]
307                        then
308                                CP_OPTIONS="-l"
309                        fi
310
311                        # Copy packages
312                        if Find_files config/packages.chroot/*_"${LB_ARCHITECTURES}".deb || Find_files config/packages/*_"${LB_ARCHITECTURES}".deb
313                        then
314                                for FILE in config/packages.chroot/*_"${LB_ARCHITECTURES}".deb config/packages/*_"${LB_ARCHITECTURES}".deb
315                                do
316                                        if [ -L "${FILE}" ]
317                                        then
318                                                cp -L "${FILE}" chroot/root/packages
319                                        elif [ -e "${FILE}" ]
320                                        then
321                                                cp ${CP_OPTIONS} "${FILE}" chroot/root/packages
322                                        fi
323                                done
324                        fi
325
326                        if Find_files config/packages.chroot/*_all.deb || Find_files config/packages/*_all.deb
327                        then
328                                for FILE in config/packages.chroot/*_all.deb config/packages/*_all.deb
329                                do
330                                        if [ -L "${FILE}" ]
331                                        then
332                                                cp -L "${FILE}" chroot/root/packages
333                                        elif [ -e "${FILE}" ]
334                                        then
335                                                cp ${CP_OPTIONS} "${FILE}" chroot/root/packages
336                                        fi
337                                done
338                        fi
339
340                        if Find_files chroot/root/packages/*.deb
341                        then
342                                # If we bootstrapped a minimal chroot, we need
343                                # to install apt-utils before we have have
344                                # completed all the indices.
345                                if [ "${LB_BOOTSTRAP_FLAVOUR}" != "standard" ]
346                                then
347                                        Apt chroot update
348                                fi
349
350                                # Check depends
351                                Check_package chroot/usr/bin/apt-ftparchive apt-utils
352
353                                # Installing depends
354                                Install_package
355
356                                # Generate Packages and Packages.gz
357                                echo "cd /root/packages && apt-ftparchive packages . > Packages" | Chroot chroot sh
358                                gzip -9 -c chroot/root/packages/Packages > chroot/root/packages/Packages.gz
359
360                                # Generate Release
361                                echo "cd /root/packages && apt-ftparchive \
362                                        -o APT::FTPArchive::Release::Origin=config/packages.chroot \
363                                        release . > Release" | Chroot chroot sh
364
365                                if [ "${LB_APT_SECURE}" = "true" ]
366                                then
367                                        _LB_DOTGNUPG_EXISTED=0
368                                        if [ -d chroot/root/.gnupg ]
369                                        then
370                                                _LB_DOTGNUPG_EXISTED=1
371                                        fi
372
373                                        # Ensure ~/.gnupg exists (required for gnupg >= ~1.4.9)
374                                        mkdir -p chroot/root/.gnupg
375
376                                        # Temporarily replace /dev/random with /dev/urandom so as not
377                                        # to block automated image builds; we don't care about the
378                                        # security of this key anyway.
379                                        if [ -e chroot/dev/random ]
380                                        then
381                                                mv chroot/dev/random chroot/dev/random.orig
382                                                cp -a chroot/dev/urandom chroot/dev/random
383                                        fi
384
385                                        if Find_files cache/local-package-keyring.*
386                                        then
387                                                cp cache/local-package-keyring.* chroot/root
388                                        else
389                                                # Generate temporary key
390                                                echo "Key-Type: RSA
391                                                      Key-Length: 1024
392                                                      Subkey-Type: ELG-E
393                                                      Subkey-Length: 1024
394                                                      Name-Real: live-build local packages key
395                                                      Name-Email: ${_LB_LOCAL_KEY_EMAIL}
396                                                      Expire-Date: 0
397                                                      %secring /root/local-package-keyring.sec
398                                                      %pubring /root/local-package-keyring.pub
399                                                      %commit" | Chroot chroot "gpg --batch --gen-key" || _LB_RET=${?}
400
401                                                case "${_LB_RET}" in
402                                                        ""|2)
403                                                                # Gnupg sometimes seems to return with a status of 2 when there was not
404                                                                # enough entropy (and key creation blocks temporarily) even if the
405                                                                # operation was ultimately successful.
406                                                                ;;
407                                                        *)
408                                                                Echo_error "GPG exited with error status %s" "${_LB_RET}"
409                                                                exit ${_LB_RET}
410                                                                ;;
411                                                esac
412
413                                                # Save keyrings to avoid regeneration
414                                                cp chroot/root/local-package-keyring.* cache/
415                                        fi
416
417                                        # Sign release
418                                        Chroot chroot "gpg --no-default-keyring --secret-keyring /root/local-package-keyring.sec \
419                                                --keyring /root/local-package-keyring.pub -abs -o \
420                                                /root/packages/Release.gpg /root/packages/Release"
421
422                                        # Import key
423                                        Chroot chroot "gpg --no-default-keyring --secret-keyring /root/local-package-keyring.sec \
424                                                --keyring /root/local-package-keyring.pub --armor \
425                                                --export ${_LB_LOCAL_KEY_EMAIL}" | Chroot chroot "apt-key add -"
426
427                                        # Remove temporary keyrings
428                                        rm chroot/root/local-package-keyring.pub
429                                        rm chroot/root/local-package-keyring.sec
430
431                                        # Revert /dev/random
432                                        if [ -e chroot/dev/random.orig ]
433                                        then
434                                                mv chroot/dev/random.orig chroot/dev/random
435                                        fi
436
437                                        # Remove /root/.gnupg if we created it during the signing process
438                                        if [ "${_LB_DOTGNUPG_EXISTED}" -eq 0 ]
439                                        then
440                                                rm -rf chroot/root/.gnupg
441                                        fi
442                                fi
443
444                                # Add to sources.list.d
445                                echo "deb file:/root/packages ./" > chroot/etc/apt/sources.list.d/packages.list
446
447                                # Move top-level sources away, otherwise apt always preferes it (#644148)
448                                if [ -e chroot/etc/apt/sources.list ]
449                                then
450                                        mv chroot/etc/apt/sources.list chroot/etc/apt/sources.list.d/zz-sources.list
451                                fi
452
453                                # Removing depends
454                                Remove_package
455                        else
456                                Echo_warning "Local packages must be named with suffix '_all.deb' or '_\$architecture.deb'."
457                        fi
458                fi
459
460                if Find_files chroot/root/packages/*.deb
461                then
462                        gunzip < chroot/root/packages/Packages.gz | awk '/^Package: / { print $2 }' \
463                        >> chroot/root/packages.chroot
464                fi
465
466                # Update indices from cache
467                if [ "${LB_CACHE_INDICES}" = "true" ] && [ -d cache/indices.bootstrap ]
468                then
469                        if Find_files cache/indices.bootstrap/secring.gpg*
470                        then
471                                cp -f cache/indices.bootstrap/secring.gpg* chroot/etc/apt
472                        fi
473
474                        if Find_files cache/indices.bootstrap/trusted.gpg*
475                        then
476                                cp -rf cache/indices.bootstrap/trusted.gpg* chroot/etc/apt
477                        fi
478
479                        if [ -f cache/indices.bootstrap/pkgcache.bin ]
480                        then
481                                cp -f cache/indices.bootstrap/pkgcache.bin chroot/var/cache/apt
482                        fi
483
484                        if [ -f cache/indices.bootstrap/srcpkgcache.bin ]
485                        then
486                                cp -f cache/indices.bootstrap/srcpkgcache.bin chroot/var/cache/apt
487                        fi
488
489                        if Find_files cache/indices.bootstrap/*_Packages
490                        then
491                                cp -f cache/indices.bootstrap/*_Packages chroot/var/lib/apt/lists
492                        fi
493
494                        if Find_files cache/indices.bootstrap/*_Sources
495                        then
496                                cp -f cache/indices.bootstrap/*_Sources chroot/var/lib/apt/lists
497                        fi
498
499                        if Find_files cache/indices.bootstrap/*Release*
500                        then
501                                cp -f cache/indices.bootstrap/*Release* chroot/var/lib/apt/lists
502                        fi
503
504                        if [ "${LB_APT}" = "aptitude" ] && [ ! -x /usr/bin/aptitude ]
505                        then
506                                Chroot chroot "apt-get ${APT_OPTIONS} update"
507                                Chroot chroot "apt-get ${APT_OPTIONS} install aptitude"
508                        fi
509                else # Get fresh indices
510                        # Check local archive keys
511                        if Find_files config/archives/*.key || \
512                           Find_files config/archives/*.key.chroot
513                        then
514                                for FILE in config/archives/*.key \
515                                            config/archives/*.key.chroot
516                                do
517                                        if [ -e "${FILE}" ]
518                                        then
519                                                cp ${FILE} chroot/root
520                                                Chroot chroot "apt-key add /root/$(basename ${FILE})"
521                                                rm -f chroot/root/$(basename ${FILE})
522                                        fi
523                                done
524                        fi
525
526                        # Check local keyring packages
527                        if Find_files config/archives/*.deb
528                        then
529                                for PACKAGE in config/archives/*.deb
530                                do
531                                        cp ${PACKAGE} chroot/root
532                                        Chroot chroot "dpkg -i /root/$(basename ${PACKAGE})"
533                                        rm -f chroot/root/$(basename ${PACKAGE})
534                                done
535                        fi
536
537                        # Installing aptitude (FIXME)
538                        if [ "${LB_APT}" = "aptitude" ] && [ ! -x /usr/bin/aptitude ]
539                        then
540                                Chroot chroot "apt-get ${APT_OPTIONS} update"
541                                Chroot chroot "apt-get ${APT_OPTIONS} install aptitude"
542                        fi
543
544                        # Rebuild apt indices from scratch.
545                        # Due to the fact that apt doesn't understand
546                        # pinning on the fly, we need to manually remove
547                        # the cached indices and rebuild them again.
548                        rm -rf chroot/var/cache/apt/*.bin
549
550                        Apt chroot update
551
552                        # Installing keyring packages
553                        if [ -n "${LB_KEYRING_PACKAGES}" ]
554                        then
555                                if [ "${LB_DERIVATIVE}" = "true" ]
556                                then
557                                        # Temporary hack (FIXME)
558                                        Chroot chroot "apt-get ${APT_OPTIONS} --force-yes install ${LB_KEYRING_PACKAGES}"
559                                else
560                                        Apt chroot "install ${LB_KEYRING_PACKAGES}"
561                                fi
562                        fi
563
564                        rm -rf chroot/var/cache/apt/*.bin
565
566                        Apt chroot update
567                        Apt chroot "--force-yes" "upgrade"
568                        Apt chroot "--force-yes" "dist-upgrade"
569
570                        if [ "${LB_CACHE_INDICES}" = "true" ]
571                        then
572                                mkdir -p cache/indices.bootstrap
573
574                                if Find_files chroot/etc/apt/secring.gpg*
575                                then
576                                        cp -f chroot/etc/apt/secring.gpg* cache/indices.bootstrap
577                                fi
578
579                                cp -rf chroot/etc/apt/trusted.gpg* cache/indices.bootstrap
580
581                                cp -f chroot/var/cache/apt/pkgcache.bin cache/indices.bootstrap
582
583                                if Find_files chroot/var/cache/apt/srcpkgcache.bin
584                                then
585                                        cp -f chroot/var/cache/apt/srcpkgcache.bin cache/indices.bootstrap
586                                fi
587
588                                cp -f chroot/var/lib/apt/lists/*_Packages cache/indices.bootstrap
589
590                                if Find_files chroot/var/lib/apt/lists/*_Sources
591                                then
592                                        cp -f chroot/var/lib/apt/lists/*_Sources cache/indices.bootstrap
593                                fi
594
595                                cp -f chroot/var/lib/apt/lists/*Release* cache/indices.bootstrap
596                        fi
597                fi
598
599                # Saving cache
600                Save_cache cache/packages.chroot
601
602                # Creating stage file
603                Create_stagefile .build/chroot_archives
604                ;;
605
606        remove)
607                Echo_message "Deconfiguring file /etc/apt/sources.list"
608
609                # Checking lock file
610                Check_lockfile .lock
611
612                # Creating lock file
613                Create_lockfile .lock
614
615                # Restore top-level sources
616                if [ -e chroot/etc/apt/sources.list.d/zz-sources.list ]
617                then
618                        mv chroot/etc/apt/sources.list.d/zz-sources.list chroot/etc/apt/sources.list
619                fi
620
621                # Configure generic indices
622                # Don't do anything if it's not required
623                if [ "${LB_PARENT_MIRROR_CHROOT}" = "${LB_PARENT_MIRROR_BINARY}" ] && \
624                [ "${LB_PARENT_MIRROR_CHROOT_SECURITY}" = "${LB_PARENT_MIRROR_BINARY_SECURITY}" ] && \
625                [ ! -d chroot/root/packages ]
626                then
627                        # Removing stage file
628                        rm -f .build/chroot_archives
629
630                        exit 0
631                fi
632
633                # Cleaning apt list cache
634                rm -rf chroot/var/lib/apt/lists
635                mkdir -p chroot/var/lib/apt/lists/partial
636
637                # Configure custom sources.list
638
639cat > chroot/etc/apt/${_PARENT_FILE} << EOF
640deb ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}
641EOF
642
643                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
644                then
645                        echo "deb-src ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
646                fi
647
648                if [ "${LB_DERIVATIVE}" = "true" ]
649                then
650                        rm -f chroot/etc/apt/sources.list.d/${LB_MODE}.list
651
652                        _DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | sed -e 's|-backports||')"
653
654                        echo "deb ${LB_MIRROR_BINARY} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
655
656                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
657                        then
658                                echo "deb-src ${LB_MIRROR_BINARY} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
659                        fi
660                fi
661
662                if [ "${LB_SECURITY}" = "true" ]
663                then
664                        case "${LB_MODE}" in
665                                debian|progress)
666                                        case "${LB_PARENT_DISTRIBUTION}" in
667                                                sid)
668
669                                                        ;;
670
671                                                *)
672                                                        echo "deb ${LB_PARENT_MIRROR_BINARY_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
673
674                                                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
675                                                        then
676                                                                echo "deb-src ${LB_PARENT_MIRROR_BINARY_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
677                                                        fi
678                                                        ;;
679                                        esac
680
681                                        if [ "${LB_MODE}" = progress ]
682                                        then
683                                                echo "deb ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
684
685                                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
686                                                then
687                                                        echo "deb-src ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
688                                                fi
689                                        else
690                                                if [ "${LB_DERIVATIVE}" = "true" ]
691                                                then
692                                                        echo "deb ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
693
694                                                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
695                                                        then
696                                                                echo "deb-src ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
697                                                        fi
698                                                fi
699                                        fi
700                                        ;;
701
702                                ubuntu|kubuntu)
703                                        echo "deb ${LB_PARENT_MIRROR_BINARY_SECURITY} ${LB_PARENT_DISTRIBUTION}-security ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
704
705                                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
706                                        then
707                                                echo "deb-src ${LB_PARENT_MIRROR_BINARY_SECURITY} ${LB_PARENT_DISTRIBUTION}-security ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
708                                        fi
709                                        ;;
710                        esac
711                fi
712
713                if [ "${LB_VOLATILE}" = "true" ]
714                then
715                        echo "deb ${LB_PARENT_MIRROR_BINARY_VOLATILE} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
716
717                        if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
718                        then
719                                echo "deb-src ${LB_PARENT_MIRROR_BINARY_VOLATILE} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
720                        fi
721
722                        if [ "${LB_DERIVATIVE}" = "true" ] && [ "${LB_MIRROR_BINARY_VOLATILE}" != "none" ]
723                        then
724                                echo "deb ${LB_MIRROR_BINARY_VOLATILE} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
725
726                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
727                                then
728                                        echo "deb-src ${LB_MIRROR_BINARY_VOLATILE} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
729                                fi
730                        fi
731                fi
732
733                if [ "${LB_BACKPORTS}" = "true" ]
734                then
735                        case "${LB_MODE}" in
736                                debian)
737                                        if [ "${LB_PARENT_DISTRIBUTION}" != "sid" ]
738                                        then
739                                                echo "deb ${LB_PARENT_MIRROR_BINARY_BACKPORTS} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
740
741                                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
742                                                then
743                                                        echo "deb-src ${LB_PARENT_MIRROR_BINARY_BACKPORTS} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE}
744                                                fi
745                                        fi
746                                        ;;
747                        esac
748
749                        if [ "${LB_DERIVATIVE}" = "true" ] && [ "${LB_MIRROR_BINARY_BACKPORTS}" != "none" ]
750                        then
751                                echo "deb ${LB_MIRROR_BINARY_BACKPORTS} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
752
753                                if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ]
754                                then
755                                        echo "deb-src ${LB_MIRROR_BINARY_BACKPORTS} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list
756                                fi
757                        fi
758                fi
759
760                # probably too bold, needs refinment (FIXME)
761                rm -f chroot/etc/apt/preferences.d/*
762
763                # Configure third-party archives
764                if [ -n "${LB_ARCHIVES}" ]
765                then
766                        for REPOSITORY in ${LB_ARCHIVES}
767                        do
768                                # Removing sources.list entries (chroot)
769                                rm -f "chroot/etc/apt/sources.list.d/${REPOSITORY}.list"
770
771                                # Prefer archives from the config tree
772                                # over the global ones.
773                                if ! ls "${_BASE}/archives/${REPOSITORY}"* > /dev/null 2>&1
774                                then
775                                        continue
776                                fi
777
778                                # Adding sources.list entries (binary)
779                                if [ -e "${_BASE}/archives/${REPOSITORY}.binary" ]
780                                then
781                                        sed -e "s|@DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \
782                                            -e "s|@ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \
783                                        "${_BASE}/archives/${REPOSITORY}.binary" > \
784                                        "chroot/etc/apt/sources.list.d/${REPOSITORY}.list"
785                                elif [ -e "${_BASE}/archives/${REPOSITORY}" ]
786                                then
787                                        sed -e "s|@DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \
788                                            -e "s|@ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \
789                                        "${_BASE}/archives/${REPOSITORY}" > \
790                                        "chroot/etc/apt/sources.list.d/${REPOSITORY}.list"
791                                fi
792
793                                # Adding pinning preferences (binary)
794                                if [ -e "${_BASE}/archives/${REPOSITORY}.pref" ]
795                                then
796                                        cp "${_BASE}/archives/${REPOSITORY}.pref" chroot/etc/apt/sources.list.d
797                                elif [ -e "${_BASE}/archives/${REPOSITORY}.pref.binary" ]
798                                then
799                                        cp "${_BASE}/archives/${REPOSITORY}.pref.binary" "chroot/etc/apt/sources.list.d/${REPOSITORY}.pref"
800                                fi
801
802                                if [ "${LB_APT_SECURE}" != false ]
803                                then
804                                        # Adding archive signing keys (binary)
805                                        if [ -e "${_BASE}/archives/${REPOSITORY}.key.binary" ]
806                                        then
807                                                cat "${_BASE}/archives/${REPOSITORY}.key.binary" | Chroot chroot "apt-key add -"
808                                        elif [ -e "${_BASE}/archives/${REPOSITORY}.key" ]
809                                        then
810                                                cat "${_BASE}/archives/${REPOSITORY}.key" | Chroot chroot "apt-key add -"
811                                        fi
812                                fi
813                        done
814                fi
815
816                # Check local sources.list
817                if Find_files config/archives/*.list || \
818                   Find_files config/archives/*.list.binary
819                then
820                        for FILE in config/archives/*.list \
821                                    config/archives/*.list.binary
822                        do
823                                if [ -e "${FILE}" ]
824                                then
825                                        sed -e "s|@DISTRIBUTION@|${LB_DISTRIBUTION}|g" \
826                                            -e "s|@ARCHIVE_AREAS@|${LB_ARCHIVE_AREAS}|g" \
827                                            -e "s|@PARENT_DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \
828                                            -e "s|@PARENT_ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \
829                                        "${FILE}" > "chroot/etc/apt/sources.list.d/$(basename ${FILE} .binary)"
830
831                                        if [ "${_PASS}" != "source" ] && [ "${LB_APT_SOURCE_ARCHIVES}" = "false" ]
832                                        then
833                                                # Strip out source archives
834                                                sed "/^deb-src /d" "chroot/etc/apt/sources.list.d/$(basename ${FILE} .binary)"
835                                        fi
836                                fi
837                        done
838                fi
839
840                # Check local pinning preferences
841                if Find_files config/archives/*.pref || \
842                   Find_files config/archives/*.pref.binary
843                then
844                        for FILE in config/archives/*.pref \
845                                    config/archives/*.pref.binary
846                        do
847                                if [ -e "${FILE}" ]
848                                then
849                                        cp ${FILE} chroot/etc/apt/preferences.d/$(basename ${FILE} .binary)
850                                fi
851                        done
852                fi
853
854                # Check local archive keys
855                if Find_files config/archives/*.key || \
856                   Find_files config/archives/*.key.binary
857                then
858                        for FILE in config/archives/*.key \
859                                    config/archives/*.key.binary
860                        do
861                                if [ -e "${FILE}" ]
862                                then
863                                        cp ${FILE} chroot/root
864                                        Chroot chroot "apt-key add /root/$(basename ${FILE})"
865                                        rm -f chroot/root/$(basename ${FILE})
866                                fi
867                        done
868                fi
869
870                # Updating indices
871                Apt chroot update
872
873                # Cleaning apt package cache
874                rm -rf chroot/var/cache/apt
875                mkdir -p chroot/var/cache/apt/archives/partial
876
877                # Cleaning apt package lists
878                if [ "${LB_APT_INDICES}" = "false" ]
879                then
880                        rm -rf chroot/var/lib/apt/lists
881                        mkdir -p chroot/var/lib/apt/lists/partial
882                fi
883
884                # Remove local package repository
885                rm -f chroot/etc/apt/sources.list.d/packages.list
886                rm -rf chroot/root/packages
887
888                # Remove local packages key if it exists
889                if apt-key list | grep -q ${_LB_LOCAL_KEY_EMAIL}
890                then
891                        apt-key del ${_LB_LOCAL_KEY_EMAIL}
892                fi
893
894                # Removing stage file
895                rm -f .build/chroot_archives
896                ;;
897
898        *)
899                Usage
900                ;;
901esac
Note: See TracBrowser for help on using the repository browser.