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

Revision 135, 4.4 KB checked in by munepi, 15 years ago (diff)

update vbuilder.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(){
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    CACHE_DIR=${VBOOTSTRAP_DIR}/cache/${VERSION}
48    BUILD_DIR=/usr/src/vine
49
50    mkdir -p $VBOOTSTRAP_DIR
51}
52
53##############################################################################
54
55Clean(){
56    setup-vbootstrap
57
58    umount ${BUILD_ROOT}/proc
59
60    if [ -d ${BUILD_ROOT}/var/cache/apt/archives ]; then
61        [ -d ${CACHE_DIR}/apt/archives ] || mkdir -p ${CACHE_DIR}/apt/archives
62        mv -f ${BUILD_ROOT}/var/cache/apt/archives/*.rpm ${CACHE_DIR}/apt/archives/
63    fi
64
65    rm -rf $BUILD_ROOT/
66}
67
68Build(){
69    setup-vbootstrap
70
71    /usr/sbin/vbootstrap ${VERSION} ${BUILD_ROOT}
72
73    [ -d ${BUILD_ROOT}/proc ] || mkdir -p ${BUILD_ROOT}/proc
74    mount -t proc proc ${BUILD_ROOT}/proc
75
76    [ -d ${CACHE_DIR} -a "${VARCH}" = "$(uname -i)" ] && \
77        cp -f ${CACHE_DIR}/apt/archives/*.rpm ${BUILD_ROOT}/var/cache/apt/archives/
78
79    /usr/sbin/chroot ${BUILD_ROOT} \
80        /bin/sh -c 'apt-get update && apt-get -y dist-upgrade'
81    /usr/sbin/chroot ${BUILD_ROOT} \
82        /bin/sh -c 'apt-get -y install apt-sourceslist-plus && apt-get update'
83    /usr/sbin/chroot ${BUILD_ROOT} \
84        /bin/sh -c 'apt-get -y install apt-sourceslist-nonfree && apt-get update'
85    /usr/sbin/chroot ${BUILD_ROOT} \
86        /bin/sh -c 'apt-get -y install build-essential self-build-setup'
87
88    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV console'
89    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV null'
90    /usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c 'cd /dev && /sbin/MAKEDEV zero'
91}
92
93setup-vbootstrap-rpm(){
94    setup-vbootstrap
95
96    if [ -f $RPM_PKG ]; then
97        BASE_RPM_PKG=$(basename $RPM_PKG)
98        cp -f $RPM_PKG $BUILD_ROOT${BUILD_DIR}
99    else
100        BASE_RPM_PKG=$RPM_PKG   
101    fi
102}
103
104RPM_Remove(){
105    setup-vbootstrap-rpm
106
107    if [ -f $RPM_PKG ]; then
108        echo "$RPM_PKG: not package name."
109        exit 1
110    fi
111    /usr/sbin/chroot ${BUILD_ROOT} \
112        /bin/sh -c "apt-get -y remove $BASE_RPM_PKG"
113}
114
115RPM_Install(){
116    setup-vbootstrap-rpm
117
118    /usr/sbin/chroot ${BUILD_ROOT} \
119        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y install $BASE_RPM_PKG"
120}
121
122RPM_Build(){
123    setup-vbootstrap-rpm
124
125    if [ ! -f $RPM_PKG ]; then
126        echo "$RPM_PKG: not source RPM package."
127        exit 1
128    fi
129    /usr/sbin/chroot ${BUILD_ROOT} \
130        /bin/sh -c "cd ${BUILD_DIR} && apt-get -y build-dep $BASE_RPM_PKG"
131    /usr/sbin/chroot ${BUILD_ROOT} \
132        /bin/sh -c "cd ${BUILD_DIR} && rpmbuild --rebuild $RPM_OPTS $BASE_RPM_PKG"
133    /usr/sbin/chroot ${BUILD_ROOT} \
134        /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')"
135}
136
137
138[ $# -eq 0 ] && Usage
139while [ $# -gt 0 ]; do
140    case "$1" in
141        --version)
142            shift;
143            VERSION=$1
144            ;;
145        --arch)
146            shift;
147            VARCH=$1
148            ;;
149        --with-compat32)
150            RPM_OPTS="--with compat32"
151            ;;
152        --build-rpm)
153            shift;
154            RPM_PKG=$1
155            RPM_Build
156            ;;
157        --install-rpm)
158            shift;
159            RPM_PKG=$1
160            RPM_Install
161            ;;
162        --remove-rpm)
163            shift;
164            RPM_PKG=$1
165            RPM_Remove
166            ;;
167        --build)
168            Build
169            ;;
170        --clean)
171            Clean
172            ;;
173        *)
174            Usage
175            ;;
176    esac
177    shift
178done
179
180exit
181
Note: See TracBrowser for help on using the repository browser.