mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-02-10 12:47:30 +00:00
shim-signed depends on grub-efi-amd64-signed, which in turn has alternative depends on either `grub-efi-amd64 | grub-pc`. However to support booting with either via shim&signed-grub and BIOS, the choice must be made to install grub-pc, not grub-efi-amd64. This makes images consistent with Ubuntu Deskop, Live Server, buildd bootable images; all of which already do install grub-pc and shim-signed. Additionally, this will ensure that autoremove is run after installing anything in the CPC build hooks. This is done to avoid shipping images that include packages that are autoremovable. This will clean-up as packages are installed and detect any breakage at build time. LP: #1901906
1290 lines
36 KiB
Bash
Executable File
1290 lines
36 KiB
Bash
Executable File
#! /bin/sh
|
|
set -e
|
|
|
|
rm -rf config
|
|
|
|
echo "Building on $(hostname --fqdn)"
|
|
SUITENUM=$(distro-info --series="$SUITE" -r | awk '{ print $1 }')
|
|
HWE_SUFFIX="hwe-${SUITENUM}"
|
|
|
|
SEEDMIRROR=http://people.canonical.com/~ubuntu-archive/seeds/
|
|
if [ -z "$MIRROR" ]; then
|
|
case $(hostname --fqdn) in
|
|
*.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/
|
|
;;
|
|
*.buildd|lp-*) MIRROR=http://ftpmaster.internal/ubuntu/
|
|
SEEDMIRROR=http://archive-team.internal/seeds/
|
|
;;
|
|
*.ppa|*.scalingstack) MIRROR=http://ftpmaster.internal/ubuntu/
|
|
SEEDMIRROR=http://archive-team.internal/seeds/
|
|
;;
|
|
*) case $ARCH in
|
|
i386|amd64) MIRROR=http://archive.ubuntu.com/ubuntu/ ;;
|
|
*) MIRROR=http://ports.ubuntu.com/ubuntu-ports/ ;;
|
|
esac
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
mkdir -p config
|
|
cp -af /usr/share/livecd-rootfs/live-build/functions config/functions
|
|
cp -af /usr/share/livecd-rootfs/live-build/snap-seed-parse.py config/snap-seed-parse
|
|
|
|
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
|
|
if [ "$task" = "ubuntu-budgie-desktop" ]; then
|
|
filter="| grep -v '^linux.*tools'"
|
|
else
|
|
filter=""
|
|
fi
|
|
if [ -n "$HWE" ]; then
|
|
# If HWE is set, we strip out drivers not available in the
|
|
# HWE stack, then sed the rest with their HWE suffixes:
|
|
filter="$filter | sed -e 's/xserver-xorg.*/&-${HWE_SUFFIX}/'"
|
|
fi
|
|
# 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 $filter" >> "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=
|
|
PREFIX="livecd.$PROJECT${SUBARCH:+-$SUBARCH}"
|
|
|
|
CHROOT_HOOKS=
|
|
BINARY_HOOKS=
|
|
|
|
APT_OPTIONS=" --yes -oDebug::pkgDepCache::AutoInstall=yes "
|
|
|
|
add_chroot_hook ()
|
|
{
|
|
CHROOT_HOOKS="${CHROOT_HOOKS:+$CHROOT_HOOKS }$1"
|
|
}
|
|
|
|
add_binary_hook ()
|
|
{
|
|
BINARY_HOOKS="${BINARY_HOOKS:+$BINARY_HOOKS }$1"
|
|
}
|
|
|
|
if [ -z "${IMAGEFORMAT:-}" ]; then
|
|
case $PROJECT:${SUBPROJECT:-} in
|
|
ubuntu-cpc:*|ubuntu:desktop-preinstalled)
|
|
if [ "$SUBARCH" = "raspi3" ]; then
|
|
# For now only raspi3, but others are soon to follow
|
|
IMAGEFORMAT=ubuntu-image
|
|
else
|
|
IMAGEFORMAT=ext4
|
|
fi
|
|
;;
|
|
ubuntu-server:live)
|
|
IMAGEFORMAT=plain
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
skip_lb_stage() {
|
|
STAGE="$1"
|
|
mkdir -p .build
|
|
touch ".build/$STAGE"
|
|
}
|
|
|
|
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:${SUBPROJECT:-} in
|
|
ubuntu-base:buildd)
|
|
;;
|
|
ubuntu-cpc:*)
|
|
;;
|
|
*)
|
|
add_package live jasper
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
plain)
|
|
case $PROJECT:${SUBPROJECT:-} in
|
|
ubuntu-server:live)
|
|
touch config/universe-enabled
|
|
;;
|
|
*)
|
|
PREINSTALLED=true
|
|
;;
|
|
esac
|
|
OPTS="${OPTS:+$OPTS }--initramfs none --chroot-filesystem $IMAGEFORMAT"
|
|
;;
|
|
|
|
ubuntu-image)
|
|
UBUNTU_IMAGE_ARGS=""
|
|
BRAND_ID="canonical"
|
|
|
|
case "$ARCH+${SUBARCH:-}" in
|
|
# Handle appliance images
|
|
*+appliance-*)
|
|
BRAND_ID="ubuntu"
|
|
MODEL="${SUBARCH#appliance-}"
|
|
APPLIANCE=1
|
|
;;
|
|
amd64+*)
|
|
MODEL=pc-amd64 ;;
|
|
i386+*)
|
|
MODEL=pc-i386 ;;
|
|
arm64+snapdragon)
|
|
MODEL=dragonboard ;;
|
|
armhf+raspi3)
|
|
MODEL=pi ;;
|
|
arm64+raspi3)
|
|
MODEL=pi-arm64 ;;
|
|
armhf+imx6)
|
|
MODEL=nitrogen6x ;;
|
|
*)
|
|
echo "Model $ARCH+${SUBARCH:-} unknown to livecd-rootfs" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# If we have a datestamp coming from cdimage, use that to populate
|
|
# .disk/info on the target image
|
|
if [ -n "$NOW" ]; then
|
|
echo "$NOW" > config/disk-info
|
|
UBUNTU_IMAGE_ARGS="$UBUNTU_IMAGE_ARGS --disk-info config/disk-info"
|
|
fi
|
|
|
|
if [ $PROJECT = "ubuntu-core" ]; then
|
|
# snap-based core images
|
|
|
|
case $MODEL in
|
|
pc-amd64|pc-i386)
|
|
[ -z "${SUBARCH:-}" ] \
|
|
&& UBUNTU_IMAGE_ARGS="$UBUNTU_IMAGE_ARGS --image-size 3700M"
|
|
;;
|
|
# Some appliances need different snap tracks
|
|
lxd-core18*)
|
|
EXTRA_SNAPS="lxd=4.0"
|
|
;;
|
|
esac
|
|
case $SUITE in
|
|
xenial)
|
|
# Ubuntu Core 16
|
|
;;
|
|
*)
|
|
# Ubuntu Core 18
|
|
[ -z "${APPLIANCE:-}" ] \
|
|
&& MODEL="ubuntu-core-18-${MODEL#pc-}"
|
|
;;
|
|
esac
|
|
|
|
case "$ARCH+${SUBARCH:-}" in
|
|
amd64+kassel)
|
|
EXTRA_SNAPS="core bluez alsa-utils"
|
|
;;
|
|
*) ;;
|
|
esac
|
|
for snap in $EXTRA_SNAPS; do
|
|
UBUNTU_IMAGE_ARGS="$UBUNTU_IMAGE_ARGS --extra-snaps $snap"
|
|
done
|
|
echo "IMAGEFORMAT=$IMAGEFORMAT" >> config/common
|
|
echo "UBUNTU_IMAGE_ARGS=\"$UBUNTU_IMAGE_ARGS\"" >> config/common
|
|
# Store model assertion in top dir to get it picked up later as a build artifact
|
|
env SNAPPY_STORE_NO_CDN=1 snap known --remote model series=16 model="$MODEL" brand-id="$BRAND_ID" > "$PREFIX".model-assertion
|
|
echo "Configured ubuntu-image for the following model assertion:"
|
|
cat "$PREFIX".model-assertion
|
|
echo "----------------------------------------------------------"
|
|
else
|
|
# classic images
|
|
|
|
# Certain models have different names but are built from the same source gadget tree
|
|
case $MODEL in
|
|
pi-arm64|pi)
|
|
# XXX: Temporarily this is still built from the pi3 tree,
|
|
# but eventually we'll use the pi one.
|
|
MODEL=pi3 ;;
|
|
esac
|
|
|
|
UBUNTU_IMAGE_ARGS="$UBUNTU_IMAGE_ARGS${PROPOSED:+ --with-proposed}"
|
|
UBUNTU_IMAGE_ARGS="$UBUNTU_IMAGE_ARGS${EXTRA_PPAS:+ --extra-ppas \"$EXTRA_PPAS\"}"
|
|
|
|
git clone git://git.launchpad.net/~canonical-foundations/snap-$MODEL/+git/github-mirror -b classic config/$PREFIX-gadget
|
|
|
|
echo "IMAGEFORMAT=$IMAGEFORMAT" >> config/common
|
|
echo "SUITE=$SUITE" >> config/common
|
|
echo "UBUNTU_IMAGE_ARGS=\"$UBUNTU_IMAGE_ARGS\"" >> config/common
|
|
|
|
echo "Configured ubuntu-image for the following gadget model: $MODEL"
|
|
fi
|
|
# Fake finished configuration for lb build
|
|
mkdir -p .build
|
|
touch .build/config
|
|
exit 0
|
|
;;
|
|
|
|
none)
|
|
OPTS="${OPTS:+$OPTS }--chroot-filesystem $IMAGEFORMAT"
|
|
;;
|
|
*)
|
|
case $PROJECT in
|
|
ubuntu-server|ubuntu-touch|ubuntu-touch-custom)
|
|
;;
|
|
*)
|
|
add_package live lupin-casper
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
if [ "$PREINSTALLED" = "true" ]; then
|
|
# Touch a random file that we can refer back to during build,
|
|
# cause that's wildly hackish
|
|
touch config/universe-enabled
|
|
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|ubuntu-base|base|ubuntu-touch|ubuntu-touch-custom|ubuntu-cpc|ubuntu-desktop-next)
|
|
;;
|
|
ubuntu)
|
|
add_package live oem-config-gtk ubiquity-frontend-gtk
|
|
add_package live ubiquity-slideshow-ubuntu
|
|
if [ "$SUBPROJECT" = "desktop-preinstalled" ]; then
|
|
add_package live language-pack-en-base
|
|
fi
|
|
;;
|
|
*)
|
|
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
|
|
|
|
if [ "${SUBPROJECT:-}" = minimized ]; then
|
|
OPTS="${OPTS:+$OPTS }--bootstrap-flavour=minimal --linux-packages=linux-image"
|
|
fi
|
|
|
|
# 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"
|
|
}
|
|
|
|
mkdir -p config/germinate-output
|
|
case $PROJECT in
|
|
kubuntu-active*)
|
|
SEED=kubuntu-active.$SUITE
|
|
;;
|
|
kubuntu*)
|
|
SEED=kubuntu.$SUITE
|
|
;;
|
|
xubuntu*)
|
|
SEED=xubuntu.$SUITE
|
|
;;
|
|
ubuntu-mate*)
|
|
SEED=ubuntu-mate.$SUITE
|
|
;;
|
|
lubuntu*)
|
|
SEED=lubuntu.$SUITE
|
|
;;
|
|
ubuntu-budgie*)
|
|
SEED=ubuntu-budgie.$SUITE
|
|
;;
|
|
ubuntukylin*)
|
|
SEED=ubuntukylin.$SUITE
|
|
;;
|
|
ubuntustudio*)
|
|
SEED=ubuntustudio.$SUITE
|
|
;;
|
|
*)
|
|
SEED=ubuntu.$SUITE
|
|
;;
|
|
esac
|
|
|
|
if ! [ -e config/germinate-output/structure ]; then
|
|
echo "Running germinate..."
|
|
(cd config/germinate-output && germinate --no-rdepends --no-installer \
|
|
-S $SEEDMIRROR -m $MIRROR -d $SUITE -s $SEED \
|
|
${COMPONENTS:+-c "$COMPONENTS"} -a $ARCH)
|
|
fi
|
|
|
|
case $PROJECT in
|
|
base|edubuntu|edubuntu-dvd|kubuntu|kubuntu-active|kubuntu-dvd|kubuntu-plasma5|lubuntu|lubuntu-next|mythbuntu|ubuntu|ubuntu-budgie|ubuntu-desktop-next|ubuntu-dvd|ubuntu-gnome|ubuntu-mate|ubuntu-netbook|ubuntukylin|ubuntustudio-dvd|xubuntu)
|
|
INITRAMFS_COMPRESSION="lzma"
|
|
;;
|
|
esac
|
|
|
|
case $PROJECT in
|
|
ubuntu|ubuntu-dvd)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard ubuntu-desktop
|
|
LIVE_TASK='ubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
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${HWE:+-$HWE_SUFFIX}"
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
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)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard
|
|
add_task install kubuntu-desktop
|
|
LIVE_TASK='kubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
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)
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard ubuntu-desktop edubuntu-desktop-gnome
|
|
LIVE_TASK='edubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
xubuntu)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard xubuntu-desktop
|
|
add_package install xterm
|
|
LIVE_TASK='xubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
;;
|
|
|
|
ubuntu-netbook)
|
|
add_task install minimal standard ubuntu-netbook
|
|
LIVE_TASK='netbook-live'
|
|
;;
|
|
|
|
mythbuntu)
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard mythbuntu-desktop
|
|
LIVE_TASK='mythbuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
;;
|
|
|
|
lubuntu)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard lubuntu-gtk-core lubuntu-desktop
|
|
# Installing the lubuntu-gtk-core task explicitly appears
|
|
# to make dbus-user-session not get installed anymore:
|
|
add_package install dbus-user-session
|
|
# These themes also get dropped, maybe worth looking closer:
|
|
add_package install humanity-icon-theme gnome-icon-theme adwaita-icon-theme
|
|
LIVE_TASK='lubuntu-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
|
|
# The Lubuntu STRUCTURE file has "feature
|
|
# no-follow-recommends". Mirror this.
|
|
APT_OPTIONS="${APT_OPTIONS} --no-install-recommends"
|
|
;;
|
|
|
|
lubuntu-next)
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard lubuntu-qt-desktop
|
|
LIVE_TASK='lubuntu-live-qt'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
|
|
# The Lubuntu STRUCTURE file has "feature
|
|
# no-follow-recommends". Mirror this.
|
|
APT_OPTIONS="${APT_OPTIONS} --no-install-recommends"
|
|
;;
|
|
|
|
ubuntu-gnome)
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard ubuntu-gnome-desktop
|
|
LIVE_TASK='ubuntu-gnome-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
ubuntu-budgie)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard ubuntu-budgie-desktop
|
|
LIVE_TASK='ubuntu-budgie-live'
|
|
case $ARCH in
|
|
amd64) add_package live linux-signed-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
ubuntu-mate)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
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-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe multiverse'
|
|
;;
|
|
|
|
ubuntustudio-dvd)
|
|
KERNEL_FLAVOURS="lowlatency${HWE:+-$HWE_SUFFIX}"
|
|
add_task install minimal standard ubuntustudio-desktop ubuntustudio-audio ubuntustudio-fonts ubuntustudio-graphics ubuntustudio-video ubuntustudio-publishing ubuntustudio-photography
|
|
COMPONENTS='main restricted universe multiverse'
|
|
;;
|
|
|
|
ubuntukylin)
|
|
HWE="yes"
|
|
KERNEL_FLAVOURS="generic${HWE:+-$HWE_SUFFIX}"
|
|
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-$KERNEL_FLAVOURS ;;
|
|
esac
|
|
COMPONENTS='main restricted universe'
|
|
;;
|
|
|
|
base)
|
|
add_task install minimal standard
|
|
;;
|
|
|
|
ubuntu-server)
|
|
add_task install minimal
|
|
case ${SUBPROJECT:-} in
|
|
live)
|
|
add_task install standard
|
|
add_task install server
|
|
add_package install cloud-init
|
|
;;
|
|
esac
|
|
COMPONENTS='main'
|
|
PREINSTALL_POOL_SEEDS='server-ship'
|
|
;;
|
|
|
|
ubuntu-core)
|
|
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
|
|
add_package install ppp
|
|
add_package install watchdog
|
|
# no Task: header yet
|
|
add_package install snapd
|
|
add_package install ubuntu-core-snapd-units
|
|
add_package install nplan
|
|
# we want all arches to have u-boot-tools
|
|
add_package install u-boot-tools
|
|
|
|
# no minimal as we want to be really minimal
|
|
#add_task install minimal
|
|
add_task install ubuntu-core
|
|
|
|
# more packages are pulled in via the seed.
|
|
# (important to remember when comparing to the
|
|
# livecd-rootfs from ppa:snappy-dev/image)
|
|
|
|
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=none
|
|
case $ARCH in
|
|
i386)
|
|
add_package install grub-pc
|
|
;;
|
|
amd64)
|
|
add_package install grub-pc
|
|
add_package install shim-signed
|
|
;;
|
|
esac
|
|
OPTS="${OPTS:+$OPTS }--linux-packages=none --initramfs=none"
|
|
|
|
# contains the framework definition
|
|
add_package install ubuntu-core-libs
|
|
|
|
# universe needed for 'system-image-cli' and multiverse for firmware
|
|
COMPONENTS='main restricted universe multiverse'
|
|
OPTS="${OPTS:+$OPTS }--bootstrap-flavour=minimal"
|
|
;;
|
|
|
|
ubuntu-base)
|
|
OPTS="${OPTS:+$OPTS }--bootstrap-flavour=minimal"
|
|
;;
|
|
|
|
ubuntu-touch|ubuntu-touch-custom)
|
|
HINTS="packagekit ubuntu-system-settings"
|
|
case $ARCH in
|
|
amd64|i386)
|
|
HINTS="$HINTS qml-module-ubuntu-components-gles unity8"
|
|
;;
|
|
esac
|
|
add_package install ubuntu-minimal ubuntu-touch $HINTS
|
|
|
|
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)
|
|
if [ "${SUBPROJECT:-}" = minimized ]; then
|
|
add_task install cloud-image
|
|
add_package install sudo
|
|
# linux-kvm currently only exists in xenial, not in
|
|
# non-LTS suites. Fall back to virtual flavor, which
|
|
# may or may not boot initramfsless but enables us to
|
|
# test building and possibly build derivative images
|
|
# using other kernel flavors.
|
|
# If you enable an extra ppa, it is assumed that
|
|
# linux-kvm is available since you control the
|
|
# archive and can provide this metapackage as
|
|
# necessary.
|
|
if [ "$ARCH" = "amd64" ] && ([ -n "$EXTRA_PPAS" ] || [ "$SUITE" = xenial ] || [ "$SUITE" = bionic ]); then
|
|
KERNEL_FLAVOURS=kvm
|
|
else
|
|
KERNEL_FLAVOURS=virtual
|
|
fi
|
|
else
|
|
add_task install minimal standard cloud-image
|
|
add_package install ubuntu-minimal
|
|
KERNEL_FLAVOURS=virtual
|
|
case $ARCH in
|
|
armhf|arm64|ppc64el|powerpc)
|
|
add_task install server
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
BINARY_REMOVE_LINUX=false
|
|
OPTS="${OPTS:+$OPTS }--initramfs=none"
|
|
case $ARCH in
|
|
armhf)
|
|
KERNEL_FLAVOURS=generic-lpae
|
|
add_package install flash-kernel
|
|
;;
|
|
arm64)
|
|
add_package install flash-kernel
|
|
;;
|
|
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"
|
|
;;
|
|
|
|
*)
|
|
echo "unknown project $PROJECT" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
case $SUBPROJECT in
|
|
buildd)
|
|
OPTS="${OPTS:+$OPTS }--archive-areas main"
|
|
COMPONENTS='main restricted universe multiverse'
|
|
OPTS="${OPTS:+$OPTS }--apt-recommends false"
|
|
OPTS="${OPTS:+$OPTS }--apt-secure false"
|
|
OPTS="${OPTS:+$OPTS }--parent-mirror-binary ${MIRROR}"
|
|
# XXX cjwatson 2018-04-27: We need to work out how to make
|
|
# this conditional so that we can do things like building
|
|
# buildd chroots with -updates. This probably involves
|
|
# either extending the PROPOSED hack or fixing the strange
|
|
# way that SUITE is in fact a series; in either case it's
|
|
# likely to involve work both here and in launchpad-buildd.
|
|
OPTS="${OPTS:+$OPTS }--security false --volatile false"
|
|
|
|
add_package install adduser
|
|
add_package install pkgbinarymangler
|
|
add_package install ca-certificates
|
|
add_package install gpg
|
|
add_package install gpg-agent
|
|
add_package install tzdata
|
|
add_package install fakeroot
|
|
add_package install build-essential
|
|
# Needed for LXD-based builds.
|
|
add_package install init
|
|
|
|
cp -af /usr/share/livecd-rootfs/live-build/make-lxd-metadata.py config/make-lxd-metadata
|
|
;;
|
|
esac
|
|
|
|
# we'll expand the base seed given here according to the STRUCTURE file, and
|
|
# then look in all of the seeds found to see which snaps are seeded
|
|
case $PROJECT:${SUBPROJECT:-} in
|
|
ubuntu:*|kubuntu*:*|xubuntu*:*|ubuntu-mate*:*|ubuntustudio*:*|ubuntukylin*:*|ubuntu-budgie*:*)
|
|
BASE_SEED='desktop'
|
|
;;
|
|
lubuntu-next:*)
|
|
BASE_SEED='desktop-qt'
|
|
;;
|
|
lubuntu:*)
|
|
BASE_SEED='desktop-gtk'
|
|
;;
|
|
ubuntu-server:live)
|
|
BASE_SEED='server'
|
|
# subiquity is seeded but in a separate squashfs via hooks; set HOOK_SNAPS and ALL_SNAPS.
|
|
HOOK_SNAPS='subiquity'
|
|
ALL_SNAPS=''
|
|
;;
|
|
esac
|
|
|
|
if [ -n "${BASE_SEED}" ]; then
|
|
SEEDS_EXPANDED=$(inheritance ${BASE_SEED})
|
|
for seed in ${SEEDS_EXPANDED}; do
|
|
echo "snap: considering ${seed}"
|
|
file=config/germinate-output/${seed}.snaps
|
|
[ -e "${file}" ] || continue
|
|
# extract the first column (snap package name) from germinate's output
|
|
# translate the human-readable "foo (classic)" into a
|
|
# more machine readable "foo/classic"
|
|
seed_snaps=$(sed -rn '1,/-----/d;/-----/,$d; s/(.*) \|.*/\1/; s, \(classic\),/classic,; p' "${file}")
|
|
for snap in ${seed_snaps}; do
|
|
echo "snap: found ${snap}"
|
|
# Reorder gtk-common-themes first due to LP: #1772844
|
|
if [ "${snap}" = "gtk-common-themes" ]; then
|
|
ALL_SNAPS="${snap}${ALL_SNAPS:+ ${ALL_SNAPS}}"
|
|
else
|
|
ALL_SNAPS="${ALL_SNAPS:+${ALL_SNAPS} }${snap}"
|
|
fi
|
|
done
|
|
done
|
|
if [ -n "${ALL_SNAPS}" ] || [ -n "${HOOK_SNAPS}" ]; then
|
|
echo "${ALL_SNAPS}" > config/seeded-snaps
|
|
fi
|
|
fi
|
|
|
|
# grab a list of packags to remove for a "minimal" installation from the seed
|
|
# mirror for this project
|
|
if [ -n "${BASE_SEED}" ] && [ -n "${BASE_SEED}" ]; then
|
|
minimal_packages_url=${SEEDMIRROR}/${SEED}/${BASE_SEED}.minimal-remove
|
|
echo -n "Checking ${minimal_packages_url} for a minimal installation list... "
|
|
minimal_packages_remove=$(wget -q -O- ${minimal_packages_url} | sed -e '/\s*#.*$/d' -e '/^\s*$/d')
|
|
if [ -n "${minimal_packages_remove}" ]; then
|
|
echo "${minimal_packages_remove}" > config/manifest-minimal-remove
|
|
echo "$(echo ${minimal_packages_remove} | tr '\n' ' ')"
|
|
else
|
|
echo "failed to retrieve, not including."
|
|
fi
|
|
fi
|
|
|
|
export APT_OPTIONS
|
|
|
|
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|arm64)
|
|
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
|
|
;;
|
|
raspi2)
|
|
COMPONENTS='main restricted universe multiverse'
|
|
add_package install linux-firmware-raspi2 u-boot-rpi flash-kernel u-boot-tools wpasupplicant
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
raspi3)
|
|
COMPONENTS='main restricted universe multiverse'
|
|
KERNEL_FLAVOURS=raspi-hwe-18.04
|
|
add_package install linux-firmware-raspi2 u-boot-rpi flash-kernel u-boot-tools wpasupplicant
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
imx6)
|
|
COMPONENTS='main restricted universe multiverse'
|
|
KERNEL_FLAVOURS=generic
|
|
add_package install flash-kernel u-boot-tools wpasupplicant
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
case $PROJECT:${SUBPROJECT:-} in
|
|
ubuntu-server:*|ubuntu-base:*|ubuntu-touch:*|ubuntu-touch-custom:*)
|
|
OPTS="${OPTS:+$OPTS }--linux-packages=none --initramfs=none"
|
|
KERNEL_FLAVOURS=none
|
|
BINARY_REMOVE_LINUX=false
|
|
;;
|
|
esac
|
|
|
|
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
|
|
# if any flavours want to strip .pyc files from their live images, add them here
|
|
_)
|
|
add_chroot_hook remove-python-py
|
|
;;
|
|
esac
|
|
|
|
case ${SUBPROJECT:-} in
|
|
wubi)
|
|
add_binary_hook build-wubildr
|
|
;;
|
|
esac
|
|
|
|
lb config noauto \
|
|
--mode ubuntu \
|
|
--distribution "$SUITE" \
|
|
--iso-preparer "livecd-rootfs" \
|
|
--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:+--initramfs-compression "$INITRAMFS_COMPRESSION"} \
|
|
--checksums none \
|
|
--cache false \
|
|
${BOOTAPPEND_LIVE:+--bootappend-live "$BOOTAPPEND_LIVE"} \
|
|
$OPTS \
|
|
"$@"
|
|
|
|
echo "LB_CHROOT_HOOKS=\"$CHROOT_HOOKS\"" >> config/chroot
|
|
echo "SUBPROJECT=\"${SUBPROJECT:-}\"" >> config/chroot
|
|
echo "LB_DISTRIBUTION=\"$SUITE\"" >> config/chroot
|
|
echo "LB_BINARY_HOOKS=\"$BINARY_HOOKS\"" >> config/binary
|
|
echo "BUILDSTAMP=\"$NOW\"" >> config/binary
|
|
echo "SUBPROJECT=\"${SUBPROJECT:-}\"" >> config/binary
|
|
echo "LB_DISTRIBUTION=\"$SUITE\"" >> config/binary
|
|
echo "IMAGEFORMAT=\"$IMAGEFORMAT\"" >> config/chroot
|
|
echo "SUBARCH=\"$SUBARCH\"" >> config/chroot
|
|
|
|
case $ARCH+$SUBARCH in
|
|
armhf+raspi2|armhf+raspi3|arm64+raspi3)
|
|
cat > config/hooks/01-firmware-directory.chroot_early <<EOF
|
|
#!/bin/sh -ex
|
|
mkdir -p /boot/firmware
|
|
EOF
|
|
cat > config/hooks/999-raspi2-fixes.chroot <<EOF
|
|
#!/bin/sh -ex
|
|
cat >> /etc/fstab << EOM
|
|
LABEL=system-boot /boot/firmware vfat defaults 0 1
|
|
EOM
|
|
|
|
cat > /boot/firmware/cmdline.txt << EOM
|
|
net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
|
|
EOM
|
|
|
|
cat > /boot/firmware/config.txt << EOM
|
|
# For more options and information see
|
|
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
|
|
# Some settings may impact device functionality. See link above for details
|
|
|
|
kernel=uboot.bin
|
|
device_tree_address=0x02000000
|
|
|
|
# enable i2c
|
|
dtparam=i2c_arm=on
|
|
dtparam=spi=on
|
|
|
|
# uncomment if you get no picture on HDMI for a default "safe" mode
|
|
#hdmi_safe=1
|
|
|
|
# uncomment this if your display has a black border of unused pixels visible
|
|
# and your display can output without overscan
|
|
#disable_overscan=1
|
|
|
|
# uncomment the following to adjust overscan. Use positive numbers if console
|
|
# goes off screen, and negative if there is too much border
|
|
#overscan_left=16
|
|
#overscan_right=16
|
|
#overscan_top=16
|
|
#overscan_bottom=16
|
|
|
|
# uncomment to force a console size. By default it will be display's size minus
|
|
# overscan.
|
|
#framebuffer_width=1280
|
|
#framebuffer_height=720
|
|
|
|
# uncomment if hdmi display is not detected and composite is being output
|
|
#hdmi_force_hotplug=1
|
|
|
|
# uncomment to force a specific HDMI mode (this will force VGA)
|
|
#hdmi_group=1
|
|
#hdmi_mode=1
|
|
|
|
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
|
|
# DMT (computer monitor) modes
|
|
#hdmi_drive=2
|
|
|
|
# uncomment to increase signal to HDMI, if you have interference, blanking, or
|
|
# no display
|
|
#config_hdmi_boost=4
|
|
|
|
# uncomment for composite PAL
|
|
#sdtv_mode=2
|
|
|
|
#uncomment to overclock the arm. 700 MHz is the default.
|
|
#arm_freq=800
|
|
|
|
EOM
|
|
EOF
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
if [ $PROJECT = ubuntu-server ] && [ "${SUBPROJECT:-}" != live ]; then
|
|
cat > config/hooks/100-remove-fstab.chroot <<EOF
|
|
#! /bin/sh
|
|
rm -f /etc/fstab
|
|
EOF
|
|
fi
|
|
|
|
if [ $PROJECT != ubuntu-cpc ]; then
|
|
cat > config/hooks/100-preserve-apt-prefs.chroot <<\EOF
|
|
#! /bin/sh -ex
|
|
|
|
# live-build "helpfully" removes /etc/apt/preferences.d/* so we put a
|
|
# copy somewhere it won't touch it.
|
|
|
|
if [ -n "$(ls -A /etc/apt/preferences.d)" ]; then
|
|
cp -a /etc/apt/preferences.d /etc/apt/preferences.d.save
|
|
fi
|
|
EOF
|
|
fi
|
|
|
|
if [ $PROJECT = ubuntukylin ]; then
|
|
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
|
|
fi
|
|
|
|
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_VOLATILE $SUITE-updates universe multiverse
|
|
deb $LB_PARENT_MIRROR_BINARY_SECURITY $SUITE-security 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-touch-custom:*|ubuntu-core:system-image|ubuntu-desktop-next:system-image|ubuntu-cpc:*|ubuntu-server:live|ubuntu:desktop-preinstalled)
|
|
# Ensure that most things e.g. includes.chroot are copied as is
|
|
for entry in /usr/share/livecd-rootfs/live-build/${PROJECT}/*; do
|
|
case $entry in
|
|
*hooks*)
|
|
# But hooks are shared across the projects with symlinks
|
|
# dereference them
|
|
cp -afL $entry config/
|
|
;;
|
|
*)
|
|
# Most places want to preserve symlinks as is
|
|
cp -af $entry config/
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$PROJECT" = "ubuntu-cpc" ]; then
|
|
case ${IMAGE_TARGETS:-} in
|
|
"")
|
|
config/hooks.d/make-hooks --hooks-dir config/hooks all
|
|
;;
|
|
*)
|
|
config/hooks.d/make-hooks --hooks-dir config/hooks \
|
|
"$IMAGE_TARGETS"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ "$IMAGEFORMAT" = none ]; then
|
|
rm -f config/hooks/*.binary*
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
case $SUBPROJECT in
|
|
buildd)
|
|
cp -af /usr/share/livecd-rootfs/live-build/buildd/* 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")"
|
|
|
|
cat >> config/archives/extra-ppas.list.chroot <<EOF
|
|
deb http://ppa.launchpad.net/$extra_ppa/ubuntu @DISTRIBUTION@ main
|
|
deb-src http://ppa.launchpad.net/$extra_ppa/ubuntu @DISTRIBUTION@ main
|
|
EOF
|
|
|
|
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
|
|
|
|
if [ "$PREINSTALLED" = "true" ]; then
|
|
if [ -n "$PREINSTALL_POOL_SEEDS" ]; then
|
|
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
|