[Groonga-commit] groonga/groonga-normalizer-mysql at a956011 [master] yum: support building with Vagrant

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Jul 30 15:06:09 JST 2014


Kouhei Sutou	2014-07-30 15:06:09 +0900 (Wed, 30 Jul 2014)

  New Revision: a956011d9e6b7e5ef6991cd025f7425745b0e02f
  https://github.com/groonga/groonga-normalizer-mysql/commit/a956011d9e6b7e5ef6991cd025f7425745b0e02f

  Message:
    yum: support building with Vagrant
    
    CentOS 7 is supported.

  Added files:
    packages/yum/Vagrantfile
    packages/yum/env.sh.in
  Removed files:
    packages/yum/build-in-chroot.sh
    packages/yum/groonga-normalizer-mysql-build-options
    packages/yum/groonga-normalizer-mysql-depended-packages
  Modified files:
    .gitignore
    configure.ac
    packages/yum/Makefile.am
    packages/yum/build-rpm.sh

  Modified: .gitignore (+2 -0)
===================================================================
--- .gitignore    2014-07-30 15:02:33 +0900 (80ba0b0)
+++ .gitignore    2014-07-30 15:06:09 +0900 (7630333)
@@ -33,6 +33,8 @@ cmake_install.cmake
 /packages/*.tar.gz
 /packages/apt/tmp/*
 /packages/ubuntu/tmp/
+/packages/yum/env.sh
 /packages/yum/tmp/*
+/packages/yum/repositories/
 /packages/rpm/*/*.spec
 /.gdb_history

  Modified: configure.ac (+1 -0)
===================================================================
--- configure.ac    2014-07-30 15:02:33 +0900 (fcb9bc8)
+++ configure.ac    2014-07-30 15:06:09 +0900 (a2e71e4)
@@ -157,6 +157,7 @@ AC_CONFIG_FILES([
   packages/rpm/fedora/Makefile
   packages/rpm/fedora/groonga-normalizer-mysql.spec
   packages/yum/Makefile
+  packages/yum/env.sh
   packages/source/Makefile
   test/Makefile
   doc/Makefile

  Modified: packages/yum/Makefile.am (+24 -22)
===================================================================
--- packages/yum/Makefile.am    2014-07-30 15:02:33 +0900 (282518f)
+++ packages/yum/Makefile.am    2014-07-30 15:06:09 +0900 (309f90a)
@@ -1,11 +1,7 @@
 REPOSITORIES_PATH = repositories
-DISTRIBUTIONS = fedora centos
+DISTRIBUTIONS = centos
 ARCHITECTURES = i386 x86_64
-CHROOT_BASE = /var/lib/chroot
-BASE_URL_PREFIX = http://packages.groonga.org
 HAVE_DEVELOPMENT_BRANCH = no
-USE_RPMFORGE = no
-USE_ATRPMS = no
 
 release: download build sign-packages update-repository upload
 
@@ -38,21 +34,20 @@ download: ensure-rsync-path
 	     $(REPOSITORIES_PATH)/$${distribution};	\
 	done
 
-build: build-in-chroot
+build: build-in-vm
 
-build-in-chroot: source
-	./build-in-chroot.sh			\
-	  $(PACKAGE)				\
-	  $(VERSION)				\
-	  $(top_builddir)/$(PACKAGE)		\
-	  ../rpm				\
-	  $(REPOSITORIES_PATH)/			\
-	  $(CHROOT_BASE)			\
-	  '$(ARCHITECTURES)'			\
-	  '$(DISTRIBUTIONS)'			\
-	  '$(HAVE_DEVELOPMENT_BRANCH)'		\
-	  '$(USE_RPMFORGE)'			\
-	  '$(USE_ATRPMS)'
+build-in-vm: source specs
+	vagrant destroy --force
+	for architecture in $(ARCHITECTURES); do		\
+	  for version in 5 6 7; do				\
+	    if [ $$version = 7 -a $$architecture = i386 ]; then	\
+	      continue;						\
+	    fi;							\
+	    id=centos-$$version-$$architecture;			\
+	    vagrant up $$id;					\
+	    vagrant destroy --force $$id;			\
+	  done;							\
+	done
 
 ensure-public-key:
 	gpg --list-keys '$(GPG_UID)' > /dev/null ||			\
@@ -61,10 +56,17 @@ ensure-public-key:
 RPM-GPG-KEY-$(PACKAGE): ensure-public-key
 	gpg --armor --export '$(GPG_UID)' > $@
 
-source: ../$(PACKAGE)-$(VERSION).tar.gz
+source: tmp/$(PACKAGE)-$(VERSION).tar.gz
 
-../$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
-	ln -s $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz ../
+tmp/$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
+	mkdir -p tmp/
+	cp $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz tmp/
 
 $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz:
 	cd $(abs_top_builddir) && $(MAKE) dist
+
+specs: tmp/centos/$(PACKAGE).spec
+
+tmp/centos/$(PACKAGE).spec: $(builddir)/../rpm/centos/$(PACKAGE).spec
+	mkdir -p tmp/centos
+	cp $(builddir)/../rpm/centos/$(PACKAGE).spec tmp/centos/

  Added: packages/yum/Vagrantfile (+38 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/Vagrantfile    2014-07-30 15:06:09 +0900 (4238d67)
@@ -0,0 +1,38 @@
+# -*- 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 => "centos-5-i386",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-5.10-i386_chef-provisionerless.box",
+    },
+    {
+      :id => "centos-5-x86_64",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-5.10_chef-provisionerless.box",
+    },
+    {
+      :id => "centos-6-i386",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5-i386_chef-provisionerless.box",
+    },
+    {
+      :id => "centos-6-x86_64",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box",
+    },
+    {
+      :id => "centos-7-x86_64",
+      :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.0_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-rpm.sh")
+    end
+  end
+end

  Deleted: packages/yum/build-in-chroot.sh (+0 -182) 100755
===================================================================
--- packages/yum/build-in-chroot.sh    2014-07-30 15:02:33 +0900 (f1ae789)
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/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
-}
-
-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}/rpmbuild
-    rpm_dir=${rpm_base_dir}/RPMS/${architecture}
-    if [ $distribution = "fedora" ]; then
-	if [ $architecture = "i386" ]; then
-	    rpm_dir=${rpm_base_dir}/RPMS/i686
-	fi
-    fi
-    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 ${SOURCE_BASE_NAME}-${VERSION}.* \
-	    ${CHROOT_BASE}/$target/tmp/
-	run cp ${SPEC_DIR}/${distribution}/${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="20"
-		;;
-	    centos)
-		if [ -n "$CENTOS_VERSIONS" ]; then
-		    distribution_versions="$CENTOS_VERSIONS"
-		else
-		    distribution_versions="5 6"
-		fi
-		;;
-	esac
-	for distribution_version in $distribution_versions; do
-	    if test "$parallel" = "yes"; then
-		build $architecture $distribution $distribution_version &
-	    else
-		mkdir -p tmp
-		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

  Modified: packages/yum/build-rpm.sh (+43 -106)
===================================================================
--- packages/yum/build-rpm.sh    2014-07-30 15:02:33 +0900 (58897d9)
+++ packages/yum/build-rpm.sh    2014-07-30 15:06:09 +0900 (14a13ad)
@@ -1,130 +1,67 @@
 #!/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 test $? -ne 0; then
+    echo "Failed $@"
+    exit 1
+  fi
 }
 
-if ! id $USER_NAME >/dev/null 2>&1; then
-    run useradd -m $USER_NAME
-fi
+rpmbuild_options=
 
-yum_options=
+. /vagrant/env.sh
 
-distribution=$(cut -d ' ' -f 1 /etc/redhat-release | tr 'A-Z' 'a-z')
+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)
+    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
+    distribution_version=$(cut -d " " -f 3 /etc/redhat-release)
 fi
+distribution_version=$(echo ${distribution_version} | sed -e 's/\..*$//g')
 
-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
+architecture="$(arch)"
+case "${architecture}" in
+  i*86)
+    architecture=i386
+    ;;
+esac
 
-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
-
-rpmbuild_options="${BUILD_OPTIONS}"
+run rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
+run yum makecache
 
-run yum update ${yum_options} -y
-run yum install ${yum_options} -y rpm-build rpmdevtools tar ${DEPENDED_PACKAGES}
-run yum clean ${yum_options} packages
-
-# for debug
-# rpmbuild_options="$rpmbuild_options --define 'optflags -O0 -ggdb3'"
-
-cat <<EOF > $BUILD_SCRIPT
-#!/bin/sh
+run yum groupinstall -y "Development Tools"
+run yum install -y rpm-build rpmdevtools tar ${DEPENDED_PACKAGES}
 
 if [ -x /usr/bin/rpmdev-setuptree ]; then
     rm -rf .rpmmacros
-    rpmdev-setuptree
+    run rpmdev-setuptree
 else
-    cat <<EOM > ~/.rpmmacros
-%_topdir \$HOME/rpmbuild
+    run cat <<EOM > ~/.rpmmacros
+%_topdir ${HOME}/rpmbuild
 EOM
-
-    mkdir -p rpmbuild/SOURCES
-    mkdir -p rpmbuild/SPECS
-    mkdir -p rpmbuild/BUILD
-    mkdir -p rpmbuild/RPMS
-    mkdir -p rpmbuild/SRPMS
+    run mkdir -p ~/rpmbuild/SOURCES
+    run mkdir -p ~/rpmbuild/SPECS
+    run mkdir -p ~/rpmbuild/BUILD
+    run mkdir -p ~/rpmbuild/RPMS
+    run mkdir -p ~/rpmbuild/SRPMS
 fi
 
-if test -f /tmp/${SOURCE_BASE_NAME}-$VERSION-*.src.rpm; then
-    if ! rpm -Uvh /tmp/${SOURCE_BASE_NAME}-$VERSION-*.src.rpm; then
-        cd rpmbuild/SOURCES
-        rpm2cpio /tmp/${SOURCE_BASE_NAME}-$VERSION-*.src.rpm | cpio -id
-        if ! yum info tcp_wrappers-devel >/dev/null 2>&1; then
-            sed -i'' -e 's/tcp_wrappers-devel/tcp_wrappers/g' ${PACKAGE}.spec
-        fi
-        if ! yum info libdb-devel >/dev/null 2>&1; then
-            sed -i'' -e 's/libdb-devel/db4-devel/g' ${PACKAGE}.spec
-        fi
-        sed -i'' -e 's/BuildArch: noarch//g' ${PACKAGE}.spec
-        mv ${PACKAGE}.spec ../SPECS/
-        cd
-    fi
-else
-    cp /tmp/${SOURCE_BASE_NAME}-$VERSION.* rpmbuild/SOURCES/
-    cp /tmp/${PACKAGE}.spec rpmbuild/SPECS/
-fi
+repository="/vagrant/repositories/${distribution}/${distribution_version}"
+rpm_dir="${repository}/${architecture}/Packages"
+srpm_dir="${repository}/source/SRPMS"
+run mkdir -p "${rpm_dir}" "${srpm_dir}"
+
+# for debug
+# rpmbuild_options="$rpmbuild_options --define 'optflags -O0 -g3'"
+
+cd
 
-chmod o+rx . rpmbuild rpmbuild/RPMS rpmbuild/SRPMS
+run cp /vagrant/tmp/${PACKAGE}-${VERSION}.* rpmbuild/SOURCES/
+run cp /vagrant/tmp/${distribution}/${PACKAGE}.spec rpmbuild/SPECS/
 
-rpmbuild -ba ${rpmbuild_options} rpmbuild/SPECS/${PACKAGE}.spec
-EOF
+run rpmbuild -ba ${rpmbuild_options} rpmbuild/SPECS/${PACKAGE}.spec
 
-run chmod +x $BUILD_SCRIPT
-run su - $USER_NAME $BUILD_SCRIPT
+run mv rpmbuild/RPMS/*/* "${rpm_dir}/"
+run mv rpmbuild/SRPMS/* "${srpm_dir}/"

  Added: packages/yum/env.sh.in (+11 -0) 100644
===================================================================
--- /dev/null
+++ packages/yum/env.sh.in    2014-07-30 15:06:09 +0900 (ea55d0d)
@@ -0,0 +1,11 @@
+PACKAGE=@PACKAGE@
+VERSION=@VERSION@
+DEPENDED_PACKAGES="
+intltool
+libtool
+gcc
+gcc-c++
+make
+tar
+groonga-devel
+"

  Deleted: packages/yum/groonga-normalizer-mysql-build-options (+0 -0) 100644
===================================================================
--- packages/yum/groonga-normalizer-mysql-build-options    2014-07-30 15:02:33 +0900 (e69de29)
+++ /dev/null

  Deleted: packages/yum/groonga-normalizer-mysql-depended-packages (+0 -7) 100644
===================================================================
--- packages/yum/groonga-normalizer-mysql-depended-packages    2014-07-30 15:02:33 +0900 (3a8f283)
+++ /dev/null
@@ -1,7 +0,0 @@
-intltool
-libtool
-gcc
-gcc-c++
-make
-tar
-groonga-devel
-------------- next part --------------
HTML����������������������������...
Download 



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