You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
livecd-rootfs/live-build/ubuntu-cpc/hooks/032-disk-image.binary

126 lines
2.8 KiB

#!/bin/bash -eux
. /build/config/functions
BOOTPART_START=
BOOTPART_END=
BOOT_MOUNTPOINT=
case $ARCH in
ppc64el)
echo "ppc64el disk images are handled separately"
exit 0
;;
*)
;;
esac
create_empty_partition_table() {
apt-get install -qqy parted
parted "$1" --script -- mklabel msdos
}
create_empty_partition() {
local disk="$1"
local part="$2"
local start="$3"
local end="$4"
local bootable="$5"
parted_prefix="parted $disk --script --"
${parted_prefix} mkpart primary "$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
if [ -n "$BOOTPART_START" ]; then
ROOTPART=2
ROOTPART_START="$BOOTPART_END"
create_empty_partition "$disk_image" 1 "$BOOTPART_START" "$BOOTPART_END" 1
fi
create_empty_partition "${disk_image}" "$ROOTPART" "$ROOTPART_START" -1
mount_image "${disk_image}" "$ROOTPART"
# 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/
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
fi
if [ "$ARCH" = "s390x" ]; then
# Do ZIPL install bits
# 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
# Create bootmap file
mountpoint/sbin/zipl -V \
--image=mountpoint/boot/vmlinuz \
--ramdisk=mountpoint/boot/initrd.img \
--parameters='root=LABEL=cloudimg-rootfs' \
--target=mountpoint/boot/ \
--targetbase=/dev/loop0 \
--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