mirror of
				https://git.launchpad.net/livecd-rootfs
				synced 2025-10-31 08:54:06 +00:00 
			
		
		
		
	Imported using git-ubuntu import. Changelog parent: 26a8853159e5c47e8498f3f07388775da8f92d26 New changelog entries: * rename ac100 bootimage to something the build system can parse easier.
		
			
				
	
	
		
			209 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #! /bin/bash
 | |
| set -e
 | |
| set -o pipefail
 | |
| 
 | |
| export LC_ALL=C
 | |
| 
 | |
| . "${LB_BASE:-/usr/share/live/build}"/scripts/build.sh
 | |
| 
 | |
| Arguments "${@}"
 | |
| 
 | |
| Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
 | |
| Set_defaults
 | |
| 
 | |
| (
 | |
| 	if [ -d gnupg ]; then
 | |
| 		cat << @@EOF > gnupg/NEWKEY
 | |
| Key-Type: DSA
 | |
| Key-Length: 1024
 | |
| Name-Real: Ubuntu Local Archive One-Time Signing Key
 | |
| Name-Email: cdimage@ubuntu.com
 | |
| Expire-Date: 0
 | |
| @@EOF
 | |
| 		gpg --home gnupg --gen-key --batch < gnupg/NEWKEY \
 | |
| 			> gnupg/generate.log 2>&1 &
 | |
| 		GPG_PROCESS=$!
 | |
| 	fi
 | |
| 
 | |
| 	lb bootstrap "$@"
 | |
| 	lb chroot "$@"
 | |
| 
 | |
| 	if [ -d chroot/var/lib/preinstalled-pool ]; then
 | |
| 		(cd chroot/var/lib/preinstalled-pool/ && apt-ftparchive packages . > Packages)
 | |
| 		bzip2 -9 -c chroot/var/lib/preinstalled-pool/Packages \
 | |
| 			> chroot/var/lib/preinstalled-pool/Packages.bz2
 | |
| 		cat << @@EOF > chroot/etc/apt/sources.list.preinstall
 | |
| # This is a sources.list entry for a small pool of packages
 | |
| # provided on your preinstalled filesystem for your convenience.
 | |
| #
 | |
| # It is perfectly safe to delete both this entry and the directory
 | |
| # it references, should you want to save disk space and fetch the
 | |
| # packages remotely instead.
 | |
| #
 | |
| deb file:/var/lib/preinstalled-pool/ ./
 | |
| #
 | |
| @@EOF
 | |
| 
 | |
| 		cat chroot/etc/apt/sources.list.preinstall chroot/etc/apt/sources.list \
 | |
| 			> chroot/etc/apt/sources.list.new
 | |
| 		mv chroot/etc/apt/sources.list.new chroot/etc/apt/sources.list
 | |
| 		rm chroot/etc/apt/sources.list.preinstall
 | |
| 
 | |
| 		echo "Waiting on gnupg ("$GPG_PROCESS") to finish generating a key."
 | |
| 		wait $GPG_PROCESS
 | |
| 
 | |
| 		R_ORIGIN=$(lsb_release -i -s)
 | |
| 		R_CODENAME=$(lsb_release -c -s)
 | |
| 		R_VERSION=$(lsb_release -r -s)
 | |
| 		R_PRETTYNAME=$(echo $R_CODENAME | sed -e 's/^\(.\)/\U\1/')
 | |
| 
 | |
| 		apt-ftparchive -o APT::FTPArchive::Release::Origin=$R_ORIGIN \
 | |
| 			-o APT::FTPArchive::Release::Label=$R_ORIGIN \
 | |
| 			-o APT::FTPArchive::Release::Suite=$R_CODENAME-local \
 | |
| 			-o APT::FTPArchive::Release::Version=$R_VERSION \
 | |
| 			-o APT::FTPArchive::Release::Codename=$R_CODENAME \
 | |
| 			-o APT::FTPArchive::Release::Description="$R_ORIGIN $R_PRETTYNAME Local" \
 | |
| 			release chroot/var/lib/preinstalled-pool/ > gnupg/Release
 | |
| 
 | |
| 		gpg --home gnupg --detach-sign --armor gnupg/Release
 | |
| 		mv gnupg/Release chroot/var/lib/preinstalled-pool/Release
 | |
| 		mv gnupg/Release.asc chroot/var/lib/preinstalled-pool/Release.gpg
 | |
| 		apt-key --keyring chroot/etc/apt/trusted.gpg add gnupg/pubring.gpg
 | |
| 		rm chroot/var/lib/preinstalled-pool/Packages
 | |
| 	fi
 | |
| 
 | |
| 	echo "===== Checking size of /usr/share/doc ====="
 | |
| 	echo BEGIN docdirs
 | |
| 	(cd chroot && find usr/share/doc -maxdepth 1 -type d | xargs du -s | sort -nr)
 | |
| 	echo END docdirs
 | |
| 
 | |
| 	if which fdupes >/dev/null 2>&1; then
 | |
| 		echo "===== Checking for duplicate files ====="
 | |
| 		echo "first line: <total size for dupes> <different dupes> <all dupes>"
 | |
| 		echo "data lines: <size for dupes> <number of dupes> <file size> <filename> [<filename> ...]"
 | |
| 		echo BEGIN fdupes
 | |
| 		(cd chroot \
 | |
| 		   && fdupes --recurse --noempty --sameline --size --quiet usr \
 | |
| 		   | awk '/bytes each/ {s=$1} /^usr/ { n+=1; n2+=NF-1; sum+=s*(NF-1); print s*(NF-1), NF-1, s, $0 } END {print sum, n, n2}' \
 | |
| 		   | sort -nr
 | |
| 		)
 | |
| 		echo END fdupes
 | |
| 	fi
 | |
| 
 | |
| 	lb binary "$@"
 | |
| ) 2>&1 | tee binary.log
 | |
| 
 | |
| # Link output files somewhere BuildLiveCD will be able to find them.
 | |
| PREFIX="livecd.$PROJECT${SUBARCH:+-$SUBARCH}"
 | |
| 
 | |
| case $LB_INITRAMFS in
 | |
| 	casper)
 | |
| 		INITFS="casper"
 | |
| 		;;
 | |
| 
 | |
| 	live-boot)
 | |
| 		INITFS="live"
 | |
| 		;;
 | |
| 
 | |
| 	*)
 | |
| 		INITFS="boot"
 | |
| 		;;
 | |
| esac
 | |
| 
 | |
| for OUTPUT in ext2 ext3 ext4 manifest manifest-remove size squashfs; do
 | |
| 	[ -e "binary/$INITFS/filesystem.$OUTPUT" ] || continue
 | |
| 	ln "binary/$INITFS/filesystem.$OUTPUT" "$PREFIX.$OUTPUT"
 | |
| 	chmod 644 "$PREFIX.$OUTPUT"
 | |
| done
 | |
| 
 | |
| if [ -e "binary/$INITFS/filesystem.dir" ]; then
 | |
| 	(cd "binary/$INITFS/filesystem.dir/" && tar -c *) | \
 | |
| 		gzip -9 --rsyncable > "$PREFIX.rootfs.tar.gz"
 | |
| 	chmod 644 "$PREFIX.rootfs.tar.gz"
 | |
| fi
 | |
| 
 | |
| # '--initramfs none' produces different manifest names.
 | |
| if [ -e "binary/$INITFS/filesystem.packages" ]; then
 | |
| 	ln "binary/$INITFS/filesystem.packages" "$PREFIX.manifest"
 | |
| 	chmod 644 "$PREFIX.manifest"
 | |
| fi
 | |
| if [ -e "binary/$INITFS/filesystem.packages-remove" ]; then
 | |
| 	# Not a typo, empty manifest-remove has a single LF in it. :/
 | |
| 	if [ $(cat binary/$INITFS/filesystem.packages-remove | wc -c) -gt 1 ]; then
 | |
| 		ln "binary/$INITFS/filesystem.packages-remove" "$PREFIX.manifest-remove"
 | |
| 		chmod 644 "$PREFIX.manifest-remove"
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| for FLAVOUR in $LB_LINUX_FLAVOURS; do
 | |
| 	if [ -z "$LB_LINUX_FLAVOURS" ] || [ "$LB_LINUX_FLAVOURS" = "none" ]; then
 | |
| 		continue
 | |
| 	fi
 | |
| 	KVERS="$( (cd "binary/$INITFS"; ls vmlinu?-*) | sed -n "s/^vmlinu.-\\([^-]*-[^-]*-$FLAVOUR\\)$/\\1/p" )"
 | |
| 	if [ -z "$KVERS" ]; then
 | |
| 		echo "No kernel output for $FLAVOUR!" >&2
 | |
| 		exit 1
 | |
| 	fi
 | |
| 	NUMKVERS="$(set -- $KVERS; echo $#)"
 | |
| 	if [ "$NUMKVERS" -gt 1 ]; then
 | |
| 		echo "Cannot handle more than one kernel for $FLAVOUR ($KVERS)!" >&2
 | |
| 		exit 1
 | |
| 	fi
 | |
| 	ln "binary/$INITFS/"vmlinu?-"$KVERS" "$PREFIX.kernel-$FLAVOUR"
 | |
| 	chmod 644 "$PREFIX.kernel-$FLAVOUR"
 | |
| 	if [ -e "binary/$INITFS/initrd.img-$KVERS" ]; then
 | |
| 		ln "binary/$INITFS/initrd.img-$KVERS" "$PREFIX.initrd-$FLAVOUR"
 | |
| 		chmod 644 "$PREFIX.initrd-$FLAVOUR"
 | |
| 	fi
 | |
| done
 | |
| 
 | |
| NUMFLAVOURS="$(set -- $LB_LINUX_FLAVOURS; echo $#)"
 | |
| if [ "$NUMFLAVOURS" = 1 ] && [ "$LB_LINUX_FLAVOURS" != "none" ]; then
 | |
| 	# only one kernel flavour
 | |
| 	ln -sf "$PREFIX.kernel-$LB_LINUX_FLAVOURS" "$PREFIX.kernel"
 | |
| 	ln -sf "$PREFIX.initrd-$LB_LINUX_FLAVOURS" "$PREFIX.initrd"
 | |
| fi
 | |
| 
 | |
| if [ "$SUBARCH" = "ac100" ]; then
 | |
| 	# create the md5sum file for which we are actually doing all this
 | |
| 	md5sum $PREFIX.rootfs.tar.gz >chroot/installer.md5
 | |
| 
 | |
| 	# make sure update-initramfs feels cosy and warm in the environment
 | |
| 	lb chroot_proc install "$@"
 | |
| 	lb chroot_sysfs install "$@"
 | |
| 	lb chroot_devpts install "$@"
 | |
| 
 | |
| 	# re-create initrd to contain the installer.md5 file
 | |
| 	Chroot chroot "update-initramfs -k all -t -u -v"
 | |
| 
 | |
| 	# create boot.img
 | |
| 	Chroot chroot "abootimg --create /boot/installer-${KVERS}.img -f /boot/bootimg.cfg -r /boot/initrd.img-${KVERS} -k /boot/vmlinuz-${KVERS}"
 | |
| 
 | |
| 	# clean up
 | |
| 	lb chroot_devpts remove "$@"
 | |
| 	lb chroot_sysfs remove "$@"
 | |
| 	lb chroot_proc remove "$@"
 | |
| 
 | |
| 	cp "chroot/boot/installer-${KVERS}.img" "$PREFIX.bootimg-$FLAVOUR"
 | |
| fi
 | |
| 
 | |
| # LTSP chroot building (only in 32bit and for Edubuntu (DVD))
 | |
| case $PROJECT in
 | |
| 	edubuntu-dvd)
 | |
| 		if [ "$ARCH" = i386 ]; then
 | |
| 			echo "Building LTSP chroot"
 | |
| 			ltsp-build-client --base $(pwd) --mirror $LB_PARENT_MIRROR_BOOTSTRAP --arch $ARCH --dist $LB_PARENT_DISTRIBUTION --chroot ltsp-live --late-packages ldm-edubuntu-theme,plymouth-theme-edubuntu --purge-chroot --skipimage
 | |
| 			mkdir -p images
 | |
| 			mksquashfs ltsp-live images/ltsp-live.img -noF -noD -noI -no-exports -e cdrom
 | |
| 			rm -Rf ltsp-live
 | |
| 			if [ -f images/ltsp-live.img ]; then
 | |
| 				mv images/ltsp-live.img livecd.$PROJECT-ltsp.squashfs
 | |
| 				chmod 0644 livecd.$PROJECT-ltsp.squashfs
 | |
| 				rmdir --ignore-fail-on-non-empty images
 | |
| 			else
 | |
| 				echo "LTSP: Unable to build the chroot, see above for details."
 | |
| 			fi
 | |
| 		fi
 | |
| 		;;
 | |
| esac
 |