mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-02-10 20:57:29 +00:00
Imported using git-ubuntu import. Changelog parent: bc2b9aed67e9a153c42c0aea158f3bc3d8fe2021 New changelog entries: * merge lp:~sergiusens/livecd-rootfs/no-walinuxagent to remove all the hackery that was initially needed for azure snappy images, this got properly implemented now.
830 lines
22 KiB
Bash
Executable File
830 lines
22 KiB
Bash
Executable File
#! /bin/sh
|
|
set -e
|
|
|
|
rm -rf config
|
|
|
|
echo "Building on $(hostname --fqdn)"
|
|
|
|
SEEDMIRROR=http://people.canonical.com/~ubuntu-archive/seeds/
|
|
if [ -z "$MIRROR" ]; then
|
|
case $(hostname --fqdn) in
|
|
bld-*.mmjgroup.com) ;;
|
|
*.mmjgroup.com)
|
|
case $ARCH in
|
|
i386|amd64) MIRROR=http://archive.mmjgroup.com/ubuntu/ ;;
|
|
*) MIRROR=http://archive.mmjgroup.com/ubuntu-ports/ ;;
|
|
esac
|
|
;;
|
|
*.0c3.net)
|
|
case $ARCH in
|
|
i386|amd64) MIRROR=http://mirrors.0c3.net/ubuntu/ ;;
|
|
*) MIRROR=http://mirrors.0c3.net/ubuntu-ports/ ;;
|
|
esac
|
|
;;
|
|
*.ubuntu.com) MIRROR=http://ftpmaster.internal/ubuntu/
|
|
SEEDMIRROR=http://archive-team.internal/seeds/
|
|
;;
|
|
*.warthogs.hbd.com) MIRROR=http://ftpmaster.internal/ubuntu/
|
|
SEEDMIRROR=http://archive-team.internal/seeds/
|
|
;;
|
|
*.buildd) MIRROR=http://ftpmaster.internal/ubuntu/
|
|
SEEDMIRROR=http://archive-team.internal/seeds/
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
mkdir -p config/package-lists
|
|
|
|
add_task ()
|
|
{
|
|
local pass="$1"
|
|
shift
|
|
local task
|
|
|
|
# The removal of direct task installation support from live-build
|
|
# poses some problems. If the chroot has multiarch configured - for
|
|
# example, if we're building for amd64 - then dumpavail will show
|
|
# foreign-architecture packages which will have their own Task
|
|
# lines, but which we don't want to install. (Compare
|
|
# PackageContainerInterface::FromTask in apt, which restricts task
|
|
# expansion to the native architecture.) We therefore restrict our
|
|
# search to stanzas with Architecture: $ARCH or all.
|
|
#
|
|
# However, even this may not be accurate enough. At the moment I
|
|
# have no idea what happens if an Architecture: all package has
|
|
# different Task fields on different architectures. This is
|
|
# probably a lurking timebomb that we need to fix. In the meantime,
|
|
# the Architecture restriction at least saves us from abject
|
|
# failure.
|
|
|
|
for task; do
|
|
# We need a ridiculous number of backslashes to protect
|
|
# parentheses from eval.
|
|
echo "!chroot chroot apt-cache dumpavail | grep-dctrl -nsPackage \\\\\\( -XFArchitecture $ARCH -o -XFArchitecture all \\\\\\) -a -wFTask $task" >> "config/package-lists/livecd-rootfs.list.chroot_$pass"
|
|
done
|
|
}
|
|
|
|
add_package ()
|
|
{
|
|
local pass="$1"
|
|
shift
|
|
local pkg
|
|
|
|
for pkg; do
|
|
echo "$pkg" >> "config/package-lists/livecd-rootfs.list.chroot_$pass"
|
|
done
|
|
}
|
|
|
|
OPTS=
|
|
COMPONENTS=
|
|
BINARY_REMOVE_LINUX=:
|
|
BINARY_IMAGES=none
|
|
MEMTEST=none
|
|
SOURCE='--source false'
|
|
BOOTLOADER=none
|
|
BOOTAPPEND_LIVE=
|
|
LIVE_TASK=
|
|
PREINSTALLED=false
|
|
PREINSTALL_POOL=
|
|
PREINSTALL_POOL_SEEDS=
|
|
|
|
CHROOT_HOOKS=
|
|
BINARY_HOOKS=
|
|
|
|
add_chroot_hook ()
|
|
{
|
|
CHROOT_HOOKS="${CHROOT_HOOKS:+$CHROOT_HOOKS }$1"
|
|
}
|
|
|
|
add_binary_hook ()
|
|
{
|
|
BINARY_HOOKS="${BINARY_HOOKS:+$BINARY_HOOKS }$1"
|
|
}
|
|
|
|
case $IMAGEFORMAT in
|
|
ext2|ext3|ext4)
|
|
OPTS="${OPTS:+$OPTS }--initramfs none --chroot-filesystem $IMAGEFORMAT"
|
|
PREINSTALLED=true
|
|
case $SUBPROJECT in
|
|
wubi)
|
|
add_package install lupin-support
|
|
COMPONENTS='main restricted universe multiverse'
|
|
;;
|
|
*)
|
|
case $PROJECT in
|
|
ubuntu-cpc)
|
|
;;
|
|
*)
|
|
add_package live jasper
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
plain)
|
|
OPTS="${OPTS:+$OPTS }--initramfs none --chroot-filesystem $IMAGEFORMAT"
|
|
PREINSTALLED=true
|
|
;;
|
|
|
|
*)
|
|
case $PROJECT in
|
|
ubuntu-server|ubuntu-touch)
|
|
;;
|
|
*)
|
|
add_package live lupin-casper
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
if [ "$PREINSTALLED" = "true" ] && [ "$SUBPROJECT" != "wubi" ]; then
|
|
# This is an oem-config preinstalled image, touch a random file that
|
|
# we can refer back to during build, cause that's wildly hackish
|
|
touch config/oem-config-preinstalled
|
|
case $PROJECT in
|
|
kubuntu*)
|
|
add_package live oem-config-kde ubiquity-frontend-kde
|
|
add_package live ubiquity-slideshow-kubuntu
|
|
;;
|
|
lubuntu*)
|
|
add_package live oem-config-gtk ubiquity-frontend-gtk
|
|
add_package live ubiquity-slideshow-lubuntu
|
|
;;
|
|
xubuntu*)
|
|
add_package live oem-config-gtk ubiquity-frontend-gtk
|
|
add_package live ubiquity-slideshow-xubuntu
|
|
;;
|
|
ubuntu-mate)
|
|
add_package live oem-config-gtk ubiquity-frontend-gtk
|
|
add_package live ubiquity-slideshow-ubuntu-mate
|
|
;;
|
|
ubuntu-server)
|
|
add_package live oem-config-debconf ubiquity-frontend-debconf
|
|
;;
|
|
ubuntu-core|base|ubuntu-touch|ubuntu-cpc|ubuntu-desktop-next)
|
|
;;
|
|
*)
|
|
add_package live oem-config-gtk ubiquity-frontend-gtk
|
|
add_package live ubiquity-slideshow-ubuntu
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case $BINARYFORMAT in
|
|
iso*|usb*)
|
|
BINARY_IMAGES="$BINARYFORMAT"
|
|
MEMTEST=memtest86+
|
|
BOOTLOADER=syslinux
|
|
OPTS="${OPTS:+$OPTS }--zsync=false"
|
|
;;
|
|
esac
|
|
|
|
case $PROJECT in
|
|
ubuntu|ubuntu-dvd)
|
|
add_task install minimal standard
|
|
case "$ARCH+$SUBARCH" in
|
|
armhf+omap4)
|
|
# Don't use the task as this drags in the regular X
|
|
# stack (the metapackage doesn't). We want the
|
|
# "reverted" one.
|
|
add_package install ubuntu-desktop \
|
|
xserver-xorg-core-omap-revert \
|
|
xserver-xorg-video-omap-revert \
|
|
xserver-xorg-input-evdev-omap-revert
|
|
;;
|
|
*)
|
|
add_task install ubuntu-desktop
|
|
;;
|
|
esac
|
|
LIVE_TASK='ubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
;;
|
|
|
|
ubuntu-desktop-next)
|
|
add_task install minimal standard ubuntu-desktop-next ubuntu-sdk-libs
|
|
COMPONENTS='main restricted universe'
|
|
LIVE_TASK='ubuntu-touch-live'
|
|
KERNEL_FLAVOURS=generic
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
|
|
# system image snappy desktop next image
|
|
# mvo: This is for cron.daily-preinstalled
|
|
# CDIMAGE_PREINSTALLED is not passed from build.py
|
|
# and PREINSTALLED means something different. So
|
|
# we use SUBPROJECT to pass on the information
|
|
if [ "$SUBPROJECT" = "system-image" ]; then
|
|
OPTS="${OPTS:+$OPTS }--linux-packages=linux-image"
|
|
fi
|
|
;;
|
|
|
|
kubuntu|kubuntu-dvd)
|
|
add_task install minimal standard
|
|
case "$ARCH+$SUBARCH" in
|
|
armhf+omap4)
|
|
# Don't use the task as this drags in the regular X
|
|
# stack (the metapackage doesn't). We want the
|
|
# "reverted" one.
|
|
add_package install kubuntu-desktop \
|
|
xserver-xorg-core-omap-revert \
|
|
xserver-xorg-video-omap-revert \
|
|
xserver-xorg-input-evdev-omap-revert
|
|
;;
|
|
*)
|
|
add_task install kubuntu-desktop
|
|
;;
|
|
esac
|
|
LIVE_TASK='kubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
add_chroot_hook remove-gnome-icon-cache
|
|
;;
|
|
|
|
kubuntu-active)
|
|
add_task install minimal standard kubuntu-active
|
|
LIVE_TASK='kubuntu-active-live'
|
|
COMPONENTS='main restricted universe'
|
|
add_chroot_hook remove-gnome-icon-cache
|
|
;;
|
|
|
|
kubuntu-plasma5)
|
|
add_task install minimal standard
|
|
add_package install kubuntu-plasma5-desktop
|
|
# Technically cheating, but PPAs don't have tasks and the
|
|
# live seed doesn't have a corresponding metapackage. We'll
|
|
# get away with this as long as kubuntu-desktop and
|
|
# kubuntu-plasma5-desktop don't grow too far apart.
|
|
LIVE_TASK='kubuntu-live'
|
|
COMPONENTS='main restricted universe'
|
|
add_chroot_hook remove-gnome-icon-cache
|
|
;;
|
|
|
|
edubuntu|edubuntu-dvd)
|
|
add_task install minimal standard ubuntu-desktop edubuntu-desktop-gnome
|
|
LIVE_TASK='edubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
xubuntu)
|
|
add_task install minimal standard xubuntu-desktop
|
|
add_package install xterm
|
|
LIVE_TASK='xubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
case $ARCH in
|
|
amd64|i386) KERNEL_FLAVOURS=generic ;;
|
|
esac
|
|
;;
|
|
|
|
ubuntu-netbook)
|
|
add_task install minimal standard ubuntu-netbook
|
|
LIVE_TASK='netbook-live'
|
|
;;
|
|
|
|
mythbuntu)
|
|
add_task install minimal standard mythbuntu-desktop
|
|
LIVE_TASK='mythbuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
;;
|
|
|
|
lubuntu)
|
|
add_task install minimal standard lubuntu-desktop
|
|
LIVE_TASK='lubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
case $ARCH in
|
|
amd64|i386) KERNEL_FLAVOURS=generic ;;
|
|
esac
|
|
|
|
# The Lubuntu STRUCTURE file has "feature
|
|
# no-follow-recommends". Mirror this.
|
|
export APT_OPTIONS="--yes --no-install-recommends"
|
|
;;
|
|
|
|
ubuntu-gnome)
|
|
add_task install minimal standard ubuntu-gnome-desktop
|
|
LIVE_TASK='ubuntu-gnome-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
ubuntu-mate)
|
|
add_task install minimal standard ubuntu-mate-core ubuntu-mate-desktop
|
|
LIVE_TASK='ubuntu-mate-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
# The Ubuntu MATE STRUCTURE file has "feature
|
|
# no-follow-recommends". Mirror this.
|
|
export APT_OPTIONS="--yes --no-install-recommends"
|
|
;;
|
|
|
|
ubuntustudio-dvd)
|
|
add_task install minimal standard ubuntustudio-desktop ubuntustudio-audio ubuntustudio-font-meta ubuntustudio-graphics ubuntustudio-video ubuntustudio-publishing ubuntustudio-photography
|
|
COMPONENTS='main restricted universe multiverse'
|
|
case $ARCH in
|
|
amd64|i386) KERNEL_FLAVOURS=lowlatency ;;
|
|
esac
|
|
;;
|
|
|
|
ubuntukylin)
|
|
add_task install minimal standard ubuntukylin-desktop
|
|
add_package install ubuntukylin-default-settings
|
|
LIVE_TASK='ubuntukylin-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-generic ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
base)
|
|
add_task install minimal standard
|
|
;;
|
|
|
|
ubuntu-server)
|
|
add_task install minimal
|
|
COMPONENTS='main'
|
|
PREINSTALL_POOL_SEEDS='server-ship'
|
|
;;
|
|
|
|
ubuntu-core)
|
|
# mvo: This is for cron.daily-preinstalled
|
|
# CDIMAGE_PREINSTALLED is not passed from build.py
|
|
# and PREINSTALLED means something different. So
|
|
# we use SUBPROJECT to pass on the information
|
|
if [ "$SUBPROJECT" = "system-image" ]; then
|
|
OPTS="${OPTS:+$OPTS }--apt-recommends false"
|
|
|
|
# some workarounds because the seeds are not quite
|
|
# corrent at the moment
|
|
add_package install dbus
|
|
add_package install isc-dhcp-client
|
|
add_package install libpam-systemd
|
|
# no Task: header yet
|
|
add_package install ubuntu-snappy
|
|
|
|
# no minimal as we want to be really minimal
|
|
#add_task install minimal
|
|
add_task install ubuntu-core
|
|
|
|
case $ARCH in
|
|
i386)
|
|
# efi support can go once the task
|
|
# header is available for grub-efi-ia32-bin
|
|
add_package install grub-efi-ia32-bin
|
|
;;
|
|
esac
|
|
|
|
# generic kernel etc
|
|
KERNEL_FLAVOURS=generic
|
|
case $ARCH in
|
|
i386|amd64)
|
|
add_package install grub-pc
|
|
;;
|
|
armhf)
|
|
add_package install flash-kernel u-boot-tools
|
|
;;
|
|
esac
|
|
OPTS="${OPTS:+$OPTS }--linux-packages=linux-image"
|
|
|
|
# contains the framework definition
|
|
add_package install ubuntu-core-libs
|
|
|
|
# universe needed for 'system-image-cli'
|
|
COMPONENTS='main restricted universe'
|
|
fi
|
|
OPTS="${OPTS:+$OPTS }--bootstrap-flavour=minimal"
|
|
;;
|
|
|
|
ubuntu-touch)
|
|
add_package install ubuntu-minimal ubuntu-touch systemd-sysv- packagekit ubuntu-system-settings-online-accounts
|
|
COMPONENTS='main restricted universe'
|
|
BOOTAPPEND_LIVE='hostname=ubuntu-phablet username=ubuntu'
|
|
export LB_BOOTSTRAP_INCLUDE='apt-transport-https gnupg'
|
|
OPTS="${OPTS:+$OPTS }--apt-recommends false"
|
|
OPTS="${OPTS:+$OPTS }--compression gzip"
|
|
OPTS="${OPTS:+$OPTS }--system normal"
|
|
OPTS="${OPTS:+$OPTS }--zsync false"
|
|
|
|
# TODO cjwatson 2014-07-17: This is a bit of an abuse of
|
|
# SUBPROJECT, but it's a handy thing that launchpad-buildd
|
|
# already passes through to us that we weren't otherwise
|
|
# using here.
|
|
case $SUBPROJECT in
|
|
ubuntu-rtm/dogfood)
|
|
MIRROR=http://derived-archive.dogfood.content.paddev.net/ubuntu-rtm/
|
|
OPTS="${OPTS:+$OPTS }--apt-secure false"
|
|
OPTS="${OPTS:+$OPTS }--mirror-chroot-security ${MIRROR}"
|
|
OPTS="${OPTS:+$OPTS }--mirror-binary-security ${MIRROR}"
|
|
OPTS="${OPTS:+$OPTS }--mirror-binary ${MIRROR}"
|
|
;;
|
|
ubuntu-rtm)
|
|
MIRROR=http://derived.archive.canonical.com/ubuntu-rtm/
|
|
OPTS="${OPTS:+$OPTS }--mirror-chroot-security ${MIRROR}"
|
|
OPTS="${OPTS:+$OPTS }--mirror-binary-security ${MIRROR}"
|
|
OPTS="${OPTS:+$OPTS }--mirror-binary ${MIRROR}"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
ubuntu-cpc)
|
|
;;
|
|
|
|
*)
|
|
echo "unknown project $PROJECT" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
if [ "$PREINSTALLED" != "true" ] && [ "$LIVE_TASK" ]; then
|
|
add_task live "$LIVE_TASK"
|
|
fi
|
|
|
|
case $PROJECT in
|
|
ubuntu-dvd)
|
|
add_task install ubuntu-usb
|
|
add_task live ubuntu-usb-live
|
|
;;
|
|
|
|
*-dvd)
|
|
add_task live "$PROJECT-live"
|
|
;;
|
|
esac
|
|
|
|
case $ARCH in
|
|
armel|armhf)
|
|
KERNEL_FLAVOURS="${SUBARCH:-$KERNEL_FLAVOURS}"
|
|
case $SUBARCH in
|
|
dove)
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
omap)
|
|
add_package install u-boot-linaro-omap3-beagle u-boot-tools
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
omap4)
|
|
case $PROJECT in
|
|
ubuntu-server|ubuntu-core|base)
|
|
add_package install u-boot-linaro-omap4-panda u-boot-tools
|
|
;;
|
|
*)
|
|
add_package install u-boot-linaro-omap4-panda u-boot-tools pvr-omap4
|
|
;;
|
|
esac
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
mx5)
|
|
COMPONENTS='main restricted universe'
|
|
KERNEL_FLAVOURS=linaro-lt-mx5
|
|
add_package install flash-kernel u-boot-linaro-mx53loco u-boot-tools
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
ac100)
|
|
COMPONENTS='main restricted universe multiverse'
|
|
add_package install zram-config abootimg
|
|
add_package live ac100-tarball-installer
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
nexus7)
|
|
COMPONENTS='main restricted universe multiverse'
|
|
add_package install zram-config abootimg
|
|
add_package install nvidia-tegra3 ubuntu-defaults-nexus7
|
|
add_package live ac100-tarball-installer
|
|
BINARY_REMOVE_LINUX=false
|
|
mkdir -p config/preseed
|
|
echo "linux-firmware-nexus7 shared/nexus7_notice_accepted boolean true" >config/preseed/linux-firmware-nexus7.preseed.chroot
|
|
echo "d-i passwd/auto-login boolean true" >config/preseed/autologin.preseed.chroot
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
case $PROJECT in
|
|
ubuntu-server|ubuntu-core|ubuntu-touch)
|
|
case $SUBPROJECT in
|
|
system-image)
|
|
# keep the kernel for the system-image build
|
|
;;
|
|
*)
|
|
OPTS="${OPTS:+$OPTS }--linux-packages=none --initramfs=none"
|
|
KERNEL_FLAVOURS=none
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
esac
|
|
esac
|
|
|
|
if [ "$PROJECT" = "ubuntu-cpc" ]; then
|
|
BINARY_REMOVE_LINUX=false
|
|
OPTS="${OPTS:+$OPTS }--linux-packages=none --initramfs=none"
|
|
KERNEL_FLAVOURS=none
|
|
case $ARCH in
|
|
armhf)
|
|
add_package install flash-kernel linux-generic-lpae
|
|
add_task install server
|
|
;;
|
|
arm64)
|
|
add_package install flash-kernel linux-generic
|
|
add_task install server
|
|
;;
|
|
ppc64el)
|
|
add_package install linux-virtual
|
|
add_task install server
|
|
;;
|
|
*)
|
|
add_package install linux-virtual
|
|
;;
|
|
esac
|
|
OPTS="${OPTS:+$OPTS }--system=normal"
|
|
OPTS="${OPTS:+$OPTS }--hdd-label=cloudimg-rootfs"
|
|
OPTS="${OPTS:+$OPTS }--ext-resize-blocks=536870912 --ext-block-size=4096"
|
|
OPTS="${OPTS:+$OPTS }--ext-fudge-factor=15"
|
|
add_task install minimal standard cloud-image
|
|
add_package install landscape-client ubuntu-minimal
|
|
fi
|
|
|
|
add_chroot_hook update-apt-file-cache
|
|
add_chroot_hook update-apt-xapian-index
|
|
add_chroot_hook update-mlocate-database
|
|
add_chroot_hook remove-dbus-machine-id
|
|
add_chroot_hook remove-openssh-server-host-keys
|
|
add_chroot_hook remove-udev-persistent-rules
|
|
|
|
case $PROJECT in
|
|
ubuntu-server|ubuntu-cpc)
|
|
;;
|
|
|
|
*)
|
|
add_chroot_hook remove-python-py
|
|
;;
|
|
esac
|
|
|
|
case $SUBPROJECT in
|
|
wubi)
|
|
add_binary_hook build-wubildr
|
|
;;
|
|
esac
|
|
|
|
lb config noauto \
|
|
--mode ubuntu \
|
|
--distribution "$SUITE" \
|
|
--bootstrap-keyring ubuntu-keyring \
|
|
--binary-images "$BINARY_IMAGES" \
|
|
--memtest "$MEMTEST" \
|
|
$SOURCE \
|
|
--build-with-chroot false \
|
|
${MIRROR:+--parent-mirror-bootstrap $MIRROR} \
|
|
${COMPONENTS:+--parent-archive-areas "$COMPONENTS"} \
|
|
--apt-source-archives false \
|
|
${KERNEL_FLAVOURS:+--linux-flavours "$KERNEL_FLAVOURS"} \
|
|
--initsystem none \
|
|
--bootloader "$BOOTLOADER" \
|
|
--initramfs-compression lzma \
|
|
${BOOTAPPEND_LIVE:+--bootappend-live "$BOOTAPPEND_LIVE"} \
|
|
$OPTS \
|
|
"$@"
|
|
|
|
echo "LB_CHROOT_HOOKS=\"$CHROOT_HOOKS\"" >> config/chroot
|
|
echo "LB_BINARY_HOOKS=\"$BINARY_HOOKS\"" >> config/binary
|
|
echo "BUILDSTAMP=\"$NOW\"" >> config/binary
|
|
|
|
case $PROJECT in
|
|
ubuntu-server)
|
|
cat > config/hooks/100-remove-fstab.chroot <<EOF
|
|
#! /bin/sh
|
|
rm -f /etc/fstab
|
|
EOF
|
|
;;
|
|
|
|
ubuntukylin)
|
|
cat > config/hooks/100-ubuntukylin.chroot <<EOF
|
|
#! /bin/sh
|
|
set -e
|
|
HOOK=/usr/share/ubuntukylin-default-settings/hooks/chroot
|
|
if [ -x \$HOOK ]; then
|
|
exec \$HOOK
|
|
fi
|
|
exit 0
|
|
EOF
|
|
;;
|
|
esac
|
|
|
|
if $BINARY_REMOVE_LINUX; then
|
|
cat > config/binary_rootfs/excludes << EOF
|
|
boot/vmlinu?-*
|
|
boot/initrd.img-*
|
|
EOF
|
|
fi
|
|
|
|
if [ "$PROPOSED" ]; then
|
|
. config/bootstrap
|
|
|
|
cat > config/archives/proposed.list.chroot << EOF
|
|
deb $LB_PARENT_MIRROR_BINARY_VOLATILE $SUITE-proposed $LB_PARENT_ARCHIVE_AREAS
|
|
EOF
|
|
cp -a config/archives/proposed.list.chroot \
|
|
config/archives/proposed.list.binary
|
|
fi
|
|
|
|
case $PROJECT:$SUBPROJECT in
|
|
*-dvd:*)
|
|
. config/bootstrap
|
|
|
|
cat > config/archives/dvd.list.binary << EOF
|
|
deb $LB_PARENT_MIRROR_BINARY $SUITE universe multiverse
|
|
deb $LB_PARENT_MIRROR_BINARY_SECURITY $SUITE-security universe multiverse
|
|
deb $LB_PARENT_MIRROR_BINARY_VOLATILE $SUITE-updates universe multiverse
|
|
EOF
|
|
if [ "$PROPOSED" ]; then
|
|
cat >> config/archives/dvd.list.binary << EOF
|
|
deb $LB_PARENT_MIRROR_BINARY_VOLATILE $SUITE-proposed universe multiverse
|
|
EOF
|
|
fi
|
|
;;
|
|
|
|
ubuntu-touch:*|ubuntu-core:system-image|ubuntu-desktop-next:system-image|ubuntu-cpc:*)
|
|
cp -af /usr/share/livecd-rootfs/live-build/${PROJECT}/* \
|
|
config/
|
|
;;
|
|
esac
|
|
|
|
if [ "$EXTRA_PPAS" ]; then
|
|
rm -f config/archives/extra-ppas.list.chroot \
|
|
config/archives/extra-ppas.pref.chroot \
|
|
config/archives/extra-ppas.key.chroot
|
|
gpg_tmpdir="$(mktemp -d)"
|
|
run_gpg () {
|
|
gpg --no-default-keyring --no-options --homedir "$gpg_tmpdir" \
|
|
--secret-keyring "$gpg_tmpdir/secring.gpg" \
|
|
--keyserver hkp://keyserver.ubuntu.com:80/ \
|
|
"$@"
|
|
}
|
|
for extra_ppa in $EXTRA_PPAS; do
|
|
extra_ppa_pin=''
|
|
extra_ppa_origin=''
|
|
case $extra_ppa in
|
|
*:*)
|
|
extra_ppa_pin=${extra_ppa#*:}
|
|
extra_ppa=${extra_ppa%:*}
|
|
;;
|
|
esac
|
|
extra_ppa_fingerprint="$(/usr/share/livecd-rootfs/get-ppa-fingerprint "$extra_ppa")"
|
|
echo "deb http://ppa.launchpad.net/$extra_ppa/ubuntu @DISTRIBUTION@ main" >> config/archives/extra-ppas.list.chroot
|
|
if [ -n "$extra_ppa_pin" ]; then
|
|
extra_ppa_origin="LP-PPA-$(echo $extra_ppa | sed -e 's,/ppa$,,' -e 's,/,-,')"
|
|
echo "Package: *" >> config/archives/extra-ppas.pref.chroot
|
|
echo "Pin: release o=$extra_ppa_origin" >> config/archives/extra-ppas.pref.chroot
|
|
echo "Pin-Priority: $extra_ppa_pin" >> config/archives/extra-ppas.pref.chroot
|
|
echo "" >> config/archives/extra-ppas.pref.chroot
|
|
fi
|
|
run_gpg --keyring "$gpg_tmpdir/pubring.gpg" \
|
|
--recv "$extra_ppa_fingerprint"
|
|
run_gpg --keyring "$gpg_tmpdir/pubring.gpg" \
|
|
--output "$gpg_tmpdir/export.gpg" \
|
|
--export "$extra_ppa_fingerprint"
|
|
got_fingerprint="$(
|
|
run_gpg --keyring "$gpg_tmpdir/export.gpg" \
|
|
--fingerprint --batch --with-colons |
|
|
grep '^fpr:' | cut -d: -f10)"
|
|
if [ "$got_fingerprint" != "$extra_ppa_fingerprint" ]; then
|
|
echo "Fingerprints do not match. Got:" >&2
|
|
echo "$got_fingerprint" | sed 's/^/ /' >&2
|
|
echo "Expected:" >&2
|
|
echo " $extra_ppa_fingerprint" >&2
|
|
exit 1
|
|
fi
|
|
cat "$gpg_tmpdir/export.gpg" >> config/archives/extra-ppas.key.chroot
|
|
rm -f "$gpg_tmpdir/export.gpg"
|
|
done
|
|
rm -rf "$gpg_tmpdir"
|
|
cp -a config/archives/extra-ppas.list.chroot \
|
|
config/archives/extra-ppas.list.binary
|
|
cp -a config/archives/extra-ppas.key.chroot \
|
|
config/archives/extra-ppas.key.binary
|
|
if [ -f config/archives/extra-ppas.pref.chroot ]; then
|
|
cp -a config/archives/extra-ppas.pref.chroot \
|
|
config/archives/extra-ppas.pref.binary
|
|
fi
|
|
fi
|
|
|
|
case $SUBPROJECT in
|
|
ubuntu-rtm|ubuntu-rtm/*)
|
|
# debootstrap doesn't know about ubuntu-rtm series directly. Rather
|
|
# than having to teach it, we employ a few hacks to make it use the
|
|
# Ubuntu script instead.
|
|
mkdir -p config/fake_debootstrap_dir/scripts
|
|
ln -s /usr/share/debootstrap/devices.tar.gz \
|
|
config/fake_debootstrap_dir/
|
|
ln -s /usr/share/debootstrap/functions config/fake_debootstrap_dir/
|
|
ln -s /usr/share/debootstrap/scripts/gutsy \
|
|
"config/fake_debootstrap_dir/scripts/$SUITE"
|
|
echo 'export DEBOOTSTRAP_DIR="$PWD/config/fake_debootstrap_dir"' \
|
|
>> config/bootstrap
|
|
;;
|
|
esac
|
|
|
|
# cribbed from cdimage, perhaps this should be a small helper script in germinate?
|
|
add_inheritance () {
|
|
case " $inherit " in
|
|
*" $1 "*)
|
|
;;
|
|
*)
|
|
inherit="${inherit:+$inherit }$1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
expand_inheritance () {
|
|
for seed in $(grep "^$1:" config/germinate-output/structure | cut -d: -f2); do
|
|
expand_inheritance "$seed"
|
|
done
|
|
add_inheritance "$1"
|
|
}
|
|
|
|
inheritance () {
|
|
inherit=
|
|
expand_inheritance "$1"
|
|
echo "$inherit"
|
|
}
|
|
|
|
if [ "$PREINSTALLED" = "true" ]; then
|
|
if [ -n "$PREINSTALL_POOL_SEEDS" ]; then
|
|
mkdir -p config/germinate-output
|
|
case $PROJECT in
|
|
kubuntu-active*)
|
|
SEED=kubuntu-active.$SUITE
|
|
;;
|
|
kubuntu*)
|
|
SEED=kubuntu.$SUITE
|
|
;;
|
|
xubuntu*)
|
|
SEED=xubuntu.$SUITE
|
|
;;
|
|
*)
|
|
SEED=ubuntu.$SUITE
|
|
;;
|
|
esac
|
|
(cd config/germinate-output && germinate --no-rdepends --no-installer \
|
|
-S $SEEDMIRROR -m $MIRROR -d $SUITE -s $SEED \
|
|
${COMPONENTS:+-c "$COMPONENTS"} -a $ARCH)
|
|
|
|
UNWANTED_SEEDS="${LIVE_TASK:+$LIVE_TASK }boot installer required"
|
|
for i in $UNWANTED_SEEDS; do
|
|
UNWANTED_SEEDS="${UNWANTED_SEEDS:+$UNWANTED_SEEDS }$(inheritance $i)"
|
|
done
|
|
|
|
for i in $PREINSTALL_POOL_SEEDS; do
|
|
PREINSTALL_POOL_SEEDS="${PREINSTALL_POOL_SEEDS:+$PREINSTALL_POOL_SEEDS }$(inheritance $i)"
|
|
done
|
|
|
|
for i in $PREINSTALL_POOL_SEEDS; do
|
|
case " $UNWANTED_SEEDS " in
|
|
*" $i "*)
|
|
;;
|
|
*)
|
|
PPS_EXP="${PPS_EXP:+$PPS_EXP }$i"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
for i in $PPS_EXP; do
|
|
PREINSTALL_POOL="$PREINSTALL_POOL $(awk '{print $1}' \
|
|
config/germinate-output/$i | egrep -v '^-|^Package|^\|' | tr '\n' ' ')"
|
|
done
|
|
fi
|
|
if [ -n "$PREINSTALL_POOL" ]; then
|
|
mkdir -p config/gnupg
|
|
mkdir -p config/indices
|
|
for component in $COMPONENTS; do
|
|
(cd config/indices && \
|
|
wget $MIRROR/indices/override.$SUITE.$component && \
|
|
wget $MIRROR/indices/override.$SUITE.extra.$component \
|
|
)
|
|
done
|
|
cat > config/hooks/100-preinstall-pool.chroot <<EOF
|
|
#! /bin/sh
|
|
mkdir -p /var/lib/preinstalled-pool/pool/
|
|
cd /var/lib/preinstalled-pool/pool/
|
|
apt-get -y download $PREINSTALL_POOL
|
|
EOF
|
|
fi
|
|
fi
|