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

Revision 296, 4.7 KB checked in by daisuke, 17 years ago (diff)
  • chroot 内のビルドユーザを設定、ユーザ権限で rpmbuild を実行
  • 5.0 用 scripts と sources.list を追加
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(){
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 plain build environment:
24$(basename $0) --clean --build
25* build source RPM:
26$(basename $0) --build-rpm [src.rpm]
27* make Vine Linux 4.2 environment:
28$(basename $0) --version 4.2 --clean --build
29* 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
37FLAG_setup_vbootstrap=0
38setup-vbootstrap(){
39    if [ ${FLAG_setup_vbootstrap} -eq 0 ]; then
40        FLAG_setup_vbootstrap=1
41
42        [ -z ${VARCH} ] && VARCH=$(uname -i)
43        [ "${VARCH}" != "$(uname -i)" ] && VERSION=${VERSION}_${VARCH}
44    fi
45       
46    BUILD_ROOT=${VBOOTSTRAP_DIR}/${VERSION}
47    BUILD_USER=vbuilder
48    CACHE_DIR=${VBOOTSTRAP_DIR}/cache/${VERSION}
49    BUILD_DIR=/home/${BUILD_USER}/rpm
50
51    mkdir -p $VBOOTSTRAP_DIR
52}
53
54##############################################################################
55
56Clean(){
57    setup-vbootstrap
58
59    umount ${BUILD_ROOT}/proc
60
61    if [ -d ${BUILD_ROOT}/var/cache/apt/archives ]; then
62        [ -d ${CACHE_DIR}/apt/archives ] || mkdir -p ${CACHE_DIR}/apt/archives
63        mv -f ${BUILD_ROOT}/var/cache/apt/archives/*.rpm ${CACHE_DIR}/apt/archives/
64    fi
65
66    rm -rf $BUILD_ROOT/
67}
68
69Build(){
70    setup-vbootstrap
71
72    /usr/sbin/vbootstrap ${VERSION} ${BUILD_ROOT}
73
74    [ -d ${BUILD_ROOT}/proc ] || mkdir -p ${BUILD_ROOT}/proc
75    mount -t proc proc ${BUILD_ROOT}/proc
76
77    [ -d ${CACHE_DIR} -a "${VARCH}" = "$(uname -i)" ] && \
78        cp -f ${CACHE_DIR}/apt/archives/*.rpm ${BUILD_ROOT}/var/cache/apt/archives/
79
80    /usr/sbin/chroot ${BUILD_ROOT} \
81        /bin/sh -c 'apt-get update && apt-get -y dist-upgrade'
82    /usr/sbin/chroot ${BUILD_ROOT} \
83        /bin/sh -c 'apt-get -y install apt-sourceslist-plus && apt-get update'
84    /usr/sbin/chroot ${BUILD_ROOT} \
85        /bin/sh -c 'apt-get -y install apt-sourceslist-nonfree && apt-get update'
86    /usr/sbin/chroot ${BUILD_ROOT} \
87        /bin/sh -c 'apt-get -y install build-essential self-build-setup'
88    /usr/sbin/chroot ${BUILD_ROOT} \
89        /bin/sh -c 'apt-get -y install etcskel shadow-utils'
90
91    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV console'
92    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV null'
93    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV zero'
94   
95    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c '/usr/sbin/pwconv'
96    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c "/usr/sbin/useradd ${BUILD_USER}"
97}
98
99setup-vbootstrap-rpm(){
100    setup-vbootstrap
101
102    if [ -f $RPM_PKG ]; then
103        BASE_RPM_PKG=$(basename $RPM_PKG)
104        cp -f $RPM_PKG $BUILD_ROOT${BUILD_DIR}
105    else
106        BASE_RPM_PKG=$RPM_PKG   
107    fi
108}
109
110RPM_Remove(){
111    setup-vbootstrap-rpm
112
113    if [ -f $RPM_PKG ]; then
114        echo "$RPM_PKG: not package name."
115        exit 1
116    fi
117    /usr/sbin/chroot ${BUILD_ROOT} \
118        /bin/sh -c "apt-get -y remove $BASE_RPM_PKG"
119}
120
121RPM_Install(){
122    setup-vbootstrap-rpm
123
124    /usr/sbin/chroot ${BUILD_ROOT} \
125        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y install $BASE_RPM_PKG"
126}
127
128RPM_Build(){
129    setup-vbootstrap-rpm
130
131    if [ ! -f $RPM_PKG ]; then
132        echo "$RPM_PKG: not source RPM package."
133        exit 1
134    fi
135    /usr/sbin/chroot ${BUILD_ROOT} \
136        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y build-dep $BASE_RPM_PKG"
137    /usr/sbin/chroot ${BUILD_ROOT} \
138        /bin/sh -c "cd ${BUILD_DIR} && su ${BUILD_USER} -c 'rpmbuild --rebuild $RPM_OPTS $BASE_RPM_PKG'"
139    /usr/sbin/chroot ${BUILD_ROOT} \
140        /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')"
141}
142
143
144[ $# -eq 0 ] && Usage
145while [ $# -gt 0 ]; do
146    case "$1" in
147        --version)
148            shift;
149            VERSION=$1
150            ;;
151        --arch)
152            shift;
153            VARCH=$1
154            ;;
155        --with-compat32)
156            RPM_OPTS="--with compat32"
157            ;;
158        --build-rpm)
159            shift;
160            RPM_PKG=$1
161            RPM_Build
162            ;;
163        --install-rpm)
164            shift;
165            RPM_PKG=$1
166            RPM_Install
167            ;;
168        --remove-rpm)
169            shift;
170            RPM_PKG=$1
171            RPM_Remove
172            ;;
173        --build)
174            Build
175            ;;
176        --clean)
177            Clean
178            ;;
179        *)
180            Usage
181            ;;
182    esac
183    shift
184done
185
186exit
187
Note: See TracBrowser for help on using the repository browser.