Fix geninstaller to be runnable outside of source tree

geninstaller, which is installed as /usr/bin/subiquity-geninstaller
needed some changes to allow it to run outside of the build tree.
Quieted the output from geninstaller a lot and redirect the verbosity
into the log file.

Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
This commit is contained in:
Ryan Harper 2015-09-29 09:56:47 -05:00
parent d488a9d1fa
commit 8b228d05a8
2 changed files with 30 additions and 29 deletions

View File

@ -59,7 +59,7 @@ unit:
python3 -m "nose" -v --nologcapture --with-coverage ${TOPDIR}/tests/ python3 -m "nose" -v --nologcapture --with-coverage ${TOPDIR}/tests/
installer/$(INSTALLIMG): installer/geninstaller installer/runinstaller $(INSTALLER_RESOURCES) probert installer/$(INSTALLIMG): installer/geninstaller installer/runinstaller $(INSTALLER_RESOURCES) probert
(cd installer && ./geninstaller -v $(OFFLINE) -r $(RELEASE) -a $(ARCH) -s $(STREAM) -b $(BOOTLOADER)) (cd installer && TOPDIR=$(TOPDIR)/installer ./geninstaller -v $(OFFLINE) -r $(RELEASE) -a $(ARCH) -s $(STREAM) -b $(BOOTLOADER))
echo $(INSTALLER_RESOURCES) echo $(INSTALLER_RESOURCES)
installer: installer/$(INSTALLIMG) installer: installer/$(INSTALLIMG)

View File

@ -15,11 +15,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
PROG=`basename $0` PROG=`basename $0`
TOPDIR=`pwd`
USQUERY=${TOPDIR}/usquery
LOGFILE="geninstaller.log"
PREFIX="${PROG}" PREFIX="${PROG}"
RESOURCES=`pwd`/resources LOGFILE="geninstaller.log"
TOPDIR=${TOPDIR-/usr/share/subiquity/installer}
USQUERY=${TOPDIR}/usquery
RESOURCES=${TOPDIR}/resources
PKG_DEPS=" PKG_DEPS="
qemu-utils qemu-utils
kpartx kpartx
@ -63,18 +63,19 @@ cleanup_noexit() {
sudo umount -l ${CACHEDIR}/lower sudo umount -l ${CACHEDIR}/lower
sudo umount -l ${CACHEDIR}/upper sudo umount -l ${CACHEDIR}/upper
sudo umount -l ${CACHEDIR}/efimnt sudo umount -l ${CACHEDIR}/efimnt
sudo kpartx -v -d ${CACHEDIR}/installer.img || exit sudo kpartx -d ${CACHEDIR}/installer.img &>/dev/null || exit
for DEV in $EFI_DEV $ROOTFS_DEV $OVERLAY_DEV; do for DEV in $EFI_DEV $ROOTFS_DEV $OVERLAY_DEV; do
[ -e "/dev/mapper/`basename $DEV`" ] && { [ -e "/dev/mapper/`basename $DEV`" ] && {
sudo dmsetup remove $DEV || exit sudo dmsetup remove $DEV &>/dev/null || exit
} }
done done
sudo losetup -d $LOOPDEV # it's ok to fail here, it means kpartx did it for us
sudo losetup -d $LOOPDEV &>/dev/null | :
} }
} }
cleanup() { cleanup() {
cleanup_noexit cleanup_noexit &>/dev/null
exit exit
} }
@ -431,17 +432,17 @@ generate_img() {
# prep image # prep image
log "Generating Installer image file" log "Generating Installer image file"
qemu-img create -f raw $installimg 2G || { qemu-img create -f raw $installimg 2G 2>&1 >> ${LOGFILE} || {
log "Failed to create empty file: $installimg" log "Failed to create empty file: $installimg"
return 1; return 1;
} }
log "Partitioning Installer image (UEFI)" log "Partitioning Installer image (UEFI)"
parted -s $installimg mklabel msdos && (parted -s $installimg mklabel msdos &&
parted -s $installimg mkpart primary fat32 0% 200M && parted -s $installimg mkpart primary fat32 0% 200M &&
parted -s $installimg mkpart primary ext3 200M 1700M && parted -s $installimg mkpart primary ext3 200M 1700M &&
parted -s $installimg mkpart primary ext3 1700M 2147M && parted -s $installimg mkpart primary ext3 1700M 2147M &&
parted -s $installimg set 1 boot on || { parted -s $installimg set 1 boot on) 2>&1 >> ${LOGFILE} || {
log "Failed to partition image: $installimg" log "Failed to partition image: $installimg"
return 1; return 1;
} }
@ -467,7 +468,7 @@ generate_img() {
LOOPDEV="`echo ${kpartx_ret} | fmt -w 1 | grep ^/dev | head -n1`" LOOPDEV="`echo ${kpartx_ret} | fmt -w 1 | grep ^/dev | head -n1`"
log "Building Grub (EFI and BIOS) boot partition" log "Building Grub (EFI and BIOS) boot partition"
(sudo mkfs.vfat -F32 -n GRUB2EFI ${EFI_DEV} && (sudo mkfs.vfat -F32 -n GRUB2EFI ${EFI_DEV} 2>/dev/null &&
mkdir -p ${efimnt} && mkdir -p ${efimnt} &&
sudo mount $EFI_DEV ${efimnt} && sudo mount $EFI_DEV ${efimnt} &&
sudo mkdir -p ${efimnt}/EFI/BOOT && sudo mkdir -p ${efimnt}/EFI/BOOT &&
@ -485,23 +486,22 @@ generate_img() {
sudo rsync -a /usr/lib/grub/x86_64-efi/ ${efimnt}/grub/x86_64-efi/ && sudo rsync -a /usr/lib/grub/x86_64-efi/ ${efimnt}/grub/x86_64-efi/ &&
sudo grub-mkimage -O x86_64-efi -p /grub -c ${efimnt}/grub/embed_efi.cfg -o ${efimnt}/EFI/BOOT/bootx64.efi ${GRUB_MODS} && sudo grub-mkimage -O x86_64-efi -p /grub -c ${efimnt}/grub/embed_efi.cfg -o ${efimnt}/EFI/BOOT/bootx64.efi ${GRUB_MODS} &&
sudo grub-install --force --removable --no-floppy \ sudo grub-install --force --removable --no-floppy \
--boot-directory=${efimnt}/boot $LOOPDEV && --boot-directory=${efimnt}/boot $LOOPDEV &>/dev/null &&
sudo cp -v ${splash} ${efimnt}/boot/grub) || { sudo cp -v ${splash} ${efimnt}/boot/grub) 2>&1 >> ${LOGFILE} || {
log "ERROR: failed to create multiboot partition" log "ERROR: failed to create multiboot partition"
return 1 return 1
} }
log "Creating and syncing filesystem (original cloudimg rootfs)" log "Creating and syncing filesystem (original cloudimg rootfs)"
sudo mkfs.ext3 -L cloudimg-rootfs $ROOTFS_DEV && (sudo mkfs.ext3 -q -L cloudimg-rootfs $ROOTFS_DEV &&
mkdir -p ${lower} && mkdir -p ${lower} &&
sudo mount $ROOTFS_DEV ${lower} && sudo mount $ROOTFS_DEV ${lower} &&
sudo rsync -a ${rootfs}/ ${lower}/ || { sudo rsync -a ${rootfs}/ ${lower}/) 2>&1 >> ${LOGFILE} || {
log "ERROR: failed to sync rootfs into install image"; log "ERROR: failed to sync rootfs into install image";
return 1 return 1
} }
log "Creating and syncing filesystem (installer overlay)" log "Creating and syncing filesystem (installer overlay)"
sudo mkfs.ext3 -L overlay-rootfs $OVERLAY_DEV
# mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,\ # mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,\
# workdir=/work /merged # workdir=/work /merged
OVERLAY_VERSION=( `modinfo -V overlayfs` ) # returns: kmod version XX OVERLAY_VERSION=( `modinfo -V overlayfs` ) # returns: kmod version XX
@ -517,25 +517,27 @@ generate_img() {
# load the right overlay module # load the right overlay module
if ! lsmod | grep -q ${FS}; then sudo modprobe -v $FS; fi if ! lsmod | grep -q ${FS}; then sudo modprobe -v $FS; fi
(sudo mkfs.ext3 -q -L overlay-rootfs $OVERLAY_DEV
sudo mkdir -p ${work} ${upper} ${mnt} && sudo mkdir -p ${work} ${upper} ${mnt} &&
sudo mount $OVERLAY_DEV ${upper} && sudo mount $OVERLAY_DEV ${upper} &&
sudo mkdir -p ${upper}/overlay ${work} && sudo mkdir -p ${upper}/overlay ${work} &&
sudo mount -t $FS $FS $OPTS ${mnt} || { sudo mount -t $FS $FS $OPTS ${mnt}) 2>&1 >> ${LOGFILE} || {
log "ERROR: failed to overlay mount installer"; log "ERROR: failed to overlay mount installer";
return 1 return 1
} }
log "Installing bootloader configuration" log "Installing bootloader configuration"
set +x (sudo mkdir -p ${mnt}/proc
sudo mkdir ${mnt}/proc sudo mkdir -p ${mnt}/sys
sudo mkdir ${mnt}/sys sudo mkdir -p ${mnt}/dev
sudo mkdir ${mnt}/dev
sudo mount none -t proc ${mnt}/proc && sudo mount none -t proc ${mnt}/proc &&
sudo mount none -t sysfs ${mnt}/sys && sudo mount none -t sysfs ${mnt}/sys &&
sudo mount -o bind /dev ${mnt}/dev && sudo mount -o bind /dev ${mnt}/dev) 2>&1 >> ${LOGFILE} || {
log "ERROR: failed to prepare target mounts for sync";
return 1;
}
if [ "${offline}" == "yes" ]; then if [ "${offline}" == "yes" ]; then
set -x
log "Setting up for offline use" log "Setting up for offline use"
local resolvconf=${mnt}/etc/resolv.conf local resolvconf=${mnt}/etc/resolv.conf
local packages="" local packages=""
@ -569,7 +571,6 @@ generate_img() {
sudo rm ${resolvconf} sudo rm ${resolvconf}
sudo mv ${resolvconf}.old ${resolvconf} sudo mv ${resolvconf}.old ${resolvconf}
set +x
fi fi
if [ "${bootloader}" == "syslinux" ]; then if [ "${bootloader}" == "syslinux" ]; then
@ -580,12 +581,12 @@ generate_img() {
cat ${extlinux_conf} | sudo tee ${mnt}/boot/extlinux/extlinux.conf cat ${extlinux_conf} | sudo tee ${mnt}/boot/extlinux/extlinux.conf
else else
log "Installing grub2" log "Installing grub2"
cat ${grub_conf} | sudo tee ${efimnt}/boot/grub/grub.cfg && true cat ${grub_conf} | sudo tee ${efimnt}/boot/grub/grub.cfg 2>&1 >> ${LOGFILE} && true
fi fi
# syncing overlay # syncing overlay
log "Injecting installer configuration/scripts" log "Injecting installer configuration/scripts"
sudo rsync -avP ${overlay_path}/ ${mnt}/ || { sudo rsync -a ${overlay_path}/ ${mnt}/ || {
log "Failed to sync local installer configuration/scripts"; log "Failed to sync local installer configuration/scripts";
return 1; return 1;
} }
@ -596,7 +597,6 @@ generate_img() {
log "Failed to install bootloader and configuration"; log "Failed to install bootloader and configuration";
return 1; return 1;
} }
set -x
_RETVAL="$installimg"; _RETVAL="$installimg";
return 0; return 0;
@ -680,6 +680,7 @@ main() {
return 1; return 1;
} }
INSTALLIMG=${_RETVAL} INSTALLIMG=${_RETVAL}
log "Cleaning up ..."
cleanup_noexit && cleanup_noexit &&
mv $INSTALLIMG ${OUTPUT} && mv $INSTALLIMG ${OUTPUT} &&
ln -fs ${OUTPUT} installer.img || { ln -fs ${OUTPUT} installer.img || {