| 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(){ |
|---|
| 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 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] |
|---|
| 33 | EOF |
|---|
| 34 | exit 1 |
|---|
| 35 | } |
|---|
| 36 | |
|---|
| 37 | FLAG_setup_vbootstrap=0 |
|---|
| 38 | setup-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 | |
|---|
| 55 | Clean(){ |
|---|
| 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 | |
|---|
| 68 | Build(){ |
|---|
| 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 | |
|---|
| 93 | setup-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 | |
|---|
| 104 | RPM_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 | |
|---|
| 115 | RPM_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 | |
|---|
| 122 | RPM_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 |
|---|
| 139 | while [ $# -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 |
|---|
| 178 | done |
|---|
| 179 | |
|---|
| 180 | exit |
|---|
| 181 | |
|---|