[Groonga-commit] groonga/groonga at 4428b62 [master] package apt: use Vagrant to build deb for Debian

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Sep 28 18:29:28 JST 2014


Kouhei Sutou	2014-09-28 18:29:28 +0900 (Sun, 28 Sep 2014)

  New Revision: 4428b626d2c7f402b8612eddcc26ee7e544adeb6
  https://github.com/groonga/groonga/commit/4428b626d2c7f402b8612eddcc26ee7e544adeb6

  Message:
    package apt: use Vagrant to build deb for Debian
    
    We drop jessie and sid support because Vagrant boxes of them don't
    exist. :<

  Added files:
    packages/apt/Vagrantfile
    packages/apt/env.sh.in
  Removed files:
    packages/apt/build-in-chroot.sh
    packages/apt/groonga-depended-packages
    packages/apt/groonga-keyring-depended-packages
  Modified files:
    .gitignore
    configure.ac
    packages/apt/Makefile.am
    packages/apt/build-deb.sh

  Modified: .gitignore (+2 -0)
===================================================================
--- .gitignore    2014-09-28 14:54:14 +0900 (8be470d)
+++ .gitignore    2014-09-28 18:29:28 +0900 (c46a0c7)
@@ -96,6 +96,7 @@ cmake_install.cmake
 /benchmark/bench-query-optimizer
 /benchmark/bench-range-select
 /packages/*/*.log
+/packages/apt/env.sh
 /packages/apt/debian/groonga-keyring.postrm
 /packages/apt/repositories/debian/pool/*/*/*/*/*.diff.gz
 /packages/apt/repositories/debian/pool/*/*/*/*/*.tar.gz
@@ -118,6 +119,7 @@ cmake_install.cmake
 /packages/apt/repositories/ubuntu/*.conf
 /packages/apt/groonga-keyring-*/
 /packages/apt/groonga-keyring-*.tar.gz
+/packages/apt/.vagrant/
 /packages/apt/tmp/
 /packages/ubuntu/tmp/
 /packages/ubuntu/*.tar.gz

  Modified: configure.ac (+1 -0)
===================================================================
--- configure.ac    2014-09-28 14:54:14 +0900 (a09f401)
+++ configure.ac    2014-09-28 18:29:28 +0900 (c23c785)
@@ -1442,6 +1442,7 @@ AC_OUTPUT([
   packages/rpm/centos/groonga.spec
   packages/rpm/fedora/groonga.spec
   packages/apt/debian/groonga-keyring.postrm
+  packages/apt/env.sh
   packages/yum/env.sh
   groonga.pc
   config.sh

  Modified: packages/apt/Makefile.am (+39 -20)
===================================================================
--- packages/apt/Makefile.am    2014-09-28 14:54:14 +0900 (3a6a00a)
+++ packages/apt/Makefile.am    2014-09-28 18:29:28 +0900 (484cb3f)
@@ -1,8 +1,7 @@
 REPOSITORIES_PATH = repositories
 DISTRIBUTIONS = debian
-CHROOT_BASE = /var/lib/chroot
 ARCHITECTURES = i386 amd64
-CODES = wheezy jessie unstable
+CODE_NAMES = wheezy
 KEYRING_PACKAGE = groonga-keyring
 KEYRING_VERSION = 2012.05.29
 KEYRING_BASE_NAME = $(KEYRING_PACKAGE)-$(KEYRING_VERSION)
@@ -31,14 +30,14 @@ download: ensure-rsync-path
 	done
 
 sign-packages:
-	./sign-packages.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' '$(CODES)'
+	./sign-packages.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' '$(CODE_NAMES)'
 
 update-repository:
 	./update-repository.sh '$(PACKAGE_NAME)' '$(REPOSITORIES_PATH)/' \
-	  '$(ARCHITECTURES)' '$(CODES)'
+	  '$(ARCHITECTURES)' '$(CODE_NAMES)'
 
 sign-repository:
-	./sign-repository.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' '$(CODES)'
+	./sign-repository.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' '$(CODE_NAMES)'
 
 upload: ensure-rsync-path
 	for distribution in $(DISTRIBUTIONS); do		\
@@ -49,31 +48,51 @@ upload: ensure-rsync-path
 
 build: build-package-deb build-keyring-deb
 
-build-package-deb: source
-	./build-in-chroot.sh						\
-	  $(PACKAGE) $(VERSION) $(srcdir)/.. $(REPOSITORIES_PATH)/	\
-	  $(CHROOT_BASE) '$(ARCHITECTURES)' '$(CODES)'
+run-vagrant:
+	vagrant destroy --force
+	for architecture in $(ARCHITECTURES); do		\
+	  for code_name in $(CODE_NAMES); do			\
+	    id=debian-$$code_name-$$architecture;		\
+	    vagrant up $$id || exit 1;				\
+	    vagrant destroy --force $$id;			\
+	  done;							\
+	done
+
+build-package-deb: prepare-build-package-deb
+	$(MAKE) run-vagrant
+
+prepare-build-package-deb: source env.sh
+	cp env.sh tmp/
+	rm -rf tmp/debian
+	cp -rp $(srcdir)/../debian/ tmp/
+
+source: tmp/$(PACKAGE)-$(VERSION).tar.gz
 
-build-keyring-deb: keyring-source
-	./build-in-chroot.sh					\
-	  $(KEYRING_PACKAGE) $(KEYRING_VERSION) $(srcdir)	\
-	  $(REPOSITORIES_PATH)/ $(CHROOT_BASE)			\
-	  '$(ARCHITECTURES)' '$(CODES)'
+tmp/$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
+	mkdir -p tmp/
+	cp $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz $@
 
-source: ../$(PACKAGE)-$(VERSION).tar.gz
 
-../$(PACKAGE)-$(VERSION).tar.gz:
-	ln -s $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz ../
+build-keyring-deb: prepare-build-keyring-deb
+	$(MAKE) run-vagrant
 
-keyring-source: $(KEYRING_BASE_NAME).tar.gz
+keyring-source: tmp/$(KEYRING_BASE_NAME).tar.gz
 
 ensure-public-key:
 	gpg --list-keys '$(GPG_UID)' > /dev/null ||			\
 	  gpg --keyserver keyserver.ubuntu.com --recv-key '$(GPG_UID)'
 
-$(KEYRING_BASE_NAME).tar.gz: ensure-public-key
+tmp/$(KEYRING_BASE_NAME).tar.gz: ensure-public-key
 	rm -rf $(KEYRING_BASE_NAME)
 	mkdir -p $(KEYRING_BASE_NAME)
 	gpg --armor --export '$(GPG_UID)' > \
 	  $(KEYRING_BASE_NAME)/groonga-keyring.gpg
-	tar cvzf $(KEYRING_BASE_NAME).tar.gz $(KEYRING_BASE_NAME)
+	mkdir -p tmp/
+	tar cvzf tmp/$(KEYRING_BASE_NAME).tar.gz $(KEYRING_BASE_NAME)
+
+prepare-build-keyring-deb: keyring-source
+	echo "PACKAGE=$(KEYRING_PACKAGE)" > tmp/env.sh
+	echo "VERSION=$(KEYRING_VERSION)" >> tmp/env.sh
+	echo "DEPENDED_PACKAGES='gnupg'" >> tmp/env.sh
+	rm -rf tmp/debian
+	cp -a $(srcdir)/debian/ tmp/

  Added: packages/apt/Vagrantfile (+30 -0) 100644
===================================================================
--- /dev/null
+++ packages/apt/Vagrantfile    2014-09-28 18:29:28 +0900 (429768e)
@@ -0,0 +1,30 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+  vms = [
+    {
+      :id => "debian-wheezy-i386",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_debian-7.6-i386_chef-provisionerless.box
+",
+    },
+    {
+      :id => "debian-wheezy-amd64",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_debian-7.6_chef-provisionerless.box",
+    },
+  ]
+
+  vms.each do |vm|
+    config.vm.define(vm[:id]) do |node|
+      node.vm.box = vm[:id]
+      node.vm.box_url = vm[:box_url]
+      node.vm.provision(:shell, :path => "build-deb.sh")
+      node.vm.provider("virtualbox") do |virtual_box|
+        virtual_box.memory = 768
+      end
+    end
+  end
+end

  Modified: packages/apt/build-deb.sh (+35 -99)
===================================================================
--- packages/apt/build-deb.sh    2014-09-28 14:54:14 +0900 (1f5a5b0)
+++ packages/apt/build-deb.sh    2014-09-28 18:29:28 +0900 (8c73947)
@@ -2,114 +2,50 @@
 
 LANG=C
 
-PACKAGE=$(cat /tmp/build-package)
-USER_NAME=$(cat /tmp/build-user)
-VERSION=$(cat /tmp/build-version)
-DEPENDED_PACKAGES=$(cat /tmp/depended-packages)
-BUILD_SCRIPT=/tmp/build-deb-in-chroot.sh
-
 run()
 {
-    "$@"
-    if test $? -ne 0; then
-	echo "Failed $@"
-	exit 1
-    fi
+  "$@"
+  if test $? -ne 0; then
+    echo "Failed $@"
+    exit 1
+  fi
 }
 
-if [ ! -x /usr/bin/lsb_release ]; then
-    run apt-get update
-    run apt-get install -y lsb-release
-fi
-
-distribution=$(lsb_release --id --short)
-code_name=$(lsb_release --codename --short)
-
-security_list=/etc/apt/sources.list.d/security.list
-if [ ! -f "${security_list}" ]; then
-    case ${distribution} in
-	Debian)
-	    if [ "${code_name}" = "sid" ]; then
-		touch "${security_list}"
-	    else
-		cat <<EOF > "${security_list}"
-deb http://security.debian.org/ ${code_name}/updates main
-deb-src http://security.debian.org/ ${code_name}/updates main
-EOF
-	    fi
-	    ;;
-	Ubuntu)
-	    cat <<EOF > "${security_list}"
-deb http://security.ubuntu.com/ubuntu ${code_name}-security main restricted
-deb-src http://security.ubuntu.com/ubuntu ${code_name}-security main restricted
-EOF
-	    ;;
-    esac
-fi
+. /vagrant/tmp/env.sh
 
-sources_list=/etc/apt/sources.list
-if [ "$distribution" = "Ubuntu" ] && \
-    ! (grep '^deb' $sources_list | grep -q universe); then
-    run sed -i'' -e 's/main$/main universe/g' $sources_list
-fi
+swap_file=/tmp/swap
+run dd if=/dev/zero of="$swap_file" bs=1024 count=3024K
+run mkswap "$swap_file"
+run swapon "$swap_file"
 
-if [ ! -x /usr/bin/aptitude ]; then
-    run apt-get update
-    run apt-get install -y aptitude
-fi
-run aptitude update -V -D
-run aptitude safe-upgrade -V -D -y
+run apt-get update
+run apt-get install -y lsb-release
 
-run aptitude install -V -D -y ruby
-
-if aptitude show libmsgpack-dev > /dev/null 2>&1; then
-    DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libmsgpack-dev"
-else
-    ruby -i'' -ne 'print $_ unless /libmsgpack/' /tmp/${PACKAGE}-debian/control
-fi
-
-case $(lsb_release -s -c) in
-    jessie|sid)
-	DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libzmq3-dev"
-	;;
-    *)
-	DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libzmq-dev"
-	;;
+distribution=$(lsb_release --id --short | tr 'A-Z' 'a-z')
+code_name=$(lsb_release --codename --short)
+case "${distribution}" in
+  debian)
+    component=main
+    ;;
+  ubuntu)
+    component=universe
+    ;;
 esac
 
-if aptitude show libevent-dev > /dev/null 2>&1; then
-    DEPENDED_PACKAGES="${DEPENDED_PACKAGES} libevent-dev"
-else
-    ruby -i'' -ne 'print $_ unless /libevent/' /tmp/${PACKAGE}-debian/control
-fi
-
-if aptitude show liblzo2-dev > /dev/null 2>&1; then
-    DEPENDED_PACKAGES="${DEPENDED_PACKAGES} liblzo2-dev"
-else
-    ruby -i'' -ne 'print $_ unless /liblzo2-dev/' /tmp/${PACKAGE}-debian/control
-fi
-
-run aptitude install -V -D -y devscripts ${DEPENDED_PACKAGES}
-run aptitude clean
-
-if ! id $USER_NAME >/dev/null 2>&1; then
-    run useradd -m $USER_NAME
-fi
-
-cat <<EOF > $BUILD_SCRIPT
-#!/bin/sh
-
-rm -rf build
-mkdir -p build
+run apt-get install -V -y build-essential devscripts ${DEPENDED_PACKAGES}
 
-cp /tmp/${PACKAGE}-${VERSION}.tar.gz build/${PACKAGE}_${VERSION}.orig.tar.gz
-cd build
-tar xfz ${PACKAGE}_${VERSION}.orig.tar.gz
-cd ${PACKAGE}-${VERSION}/
-cp -rp /tmp/${PACKAGE}-debian debian
+run mkdir -p build
+run cp /vagrant/tmp/${PACKAGE}-${VERSION}.tar.gz \
+  build/${PACKAGE}_${VERSION}.orig.tar.gz
+run cd build
+run tar xfz ${PACKAGE}_${VERSION}.orig.tar.gz
+run cd ${PACKAGE}-${VERSION}/
+run cp -rp /vagrant/tmp/debian debian
 # export DEB_BUILD_OPTIONS=noopt
-debuild -us -uc
-EOF
+run debuild -us -uc
+run cd -
 
-run chmod +x $BUILD_SCRIPT
-run su - $USER_NAME $BUILD_SCRIPT
+package_initial=$(echo "${PACKAGE}" | sed -e 's/\(.\).*/\1/')
+pool_dir="/vagrant/repositories/${distribution}/pool/${code_name}/${component}/${package_initial}/${PACKAGE}"
+run mkdir -p "${pool_dir}/"
+run cp *.tar.gz *.dsc *.deb "${pool_dir}/"

  Deleted: packages/apt/build-in-chroot.sh (+0 -134) 100755
===================================================================
--- packages/apt/build-in-chroot.sh    2014-09-28 14:54:14 +0900 (9d97d42)
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/bin/sh
-
-if [ $# != 7 ]; then
-    echo "Usage: $0 PACKAGE VERSION SOURCE_DIR DESTINATION CHROOT_BASE ARCHITECTURES CODES"
-    echo " e.g.: $0 groonga 0.1.9 SOURCE_DIR repositories/ /var/lib/chroot 'i386 amd64' 'lenny unstable hardy karmic'"
-    exit 1
-fi
-
-PACKAGE=$1
-VERSION=$2
-SOURCE_DIR=$3
-DESTINATION=$4
-CHROOT_BASE=$5
-ARCHITECTURES=$6
-CODES=$7
-
-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
-    code_name=$2
-
-    run_sudo debootstrap --arch $architecture $code_name $base_dir
-
-    case $code_name in
-	wheezy|jessie|unstable)
-	    run_sudo sed -i'' -e 's/us/jp/' $base_dir/etc/apt/sources.list
-	    ;;
-	*)
-	    run_sudo sed -i'' \
-		-e 's,http://archive,http://jp.archive,' \
-		-e 's/main$/main universe/' \
-		$base_dir/etc/apt/sources.list
-	    ;;
-    esac
-
-    run_sudo sh -c "echo >> /etc/fstab"
-    run_sudo sh -c "echo /sys ${base_dir}/sys none bind 0 0 >> /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}/sys
-    run_sudo mount ${base_dir}/dev
-    run_sudo mount ${base_dir}/dev/pts
-    run_sudo mount ${base_dir}/proc
-}
-
-build()
-{
-    architecture=$1
-    code_name=$2
-
-    target=${code_name}-${architecture}
-    base_dir=${CHROOT_BASE}/${target}
-    if [ ! -d $base_dir ]; then
-	run build_chroot $architecture $code_name
-    fi
-
-    case ${code_name} in
-	wheezy|jessie|unstable)
-	    distribution=debian
-	    component=main
-	    ;;
-	*)
-	    distribution=ubuntu
-	    component=universe
-	    ;;
-    esac
-
-    source_dir=${SOURCE_DIR}
-    build_user=${PACKAGE}-build
-    build_user_dir=${base_dir}/home/$build_user
-    build_dir=${build_user_dir}/build
-    pool_base_dir=${DESTINATION}${distribution}/pool/${code_name}/${component}
-    package_initial=$(echo ${PACKAGE} | sed -e 's/\(.\).*/\1/')
-    pool_dir=${pool_base_dir}/${package_initial}/${PACKAGE}
-    run cp $source_dir/${PACKAGE}-${VERSION}.tar.gz \
-	${CHROOT_BASE}/$target/tmp/
-    run rm -rf ${CHROOT_BASE}/$target/tmp/${PACKAGE}-debian
-    run cp -rp $source_dir/debian/ \
-	${CHROOT_BASE}/$target/tmp/${PACKAGE}-debian
-    run echo $PACKAGE > ${CHROOT_BASE}/$target/tmp/build-package
-    run echo $VERSION > ${CHROOT_BASE}/$target/tmp/build-version
-    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 cp ${script_base_dir}/build-deb.sh \
-	${CHROOT_BASE}/$target/tmp/
-    run_sudo rm -rf $build_dir
-    run_sudo su -c "/usr/sbin/chroot ${CHROOT_BASE}/$target /tmp/build-deb.sh"
-    run mkdir -p $pool_dir
-    for path in $build_dir/*; do
-	[ -f $path ] && run cp -p $path $pool_dir/
-    done
-}
-
-for architecture in $ARCHITECTURES; do
-    for code_name in $CODES; do
-	if test "$parallel" = "yes"; then
-	    build $architecture $code_name &
-	else
-	    mkdir -p tmp
-	    build_log=tmp/build-$code_name-$architecture.log
-	    build $architecture $code_name 2>&1 | tee $build_log
-	fi;
-    done;
-done
-
-if test "$parallel" = "yes"; then
-    wait
-fi

  Added: packages/apt/env.sh.in (+13 -0) 100644
===================================================================
--- /dev/null
+++ packages/apt/env.sh.in    2014-09-28 18:29:28 +0900 (0b56e9f)
@@ -0,0 +1,13 @@
+PACKAGE=@PACKAGE@
+VERSION=@VERSION@
+DEPENDED_PACKAGES="
+debhelper
+autotools-dev
+zlib1g-dev
+liblzo2-dev
+libmsgpack-dev
+libzmq-dev
+libevent-dev
+libmecab-dev
+libpcre3-dev
+"

  Deleted: packages/apt/groonga-depended-packages (+0 -7) 100644
===================================================================
--- packages/apt/groonga-depended-packages    2014-09-28 14:54:14 +0900 (35d5f1e)
+++ /dev/null
@@ -1,7 +0,0 @@
-debhelper
-autotools-dev
-pkg-config
-libmecab-dev
-ruby
-zlib1g-dev
-libpcre3-dev

  Deleted: packages/apt/groonga-keyring-depended-packages (+0 -1) 100644
===================================================================
--- packages/apt/groonga-keyring-depended-packages    2014-09-28 14:54:14 +0900 (a8ef404)
+++ /dev/null
@@ -1 +0,0 @@
-gnupg
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index