X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=ta%2Fbuild-tools.git;a=blobdiff_plain;f=build_step_create_install_cd.sh;h=f06929b05c9fca54e0e87ce62793d79131977bc8;hp=40de1cc407aa985c21e87335053e004a4e33c621;hb=HEAD;hpb=4ded4f2a805e9447be90751d7d4fb7e11552e545 diff --git a/build_step_create_install_cd.sh b/build_step_create_install_cd.sh index 40de1cc..f06929b 100755 --- a/build_step_create_install_cd.sh +++ b/build_step_create_install_cd.sh @@ -23,18 +23,17 @@ _read_manifest_vars tmp=$WORKTMP/install_cd iso_build_dir=$tmp/build -input_image="$WORKTMP/goldenimage/${GOLDEN_IMAGE_NAME}" -output_image_path="$1" -[[ $output_image_path =~ ^/ ]] || output_image_path=$(pwd)/$output_image_path -output_bootcd_path="$2" -[[ $output_bootcd_path =~ ^/ ]] || output_bootcd_path=$(pwd)/$output_bootcd_path +input_image=$(readlink -f ${1:-$WORKTMP/goldenimage/$GOLDEN_IMAGE_NAME}) +output_image_path=${2:-$RESULT_IMAGES_DIR/install.iso} +output_bootcd_path=${3:-$RESULT_IMAGES_DIR/bootcd.iso} mkdir -p $tmp rm -rf $iso_build_dir mkdir -p $iso_build_dir -reposnap_base=$(_read_build_config DEFAULT centos_reposnap_base) +iso_arch="$(uname -m)" +reposnap_base=$(_read_build_config DEFAULT centos_reposnap) release_version=$PRODUCT_RELEASE_LABEL -reposnap_base_dir="${reposnap_base}/os/x86_64/" +reposnap_base_dir="${reposnap_base}/os/${iso_arch}/" iso_image_label=$(_read_build_config DEFAULT iso_image_label) cd_efi_dir="${reposnap_base_dir}/EFI" cd_images_dir="${reposnap_base_dir}/images" @@ -44,13 +43,6 @@ remove_extra_slashes_from_url() { echo $1 | sed -re 's#([^:])//+#\1/#g' } -get_nexus() { - $scriptdir/nexus3_dl.sh \ - $nexus_url \ - $(basename $nexus_reposnaps) \ - ${reposnap_base#$nexus_reposnaps/}/os/x86_64 $@ -} - wget_dir() { local url=$1 echo $url | grep -q /$ || _abort "wget path '$url' must end with slash for recursive wget" @@ -58,57 +50,89 @@ wget_dir() { url=$(remove_extra_slashes_from_url $url) # count cut length in case url depth changes cut_dirs=$(echo $url | sed -re 's|.*://[^/]+/(.+)|\1|' -e 's|/$||' | grep -o / | wc -l) - wget -N -r --no-host-directories --no-verbose --cut-dirs=${cut_dirs} --reject index.html* --no-parent $url + wget -N -r \ + --no-host-directories \ + --no-verbose \ + --cut-dirs=${cut_dirs} \ + --reject index.html* \ + --no-parent \ + --execute robots=off \ + $url } pushd $iso_build_dir # Get files needed for generating CD image. -if echo $reposnap_base_dir | grep -E "https?://nexus3"; then - nexus_url=$(_read_build_config DEFAULT nexus_url) - nexus_reposnaps=$(_read_build_config DEFAULT nexus_reposnaps) - get_nexus "EFI/BOOT" "EFI/BOOT/fonts" - get_nexus "images:*efiboot.img" "images/pxeboot" - get_nexus "isolinux" -else - wget_dir ${cd_efi_dir}/ - wget_dir ${cd_images_dir}/ - rm -rf images/boot.iso - sync - wget_dir ${cd_isolinux_dir}/ +wget_dir ${cd_efi_dir}/ +wget_dir ${cd_images_dir}/ +rm -f images/boot.iso +sync +chmod +w -R EFI/ images/ +# Only x86_64 supports PC-BIOS, so skip all isolinux processing on other platforms +if [ "${iso_arch}" = 'x86_64' ]; then + wget_dir ${cd_isolinux_dir}/ + chmod +w -R isolinux/ + + if [ -e $scriptdir/isolinux/isolinux.cfg ]; then + cp $scriptdir/isolinux/isolinux.cfg isolinux/isolinux.cfg + else + sed -i "s/^timeout.*/timeout 100/" isolinux/isolinux.cfg + sed -i "s/^ - Press.*/Begin the cloud installation process/" isolinux/boot.msg + sed -i "s/^#menu hidden/menu hidden/" isolinux/isolinux.cfg + sed -i "s/menu default//" isolinux/isolinux.cfg + sed -i "/^label linux/amenu default" isolinux/isolinux.cfg + sed -i "/append initrd/ s/$/ console=tty0 console=ttyS1,115200/" isolinux/isolinux.cfg + fi + cp -f $scriptdir/akraino_splash.png isolinux/splash.png fi -chmod +w -R isolinux/ EFI/ images/ -if [ -e $scriptdir/isolinux/isolinux.cfg ]; then - cp $scriptdir/isolinux/isolinux.cfg isolinux/isolinux.cfg -else - sed -i "s/^timeout.*/timeout 100/" isolinux/isolinux.cfg - sed -i "s/^ - Press.*/Beginning the cloud installation process/" isolinux/boot.msg - sed -i "s/^#menu hidden/menu hidden/" isolinux/isolinux.cfg - sed -i "s/menu default//" isolinux/isolinux.cfg - sed -i "/^label linux/amenu default" isolinux/isolinux.cfg - sed -i "/append initrd/ s/$/ console=tty0 console=ttyS1,115200/" isolinux/isolinux.cfg -fi -cp -f $scriptdir/akraino_splash.png isolinux/splash.png +# Update grub.cfg for EFI booting, similar to isolinux +sed -i '/menuentry/{N;N;N;q}' EFI/BOOT/grub.cfg +sed -i -e 's|Install CentOS 7|Begin the cloud installation process|' \ + -e '/vmlinuz/ s/$/ console=tty0 console=ttyS1,115200 console=ttyAMA0,115200/' \ + EFI/BOOT/grub.cfg popd pushd $tmp # Copy latest kernel and initrd-provisioning from boot dir -virt-copy-out -a $input_image /boot/ ./ +if [ "${iso_arch}" = 'x86_64' ]; then + qemu-img convert $input_image guest-image.raw + myloop=$(sudo losetup -fP --show guest-image.raw) + mkdir mnt + sudo mount -o loop ${myloop}p1 mnt/ + sudo rsync -avA mnt/boot . + sudo chown -R $(id -u):$(id -g) boot + sudo umount mnt + sudo losetup -d ${myloop} + sudo rm -rf guest-image.raw mnt +else + export LIBGUESTFS_BACKEND=direct + virt-copy-out -a $input_image /boot/ ./ +fi + chmod u+w boot/ -rm -f $iso_build_dir/isolinux/vmlinuz $iso_build_dir/isolinux/initrd.img KVER=`ls -lrt boot/vmlinuz-* |grep -v rescue |tail -n1 |awk -F 'boot/vmlinuz-' '{print $2}'` -cp -fp boot/vmlinuz-${KVER} $iso_build_dir/isolinux/vmlinuz -cp -fp boot/initrd-provisioning.img $iso_build_dir/isolinux/initrd.img +if [ "${iso_arch}" = 'x86_64' ]; then + rm -f $iso_build_dir/isolinux/vmlinuz $iso_build_dir/isolinux/initrd.img + cp -fp boot/vmlinuz-${KVER} $iso_build_dir/isolinux/vmlinuz + cp -fp boot/initrd-provisioning.img $iso_build_dir/isolinux/initrd.img +fi +rm -f $iso_build_dir/images/pxeboot/vmlinuz $iso_build_dir/images/pxeboot/initrd.img +cp -fp boot/vmlinuz-${KVER} $iso_build_dir/images/pxeboot/vmlinuz +cp -fp boot/initrd-provisioning.img $iso_build_dir/images/pxeboot/initrd.img rm -rf boot/ echo "Generating boot iso" -_run_cmd genisoimage -U -r -v -T -J -joliet-long \ +if [ "${iso_arch}" = 'x86_64' ]; then + bios_specific_args="-b isolinux/isolinux.bin -c isolinux/boot.cat \ + -no-emul-boot -boot-load-size 4 -boot-info-table" +fi +genisoimage -U -r -v -T -J -joliet-long \ -V "${release_version}" -A "${release_version}" -P ${iso_image_label} \ - -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \ - -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot \ + ${bios_specific_args:-} \ + -eltorito-alt-boot -e images/efiboot.img -no-emul-boot \ -o boot.iso $iso_build_dir _publish_image $tmp/boot.iso $output_bootcd_path @@ -118,12 +142,12 @@ cp -f ${input_image} $iso_build_dir/ mkdir -p $iso_build_dir/rpms echo "Generating product iso" -_run_cmd genisoimage -U -r -v -T -J -joliet-long \ +genisoimage -U -r -v -T -J -joliet-long \ -V "${release_version}" -A "${release_version}" -P ${iso_image_label} \ - -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 \ - -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot \ + ${bios_specific_args:-} \ + -eltorito-alt-boot -e images/efiboot.img -no-emul-boot \ -o release.iso $iso_build_dir -_run_cmd isohybrid $tmp/release.iso +[ "${iso_arch}" != 'x86_64' ] || isohybrid $tmp/release.iso _publish_image $tmp/release.iso $output_image_path echo "Clean up to preserve workspace footprint"