소스 검색

tagging 0.0.36

git-svn-id: http://trac.vinelinux.org/repos/projects/vbootstrap/tags/0.0.36@2664 ec354946-7b23-47d6-9f5a-488ba84defc7
munepi 13 년 전
부모
커밋
95eac582b2
7개의 변경된 파일610개의 추가작업 그리고 60개의 파일을 삭제
  1. 17 0
      Makefile
  2. 359 0
      libvbuilder.sh.in
  3. 38 27
      po/ja.po
  4. 35 24
      po/vbootstrap.pot
  5. 5 1
      vbootstrap-vl.spec
  6. 37 8
      vbuilder.sh.in
  7. 119 0
      vchroot.sh.in

+ 17 - 0
Makefile

@@ -29,6 +29,16 @@ all:
 	    -e "s|@@VBUILDER_BUILT_RPMS_DIR@@|${VBUILDER_BUILT_RPMS_DIR}|g" \
 		vbuilder.conf.in > vbuilder.conf
 
+	##!! experimental: vchroot
+	sed -e "s/@@VBUILDER_STABLE_VERSION@@/${VBUILDER_STABLE_VERSION}/g" \
+	    -e "s/@@VBUILDER_DEFAULT_VERSION@@/${VBUILDER_DEFAULT_VERSION}/g" \
+	    -e "s/@@VBUILDER_CATEGORIES@@/${VBUILDER_CATEGORIES}/g" \
+	    -e "s|@@VBUILDER_VBOOTSTRAP_DIR@@|${VBUILDER_VBOOTSTRAP_DIR}|g" \
+	    -e "s|@@VBUILDER_CACHE_DIR@@|${VBUILDER_CACHE_DIR}|g" \
+	    -e "s|@@VBUILDER_BUILT_RPMS_DIR@@|${VBUILDER_BUILT_RPMS_DIR}|g" \
+		libvbuilder.sh.in > libvbuilder.sh
+	cp -f vchroot.sh.in vchroot.sh
+
 	cd po && make
 
 install:
@@ -52,6 +62,10 @@ install:
 	install -m 644 vbuilder.pamd ${DESTDIR}/etc/pam.d/vbuilder
 	install -m 644 vbuilder-bash-completion.sh ${DESTDIR}/etc/bash_completion.d/vbuilder
 
+	##!! experimental: vchroot
+	install -m 644 libvbuilder.sh ${DESTDIR}/usr/share/vbootstrap/libvbuilder.sh
+	install -m 755 vchroot.sh ${DESTDIR}/usr/sbin/vchroot
+
 	cd po && make install DESTDIR=${DESTDIR}
 
 tarbz2: clean
@@ -72,4 +86,7 @@ clean:
 	rm -fr *~ .*???~ vbootstrap.sh vbuilder.sh vbuilder.conf
 	find . -name *~ -exec rm -f {} \;
 
+	##!! experimental: vchroot
+	rm -f vchroot.sh libvbuilder.sh
+
 	cd po && make clean

+ 359 - 0
libvbuilder.sh.in

@@ -0,0 +1,359 @@
+#!/bin/bash
+
+setup-vbuilder(){
+    ## load default settings
+    VBUILDER_CONF=/etc/vbootstrap/vbuilder.conf
+    if [ -r $VBUILDER_CONF ]; then
+	. $VBUILDER_CONF
+	[ $? -eq 1 ] && return 1
+    fi
+    [ -z "${DEFAULT_VERSION}" ] && \
+	DEFAULT_VERSION=@@VBUILDER_DEFAULT_VERSION@@
+    [ -z "${CATEGORIES}" ] && \
+	CATEGORIES=@@VBUILDER_CATEGORIES@@
+    [ -z "${VBOOTSTRAP_DIR}" ] && \
+	VBOOTSTRAP_DIR=@@VBUILDER_VBOOTSTRAP_DIR@@
+    [ -z "${CACHE_DIR}" ] && \
+	CACHE_DIR=@@VBUILDER_CACHE_DIR@@
+    [ -z "${BUILT_RPMS_DIR}" ] && \
+	BUILT_RPMS_DIR=@@VBUILDER_BUILT_RPMS_DIR@@
+
+    ## set default version for vbootstrap
+    VERSION=$DEFAULT_VERSION
+
+    ## set current stable relase version
+    STABLE_VERSION=@@VBUILDER_STABLE_VERSION@@
+
+    ## set boolian
+    with_setup_vbootstrap=0
+    with_dist_upgrade=0
+    with_unionfs=0
+    with_sign=0
+    with_no_install=0
+    with_actions=0
+    with_ix86_on_x86_64=0
+    with_category_main=0
+    with_category_plus=0
+    with_category_nonfree=0
+    with_category_test=0
+    with_category_proposed_updates=0
+    with_category_security=0
+
+    return 0
+}
+
+setup-vbootstrap(){
+    if [ ${with_setup_vbootstrap} -eq 0 ]; then
+	with_setup_vbootstrap=1
+
+	## check some directories
+	## Note: create $BUILT_RPMS_DIR in RPM_Build()
+	[ -d $VBOOTSTRAP_DIR ] || mkdir -p $VBOOTSTRAP_DIR
+	[ -d $CACHE_DIR ] || mkdir -p $CACHE_DIR
+
+	## check a chroot archtecture
+	if [ -z ${VARCH} ]; then
+	    VARCH=$(uname -i)
+	else
+	    case "${VARCH}" in
+		i386|i686|x86_64)
+		    [ "$(uname -i)" = "ppc" ] && \
+			echo $"E: arch ${VARCH} is NOT supported on $(uname -i)" && return 1
+		    ;;
+		ppc)
+		    [ "$(uname -i)" = "i386" -o "$(uname -i)" = "i686" -o "$(uname -i)" = "x86_64" ] && \
+			echo $"E: arch ${VARCH} is NOT supported on $(uname -i)" && return 1
+		    ;;
+	    esac
+	fi
+
+        ##!! 4.2 is NO support on VARCH=x86_64
+	if [ "${VERSION}" = "4.2" -a "${VARCH}" = "x86_64" ]; then
+	    echo $"E: ${VERSION} is NOT supported"
+	    return 1
+	fi
+
+	## support i386 chroot on x86_64 below: 
+	[ "${VARCH}" != "$(uname -i)" ] && \
+	    VERSION=${VERSION}_${VARCH} && \
+	    with_ix86_on_x86_64=1
+
+        ## check support ${VERSION}
+	if [ -z "$(/usr/sbin/vbootstrap | sed -e s/^Usage:.*// -e s/^E:.*// | grep -m 1 ${VERSION})" ]; then
+	    echo $"E: ${VERSION} is NOT supported"
+	    return 1
+	fi
+
+	## check ${VERSION} equals VineSeed*, when with_dist_upgrade=1
+	if [ $with_dist_upgrade -eq 1 ]; then
+	    if [ "$(echo ${VERSION} | sed -e "s/\(VineSeed\).*/\1/")" != "VineSeed" ]; then 
+		echo $"E: version ${VERSION} does not support --dist-upgrade option"
+		return 1
+	    fi
+	fi
+
+	## set ${MAJOR_VERSION}
+	MAJOR_VERSION=$(echo ${VERSION} | sed -e "s/_i[0-9]86//")
+
+	## check apt categories
+	## "main" category is unconditionally permited
+	with_category_main=1
+	for cat in $(echo ${CATEGORIES} | sed -e "s/,/ /"g); do
+	    case $cat in
+		main)
+		    with_category_main=1
+		    ;;
+		plus)
+		    with_category_plus=1
+		    ;;
+		nonfree)
+		    with_category_nonfree=1
+		    ;;
+		test)
+                    ## "test" category only exists in VineSeed
+		    [ "${MAJOR_VERSION}" = "VineSeed" ] || \
+			echo $"E: No such category exists: $cat" && return 1
+		    with_category_test=1
+		    ;;
+		proposed-updates)
+                    ##!! "proposed-updates" category does not exist in 4.2
+		    [ "${MAJOR_VERSION}" = "4.2" ] && \
+			echo $"E: No such category exists: $cat" && return 1
+
+		    with_category_proposed_updates=1
+		    ;;
+		security)
+                    ## "security" category does not exist in VineSeed
+		    [ "${MAJOR_VERSION}" = "VineSeed" ] && \
+			echo $"E: No such category exists: $cat" && return 1
+		    with_category_security=1
+		    ;;
+		*)
+		    echo $"E: No such category exists: $cat" && return 1
+		    ;;
+	    esac
+	done
+
+	## check build target option ${TARGET}
+	if [ ! -z "${TARGET}" ]; then
+	    RPM_TARGET_LIST="$(cat /usr/lib/rpm/rpmrc | grep arch_canon: | sed -e "s/arch_canon:[[:blank:]]*\(.*\):.*/\1/")"
+	    if [ -z "$(echo $RPM_TARGET_LIST | grep $TARGET)" ]; then
+		echo $"E: rpm build target ${TARGET} is NOT supported"
+		return 1
+	    fi
+	fi
+
+	## set ${RPM_PKG_ARCH_LIST}
+	RPM_PKG_ARCH_LIST="RPMS/i386 RPMS/i686 RPMS/x86_64 RPMS/ppc RPMS/noarch SRPMS"
+	[ -z "${TARGET}" ] || \
+	    RPM_PKG_ARCH_LIST="RPMS/${TARGET} ${RPM_PKG_ARCH_LIST}"
+
+    fi
+
+    ## set global variables
+    BUILD_ROOT=${VBOOTSTRAP_DIR}/${VERSION}
+    BUILD_USER=vbuilder
+    BUILD_DIR=/home/${BUILD_USER}/rpm
+    UNIONFS_DIR=${VBOOTSTRAP_DIR}/unionfs/${VERSION}
+    ARCHIVES_DIR=${BUILD_ROOT}/var/cache/apt/archives
+    EXTERNAL_ARCHIVES_DIR=${CACHE_DIR}/${VERSION}/apt/archives
+    VBUILDER_LOG=${BUILD_ROOT}/var/log/vbuilder.log
+
+    __chroot_sh="/usr/sbin/chroot ${BUILD_ROOT} /bin/sh -c -l"
+
+    mkdir -p $VBOOTSTRAP_DIR
+
+    return 0
+}
+
+setup-vbootstrap-rpm(){
+    setup-vbootstrap || return 1
+
+    ## check ${BUILD_ROOT}
+    [ -d ${BUILD_ROOT} ] || Build
+    ## setarch ix86 if ix86 chroot on x86_64 host
+    [ $with_ix86_on_x86_64 -eq 1 ] && \
+	__chroot_sh="/usr/sbin/chroot ${BUILD_ROOT} setarch ${VARCH} /bin/sh -c -l"
+
+    DIST_RELEASE=$(cat ${BUILD_ROOT}/etc/vine-release | cut -f3 -d" " | cut -f1 -d.)
+
+    if [ -f $RPM_PKG ]; then
+	BASE_RPM_PKG=$(basename $RPM_PKG)
+	cp -f $RPM_PKG $BUILD_ROOT${BUILD_DIR}
+    else
+	BASE_RPM_PKG=$RPM_PKG	
+    fi
+
+    return 0
+}
+
+## recover apt-get data on host/chroot
+apt-get-update(){
+    case $1 in
+	--host)
+	    echo -n $"apt-get update on host ... "
+	    apt-get -qq update > /dev/null 2>&1
+	    echo $"done."
+	    ;;
+	--chroot)
+	    echo -n $"apt-get update on chroot ... "
+	    $__chroot_sh 'apt-get -qq update' > /dev/null 2>&1
+	    echo $"done."
+	    ;;
+	*)
+	    echo apt-get-update: unknown option $1
+	    exit 1
+	    ;;
+    esac
+}
+
+## mount-chroot {|--umount} [file system|name]
+## support file systems: /home /tmp /sys /proc /dev/shm /dev/pts /dev
+## support names: vfs archives_dir
+## NOTE: /tmp needs for applications which use X
+##       vfs is virtual file systems
+##       archives_dir uses to mount ${EXTERNAL_ARCHIVES_DIR} to ${ARCHIVES_DIR}
+##       unionfs_dir covers ${BUILD_ROOT} with unionfs
+mount-chroot(){
+    if [ "$1" = "--umount" ]; then
+	mount-chroot-umount $2 || return 1
+    else
+	mount-chroot-mount $1 || return 1
+    fi
+    return 0
+}
+
+## mount-chroot-umount [file system|name]
+mount-chroot-umount(){
+    local fs=$1
+    case $fs in
+	/home|/tmp|/sys|/proc|/dev/shm|/dev/pts|/dev)
+	    [ -d ${BUILD_ROOT}${fs} ] || return 1
+	    [ -z "$(mount | grep ${BUILD_ROOT}${fs})" ] || \
+    		umount ${BUILD_ROOT}${fs}
+	    if [ ! -z "$(mount | grep ${BUILD_ROOT}${fs})" ]; then
+		echo $"Retry lazy unmount ${BUILD_ROOT}${fs} ... "
+		umount -l ${BUILD_ROOT}${fs}
+		echo $"done."
+	    fi
+	    ;;
+	vfs)
+	    for dir in /sys /proc /dev/shm /dev/pts /dev; do
+	    	mount-chroot-umount ${dir} || return 1
+	    done
+	    # [ -d ${BUILD_ROOT}/proc ] || return 1
+	    # [ -z "$(mount | grep ${BUILD_ROOT}/proc)" ] || \
+	    # 	umount ${BUILD_ROOT}/proc
+	    ;;
+	archives_dir)
+	    [ -d ${ARCHIVES_DIR} ] || return 1
+	    [ -z "$(mount | grep ${ARCHIVES_DIR})" ] || \
+    		umount ${ARCHIVES_DIR}
+	    ;;
+	unionfs_dir)
+	    [ -d ${BUILD_ROOT} ] || return 1
+	    [ -z "$(mount | grep ${BUILD_ROOT} | grep unionfs)" ] || \
+		umount ${BUILD_ROOT}
+	    if [ ! -z "$(mount | grep ${BUILD_ROOT} | grep unionfs)" ]; then
+		echo $"Retry lazy unmount ${BUILD_ROOT} ... "
+		umount -l ${BUILD_ROOT}
+		echo $"done."
+	    fi
+	    ;;
+	*)
+	    echo mount-chroot-umount: unknown file system $fs
+	    exit 1
+	    ;;
+    esac
+    return 0
+}
+
+## mount-chroot-mount [file system|name]
+mount-chroot-mount(){
+    local fs=$1
+    local mnt_opts=""
+
+    case $fs in
+	/home)
+	    mnt_opts="-o _netdev,rbind"
+	    ;;
+	*)
+	    mnt_opts="--bind -o _netdev"
+	    ;;
+    esac
+
+    case $fs in
+	/home|/tmp|/sys|/proc|/dev/shm|/dev/pts|/dev)
+	    [ -d ${BUILD_ROOT}${fs} ] || mkdir -p ${BUILD_ROOT}${fs}
+	    [ -z "$(mount | grep ${BUILD_ROOT}${fs})" ] && \
+		mount ${mnt_opts} ${fs} ${BUILD_ROOT}${fs}
+	    ;;
+	vfs)
+	    for dir in /dev /dev/pts /dev/shm /proc /sys; do
+	    	mount-chroot-mount ${dir} || return 1
+	    done
+	    # mount-chroot-mount /proc || return 1
+	    ;;
+	archives_dir)
+	    [ -d ${EXTERNAL_ARCHIVES_DIR} ] || mkdir -p ${EXTERNAL_ARCHIVES_DIR}
+	    [ -d ${ARCHIVES_DIR} ] || mkdir -p ${ARCHIVES_DIR}
+	    [ -z "$(mount | grep ${ARCHIVES_DIR})" ] && \
+		mount ${mnt_opts} ${EXTERNAL_ARCHIVES_DIR} ${ARCHIVES_DIR}
+	    [ -d ${ARCHIVES_DIR}/partial ] || mkdir -p ${ARCHIVES_DIR}/partial
+	    ;;
+	unionfs_dir)
+	    if [ $with_unionfs -eq 1 ]; then
+		[ -d ${UNIONFS_DIR} ] || mkdir -p ${UNIONFS_DIR}
+		[ -z "$(mount | grep ${BUILD_ROOT})" ] && \
+		    mount -t unionfs -o dirs=${UNIONFS_DIR}=rw:${BUILD_ROOT}=ro unionfs ${BUILD_ROOT}
+		unionctl ${BUILD_ROOT} --list
+	    fi
+	    ;;
+	*)
+	    echo mount-chroot-mount: unknown file system $fs
+	    exit 1
+	    ;;
+    esac
+    return 0
+}
+
+write-vbuilder-log(){
+    HRULE="======================================================================"
+
+    [ -d ${BUILD_ROOT} ] || return 1
+
+    if [ ! -f $VBUILDER_LOG ]; then
+	cat<<EOF > $VBUILDER_LOG
+${HRULE}
+VBUILDER REPORT
+DATE:		$(LANG=C date)
+HOSTNAME:	$(hostname)
+OS:		$(echo $($__chroot_sh "cat /etc/vine-release"))
+%_arch:		$(echo $($__chroot_sh "rpm --eval %_arch"))
+
+--version: ${VERSION}
+$(echo $([ -z "${VARCH}" ] || echo "--arch: ${VARCH}"))
+$(echo $([ -z "${CATEGORIES}" ] || echo "--category: ${CATEGORIES}"))
+$(echo $([ $with_dist_upgrade -eq 1 ] && echo "--dist-upgrade"))
+$(echo $([ $with_unionfs -eq 1 ] && echo "--unionfs"))
+$(echo $([ -z "${TARGET}" ] || echo "--target: ${TARGET}"))
+--bootstrap-dir: ${VBOOTSTRAP_DIR}
+--cache-dir: ${CACHE_DIR}
+--built-rpms-dir: ${BUILT_RPMS_DIR}
+${HRULE}
+
+[$VBUILDER_CONF]
+$(cat $VBUILDER_CONF)
+
+[History]
+EOF
+    else
+	cat<<EOF >> $VBUILDER_LOG
+$*
+EOF
+    fi
+
+    return 0
+}
+
+### end of file

+ 38 - 27
po/ja.po

@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: 0.0.35\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-19 03:30+0900\n"
-"PO-Revision-Date: 2011-01-18 18:06+0900\n"
+"POT-Creation-Date: 2011-02-09 02:14+0900\n"
+"PO-Revision-Date: 2011-02-09 02:17+0900\n"
 "Last-Translator: Munehiro Yamamoto <munepi@vinelinux.org>\n"
 "Language-Team: Vine Linux <Vine@vinelinux.org>\n"
 "Language: \n"
@@ -38,28 +38,28 @@ msgstr "ベースシステムをインストールしています。"
 msgid "vboostrap done."
 msgstr "vbootstrap が完了しました。"
 
-#: vbuilder.sh.in:66 vbuilder.sh.in:73
+#: vbuilder.sh.in:67 vbuilder.sh.in:74
 msgid "E: You can give no more options after actions"
 msgstr "E: 動作の以後にオプションを与えられません"
 
-#: vbuilder.sh.in:85 vbuilder.sh.in:99 vbuilder.sh.in:102
+#: vbuilder.sh.in:86 vbuilder.sh.in:100 vbuilder.sh.in:103
 msgid "E: Missing some parameters after $1"
 msgstr "E: $1 以後のいくつかの引数に間違いがあります"
 
-#: vbuilder.sh.in:93
+#: vbuilder.sh.in:94
 msgid "E: You must give at least one action"
 msgstr "E: 少なくとも1つの動作を与えなければなりません"
 
-#: vbuilder.sh.in:165 vbuilder.sh.in:169
+#: vbuilder.sh.in:166 vbuilder.sh.in:170
 msgid "E: arch ${VARCH} is NOT supported on $(uname -i)"
 msgstr "E: ${VARCH} アーキテクチャは $(uname -i) 上で非サポートです"
 
-#: vbuilder.sh.in:176 vbuilder.sh.in:187
+#: vbuilder.sh.in:177 vbuilder.sh.in:188
 #, sh-format
 msgid "E: ${VERSION} is NOT supported"
 msgstr "E: バージョン ${VERSION} は非サポートです"
 
-#: vbuilder.sh.in:194
+#: vbuilder.sh.in:195
 #, sh-format
 msgid "E: version ${VERSION} does not support --dist-upgrade option"
 msgstr ""
@@ -69,75 +69,86 @@ msgstr ""
 #. # "test" category only exists in VineSeed
 #. #!! "proposed-updates" category does not exist in 4.2
 #. # "security" category does not exist in VineSeed
-#: vbuilder.sh.in:219 vbuilder.sh.in:225 vbuilder.sh.in:232 vbuilder.sh.in:236
+#: vbuilder.sh.in:220 vbuilder.sh.in:226 vbuilder.sh.in:233 vbuilder.sh.in:237
 #, sh-format
 msgid "E: No such category exists: $cat"
 msgstr "E: そのようなカテゴリは存在しません: $cat"
 
-#: vbuilder.sh.in:245
+#: vbuilder.sh.in:246
 #, sh-format
 msgid "E: rpm build target ${TARGET} is NOT supported"
 msgstr "E: rpm ビルドターゲット ${TARGET} はサポートされていません"
 
-#: vbuilder.sh.in:298
+#: vbuilder.sh.in:299
 msgid "apt-get update on host ... "
 msgstr "ホスト上で apt-get update を実行しています ... "
 
-#: vbuilder.sh.in:300 vbuilder.sh.in:305 vbuilder.sh.in:359 vbuilder.sh.in:478
-#: vbuilder.sh.in:484 vbuilder.sh.in:679
+#: vbuilder.sh.in:301 vbuilder.sh.in:306 vbuilder.sh.in:342 vbuilder.sh.in:365
+#: vbuilder.sh.in:500 vbuilder.sh.in:506 vbuilder.sh.in:701
 msgid "done."
 msgstr "完了"
 
-#: vbuilder.sh.in:303
+#: vbuilder.sh.in:304
 msgid "apt-get update on chroot ... "
 msgstr "chroot 上で apt-get update を実行しています ... "
 
-#: vbuilder.sh.in:357
-msgid "Retry lazy unmount ... "
-msgstr "lazy アンマウントを再度試しています ... "
+#: vbuilder.sh.in:340
+#, sh-format
+msgid "Retry lazy unmount ${BUILD_ROOT}${fs} ... "
+msgstr "lazy で ${BUILD_ROOT}${fs} を再度アンマウントしています ... "
+
+#: vbuilder.sh.in:363
+#, sh-format
+msgid "Retry lazy unmount ${BUILD_ROOT} ... "
+msgstr "lazy で ${BUILD_ROOT} を再度アンマウントしています ... "
 
-#: vbuilder.sh.in:476
+#: vbuilder.sh.in:498
 #, sh-format
 msgid "Cleaning build root ${UNIONFS_DIR} via unionfs ... "
 msgstr "unionfs 経由でビルドルート ${UNIONFS_DIR} をクリーニング中 ... "
 
-#: vbuilder.sh.in:482
+#: vbuilder.sh.in:504
 #, sh-format
 msgid "Cleaning build root ${BUILD_ROOT} ... "
 msgstr "ビルドルート ${BUILD_ROOT} をクリーニング中 ... "
 
-#: vbuilder.sh.in:488
+#: vbuilder.sh.in:510
 #, sh-format
 msgid "Cleanup a build farm for ${VERSION} done."
 msgstr "${VERSION} のビルドファームをクリーンアップしました。"
 
-#: vbuilder.sh.in:577
+#: vbuilder.sh.in:599
 #, sh-format
 msgid "Making a build farm for ${VERSION} done."
 msgstr "${VERSION} のビルドファームを構築しました。"
 
-#: vbuilder.sh.in:597
+#: vbuilder.sh.in:619
 #, sh-format
 msgid "E: $RPM_PKG is not a package name"
 msgstr "E: $RPM_PKG はパッケージ名でありません"
 
-#: vbuilder.sh.in:637
+#: vbuilder.sh.in:659
 #, sh-format
 msgid "E: $RPM_PKG is not a source RPM package"
 msgstr "E: $RPM_PKG はソース RPM パッケージでありません"
 
 #. # copy built rpms to ${HOME}/rpm/ for each archtectures
-#: vbuilder.sh.in:660
+#: vbuilder.sh.in:682
 #, sh-format
 msgid "Copying built rpms to ${BUILT_RPMS_DIR} for each archtectures ... "
 msgstr ""
 "各アーキテクチャに対して、ビルドされた rpm ファイルを ${BUILT_RPMS_DIR} にコ"
 "ピーしています ... "
 
-#: vbuilder.sh.in:687
+#: vbuilder.sh.in:712
+#, sh-format
+msgid "W: \\$SUDO_USER and \\$USERHELPER_UID are empty"
+msgstr "W: \\$SUDO_USER と \\$USERHELPER_UID は空です"
+
+#: vbuilder.sh.in:717
 #, sh-format
-msgid "W: \\$SUDO_USER is empty"
-msgstr "W: \\$SUDO_USER が空です"
+msgid "Signing built rpms using ${RPM_SIGN_USER}'s key: "
+msgstr "${RPM_SIGN_USER} の鍵を用いてビルドされた rpm ファイルを署名します: "
 
 #: vbootstrap/scripts/4.2.sh:9 vbootstrap/scripts/4.2_i386.sh:9
 #: vbootstrap/scripts/5.2.sh:9 vbootstrap/scripts/5.2_i386.sh:9

+ 35 - 24
po/vbootstrap.pot

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-19 03:30+0900\n"
+"POT-Creation-Date: 2011-02-09 02:14+0900\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -38,28 +38,28 @@ msgstr ""
 msgid "vboostrap done."
 msgstr ""
 
-#: vbuilder.sh.in:66 vbuilder.sh.in:73
+#: vbuilder.sh.in:67 vbuilder.sh.in:74
 msgid "E: You can give no more options after actions"
 msgstr ""
 
-#: vbuilder.sh.in:85 vbuilder.sh.in:99 vbuilder.sh.in:102
+#: vbuilder.sh.in:86 vbuilder.sh.in:100 vbuilder.sh.in:103
 msgid "E: Missing some parameters after $1"
 msgstr ""
 
-#: vbuilder.sh.in:93
+#: vbuilder.sh.in:94
 msgid "E: You must give at least one action"
 msgstr ""
 
-#: vbuilder.sh.in:165 vbuilder.sh.in:169
+#: vbuilder.sh.in:166 vbuilder.sh.in:170
 msgid "E: arch ${VARCH} is NOT supported on $(uname -i)"
 msgstr ""
 
-#: vbuilder.sh.in:176 vbuilder.sh.in:187
+#: vbuilder.sh.in:177 vbuilder.sh.in:188
 #, sh-format
 msgid "E: ${VERSION} is NOT supported"
 msgstr ""
 
-#: vbuilder.sh.in:194
+#: vbuilder.sh.in:195
 #, sh-format
 msgid "E: version ${VERSION} does not support --dist-upgrade option"
 msgstr ""
@@ -67,72 +67,83 @@ msgstr ""
 #. # "test" category only exists in VineSeed
 #. #!! "proposed-updates" category does not exist in 4.2
 #. # "security" category does not exist in VineSeed
-#: vbuilder.sh.in:219 vbuilder.sh.in:225 vbuilder.sh.in:232 vbuilder.sh.in:236
+#: vbuilder.sh.in:220 vbuilder.sh.in:226 vbuilder.sh.in:233 vbuilder.sh.in:237
 #, sh-format
 msgid "E: No such category exists: $cat"
 msgstr ""
 
-#: vbuilder.sh.in:245
+#: vbuilder.sh.in:246
 #, sh-format
 msgid "E: rpm build target ${TARGET} is NOT supported"
 msgstr ""
 
-#: vbuilder.sh.in:298
+#: vbuilder.sh.in:299
 msgid "apt-get update on host ... "
 msgstr ""
 
-#: vbuilder.sh.in:300 vbuilder.sh.in:305 vbuilder.sh.in:359 vbuilder.sh.in:478
-#: vbuilder.sh.in:484 vbuilder.sh.in:679
+#: vbuilder.sh.in:301 vbuilder.sh.in:306 vbuilder.sh.in:342 vbuilder.sh.in:365
+#: vbuilder.sh.in:500 vbuilder.sh.in:506 vbuilder.sh.in:701
 msgid "done."
 msgstr ""
 
-#: vbuilder.sh.in:303
+#: vbuilder.sh.in:304
 msgid "apt-get update on chroot ... "
 msgstr ""
 
-#: vbuilder.sh.in:357
-msgid "Retry lazy unmount ... "
+#: vbuilder.sh.in:340
+#, sh-format
+msgid "Retry lazy unmount ${BUILD_ROOT}${fs} ... "
+msgstr ""
+
+#: vbuilder.sh.in:363
+#, sh-format
+msgid "Retry lazy unmount ${BUILD_ROOT} ... "
 msgstr ""
 
-#: vbuilder.sh.in:476
+#: vbuilder.sh.in:498
 #, sh-format
 msgid "Cleaning build root ${UNIONFS_DIR} via unionfs ... "
 msgstr ""
 
-#: vbuilder.sh.in:482
+#: vbuilder.sh.in:504
 #, sh-format
 msgid "Cleaning build root ${BUILD_ROOT} ... "
 msgstr ""
 
-#: vbuilder.sh.in:488
+#: vbuilder.sh.in:510
 #, sh-format
 msgid "Cleanup a build farm for ${VERSION} done."
 msgstr ""
 
-#: vbuilder.sh.in:577
+#: vbuilder.sh.in:599
 #, sh-format
 msgid "Making a build farm for ${VERSION} done."
 msgstr ""
 
-#: vbuilder.sh.in:597
+#: vbuilder.sh.in:619
 #, sh-format
 msgid "E: $RPM_PKG is not a package name"
 msgstr ""
 
-#: vbuilder.sh.in:637
+#: vbuilder.sh.in:659
 #, sh-format
 msgid "E: $RPM_PKG is not a source RPM package"
 msgstr ""
 
 #. # copy built rpms to ${HOME}/rpm/ for each archtectures
-#: vbuilder.sh.in:660
+#: vbuilder.sh.in:682
 #, sh-format
 msgid "Copying built rpms to ${BUILT_RPMS_DIR} for each archtectures ... "
 msgstr ""
 
-#: vbuilder.sh.in:687
+#: vbuilder.sh.in:712
+#, sh-format
+msgid "W: \\$SUDO_USER and \\$USERHELPER_UID are empty"
+msgstr ""
+
+#: vbuilder.sh.in:717
 #, sh-format
-msgid "W: \\$SUDO_USER is empty"
+msgid "Signing built rpms using ${RPM_SIGN_USER}'s key: "
 msgstr ""
 
 #: vbootstrap/scripts/4.2.sh:9 vbootstrap/scripts/4.2_i386.sh:9

+ 5 - 1
vbootstrap-vl.spec

@@ -1,7 +1,7 @@
 # This package is maintained on trac svn repository. Please do not change on local.
 # If you find a BUG, please report to Vine@vinelinux.org or mailing list or BTS.
 
-%define version 0.0.35
+%define version 0.0.36
 
 Summary: bootstrap scripts to create a basic Vine Linux system
 Summary(ja): Vine Linux の基本システムを作成するためのスクリプト
@@ -80,6 +80,10 @@ vbuilder は vbootstrap を利用して chroot 環境の構築し、
 
 
 %changelog
+* Wed Feb 09 2011 Munehiro Yamamoto <munepi@vinelinux.org> 0.0.36-1
+- updated vbuilder.sh.in
+  - improved RPM_Sign() to sign rpms under usermode
+
 * Wed Jan 19 2011 Munehiro Yamamoto <munepi@vinelinux.org> 0.0.35-1
 - updated po translations
 - updated vbuilder.sh.in, vbuilder-bash-completion.sh

+ 37 - 8
vbuilder.sh.in

@@ -5,6 +5,7 @@ TEXTDOMAIN=vbootstrap
 TEXTDOMAINDIR=/usr/share/locale
 
 Usage(){
+    set
     cat<<EOF
 Usage:	$(basename $0) {--version [version]} {--arch [arch]} {--category [categories]} {--dist-upgrade} {--target [target]} {--with-compat32} {--rpmbuild-define [macro_expr]} {--rpmbuild-with [bcond_with]} {--rpmbuild-without [bcond_with]} {--sign} {--no-install} {--bootstrap-dir [directory]} {--cache-dir [directory]} {--built-rpms-dir [directory]} {clean|build|build-rpm [src.rpm]|install-rpm [arch.rpm|package]|remove-rpm [package]|show-info}
 
@@ -313,7 +314,7 @@ apt-get-update(){
 
 ## mount-chroot {|--umount} [file system|name]
 ## support file systems: /home /tmp /sys /proc /dev/shm /dev/pts /dev
-## support name: vfs archives_dir
+## support names: vfs archives_dir
 ## NOTE: /tmp needs for applications which use X
 ##       vfs is virtual file systems
 ##       archives_dir uses to mount ${EXTERNAL_ARCHIVES_DIR} to ${ARCHIVES_DIR}
@@ -335,6 +336,11 @@ mount-chroot-umount(){
 	    [ -d ${BUILD_ROOT}${fs} ] || return 1
 	    [ -z "$(mount | grep ${BUILD_ROOT}${fs})" ] || \
     		umount ${BUILD_ROOT}${fs}
+	    if [ ! -z "$(mount | grep ${BUILD_ROOT}${fs})" ]; then
+		echo $"Retry lazy unmount ${BUILD_ROOT}${fs} ... "
+		umount -l ${BUILD_ROOT}${fs}
+		echo $"done."
+	    fi
 	    ;;
 	vfs)
 	    # for dir in /sys /proc /dev/shm /dev/pts /dev; do
@@ -342,7 +348,7 @@ mount-chroot-umount(){
 	    # done
 	    [ -d ${BUILD_ROOT}/proc ] || return 1
 	    [ -z "$(mount | grep ${BUILD_ROOT}/proc)" ] || \
-		umount ${BUILD_ROOT}/proc
+	    	umount ${BUILD_ROOT}/proc
 	    ;;
 	archives_dir)
 	    [ -d ${ARCHIVES_DIR} ] || return 1
@@ -354,7 +360,7 @@ mount-chroot-umount(){
 	    [ -z "$(mount | grep ${BUILD_ROOT} | grep unionfs)" ] || \
 		umount ${BUILD_ROOT}
 	    if [ ! -z "$(mount | grep ${BUILD_ROOT} | grep unionfs)" ]; then
-		echo $"Retry lazy unmount ... "
+		echo $"Retry lazy unmount ${BUILD_ROOT} ... "
 		umount -l ${BUILD_ROOT}
 		echo $"done."
 	    fi
@@ -374,10 +380,10 @@ mount-chroot-mount(){
 
     case $fs in
 	/home)
-	    mnt_opts="-o rbind"
+	    mnt_opts="-o _netdev,rbind"
 	    ;;
 	*)
-	    mnt_opts="--bind"
+	    mnt_opts="--bind -o _netdev"
 	    ;;
     esac
 
@@ -455,6 +461,22 @@ EOF
     return 0
 }
 
+## user_from_uid [uid]
+user_from_uid () {
+    ## check whether or not $1 is a number
+    ! echo $1 | egrep -q '[^0-9]' || return 1
+    
+    # look for the corresponding name in /etc/passwd
+    local IFS=":"
+    while read name x uid the_rest; do
+        [ "$1" = "$uid" ] && echo "$name" && return 0
+    done < /etc/passwd
+
+    # if nothing was found, return false
+    return 1
+}
+
+
 ##############################################################################
 
 Clean(){
@@ -683,10 +705,17 @@ RPM_Build(){
 RPM_Sign(){
     [ $with_sign -eq 1 ] || return 1
 
-    [ -z "${SUDO_USER}" ] && \
-	echo $"W: \$SUDO_USER is empty" && return 1
+    local RPM_SIGN_USER=$SUDO_USER
+    if [ -z "${RPM_SIGN_USER}" ]; then
+	RPM_SIGN_USER=$(user_from_uid $USERHELPER_UID)
+	if [ -z "${RPM_SIGN_USER}" ]; then
+	    echo $"W: \$SUDO_USER and \$USERHELPER_UID are empty"
+	    return 1
+	fi
+    fi
 
-    su ${SUDO_USER} -c "rpm --addsign $(for i in $RPM_PKG_ARCH_LIST; do find $BUILD_ROOT${BUILD_DIR}/${i} -type f -regex '.*\.rpm' 2>/dev/null; done | sed -e s,$BUILD_ROOT${BUILD_DIR},${BUILT_RPMS_DIR}/${MAJOR_VERSION},g -e 's/$/ \\/g')"
+    echo $"Signing built rpms using ${RPM_SIGN_USER}'s key: "
+    su $RPM_SIGN_USER -c "rpm --addsign $(for i in $RPM_PKG_ARCH_LIST; do find $BUILD_ROOT${BUILD_DIR}/${i} -type f -regex '.*\.rpm' 2>/dev/null; done | sed -e s,$BUILD_ROOT${BUILD_DIR},${BUILT_RPMS_DIR}/${MAJOR_VERSION},g -e 's/$/ \\/g')"
 
     return 0
 }

+ 119 - 0
vchroot.sh.in

@@ -0,0 +1,119 @@
+#!/bin/bash
+# -*- coding: utf-8-unix -*-
+
+TEXTDOMAIN=vbootstrap
+TEXTDOMAINDIR=/usr/share/locale
+
+trap clean-vchroot EXIT
+
+Usage(){
+    cat<<EOF
+Usage:	$(basename $0) [OPTION...] [COMMAND] - run command or shell in a chroot
+
+Options:
+	--chroot:		use specified chroot [version] (default: ${DEFAULT_VERSION})
+$(/usr/sbin/vbootstrap | sed -e s/^Usage:.*// -e s/^E:.*//)
+EOF
+}
+
+##############################################################################
+
+. /usr/share/vbootstrap/libvbuilder.sh
+
+check-parameter(){
+    [ -z "$*" ] && Usage && return 1
+
+    while [ ! -z "$*" ]; do
+	case $1 in
+	    --help|help)
+		Usage
+		return 1
+		;;
+	    --chroot)
+		shift
+		check-next-parameter $1 || return 1
+		;;
+	esac
+	shift
+    done
+
+    return 0
+}
+
+check-next-parameter(){
+    [ -z "$1" ] && echo $"E: Missing some parameters after $1" && return 1
+
+    [ $(echo $1 | grep '^-') ] && \
+	echo $"E: Missing some parameters after $1" && return 1
+
+    return 0
+}
+
+clean-vchroot(){
+    # mount-chroot --umount /home
+    mount-chroot --umount /tmp
+    mount-chroot --umount vfs
+    mount-chroot  --umount archives_dir
+    apt-get-update --host
+
+    return 0
+}
+
+main(){
+    setup-vbootstrap || return 1
+
+    __chroot="/usr/sbin/chroot ${BUILD_ROOT}"
+    ## setarch ix86 if ix86 chroot on x86_64 host
+    [ $with_ix86_on_x86_64 -eq 1 ] && \
+	__chroot="/usr/sbin/chroot ${BUILD_ROOT} setarch ${VARCH}"
+
+    mount-chroot archives_dir
+    mount-chroot vfs
+    mount-chroot /tmp
+    # mount-chroot /home
+    apt-get-update --chroot
+
+    ## copy host's configurations of /etc
+    #passwd shadow group gshadow
+    for i in resolv.conf hosts; do
+	[ ! -f ${BUILD_ROOT}/etc/${i}.orig ] && \
+	    cp -pf ${BUILD_ROOT}/etc/${i} ${BUILD_ROOT}/etc/${i}.orig && \
+	    cp -pf ${i} ${BUILD_ROOT}/etc
+    done
+    cp -Ppf /etc/localtime ${BUILD_ROOT}/etc
+
+    $__chroot $* || return 1
+    
+    return 0
+}
+
+##############################################################################
+
+# setup-vchroot || exit 1
+
+setup-vbuilder || exit 1
+
+check-parameter $* || exit 1
+
+while [ $# -gt 0 ]; do
+    tmpARG=$1
+    case $tmpARG in
+	--chroot|-c)
+	    shift
+	    ;;
+	*)
+	    break
+	    ;;
+    esac
+
+    case $tmpARG in
+	--chroot|-c)
+	    VERSION=$1
+	    ;;
+    esac
+    shift
+done
+
+main $* || exit 1
+
+exit