| 1 | #!/bin/bash |
|---|
| 2 | # -*- coding: utf-8-unix -*- |
|---|
| 3 | |
|---|
| 4 | ## default settings |
|---|
| 5 | VBOOTSTRAP_DIR=/var/local/vbootstrap |
|---|
| 6 | [ -d $VBOOTSTRAP_DIR ] || mkdir -p $VBOOTSTRAP_DIR |
|---|
| 7 | DEFAULT_VERSION=@@DEFAULT_VERSION@@ |
|---|
| 8 | VERSION=$DEFAULT_VERSION |
|---|
| 9 | |
|---|
| 10 | Usage_C(){ |
|---|
| 11 | cat<<EOF |
|---|
| 12 | Usage: $(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 | |
|---|
| 22 | For 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] |
|---|
| 33 | EOF |
|---|
| 34 | exit 1 |
|---|
| 35 | } |
|---|
| 36 | |
|---|
| 37 | Usage_ja(){ |
|---|
| 38 | Usage_C |
|---|
| 39 | } |
|---|
| 40 | |
|---|
| 41 | Msg_NoSupportVARCH_C(){ |
|---|
| 42 | while read varch; do |
|---|
| 43 | cat<<EOF |
|---|
| 44 | ${varch} is NO support on $(uname -i) |
|---|
| 45 | EOF |
|---|
| 46 | done |
|---|
| 47 | exit 1 |
|---|
| 48 | } |
|---|
| 49 | |
|---|
| 50 | Msg_NoSupportVARCH_ja(){ |
|---|
| 51 | Msg_NoSupportVARCH_C |
|---|
| 52 | } |
|---|
| 53 | |
|---|
| 54 | |
|---|
| 55 | FLAG_setup_vbootstrap=0 |
|---|
| 56 | setup-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" ] && \ |
|---|
| 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 | |
|---|
| 92 | Clean(){ |
|---|
| 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 | |
|---|
| 105 | Build(){ |
|---|
| 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 | |
|---|
| 135 | setup-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 | |
|---|
| 146 | RPM_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 | |
|---|
| 157 | RPM_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 | |
|---|
| 164 | RPM_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 | |
|---|
| 182 | case $LANG in |
|---|
| 183 | ja*) LOCALE=ja ;; |
|---|
| 184 | *) LOCALE=C ;; |
|---|
| 185 | esac |
|---|
| 186 | |
|---|
| 187 | [ $# -eq 0 ] && Usage_$LOCALE |
|---|
| 188 | while [ $# -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 |
|---|
| 227 | done |
|---|
| 228 | |
|---|
| 229 | exit |
|---|
| 230 | |
|---|