source: projects/vbootstrap/tags/0.0.36/libvbuilder.sh.in @ 2664

Revision 2664, 9.6 KB checked in by munepi, 13 years ago (diff)

tagging 0.0.36

  • Property svn:executable set to *
Line 
1#!/bin/bash
2
3setup-vbuilder(){
4    ## load default settings
5    VBUILDER_CONF=/etc/vbootstrap/vbuilder.conf
6    if [ -r $VBUILDER_CONF ]; then
7        . $VBUILDER_CONF
8        [ $? -eq 1 ] && return 1
9    fi
10    [ -z "${DEFAULT_VERSION}" ] && \
11        DEFAULT_VERSION=@@VBUILDER_DEFAULT_VERSION@@
12    [ -z "${CATEGORIES}" ] && \
13        CATEGORIES=@@VBUILDER_CATEGORIES@@
14    [ -z "${VBOOTSTRAP_DIR}" ] && \
15        VBOOTSTRAP_DIR=@@VBUILDER_VBOOTSTRAP_DIR@@
16    [ -z "${CACHE_DIR}" ] && \
17        CACHE_DIR=@@VBUILDER_CACHE_DIR@@
18    [ -z "${BUILT_RPMS_DIR}" ] && \
19        BUILT_RPMS_DIR=@@VBUILDER_BUILT_RPMS_DIR@@
20
21    ## set default version for vbootstrap
22    VERSION=$DEFAULT_VERSION
23
24    ## set current stable relase version
25    STABLE_VERSION=@@VBUILDER_STABLE_VERSION@@
26
27    ## set boolian
28    with_setup_vbootstrap=0
29    with_dist_upgrade=0
30    with_unionfs=0
31    with_sign=0
32    with_no_install=0
33    with_actions=0
34    with_ix86_on_x86_64=0
35    with_category_main=0
36    with_category_plus=0
37    with_category_nonfree=0
38    with_category_test=0
39    with_category_proposed_updates=0
40    with_category_security=0
41
42    return 0
43}
44
45setup-vbootstrap(){
46    if [ ${with_setup_vbootstrap} -eq 0 ]; then
47        with_setup_vbootstrap=1
48
49        ## check some directories
50        ## Note: create $BUILT_RPMS_DIR in RPM_Build()
51        [ -d $VBOOTSTRAP_DIR ] || mkdir -p $VBOOTSTRAP_DIR
52        [ -d $CACHE_DIR ] || mkdir -p $CACHE_DIR
53
54        ## check a chroot archtecture
55        if [ -z ${VARCH} ]; then
56            VARCH=$(uname -i)
57        else
58            case "${VARCH}" in
59                i386|i686|x86_64)
60                    [ "$(uname -i)" = "ppc" ] && \
61                        echo $"E: arch ${VARCH} is NOT supported on $(uname -i)" && return 1
62                    ;;
63                ppc)
64                    [ "$(uname -i)" = "i386" -o "$(uname -i)" = "i686" -o "$(uname -i)" = "x86_64" ] && \
65                        echo $"E: arch ${VARCH} is NOT supported on $(uname -i)" && return 1
66                    ;;
67            esac
68        fi
69
70        ##!! 4.2 is NO support on VARCH=x86_64
71        if [ "${VERSION}" = "4.2" -a "${VARCH}" = "x86_64" ]; then
72            echo $"E: ${VERSION} is NOT supported"
73            return 1
74        fi
75
76        ## support i386 chroot on x86_64 below:
77        [ "${VARCH}" != "$(uname -i)" ] && \
78            VERSION=${VERSION}_${VARCH} && \
79            with_ix86_on_x86_64=1
80
81        ## check support ${VERSION}
82        if [ -z "$(/usr/sbin/vbootstrap | sed -e s/^Usage:.*// -e s/^E:.*// | grep -m 1 ${VERSION})" ]; then
83            echo $"E: ${VERSION} is NOT supported"
84            return 1
85        fi
86
87        ## check ${VERSION} equals VineSeed*, when with_dist_upgrade=1
88        if [ $with_dist_upgrade -eq 1 ]; then
89            if [ "$(echo ${VERSION} | sed -e "s/\(VineSeed\).*/\1/")" != "VineSeed" ]; then
90                echo $"E: version ${VERSION} does not support --dist-upgrade option"
91                return 1
92            fi
93        fi
94
95        ## set ${MAJOR_VERSION}
96        MAJOR_VERSION=$(echo ${VERSION} | sed -e "s/_i[0-9]86//")
97
98        ## check apt categories
99        ## "main" category is unconditionally permited
100        with_category_main=1
101        for cat in $(echo ${CATEGORIES} | sed -e "s/,/ /"g); do
102            case $cat in
103                main)
104                    with_category_main=1
105                    ;;
106                plus)
107                    with_category_plus=1
108                    ;;
109                nonfree)
110                    with_category_nonfree=1
111                    ;;
112                test)
113                    ## "test" category only exists in VineSeed
114                    [ "${MAJOR_VERSION}" = "VineSeed" ] || \
115                        echo $"E: No such category exists: $cat" && return 1
116                    with_category_test=1
117                    ;;
118                proposed-updates)
119                    ##!! "proposed-updates" category does not exist in 4.2
120                    [ "${MAJOR_VERSION}" = "4.2" ] && \
121                        echo $"E: No such category exists: $cat" && return 1
122
123                    with_category_proposed_updates=1
124                    ;;
125                security)
126                    ## "security" category does not exist in VineSeed
127                    [ "${MAJOR_VERSION}" = "VineSeed" ] && \
128                        echo $"E: No such category exists: $cat" && return 1
129                    with_category_security=1
130                    ;;
131                *)
132                    echo $"E: No such category exists: $cat" && return 1
133                    ;;
134            esac
135        done
136
137        ## check build target option ${TARGET}
138        if [ ! -z "${TARGET}" ]; then
139            RPM_TARGET_LIST="$(cat /usr/lib/rpm/rpmrc | grep arch_canon: | sed -e "s/arch_canon:[[:blank:]]*\(.*\):.*/\1/")"
140            if [ -z "$(echo $RPM_TARGET_LIST | grep $TARGET)" ]; then
141                echo $"E: rpm build target ${TARGET} is NOT supported"
142                return 1
143            fi
144        fi
145
146        ## set ${RPM_PKG_ARCH_LIST}
147        RPM_PKG_ARCH_LIST="RPMS/i386 RPMS/i686 RPMS/x86_64 RPMS/ppc RPMS/noarch SRPMS"
148        [ -z "${TARGET}" ] || \
149            RPM_PKG_ARCH_LIST="RPMS/${TARGET} ${RPM_PKG_ARCH_LIST}"
150
151    fi
152
153    ## set global variables
154    BUILD_ROOT=${VBOOTSTRAP_DIR}/${VERSION}
155    BUILD_USER=vbuilder
156    BUILD_DIR=/home/${BUILD_USER}/rpm
157    UNIONFS_DIR=${VBOOTSTRAP_DIR}/unionfs/${VERSION}
158    ARCHIVES_DIR=${BUILD_ROOT}/var/cache/apt/archives
159    EXTERNAL_ARCHIVES_DIR=${CACHE_DIR}/${VERSION}/apt/archives
160    VBUILDER_LOG=${BUILD_ROOT}/var/log/vbuilder.log
161
162    __chroot_sh="/usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c -l"
163
164    mkdir -p $VBOOTSTRAP_DIR
165
166    return 0
167}
168
169setup-vbootstrap-rpm(){
170    setup-vbootstrap || return 1
171
172    ## check ${BUILD_ROOT}
173    [ -d ${BUILD_ROOT} ] || Build
174    ## setarch ix86 if ix86 chroot on x86_64 host
175    [ $with_ix86_on_x86_64 -eq 1 ] && \
176        __chroot_sh="/usr/sbin/chroot ${BUILD_ROOT} setarch ${VARCH} /bin/sh -c -l"
177
178    DIST_RELEASE=$(cat ${BUILD_ROOT}/etc/vine-release | cut -f3 -d" " | cut -f1 -d.)
179
180    if [ -f $RPM_PKG ]; then
181        BASE_RPM_PKG=$(basename $RPM_PKG)
182        cp -f $RPM_PKG $BUILD_ROOT${BUILD_DIR}
183    else
184        BASE_RPM_PKG=$RPM_PKG   
185    fi
186
187    return 0
188}
189
190## recover apt-get data on host/chroot
191apt-get-update(){
192    case $1 in
193        --host)
194            echo -n $"apt-get update on host ... "
195            apt-get -qq update > /dev/null 2>&1
196            echo $"done."
197            ;;
198        --chroot)
199            echo -n $"apt-get update on chroot ... "
200            $__chroot_sh 'apt-get -qq update' > /dev/null 2>&1
201            echo $"done."
202            ;;
203        *)
204            echo apt-get-update: unknown option $1
205            exit 1
206            ;;
207    esac
208}
209
210## mount-chroot {|--umount} [file system|name]
211## support file systems: /home /tmp /sys /proc /dev/shm /dev/pts /dev
212## support names: vfs archives_dir
213## NOTE: /tmp needs for applications which use X
214##       vfs is virtual file systems
215##       archives_dir uses to mount ${EXTERNAL_ARCHIVES_DIR} to ${ARCHIVES_DIR}
216##       unionfs_dir covers ${BUILD_ROOT} with unionfs
217mount-chroot(){
218    if [ "$1" = "--umount" ]; then
219        mount-chroot-umount $2 || return 1
220    else
221        mount-chroot-mount $1 || return 1
222    fi
223    return 0
224}
225
226## mount-chroot-umount [file system|name]
227mount-chroot-umount(){
228    local fs=$1
229    case $fs in
230        /home|/tmp|/sys|/proc|/dev/shm|/dev/pts|/dev)
231            [ -d ${BUILD_ROOT}${fs} ] || return 1
232            [ -z "$(mount | grep ${BUILD_ROOT}${fs})" ] || \
233                umount ${BUILD_ROOT}${fs}
234            if [ ! -z "$(mount | grep ${BUILD_ROOT}${fs})" ]; then
235                echo $"Retry lazy unmount ${BUILD_ROOT}${fs} ... "
236                umount -l ${BUILD_ROOT}${fs}
237                echo $"done."
238            fi
239            ;;
240        vfs)
241            for dir in /sys /proc /dev/shm /dev/pts /dev; do
242                mount-chroot-umount ${dir} || return 1
243            done
244            # [ -d ${BUILD_ROOT}/proc ] || return 1
245            # [ -z "$(mount | grep ${BUILD_ROOT}/proc)" ] || \
246            #   umount ${BUILD_ROOT}/proc
247            ;;
248        archives_dir)
249            [ -d ${ARCHIVES_DIR} ] || return 1
250            [ -z "$(mount | grep ${ARCHIVES_DIR})" ] || \
251                umount ${ARCHIVES_DIR}
252            ;;
253        unionfs_dir)
254            [ -d ${BUILD_ROOT} ] || return 1
255            [ -z "$(mount | grep ${BUILD_ROOT} | grep unionfs)" ] || \
256                umount ${BUILD_ROOT}
257            if [ ! -z "$(mount | grep ${BUILD_ROOT} | grep unionfs)" ]; then
258                echo $"Retry lazy unmount ${BUILD_ROOT} ... "
259                umount -l ${BUILD_ROOT}
260                echo $"done."
261            fi
262            ;;
263        *)
264            echo mount-chroot-umount: unknown file system $fs
265            exit 1
266            ;;
267    esac
268    return 0
269}
270
271## mount-chroot-mount [file system|name]
272mount-chroot-mount(){
273    local fs=$1
274    local mnt_opts=""
275
276    case $fs in
277        /home)
278            mnt_opts="-o _netdev,rbind"
279            ;;
280        *)
281            mnt_opts="--bind -o _netdev"
282            ;;
283    esac
284
285    case $fs in
286        /home|/tmp|/sys|/proc|/dev/shm|/dev/pts|/dev)
287            [ -d ${BUILD_ROOT}${fs} ] || mkdir -p ${BUILD_ROOT}${fs}
288            [ -z "$(mount | grep ${BUILD_ROOT}${fs})" ] && \
289                mount ${mnt_opts} ${fs} ${BUILD_ROOT}${fs}
290            ;;
291        vfs)
292            for dir in /dev /dev/pts /dev/shm /proc /sys; do
293                mount-chroot-mount ${dir} || return 1
294            done
295            # mount-chroot-mount /proc || return 1
296            ;;
297        archives_dir)
298            [ -d ${EXTERNAL_ARCHIVES_DIR} ] || mkdir -p ${EXTERNAL_ARCHIVES_DIR}
299            [ -d ${ARCHIVES_DIR} ] || mkdir -p ${ARCHIVES_DIR}
300            [ -z "$(mount | grep ${ARCHIVES_DIR})" ] && \
301                mount ${mnt_opts} ${EXTERNAL_ARCHIVES_DIR} ${ARCHIVES_DIR}
302            [ -d ${ARCHIVES_DIR}/partial ] || mkdir -p ${ARCHIVES_DIR}/partial
303            ;;
304        unionfs_dir)
305            if [ $with_unionfs -eq 1 ]; then
306                [ -d ${UNIONFS_DIR} ] || mkdir -p ${UNIONFS_DIR}
307                [ -z "$(mount | grep ${BUILD_ROOT})" ] && \
308                    mount -t unionfs -o dirs=${UNIONFS_DIR}=rw:${BUILD_ROOT}=ro unionfs ${BUILD_ROOT}
309                unionctl ${BUILD_ROOT} --list
310            fi
311            ;;
312        *)
313            echo mount-chroot-mount: unknown file system $fs
314            exit 1
315            ;;
316    esac
317    return 0
318}
319
320write-vbuilder-log(){
321    HRULE="======================================================================"
322
323    [ -d ${BUILD_ROOT} ] || return 1
324
325    if [ ! -f $VBUILDER_LOG ]; then
326        cat<<EOF > $VBUILDER_LOG
327${HRULE}
328VBUILDER REPORT
329DATE:           $(LANG=C date)
330HOSTNAME:       $(hostname)
331OS:             $(echo $($__chroot_sh "cat /etc/vine-release"))
332%_arch:         $(echo $($__chroot_sh "rpm --eval %_arch"))
333
334--version: ${VERSION}
335$(echo $([ -z "${VARCH}" ] || echo "--arch: ${VARCH}"))
336$(echo $([ -z "${CATEGORIES}" ] || echo "--category: ${CATEGORIES}"))
337$(echo $([ $with_dist_upgrade -eq 1 ] && echo "--dist-upgrade"))
338$(echo $([ $with_unionfs -eq 1 ] && echo "--unionfs"))
339$(echo $([ -z "${TARGET}" ] || echo "--target: ${TARGET}"))
340--bootstrap-dir: ${VBOOTSTRAP_DIR}
341--cache-dir: ${CACHE_DIR}
342--built-rpms-dir: ${BUILT_RPMS_DIR}
343${HRULE}
344
345[$VBUILDER_CONF]
346$(cat $VBUILDER_CONF)
347
348[History]
349EOF
350    else
351        cat<<EOF >> $VBUILDER_LOG
352$*
353EOF
354    fi
355
356    return 0
357}
358
359### end of file
Note: See TracBrowser for help on using the repository browser.