be on the safe side, do skip createrepo only if DO_INIT is false
[platform/upstream/build.git] / build_kiwi.sh
1 #!/bin/bash
2 run_kiwi()
3 {
4     imagetype=$(perl -I$BUILD_DIR -MBuild::Kiwi -e Build::Kiwi::show $BUILD_ROOT/$TOPDIR/SOURCES/$SPECFILE imagetype)
5     imagename=$(perl -I$BUILD_DIR -MBuild::Kiwi -e Build::Kiwi::show $BUILD_ROOT/$TOPDIR/SOURCES/$SPECFILE filename)
6     imageversion=$(perl -I$BUILD_DIR -MBuild::Kiwi -e Build::Kiwi::show $BUILD_ROOT/$TOPDIR/SOURCES/$SPECFILE version)
7     # prepare rpms as source and createrepo on the repositories
8     if test -d $BUILD_ROOT/$TOPDIR/SOURCES/repos -a "$DO_INIT" != false ; then
9         (
10         ln -sf $TOPDIR/SOURCES/repos $BUILD_ROOT/repos
11         cd $BUILD_ROOT/$TOPDIR/SOURCES/repos
12         for r in */* ; do
13             test -L $r && continue
14             test -d $r || continue
15             repo="$TOPDIR/SOURCES/repos/$r/"
16             # create compatibility link for old kiwi versions
17             rc="${r//:/:/}"
18             if test "$rc" != "$r" ; then
19                 rl="${rc//[^\/]}"
20                 rl="${rl//?/../}"
21                 mkdir -p "${rc%/*}"
22                 ln -s $rl$r "${rc%/*}/${rc##*/}"
23                 repo="$TOPDIR/SOURCES/repos/${rc%/*}/${rc##*/}/"
24             fi
25             if test "$imagetype" != product ; then
26                 echo "creating repodata for $repo"
27                 chroot $BUILD_ROOT createrepo "$repo"
28             fi
29         done
30         )
31     fi
32     # unpack root tar
33     for t in $BUILD_ROOT/$TOPDIR/SOURCES/root.tar* ; do
34         test -f $t || continue
35         mkdir -p $BUILD_ROOT/$TOPDIR/SOURCES/root
36         chroot $BUILD_ROOT tar -C $TOPDIR/SOURCES/root -xf "$TOPDIR/SOURCES/${t##*/}"
37     done
38     # fix script permissions
39     chmod a+x $BUILD_ROOT/$TOPDIR/SOURCES/*.sh 2>/dev/null
40     # unpack tar files in image directories
41     if test -d $BUILD_ROOT/$TOPDIR/SOURCES/images ; then
42         (
43         cd $BUILD_ROOT/$TOPDIR/SOURCES/images
44         for r in */* ; do
45             test -L $r && continue
46             test -d $r || continue
47             for t in $r/root.tar* ; do
48                 test -f $t || continue
49                 mkdir -p $r/root
50                 chroot $BUILD_ROOT tar -C $TOPDIR/SOURCES/images/$r/root -xf "$TOPDIR/SOURCES/images/$r/${t##*/}"
51             done
52             # fix script permissions
53             chmod a+x $BUILD_ROOT/$TOPDIR/SOURCES/images/$r/*.sh 2>/dev/null
54             # create compatibility link for old kiwi versions
55             rc="${r//:/:/}"
56             if test "$rc" != "$r" ; then
57                 rl="${rc//[^\/]}"
58                 rl="${rl//?/../}"
59                 mkdir -p "${rc%/*}"
60                 ln -s $rl$r "${rc%/*}/${rc##*/}"
61             fi
62         done
63         )
64     fi
65     rm -f $BUILD_ROOT/$TOPDIR/SOURCES/config.xml
66     ln -s $SPECFILE $BUILD_ROOT/$TOPDIR/SOURCES/config.xml
67     chroot $BUILD_ROOT su -c "kiwi --version" -
68     if test "$imagetype" = product ; then
69         echo "running kiwi --create-instsource..."
70         # runs always as abuild user
71         mkdir -p "$BUILD_ROOT/$TOPDIR/KIWIROOT"
72         chroot "$BUILD_ROOT" chown -R abuild.abuild "$TOPDIR"
73         # --instsource-local is only needed for openSUSE 11.1 and SLE 11 SP0 kiwi.
74         chroot "$BUILD_ROOT" su -c "APPID=- LANG=POSIX /usr/sbin/kiwi --root $TOPDIR/KIWIROOT -v -v --logfile terminal -p $TOPDIR/SOURCES --instsource-local --create-instsource $TOPDIR/SOURCES" - abuild < /dev/null && BUILD_SUCCEEDED=true
75 ### This block is obsolete with current kiwi versions, only needed for kiwi 3.01 version
76 #            for i in $BUILD_ROOT/$TOPDIR/KIWIROOT/main/* ; do
77 #                test -d "$i" || continue
78 #                n="${i##*/}"
79 #                test "$n" = scripts && continue
80 #                test "$n" != "${n%0}" && continue
81 #                chroot $BUILD_ROOT su -c "suse-isolinux $TOPDIR/KIWIROOT/main/$n $TOPDIR/KIWI/$n.iso" - $BUILD_USER
82 #            done
83
84         # move created product to correct destination
85         for i in $BUILD_ROOT/$TOPDIR/KIWIROOT/main/* ; do
86             test -e "$i" || continue
87             f=${i##*/}
88             case $f in
89                 *.iso) mv $i $BUILD_ROOT/$TOPDIR/KIWI/. ;;
90                 scripts) ;;
91                 *0) ;;
92                 *) test -d $i && mv $i $BUILD_ROOT/$TOPDIR/KIWI/. ;;
93             esac
94         done
95     else
96         BUILD_SUCCEEDED=true
97         if [ -z "$RUNNING_IN_VM" ]; then
98             # NOTE: this must be done with the outer system, because it loads the dm-mod kernel modules, which needs to fit to the kernel.
99             echo "starting device mapper for kiwi..."
100             [ -x /etc/init.d/boot.device-mapper ] && /etc/init.d/boot.device-mapper start
101         fi
102         for imgtype in $imagetype ; do
103             echo "running kiwi --prepare for $imgtype..."
104             # Do not use $BUILD_USER here, since we always need root permissions
105             if chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && kiwi --prepare $TOPDIR/SOURCES --logfile terminal --root $TOPDIR/KIWIROOT-$imgtype" - root < /dev/null ; then
106                 echo "running kiwi --create for $imgtype..."
107                 mkdir -p $BUILD_ROOT/$TOPDIR/KIWI-$imgtype
108                 chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && kiwi --create $TOPDIR/KIWIROOT-$imgtype --logfile terminal --type $imgtype -d $TOPDIR/KIWI-$imgtype" - root < /dev/null || cleanup_and_exit 1
109             else
110                 cleanup_and_exit 1
111             fi
112         done
113
114         # create tar.gz of images, in case it makes sense
115         imagearch=`uname -m`
116         buildnum=""
117           if test -n "$RELEASE"; then
118             buildnum="-Build$RELEASE"
119         fi
120         for imgtype in $imagetype ; do
121             case "$imgtype" in
122                 oem)
123                             pushd $BUILD_ROOT/$TOPDIR/KIWI-oem > /dev/null
124                     echo "compressing oem images... "
125                     tar cvjfS $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-raw.tar.bz2 \
126                         --exclude=$imagename.$imagearch-$imageversion.iso \
127                         --exclude=$imagename.$imagearch-$imageversion.raw \
128                         * || cleanup_and_exit 1
129                     sha256sum $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-raw.tar.bz2 \
130                         > "$BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-raw.tar.bz2.sha256" || cleanup_and_exit 1
131                     if [ -e $imagename.$imagearch-$imageversion.iso ]; then
132                       echo "take iso file and create sha256..."
133                       mv $imagename.$imagearch-$imageversion.iso \
134                          $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum.iso || cleanup_and_exit 1
135                               pushd $BUILD_ROOT/$TOPDIR/KIWI > /dev/null
136                       sha256sum $imagename.$imagearch-$imageversion$buildnum.iso \
137                              > "$imagename.$imagearch-$imageversion$buildnum.iso.sha256" || cleanup_and_exit 1
138                       popd > /dev/null
139                     fi
140                     if [ -e $imagename.$imagearch-$imageversion.raw ]; then
141                       mv $imagename.$imagearch-$imageversion.raw \
142                          $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum.raw || cleanup_and_exit 1
143                       pushd $BUILD_ROOT/$TOPDIR/KIWI > /dev/null
144                       echo "bzip2 raw file..."
145                       bzip2 $imagename.$imagearch-$imageversion$buildnum.raw && \
146                       echo "Create sha256 file..." && \
147                       sha256sum $imagename.$imagearch-$imageversion$buildnum.raw.bz2 \
148                              > "$imagename.$imagearch-$imageversion$buildnum.raw.bz2.sha256" || cleanup_and_exit 1
149                       popd > /dev/null
150                     fi
151                     popd > /dev/null
152                     ;;
153                 vmx)
154                     pushd $BUILD_ROOT/$TOPDIR/KIWI-vmx > /dev/null
155                     echo "compressing vmx images... "
156                     # This option has a number of format parameters
157                     FILES=""
158                     for i in $imagename.$imagearch-$imageversion.vmx $imagename.$imagearch-$imageversion.vmdk $imagename.$imagearch-$imageversion.ovf \
159                          $imagename.$imagearch-$imageversion-disk*.vmdk $imagename.$imagearch-$imageversion.xenconfig; do
160                         ls $i >& /dev/null && FILES="$FILES $i"
161                     done
162                     # kiwi is not removing the .rar file, if a different output format is defined. Do not include it by default.
163                     [ -z "$FILES" ] && FILES="$imagename.$imagearch-$imageversion.raw"
164                     tar cvjfS $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-vmx.tar.bz2 \
165                         $FILES || cleanup_and_exit 1
166                     echo "Create sha256 file..."
167                     sha256sum $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-vmx.tar.bz2 \
168                              > "$BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-vmx.tar.bz2.sha256" || cleanup_and_exit 1
169                     popd > /dev/null
170                     ;;
171                 xen)
172                     pushd $BUILD_ROOT/$TOPDIR/KIWI-xen > /dev/null
173                     echo "compressing xen images... "
174                     tar cvjfS $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-xen.tar.bz2 \
175                         `grep ^kernel $imagename.$imagearch-$imageversion.xenconfig | cut -d'"'  -f2` \
176                         `grep ^ramdisk $imagename.$imagearch-$imageversion.xenconfig | cut -d'"'  -f2` \
177                         $imagename.$imagearch-$imageversion.xenconfig \
178                         $imagename.$imagearch-$imageversion || cleanup_and_exit 1
179                     popd > /dev/null
180                     echo "Create sha256 file..."
181                     sha256sum $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-xen.tar.bz2 \
182                              > "$BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-xen.tar.bz2.sha256" || cleanup_and_exit 1
183                     ;;
184                 pxe)
185                     pushd $BUILD_ROOT/$TOPDIR/KIWI-pxe > /dev/null
186                     echo "compressing pxe images... "
187                     tar cvjfS $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-pxe.tar.bz2 \
188                                 $imagename.$imagearch-$imageversion* \
189                                 initrd-* || cleanup_and_exit 1
190                     popd > /dev/null
191                     echo "Create sha256 file..."
192                     sha256sum $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-pxe.tar.bz2 \
193                              > "$BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-pxe.tar.bz2.sha256" || cleanup_and_exit 1
194                     ;;
195                 iso)
196                     pushd $BUILD_ROOT/$TOPDIR/KIWI-iso > /dev/null
197                     echo "creating sha256 sum for iso images... "
198                     for i in *.iso; do
199                         pushd $BUILD_ROOT/$TOPDIR/KIWI/ > /dev/null
200                         mv $BUILD_ROOT/$TOPDIR/KIWI-iso/$i ${i%.iso}$buildnum.iso || cleanup_and_exit 1
201                         sha256sum ${i%.iso}$buildnum.iso > ${i%.iso}$buildnum.iso.sha256 || cleanup_and_exit 1
202                         popd > /dev/null
203                     done
204                     popd > /dev/null
205                     ;;
206                 *)
207                     pushd $BUILD_ROOT/$TOPDIR/KIWI-$imgtype > /dev/null
208                     echo "compressing unkown images... "
209                     tar cvjfS $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-$imgtype.tar.bz2 \
210                         * || cleanup_and_exit 1
211                     echo "Create sha256 file..."
212                     sha256sum $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-$imgtype.tar.bz2 \
213                         > $BUILD_ROOT/$TOPDIR/KIWI/$imagename.$imagearch-$imageversion$buildnum-$imgtype.tar.bz2.sha256 || cleanup_and_exit 1
214                             popd > /dev/null
215                     ;;
216             esac
217         done
218     fi
219 }