mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-02-11 13:17:21 +00:00
Kernels which are able to boot without initramfs now dropped dependency on initramfs-tools thus initramfs-tools can be removed from the image instead of having to divert it to avoid initramfs generation.
176 lines
4.2 KiB
Bash
Executable File
176 lines
4.2 KiB
Bash
Executable File
#!/bin/bash -ex
|
|
|
|
IMAGE_STR="# CLOUD_IMG: This file was created/modified by the Cloud Image build process"
|
|
FS_LABEL="cloudimg-rootfs"
|
|
|
|
. config/functions
|
|
|
|
. config/binary
|
|
|
|
BOOTPART_START=
|
|
BOOTPART_END=
|
|
BOOT_MOUNTPOINT=
|
|
ROOTPART_START=1
|
|
|
|
case $ARCH:$SUBARCH in
|
|
ppc64el:*|powerpc:*)
|
|
echo "POWER disk images are handled separately"
|
|
exit 0
|
|
;;
|
|
amd64|arm64)
|
|
echo "We only create EFI images for $ARCH."
|
|
exit 0
|
|
;;
|
|
armhf:raspi2)
|
|
# matches the size of the snappy image
|
|
IMAGE_SIZE=$((4*1000*1000*1000))
|
|
|
|
BOOTPART_START=8192s
|
|
BOOTPART_END=138M
|
|
BOOT_MOUNTPOINT=/boot/firmware
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
create_empty_partition_table() {
|
|
parted "$1" --script -- mklabel msdos
|
|
}
|
|
|
|
create_empty_partition() {
|
|
local disk="$1"
|
|
local part="$2"
|
|
local start="$3"
|
|
local end="$4"
|
|
local type="$5"
|
|
local bootable="$6"
|
|
|
|
parted_prefix="parted $disk --script --"
|
|
${parted_prefix} mkpart primary "$type" "$start" "$end"
|
|
if [ -n "$bootable" ]; then
|
|
${parted_prefix} set "$part" B
|
|
fi
|
|
${parted_prefix} print
|
|
${parted_prefix} align-check opt "$part"
|
|
}
|
|
|
|
disk_image=binary/boot/disk.ext4
|
|
|
|
create_empty_disk_image "${disk_image}"
|
|
create_empty_partition_table "${disk_image}"
|
|
|
|
ROOTPART=1
|
|
ROOT_BOOTABLE=1
|
|
if [ -n "$BOOTPART_START" ]; then
|
|
ROOTPART=2
|
|
ROOTPART_START="$BOOTPART_END"
|
|
ROOT_BOOTABLE=
|
|
create_empty_partition "$disk_image" 1 "$BOOTPART_START" "$BOOTPART_END" fat32 1
|
|
fi
|
|
create_empty_partition "${disk_image}" "$ROOTPART" "$ROOTPART_START" -1 ext2 "$ROOT_BOOTABLE"
|
|
|
|
mount_image "${disk_image}" "$ROOTPART"
|
|
|
|
partuuid=$(blkid -s PARTUUID -o value "$rootfs_dev_mapper")
|
|
|
|
# Copy the chroot in to the disk
|
|
make_ext4_partition "${rootfs_dev_mapper}"
|
|
mkdir mountpoint
|
|
mount "${rootfs_dev_mapper}" mountpoint
|
|
|
|
if [ -n "$BOOT_MOUNTPOINT" ]; then
|
|
boot_dev_mapper="${rootfs_dev_mapper%%[0-9]}1"
|
|
# assume fat32 for now
|
|
mkfs.vfat -n system-boot "$boot_dev_mapper"
|
|
mkdir -p "mountpoint/$BOOT_MOUNTPOINT"
|
|
mount "$boot_dev_mapper" "mountpoint/$BOOT_MOUNTPOINT"
|
|
fi
|
|
|
|
cp -a chroot/* mountpoint/
|
|
|
|
setup_mountpoint mountpoint
|
|
|
|
case $ARCH:$SUBARCH in
|
|
armhf:raspi2)
|
|
chroot mountpoint flash-kernel \
|
|
--machine "Raspberry Pi 2 Model B"
|
|
# not the best place for this, but neither flash-kernel nor
|
|
# u-boot have provisions for installing u-boot via maintainer
|
|
# script
|
|
config/hooks/raspi2/mkknlimg --dtok \
|
|
mountpoint/usr/lib/u-boot/rpi_2/u-boot.bin \
|
|
mountpoint/boot/firmware/uboot.bin
|
|
;;
|
|
*) ;;
|
|
esac
|
|
|
|
case $ARCH in
|
|
amd64|i386) should_install_grub=1;;
|
|
*) should_install_grub=0;;
|
|
esac
|
|
|
|
if [ "${should_install_grub}" -eq 1 ]; then
|
|
echo "(hd0) ${loop_device}" > mountpoint/tmp/device.map
|
|
chroot mountpoint grub-install ${loop_device}
|
|
chroot mountpoint grub-bios-setup \
|
|
--boot-image=i386-pc/boot.img \
|
|
--core-image=i386-pc/core.img \
|
|
--skip-fs-probe \
|
|
--device-map=/tmp/device.map \
|
|
${loop_device}
|
|
|
|
rm mountpoint/tmp/device.map
|
|
|
|
if [ "$SUBPROJECT" = minimize ] && [ -n "$partuuid" ]; then
|
|
echo "partuuid found for root device; forcing it in Grub"
|
|
echo "GRUB_FORCE_PARTUUID=$partuuid" >> mountpoint/etc/default/grub
|
|
chroot mountpoint update-grub
|
|
fi
|
|
fi
|
|
|
|
if [ "$ARCH" = "s390x" ]; then
|
|
# Do ZIPL install bits
|
|
chroot mountpoint apt-get -qqy install s390-tools sysconfig-hardware
|
|
|
|
# Write out cloudy zipl.conf for future kernel updates
|
|
cat << EOF > mountpoint/etc/zipl.conf
|
|
# This has been modified by the cloud image build process
|
|
[defaultboot]
|
|
default=ubuntu
|
|
|
|
[ubuntu]
|
|
target = /boot
|
|
image = /boot/vmlinuz
|
|
ramdisk = /boot/initrd.img
|
|
parameters = root=LABEL=cloudimg-rootfs
|
|
EOF
|
|
|
|
# Kernel initramfs hooks end up creating a copy
|
|
# rather than a symlink FIXME
|
|
pushd mountpoint/boot
|
|
ln -sf initrd.img-* initrd.img
|
|
popd
|
|
|
|
# Create bootmap file
|
|
chroot mountpoint /sbin/zipl -V \
|
|
--image=/boot/vmlinuz \
|
|
--ramdisk=/boot/initrd.img \
|
|
--parameters='root=LABEL=cloudimg-rootfs' \
|
|
--target=/boot/ \
|
|
--targetbase=$loop_device \
|
|
--targettype=SCSI \
|
|
--targetblocksize=512 \
|
|
--targetoffset=2048
|
|
|
|
fi
|
|
|
|
if [ -n "$BOOT_MOUNTPOINT" ]; then
|
|
umount "mountpoint/$BOOT_MOUNTPOINT"
|
|
fi
|
|
|
|
umount_partition mountpoint
|
|
rmdir mountpoint
|
|
|
|
clean_loops
|
|
trap - EXIT
|