[Groonga-commit] groonga/gcs [master] Add RPM package build scripts

Back to archive index

null+****@clear***** null+****@clear*****
2012年 7月 3日 (火) 00:26:36 JST


Kouhei Sutou	2012-07-03 00:26:36 +0900 (Tue, 03 Jul 2012)

  New Revision: 3e3c746c194aefbd01bfbfe135a7079ff2b21ee7
  https://github.com/groonga/gcs/commit/3e3c746c194aefbd01bfbfe135a7079ff2b21ee7

  Log:
    Add RPM package build scripts
    
    msgpack2 is only added.

  Added files:
    packages/rpm/nodejs-msgpack2.spec
    packages/yum/Makefile
    packages/yum/build-in-chroot.sh
    packages/yum/build-rpm.sh
    packages/yum/nodejs-msgpack2-build-options
    packages/yum/nodejs-msgpack2-depended-packages
    packages/yum/nodejs-msgpack2-version
    packages/yum/sign-rpm.sh
    packages/yum/update-repository.sh
  Modified files:
    .gitignore

  Modified: .gitignore (+1 -0)
===================================================================
--- .gitignore    2012-07-02 23:00:16 +0900 (7962627)
+++ .gitignore    2012-07-03 00:26:36 +0900 (b0c250b)
@@ -2,3 +2,4 @@
 /test/tmp
 /packages/all-in-one/tmp/
 /packages/all-in-one/*.tar.gz
+/packages/yum/repositories/

  Added: packages/rpm/nodejs-msgpack2.spec (+46 -0) 100644
===================================================================
--- /dev/null
+++ packages/rpm/nodejs-msgpack2.spec    2012-07-03 00:26:36 +0900 (dd5e982)
@@ -0,0 +1,46 @@
+Name:       nodejs-msgpack2
+Version:    0.1.7
+Release:    1%{?dist}
+Summary:    Latest version of node.js msgpack bindings
+License:    BSD
+Group:      System Environment/Libraries
+URL:        https://github.com/JulesAU/node-msgpack
+Source0:    http://registry.npmjs.org/msgpack2/-/msgpack2-%{version}.tgz
+BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires:  nodejs-devel
+BuildRequires:  nodejs-waf
+
+%if !(0%{?fedora} >= 17)
+Requires:       nodejs
+%endif
+
+%description
+%{summary}.
+
+%prep
+%setup -q -n %{name}
+
+%build
+make
+
+%install
+rm -rf %{buildroot}
+
+mkdir -p %{buildroot}%{nodejs_libdir}/msgpack2/build/Release
+cp -pr lib package.json %{buildroot}%{nodejs_libdir}/msgpack2
+cp -pr build/Release/mpBindings.node \
+    %{buildroot}%{nodejs_libdir}/msgpack2/build/Release/
+
+%clean
+make clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%{nodejs_libdir}/msgpack2
+%doc README.md LICENSE
+
+%changelog
+* Thu Jul 5 2012 Kouhei Sutou <kou****@clear*****> - 0.1.7-1
+- initial package

  Added: packages/yum/Makefile (+54 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/Makefile    2012-07-03 00:26:36 +0900 (263bba3)
@@ -0,0 +1,54 @@
+REPOSITORIES_PATH = repositories
+DISTRIBUTIONS = fedora centos
+ARCHITECTURES = i386 x86_64
+PACKAGES = nodejs-msgpack2
+CHROOT_BASE = /var/lib/chroot
+RSYNC_PATH = packa****@packa*****:public
+HAVE_DEVELOPMENT_BRANCH = no
+USE_RPMFORGE = no
+USE_ATRPMS = no
+GPG_UID = 45499429
+BASE_URL_PREFIX = http://packages.groonga.org
+
+release: download build sign update upload
+
+sign:
+	./sign-rpm.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' \
+	  '$(DISTRIBUTIONS)'
+
+update:
+	./update-repository.sh '$(PACKAGE)' '$(REPOSITORIES_PATH)/' \
+	  '$(DISTRIBUTIONS)'
+
+upload:
+	for distribution in $(DISTRIBUTIONS); do		\
+	  rsync -avz --progress --delete --exclude .gitignore	\
+	    $(REPOSITORIES_PATH)/$${distribution}/		\
+	      $(RSYNC_PATH)/$${distribution};			\
+	done
+
+download:
+	mkdir -p $(REPOSITORIES_PATH)
+	for distribution in $(DISTRIBUTIONS); do	\
+	   rsync -avz --progress --delete		\
+	     $(RSYNC_PATH)/$${distribution}/		\
+	     $(REPOSITORIES_PATH)/$${distribution};	\
+	done
+
+build: build-in-chroot
+
+build-in-chroot:
+	for package in $(PACKAGES); do		\
+	  ./build-in-chroot.sh			\
+	    $${package}				\
+	    $$(cat $${package}-version)		\
+	    $${package}				\
+	    ../rpm				\
+	    $(REPOSITORIES_PATH)/		\
+	    $(CHROOT_BASE)			\
+	    '$(ARCHITECTURES)'			\
+	    '$(DISTRIBUTIONS)'			\
+	    '$(HAVE_DEVELOPMENT_BRANCH)'	\
+	    '$(USE_RPMFORGE)'			\
+	    '$(USE_ATRPMS)';			\
+	done

  Added: packages/yum/build-in-chroot.sh (+177 -0) 100755
===================================================================
--- /dev/null
+++ packages/yum/build-in-chroot.sh    2012-07-03 00:26:36 +0900 (b4cdea8)
@@ -0,0 +1,177 @@
+#!/bin/sh
+
+if [ $# != 11 ]; then
+    echo "Usage: $0 PACKAGE VERSION SOURCE_BASE_NAME SPEC_DIR DESTINATION CHROOT_BASE ARCHITECTURES DISTRIBUTIONS HAVE_DEVELOPMENT_BRANCH USE_RPMFORGE USE_ATRPMS"
+    echo " e.g.: $0 milter-manager 1.1.1 ../milter-manager ../rpm repositories/ /var/lib/chroot 'i386 x86_64' 'fedora centos' yes no no"
+    exit 1
+fi
+
+PACKAGE=$1
+VERSION=$2
+SOURCE_BASE_NAME=$3
+SPEC_DIR=$4
+DESTINATION=$5
+CHROOT_BASE=$6
+ARCHITECTURES=$7
+DISTRIBUTIONS=$8
+HAVE_DEVELOPMENT_BRANCH=$9
+USE_RPMFORGE=$10
+USE_ATRPMS=$11
+
+PATH=/usr/local/sbin:/usr/sbin:$PATH
+
+script_base_dir=`dirname $0`
+
+if test "$PARALLEL" = "yes"; then
+    parallel="yes"
+else
+    parallel="no"
+fi
+
+run()
+{
+    "$@"
+    if test $? -ne 0; then
+	echo "Failed $@"
+	exit 1
+    fi
+}
+
+run_sudo()
+{
+    run sudo "$@"
+}
+
+build_chroot()
+{
+    architecture=$1
+    distribution_name=$2
+    distribution_version=$3
+
+    if [ $architecture = "x86_64" ]; then
+	rinse_architecture="amd64"
+        distribution_architecture=$architecture
+    else
+	rinse_architecture=$architecture
+	if [ "$distribution_name-$distribution_version" = "centos-5" ]; then
+	    distribution_architecture=$architecture
+	else
+	    distribution_architecture=i686
+	fi
+    fi
+
+    run_sudo mkdir -p ${base_dir}/etc/rpm
+    rpm_platform=${distribution_architecture}-${distribution}-linux
+    run_sudo sh -c "echo ${rpm_platform} > ${base_dir}/etc/rpm/platform"
+    run_sudo rinse \
+	--arch $rinse_architecture \
+	--distribution $distribution_name-$distribution_version \
+	--directory $base_dir
+    run_sudo rinse --arch $rinse_architecture --clean-cache
+
+    run_sudo sh -c "echo >> /etc/fstab"
+    run_sudo sh -c "echo /dev ${base_dir}/dev none bind 0 0 >> /etc/fstab"
+    run_sudo sh -c "echo devpts-chroot ${base_dir}/dev/pts devpts defaults 0 0 >> /etc/fstab"
+    run_sudo sh -c "echo proc-chroot ${base_dir}/proc proc defaults 0 0 >> /etc/fstab"
+    run_sudo mount ${base_dir}/dev
+    run_sudo mount ${base_dir}/dev/pts
+    run_sudo mount ${base_dir}/proc
+
+    if [ "$distribution_name-$distribution_version" = "fedora-16" ]; then
+	yes | run_sudo su -c "chroot ${base_dir} rpm --import https://fedoraproject.org/static/A82BA4B7.txt"
+	run_sudo su -c "chroot ${base_dir} yum -y update yum"
+	run_sudo su -c "chroot ${base_dir} yum -y clean all"
+	run_sudo su -c "chroot ${base_dir} yum -y --releasever=16 --disableplugin=presto distro-sync"
+    fi
+}
+
+build()
+{
+    architecture=$1
+    distribution=$2
+    distribution_version=$3
+
+    target=${distribution}-${distribution_version}-${architecture}
+    base_dir=${CHROOT_BASE}/${target}
+    if [ ! -d $base_dir ]; then
+	run build_chroot $architecture $distribution $distribution_version
+    fi
+
+    build_user=${PACKAGE}-build
+    build_user_dir=${base_dir}/home/${build_user}
+    rpm_base_dir=${build_user_dir}/rpm
+    rpm_dir=${rpm_base_dir}/RPMS/${architecture}
+    srpm_dir=${rpm_base_dir}/SRPMS
+    pool_base_dir=${DESTINATION}${distribution}/${distribution_version}
+    if test "${HAVE_DEVELOPMENT_BRANCH}" = "yes"; then
+	minor_version=$(echo $VERSION | ruby -pe '$_.gsub!(/\A\d+\.(\d+)\..*/, "\\1")')
+	if test $(expr ${minor_version} % 2) -eq 0; then
+	    branch_name=stable
+	else
+	    branch_name=development
+	fi
+	pool_base_dir=${pool_base_dir}/${branch_name}
+    fi
+    binary_pool_dir=$pool_base_dir/$architecture/Packages
+    source_pool_dir=$pool_base_dir/source/SRPMS
+    if test -f ${SOURCE_BASE_NAME}-${VERSION}-*.src.rpm; then
+	run cp ${SOURCE_BASE_NAME}-${VERSION}-*.src.rpm \
+	    ${CHROOT_BASE}/$target/tmp/
+    else
+	run cp ${SPEC_DIR}/${PACKAGE}.spec \
+	    ${CHROOT_BASE}/$target/tmp/
+    fi
+    run echo $PACKAGE > ${CHROOT_BASE}/$target/tmp/build-package
+    run echo $VERSION > ${CHROOT_BASE}/$target/tmp/build-version
+    run echo $(basename ${SOURCE_BASE_NAME}) > \
+	${CHROOT_BASE}/$target/tmp/build-source-base-name
+    run echo $build_user > ${CHROOT_BASE}/$target/tmp/build-user
+    run cp ${script_base_dir}/${PACKAGE}-depended-packages \
+	${CHROOT_BASE}/$target/tmp/depended-packages
+    run echo $USE_RPMFORGE > ${CHROOT_BASE}/$target/tmp/build-use-rpmforge
+    run echo $USE_ATRPMS > ${CHROOT_BASE}/$target/tmp/build-use-atrpms
+    run cp ${script_base_dir}/${PACKAGE}-build-options \
+	${CHROOT_BASE}/$target/tmp/build-options
+    run cp ${script_base_dir}/build-rpm.sh ${CHROOT_BASE}/$target/tmp/
+    run_sudo rm -rf $rpm_dir $srpm_dir
+    run_sudo su -c "chroot ${CHROOT_BASE}/$target /tmp/build-rpm.sh"
+    run mkdir -p $binary_pool_dir
+    run mkdir -p $source_pool_dir
+    run cp -p $rpm_dir/*-${VERSION}* $binary_pool_dir
+    run cp -p $srpm_dir/*-${VERSION}* $source_pool_dir
+
+    dependencies_dir=${build_user_dir}/dependencies
+    dependencies_rpm_dir=${dependencies_dir}/RPMS
+    dependencies_srpm_dir=${dependencies_dir}/SRPMS
+    if [ -d "${dependencies_rpm_dir}" ]; then
+	run cp -p ${dependencies_rpm_dir}/* $binary_pool_dir
+    fi
+    if [ -d "${dependencies_srpm_dir}" ]; then
+	run cp -p ${dependencies_srpm_dir}/* $source_pool_dir
+    fi
+}
+
+for architecture in $ARCHITECTURES; do
+    for distribution in $DISTRIBUTIONS; do
+	case $distribution in
+	    fedora)
+		distribution_versions="16"
+		;;
+	    centos)
+		distribution_versions="6"
+		;;
+	esac
+	for distribution_version in $distribution_versions; do
+	    if test "$parallel" = "yes"; then
+		build $architecture $distribution $distribution_version &
+	    else
+		build_log=/tmp/build-$distribution-$distribution_version-$architecture.log
+		build $architecture $distribution $distribution_version 2>&1 | tee $build_log
+	    fi;
+	done;
+    done;
+done
+
+if test "$parallel" = "yes"; then
+    wait
+fi

  Added: packages/yum/build-rpm.sh (+129 -0) 100755
===================================================================
--- /dev/null
+++ packages/yum/build-rpm.sh    2012-07-03 00:26:36 +0900 (1135ec3)
@@ -0,0 +1,129 @@
+#!/bin/sh
+
+LANG=C
+
+PACKAGE=$(cat /tmp/build-package)
+VERSION=$(cat /tmp/build-version)
+SOURCE_BASE_NAME=$(cat /tmp/build-source-base-name)
+USER_NAME=$(cat /tmp/build-user)
+DEPENDED_PACKAGES=$(cat /tmp/depended-packages)
+USE_RPMFORGE=$(cat /tmp/build-use-rpmforge)
+USE_ATRPMS=$(cat /tmp/build-use-atrpms)
+BUILD_OPTIONS=$(cat /tmp/build-options)
+BUILD_SCRIPT=/tmp/build-${PACKAGE}.sh
+
+run()
+{
+    "$@"
+    if test $? -ne 0; then
+	echo "Failed $@"
+	exit 1
+    fi
+}
+
+if ! id $USER_NAME >/dev/null 2>&1; then
+    run useradd -m $USER_NAME
+fi
+
+yum_options=
+
+distribution=$(cut -d ' ' -f 1 /etc/redhat-release | tr 'A-Z' 'a-z')
+if grep -q Linux /etc/redhat-release; then
+    distribution_version=$(cut -d ' ' -f 4 /etc/redhat-release)
+else
+    distribution_version=$(cut -d ' ' -f 3 /etc/redhat-release)
+fi
+if ! rpm -q ${distribution}-release > /dev/null 2>&1; then
+    packages_dir=/var/cache/yum/core/packages
+    release_rpm=${distribution}-release-${distribution_version}-*.rpm
+    run rpm -Uvh --force ${packages_dir}/${release_rpm}
+    run rpm -Uvh --force ${packages_dir}/ca-certificates-*.rpm
+fi
+
+if test "$USE_RPMFORGE" = "yes"; then
+    if ! rpm -q rpmforge-release > /dev/null 2>&1; then
+	architecture=$(cut -d '-' -f 1 /etc/rpm/platform)
+	rpmforge_url=http://packages.sw.be/rpmforge-release
+	rpmforge_rpm_base=rpmforge-release-0.5.2-2.el5.rf.${architecture}.rpm
+	wget $rpmforge_url/$rpmforge_rpm_base
+	run rpm -Uvh $rpmforge_rpm_base
+	rm $rpmforge_rpm_base
+	sed -i'' -e 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo
+    fi
+    yum_options="$yum_options --enablerepo=rpmforge"
+fi
+
+if test "$USE_ATRPMS" = "yes"; then
+    case "$(cat /etc/redhat-release)" in
+	CentOS*)
+	    repository_label=CentOS
+	    repository_prefix=el
+	    ;;
+	*)
+	    repository_label=Fedora
+	    repository_prefix=f
+	    ;;
+    esac
+    cat <<EOF > /etc/yum.repos.d/atrpms.repo
+[atrpms]
+name=${repository_label} \$releasever - \$basearch - ATrpms
+baseurl=http://dl.atrpms.net/${repository_prefix}\$releasever-\$basearch/atrpms/stable
+gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
+gpgcheck=1
+enabled=0
+EOF
+    yum_options="$yum_options --enablerepo=atrpms"
+fi
+
+USE_NODEJS="yes"
+if test "$USE_NODEJS" = "yes"; then
+    if ! rpm -q nodejs-stable-release > /dev/null 2>&1; then
+	nodejs_release_rpm_base=nodejs-stable-release.noarch.rpm
+	wget http://nodejs.tchol.org/repocfg/el/$nodejs_release_rpm_base
+	run yum localinstall -y --nogpgcheck nodejs-stable-release.noarch.rpm
+	rm $nodejs_release_rpm_base
+	sed -i'' -e 's/enabled=1/enabled=0/g' /etc/yum.repos.d/nodejs-stable.repo
+    fi
+    yum_options="$yum_options --enablerepo=nodejs-stable"
+fi
+
+rpmbuild_options="${BUILD_OPTIONS}"
+
+run yum update ${yum_options} -y
+run yum install ${yum_options} -y rpm-build tar rpmdevtools ${DEPENDED_PACKAGES}
+run yum clean ${yum_options} packages
+
+# for debug
+# rpmbuild_options="$rpmbuild_options --define 'optflags -O0 -ggdb3'"
+
+cat <<EOF > $BUILD_SCRIPT
+#!/bin/sh
+
+if [ ! -f ~/.rpmmacros ]; then
+    cat <<EOM > ~/.rpmmacros
+%_topdir \$HOME/rpm
+EOM
+fi
+
+# rm -rf rpm
+mkdir -p rpm/SOURCES
+mkdir -p rpm/SPECS
+mkdir -p rpm/BUILD
+mkdir -p rpm/RPMS
+mkdir -p rpm/SRPMS
+
+cp /tmp/${PACKAGE}.spec rpm/SPECS/
+for source in $(spectool rpm/SPECS/${PACKAGE}.spec | sed -e 's,.*,,'); do
+  if [ ! -f rpm/SOURCES/$source ]; then
+    spectool -g -R rpm/SPECS/${PACKAGE}.spec
+    break
+  fi
+done
+
+chmod o+rx . rpm rpm/RPMS rpm/SRPMS
+
+rpmbuild -ba ${rpmbuild_options} rpm/SPECS/${PACKAGE}.spec
+EOF
+
+run chmod +x $BUILD_SCRIPT
+run su - $USER_NAME $BUILD_SCRIPT

  Added: packages/yum/nodejs-msgpack2-build-options (+0 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/nodejs-msgpack2-build-options    2012-07-03 00:26:36 +0900 (e69de29)

  Added: packages/yum/nodejs-msgpack2-depended-packages (+2 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/nodejs-msgpack2-depended-packages    2012-07-03 00:26:36 +0900 (8e2b370)
@@ -0,0 +1,2 @@
+nodejs-devel
+nodejs-waf

  Added: packages/yum/nodejs-msgpack2-version (+1 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/nodejs-msgpack2-version    2012-07-03 00:26:36 +0900 (1180819)
@@ -0,0 +1 @@
+0.1.7

  Added: packages/yum/sign-rpm.sh (+36 -0) 100755
===================================================================
--- /dev/null
+++ packages/yum/sign-rpm.sh    2012-07-03 00:26:36 +0900 (0b346ba)
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 3 ]; then
+    echo "Usage: $0 GPG_UID DESTINATION DISTRIBUTIONS"
+    echo " e.g.: $0 'F10399C0' repositories/ 'fedora centos'"
+    exit 1
+fi
+
+GPG_UID=$1
+DESTINATION=$2
+DISTRIBUTIONS=$3
+
+run()
+{
+    "$@"
+    if test $? -ne 0; then
+	echo "Failed $@"
+	exit 1
+    fi
+}
+
+rpms=""
+for distribution in ${DISTRIBUTIONS}; do
+    rpms="${rpms} $(echo ${DESTINATION}${distribution}/*/*/*/*.rpm)"
+done
+
+echo "NOTE: YOU JUST ENTER! YOU DON'T NEED TO INPUT PASSWORD!"
+echo "      IT'S JUST FOR rpm COMMAND RESTRICTION!"
+run rpm \
+    -D "_gpg_name ${GPG_UID}" \
+    -D "__gpg /usr/bin/gpg2" \
+    -D "__gpg_check_password_cmd /bin/true true" \
+    -D "__gpg_sign_cmd %{__gpg} gpg --batch --no-verbose --no-armor %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} --no-secmem-warning -u \"%{_gpg_name}\" -sbo %{__signature_filename} %{__plaintext_filename}" \
+    --resign $rpms

  Added: packages/yum/update-repository.sh (+28 -0) 100755
===================================================================
--- /dev/null
+++ packages/yum/update-repository.sh    2012-07-03 00:26:36 +0900 (ca76e49)
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 3 ]; then
+    echo "Usage: $0 GPG_KEY_NAME DESTINATION DISTRIBUTIONS"
+    echo " e.g.: $0 mitler-manager repositories/ 'fedora centos'"
+    exit 1
+fi
+
+GPG_KEY_NAME=$1
+DESTINATION=$2
+DISTRIBUTIONS=$3
+
+run()
+{
+    "$@"
+    if test $? -ne 0; then
+	echo "Failed $@"
+	exit 1
+    fi
+}
+
+for distribution in ${DISTRIBUTIONS}; do
+    for dir in ${DESTINATION}${distribution}/*/*; do
+	test -d $dir &&	run createrepo $dir
+    done;
+done
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
下载 



Groonga-commit メーリングリストの案内
Back to archive index