source: projects/vbootstrap/trunk/vbuilder.sh.in @ 304

Revision 304, 5.6 KB checked in by munepi, 17 years ago (diff)

updated vbootstrap.sh.in

Line 
1#!/bin/bash
2# -*- coding: utf-8-unix -*-
3
4## default settings
5VBOOTSTRAP_DIR=/var/local/vbootstrap
6[ -d $VBOOTSTRAP_DIR ] || mkdir -p $VBOOTSTRAP_DIR
7DEFAULT_VERSION=@@DEFAULT_VERSION@@
8VERSION=$DEFAULT_VERSION
9
10Usage_C(){
11    cat<<EOF
12Usage:  $(basename $0) {--version [version]} {--arch [arch]} {--with-compat32} {--build-rpm [src.rpm]|--install-rpm [arch.rpm]|--remove-rpm [package]|--build|--clean}
13        --version:              set [version] (default: ${DEFAULT_VERSION})
14        --arch:                 set [arch] (default: $(uname -i))
15        --with-compat32:        build with compat32 on boostrap
16        --build-rpm:            build [src.rpm] on boostrap
17        --install-rpm:          install [arch.rpm] on boostrap
18        --remove-rpm:           remove [package] on boostrap
19        --build:                build boostrap of [version]
20        --clean:                clean boostrap of [version]
21
22For example,
23* make a clean/plain build environment on the current archtecture:
24$(basename $0) --clean --build
25* build source RPM:
26$(basename $0) --build-rpm [src.rpm]
27* make a plain build environment for Vine Linux 4.2:
28$(basename $0) --version 4.2 --clean --build
29* make a i386 chroot on x86_64:
30$(basename $0) --arch i386 --clean --build
31* build compat32:
32$(basename $0) --arch i386 --with-compat32 --build-rpm [src.rpm]
33EOF
34exit 1
35}
36
37Usage_ja(){
38    Usage_C
39}
40
41Msg_NoSupportVARCH_C(){
42    while read varch; do
43        cat<<EOF
44${varch} is NO support on $(uname -i)
45EOF
46    done
47    exit 1
48}
49
50Msg_NoSupportVARCH_ja(){
51    Msg_NoSupportVARCH_C
52}
53
54
55FLAG_setup_vbootstrap=0
56setup-vbootstrap(){
57    if [ ${FLAG_setup_vbootstrap} -eq 0 ]; then
58        FLAG_setup_vbootstrap=1
59
60        ## check a chroot archtecture
61        [ ! -z ${VARCH} ] && \
62            case "${VARCH}" in
63                i386)
64                    [ "$(uname -i)" = "ppc" -o "$(uname -i)" = "x86_64" ] && \
65                        echo ${VARCH} | Msg_NoSupportVARCH_$LOCALE
66                    ;;
67                x86_64)
68                    [ "$(uname -i)" = "ppc" ] && \
69                        echo ${VARCH} | Msg_NoSupportVARCH_$LOCALE
70                    ;;
71                ppc)
72                    [ "$(uname -i)" = "i386" -o "$(uname -i)" = "x86_64" ] && \
73                        echo ${VARCH} | Msg_NoSupportVARCH_$LOCALE
74                    ;;
75            esac
76        [ -z ${VARCH} ] && VARCH=$(uname -i)
77
78        ## support for i386 chroot on x86_64 below:
79        [ "${VARCH}" != "$(uname -i)" ] && VERSION=${VERSION}_${VARCH}
80    fi
81       
82    BUILD_ROOT=${VBOOTSTRAP_DIR}/${VERSION}
83    BUILD_USER=vbuilder
84    CACHE_DIR=${VBOOTSTRAP_DIR}/cache/${VERSION}
85    BUILD_DIR=/home/${BUILD_USER}/rpm
86
87    mkdir -p $VBOOTSTRAP_DIR
88}
89
90##############################################################################
91
92Clean(){
93    setup-vbootstrap
94
95    umount ${BUILD_ROOT}/proc
96
97    if [ -d ${BUILD_ROOT}/var/cache/apt/archives ]; then
98        [ -d ${CACHE_DIR}/apt/archives ] || mkdir -p ${CACHE_DIR}/apt/archives
99        mv -f ${BUILD_ROOT}/var/cache/apt/archives/*.rpm ${CACHE_DIR}/apt/archives/
100    fi
101
102    rm -rf $BUILD_ROOT/
103}
104
105Build(){
106    setup-vbootstrap
107
108    /usr/sbin/vbootstrap ${VERSION} ${BUILD_ROOT}
109
110    [ -d ${BUILD_ROOT}/proc ] || mkdir -p ${BUILD_ROOT}/proc
111    mount -t proc proc ${BUILD_ROOT}/proc
112
113    [ -d ${CACHE_DIR} -a "${VARCH}" = "$(uname -i)" ] && \
114        cp -f ${CACHE_DIR}/apt/archives/*.rpm ${BUILD_ROOT}/var/cache/apt/archives/
115
116    /usr/sbin/chroot ${BUILD_ROOT} \
117        /bin/sh -c 'apt-get update && apt-get -y dist-upgrade'
118    /usr/sbin/chroot ${BUILD_ROOT} \
119        /bin/sh -c 'apt-get -y install apt-sourceslist-plus && apt-get update'
120    /usr/sbin/chroot ${BUILD_ROOT} \
121        /bin/sh -c 'apt-get -y install apt-sourceslist-nonfree && apt-get update'
122    /usr/sbin/chroot ${BUILD_ROOT} \
123        /bin/sh -c 'apt-get -y install build-essential self-build-setup'
124    /usr/sbin/chroot ${BUILD_ROOT} \
125        /bin/sh -c 'apt-get -y install etcskel shadow-utils'
126
127    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV console'
128    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV null'
129    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV zero'
130   
131    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c '/usr/sbin/pwconv'
132    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c "/usr/sbin/useradd ${BUILD_USER}"
133}
134
135setup-vbootstrap-rpm(){
136    setup-vbootstrap
137
138    if [ -f $RPM_PKG ]; then
139        BASE_RPM_PKG=$(basename $RPM_PKG)
140        cp -f $RPM_PKG $BUILD_ROOT${BUILD_DIR}
141    else
142        BASE_RPM_PKG=$RPM_PKG   
143    fi
144}
145
146RPM_Remove(){
147    setup-vbootstrap-rpm
148
149    if [ -f $RPM_PKG ]; then
150        echo "$RPM_PKG: not package name."
151        exit 1
152    fi
153    /usr/sbin/chroot ${BUILD_ROOT} \
154        /bin/sh -c "apt-get -y remove $BASE_RPM_PKG"
155}
156
157RPM_Install(){
158    setup-vbootstrap-rpm
159
160    /usr/sbin/chroot ${BUILD_ROOT} \
161        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y install $BASE_RPM_PKG"
162}
163
164RPM_Build(){
165    setup-vbootstrap-rpm
166
167    if [ ! -f $RPM_PKG ]; then
168        echo "$RPM_PKG: not source RPM package."
169        exit 1
170    fi
171    /usr/sbin/chroot ${BUILD_ROOT} \
172        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y build-dep $BASE_RPM_PKG"
173    /usr/sbin/chroot ${BUILD_ROOT} \
174        /bin/sh -c "cd ${BUILD_DIR} && su ${BUILD_USER} -c 'rpmbuild --rebuild $RPM_OPTS $BASE_RPM_PKG'"
175    /usr/sbin/chroot ${BUILD_ROOT} \
176        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y install $(find $BUILD_ROOT${BUILD_DIR}/RPMS -type f -regex '.*\.rpm' | sed -e s@${BUILD_ROOT}@@g -e 's|.*\/compat32-.*||g' -e 's/$/ \\/g')"
177}
178
179
180##############################################################################
181
182case $LANG in
183    ja*)  LOCALE=ja ;;
184    *)    LOCALE=C ;;
185esac
186
187[ $# -eq 0 ] && Usage_$LOCALE
188while [ $# -gt 0 ]; do
189    case "$1" in
190        --version)
191            shift;
192            VERSION=$1
193            ;;
194        --arch)
195            shift;
196            VARCH=$1
197            ;;
198        --with-compat32)
199            RPM_OPTS="--with compat32"
200            ;;
201        --build-rpm)
202            shift;
203            RPM_PKG=$1
204            RPM_Build
205            ;;
206        --install-rpm)
207            shift;
208            RPM_PKG=$1
209            RPM_Install
210            ;;
211        --remove-rpm)
212            shift;
213            RPM_PKG=$1
214            RPM_Remove
215            ;;
216        --build)
217            Build
218            ;;
219        --clean)
220            Clean
221            ;;
222        *)
223            Usage
224            ;;
225    esac
226    shift
227done
228
229exit
230
Note: See TracBrowser for help on using the repository browser.