diff options
Diffstat (limited to 'build-recipe-kiwi')
-rw-r--r-- | build-recipe-kiwi | 139 |
1 files changed, 117 insertions, 22 deletions
diff --git a/build-recipe-kiwi b/build-recipe-kiwi index 6f8e6a1..206dc94 100644 --- a/build-recipe-kiwi +++ b/build-recipe-kiwi @@ -259,10 +259,16 @@ kiwi_post_unknown() { recipe_setup_kiwi() { TOPDIR=/usr/src/packages + test "$DO_INIT_TOPDIR" = false || rm -rf "$BUILD_ROOT$TOPDIR" mkdir -p "$BUILD_ROOT$TOPDIR" mkdir -p "$BUILD_ROOT$TOPDIR/OTHER" mkdir -p "$BUILD_ROOT$TOPDIR/SOURCES" mkdir -p "$BUILD_ROOT$TOPDIR/KIWI" + # compat, older build versions did not clean TOPDIR ... + mkdir -p "$BUILD_ROOT$TOPDIR/BUILD" + mkdir -p "$BUILD_ROOT$TOPDIR/RPMS" + mkdir -p "$BUILD_ROOT$TOPDIR/SRPMS" + chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR" if test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir ; then mv "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/ @@ -319,10 +325,10 @@ build_kiwi_product() { fi # move created product to correct destination - for i in $BUILD_ROOT/$TOPDIR/KIWIROOT/main/* ; do + pushd $BUILD_ROOT/$TOPDIR/KIWIROOT/main + for i in * ; do test -e "$i" || continue - f=${i##*/} - case $f in + case $i in *.iso) if [ -x /usr/bin/sha256sum ]; then /usr/bin/sha256sum "$i" > "$i.sha256" mv "$i.sha256" $BUILD_ROOT/$TOPDIR/KIWI/. @@ -335,26 +341,115 @@ build_kiwi_product() { *) test -d $i -a "$drop_repo" != true && mv $i $BUILD_ROOT/$TOPDIR/KIWI/. ;; esac done + popd +} + +perform_image_build() { + local imgtype=$1 + local legacy=$2 + local prepare_call + local create_call + # When people test mixed build with legacy and new kiwi version + # The zypper cache was used in different ways. Therefore this + # needs a cleanup before the build starts + echo "Cleanup zypper image build cache" + if [ -d "$BUILD_ROOT/var/cache/kiwi/zypper" ];then + rm -rf $BUILD_ROOT/var/cache/kiwi/zypper + fi + echo "running kiwi --prepare for $imgtype..." + # Do not use $BUILD_USER here, since we always need root permissions + prepare_call="cd $TOPDIR/SOURCES && rm -rf $TOPDIR/KIWIROOT-$imgtype" + if [ "$legacy" = "true" ]; then + prepare_call="$prepare_call && /usr/sbin/kiwi --logfile terminal" + else + prepare_call="$prepare_call && LANG=en_US.UTF-8 /usr/bin/kiwi" + prepare_call="$prepare_call --compat -- --debug" + fi + prepare_call="$prepare_call --prepare $TOPDIR/SOURCES" + prepare_call="$prepare_call --root $TOPDIR/KIWIROOT-$imgtype" + prepare_call="$prepare_call $KIWI_PARAMETERS" + chroot $BUILD_ROOT \ + su -c "$prepare_call" - root < /dev/null || cleanup_and_exit 1 + + echo "running kiwi --create for $imgtype..." + mkdir -p $BUILD_ROOT/$TOPDIR/KIWI-$imgtype + create_call="cd $TOPDIR/SOURCES" + if [ "$legacy" = "true" ]; then + create_call="$create_call && LANG=en_US.UTF-8 /usr/sbin/kiwi" + create_call="$create_call --logfile terminal" + else + create_call="$create_call && /usr/bin/kiwi --compat -- --debug" + fi + create_call="$create_call --create $TOPDIR/KIWIROOT-$imgtype" + create_call="$create_call --type $imgtype" + create_call="$create_call -d $TOPDIR/KIWI-$imgtype" + create_call="$create_call $KIWI_PARAMETERS" + chroot $BUILD_ROOT \ + su -c "$create_call" - root < /dev/null || cleanup_and_exit 1 + + rm -rf "/$TOPDIR/KIWI.bundle" +} + +perform_image_bundle() { + local imgtype=$1 + local legacy=$2 + local bundle_call + if [ "$legacy" = "true" ]; then + bundle_call="/usr/sbin/kiwi --bundle-build $TOPDIR/KIWI-$imgtype" + bundle_call="$bundle_call -d /$TOPDIR/KIWI.bundle/" + bundle_call="$bundle_call --bundle-id Build$RELEASE" + else + bundle_call="LANG=en_US.UTF-8 /usr/bin/kiwi result bundle" + bundle_call="$bundle_call --target-dir $TOPDIR/KIWI-$imgtype" + bundle_call="$bundle_call --id Build$RELEASE" + bundle_call="$bundle_call --bundle-dir /$TOPDIR/KIWI.bundle/" + fi + if chroot $BUILD_ROOT su -c "$bundle_call" - root < /dev/null; then + mv "$BUILD_ROOT/$TOPDIR/KIWI.bundle/"* \ + "$BUILD_ROOT/$TOPDIR/KIWI/" || cleanup_and_exit 1 + rmdir "$BUILD_ROOT/$TOPDIR/KIWI.bundle" + # success + return 0 + fi + # need another way to bundle + return 1 +} + +is_legacy_kiwi() { + if [ -L "$BUILD_ROOT/usr/bin/kiwi" ];then + # The next generation of kiwi is installed to /usr/bin + # If this file is found we expect the new kiwi to be + # installed + return 1 + fi + # in any other case stick to the legacy kiwi + return 0 } build_kiwi_appliance() { if test -z "$RUNNING_IN_VM" ; then - # NOTE: this must be done with the outer system, because it loads the dm-mod kernel modules, which needs to fit to the kernel. - echo "starting device mapper for kiwi..." - test -x /etc/init.d/boot.device-mapper && /etc/init.d/boot.device-mapper start + # NOTE: this must be done with the outer system, because it loads + # the dm-mod kernel modules, which needs to fit to the kernel. + echo "starting device mapper for kiwi..." + test -x /etc/init.d/boot.device-mapper && \ + /etc/init.d/boot.device-mapper start + fi + KIWI_PROFILE=$(queryconfig \ + --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" \ + --archpath "$BUILD_ARCH" buildflags kiwiprofile + ) + if test -n "$KIWI_PROFILE"; then + KIWI_PARAMETERS="$KIWI_PARAMETERS --add-profile $KIWI_PROFILE" + fi + local legacy=false + if is_legacy_kiwi; then + legacy=true fi RUN_BUNDLE="true" for imgtype in $imagetype ; do - echo "running kiwi --prepare for $imgtype..." - # Do not use $BUILD_USER here, since we always need root permissions - chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && rm -rf $TOPDIR/KIWIROOT-$imgtype && kiwi --prepare $TOPDIR/SOURCES --logfile terminal --root $TOPDIR/KIWIROOT-$imgtype $KIWI_PARAMETERS" - root < /dev/null || cleanup_and_exit 1 - echo "running kiwi --create for $imgtype..." - mkdir -p $BUILD_ROOT/$TOPDIR/KIWI-$imgtype - chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && kiwi --create $TOPDIR/KIWIROOT-$imgtype --logfile terminal --type $imgtype -d $TOPDIR/KIWI-$imgtype $KIWI_PARAMETERS" - root < /dev/null || cleanup_and_exit 1 - rm -rf "/$TOPDIR/KIWI.bundle" - if chroot $BUILD_ROOT su -c "kiwi --bundle-build $TOPDIR/KIWI-$imgtype -d /$TOPDIR/KIWI.bundle/ --bundle-id Build$RELEASE" - root < /dev/null; then - mv "$BUILD_ROOT/$TOPDIR/KIWI.bundle/"* "$BUILD_ROOT/$TOPDIR/KIWI/" || cleanup_and_exit 1 - rmdir "$BUILD_ROOT/$TOPDIR/KIWI.bundle" + perform_image_build $imagetype $legacy + if perform_image_bundle $imagetype $legacy; then + # bundling successful, skip alternative bundlers unset RUN_BUNDLE fi done @@ -415,18 +510,18 @@ recipe_build_kiwi() { # prepare rpms as source and createrepo on the repositories ln -sf $TOPDIR/SOURCES/repos $BUILD_ROOT/repos cd $BUILD_ROOT/$TOPDIR/SOURCES/repos - for r in */* ; do + for r in *[^:]/* ; do test -L $r && continue test -d $r || continue repo="$TOPDIR/SOURCES/repos/$r/" # create compatibility link for old kiwi versions rc="${r//:/:/}" if test "$rc" != "$r" ; then - rl="${rc//[^\/]}" - rl="${rl//?/../}" - mkdir -p "${rc%/*}" - ln -s $rl$r "${rc%/*}/${rc##*/}" - repo="$TOPDIR/SOURCES/repos/${rc%/*}/${rc##*/}/" + rl="${rc//[^\/]}" + rl="${rl//?/../}" + mkdir -p "${rc%/*}" + ln -s $rl$r "${rc%/*}/${rc##*/}" + repo="$TOPDIR/SOURCES/repos/${rc%/*}/${rc##*/}/" fi if test "$imagetype" != product -a "$DO_INIT" != "false" ; then echo "creating repodata for $repo" |