Navigation Menu

Skip to content

Commit

Permalink
Support building RPM package for CentOS 7
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Jan 28, 2015
1 parent 633a81a commit 1a4d2bd
Show file tree
Hide file tree
Showing 6 changed files with 265 additions and 5 deletions.
6 changes: 5 additions & 1 deletion .gitignore
Expand Up @@ -3,4 +3,8 @@
*.tar.gz
/regression.*
/results/
/pakcages/source/
/packages/source/
/packages/yum/.vagrant/
/packages/yum/env.sh
/packages/yum/*.spec
/packages/yum/repositories/
43 changes: 39 additions & 4 deletions README.md
Expand Up @@ -47,6 +47,44 @@ pg\_trgmとpg\_bigmが使っているGINやGiSTが対応しています。)

## インストール

次の環境用にはパッケージを用意しています。

* Ubuntu 14.10
* CentOS 7

その他の環境ではソースからインストールしてください。

それぞれの環境でのインストール方法の詳細は以降のセクションで説明します。

### Ubuntu 14.10にインストール

### CentOS 7にインストール

`postgresql-pgroonga`パッケージをインストールします。

% sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
% sudo yum makecache
% sudo yum install -y postgresql-pgroonga

PostgreSQLを起動します。

% sudo -H postgresql-setup initdb
% sudo -H systemctl start postgresql

データベースを作成します。

% sudo -u postgres -H psql --command 'CREATE DATABASE pgroonga_test'

(ここで`pgroonga_test`ユーザーを作成して、そのユーザーで接続するべき。)

データベースに接続して`CREATE EXTENSION pgroonga`を実行します。

% sudo -u postgres -H psql -d pgroonga_test --command 'CREATE EXTENSION pgroonga'

これでインストールは完了です。

### ソースからインストール

PostgreSQLをインストールします。

[Groongaをインストール](http://groonga.org/ja/docs/install.html)します。
Expand Down Expand Up @@ -77,10 +115,7 @@ PGroongaをビルドしてインストールします。

データベースに接続して`CREATE EXTENSION pgroonga`を実行します。

% psql -d db
...
db=# CREATE EXTENSION pgroonga;
CREATE EXTNESION
% psql -d db --command 'CREATE EXTENSION pgroonga;'

## 使い方

Expand Down
87 changes: 87 additions & 0 deletions Rakefile
Expand Up @@ -2,6 +2,7 @@

package = "pgroonga"
rsync_base_path = "packages@packages.groonga.org:public"
gpg_uid = "45499429"

def find_version(package)
control_content = File.read("#{package}.control")
Expand Down Expand Up @@ -55,4 +56,90 @@ namespace :package do
sh("rsync", "-avz", "--progress", "--delete", "#{source_dir}/", rsync_path)
end
end

namespace :yum do
distribution = "centos"
rpm_package = "postgresql-#{package}"
rsync_path = rsync_base_path
yum_dir = "#{packages_dir}/yum"
repositories_dir = "#{yum_dir}/repositories"

directory repositories_dir

env_sh = "#{yum_dir}/env.sh"
file env_sh => __FILE__ do
File.open(env_sh, "w") do |file|
file.puts(<<-ENV)
SOURCE_ARCHIVE=#{archive_name}
PACKAGE=#{rpm_package}
VERSION=#{version}
DEPENDED_PACKAGES="
gcc
make
pkg-config
groonga-devel
postgresql-devel
"
ENV
end
end

spec = "#{yum_dir}/#{rpm_package}.spec"
spec_in = "#{spec}.in"
file spec => spec_in do
spec_in_data = File.read(spec_in)
spec_data = spec_in_data.gsub(/@(.+)@/) do |matched|
case $1
when "PACKAGE"
rpm_package
when "VERSION"
version
else
matched
end
end
File.open(spec, "w") do |spec_file|
spec_file.print(spec_data)
end
end

desc "Build RPM packages"
task :build => [archive_name, env_sh, spec, repositories_dir] do
tmp_dir = "#{yum_dir}/tmp"
rm_rf(tmp_dir)
mkdir_p(tmp_dir)
cp(archive_name, tmp_dir)
tmp_distribution_dir = "#{tmp_dir}/#{distribution}"
mkdir_p(tmp_distribution_dir)
cp(spec, tmp_distribution_dir)

cd(yum_dir) do
sh("vagrant", "destroy", "--force")
distribution_version = "7"
distribution_architecture = "x86_64"
id = "#{distribution}-#{distribution_version}-#{distribution_architecture}"
sh("vagrant", "up", id)
sh("vagrant", "destroy", "--force", id)
end
end

desc "Update repositories"
task :update do
end

desc "Download repositories"
task :download => repositories_dir do
sh("rsync", "-avz", "--progress",
"#{rsync_path}/#{distribution}/",
"#{repositories_dir}/#{distribution}")
end

desc "Upload repositories"
task :upload => repositories_dir do
sh("rsync", "-avz", "--progress",
# "--delete",
"#{source_dir}/#{distribution}/",
"#{rsync_path}/#{distribution}")
end
end
end
22 changes: 22 additions & 0 deletions packages/yum/Vagrantfile
@@ -0,0 +1,22 @@
# -*- 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-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
71 changes: 71 additions & 0 deletions packages/yum/build-rpm.sh
@@ -0,0 +1,71 @@
#!/bin/sh

run()
{
"$@"
if test $? -ne 0; then
echo "Failed $@"
exit 1
fi
}

rpmbuild_options=

. /vagrant/env.sh

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
distribution_version=$(echo ${distribution_version} | sed -e 's/\..*$//g')

architecture="$(arch)"
case "${architecture}" in
i*86)
architecture=i386
;;
esac

run rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
run yum makecache

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
run rpmdev-setuptree
else
run cat <<EOM > ~/.rpmmacros
%_topdir ${HOME}/rpmbuild
EOM
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

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

if [ -n "${SOURCE_ARCHIVE}" ]; then
run cp /vagrant/tmp/${SOURCE_ARCHIVE} rpmbuild/SOURCES/
else
run cp /vagrant/tmp/${PACKAGE}-${VERSION}.* rpmbuild/SOURCES/
fi
run cp /vagrant/tmp/${distribution}/${PACKAGE}.spec rpmbuild/SPECS/

run rpmbuild -ba ${rpmbuild_options} rpmbuild/SPECS/${PACKAGE}.spec

run mv rpmbuild/RPMS/*/* "${rpm_dir}/"
run mv rpmbuild/SRPMS/* "${srpm_dir}/"
41 changes: 41 additions & 0 deletions packages/yum/postgresql-pgroonga.spec.in
@@ -0,0 +1,41 @@
# -*- rpm -*-

Name: @PACKAGE@
Version: @VERSION@
Release: 1%{?dist}
Summary: Fast full-text search plugin for PostgreSQL based on Groonga

Group: Applications/Text
License: PostgreSQL
URL: https://github.com/pgroonga/pgroonga
Source0: http://packages.groonga.org/source/pgroonga/pgroonga-%{version}.tar.gz

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n)
BuildRequires: groonga-devel
BuildRequires: postgresql-devel
Requires: groonga-libs
Requires: postgresql-server

%description
This package provides a fast full-text search plugin for PostgreSQL.
It is based on Groonga.

%prep
%setup -q -n pgroonga-%{version}


%build
make %{?_smp_mflags}

%install
make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"

%files
%doc README.md news.md COPYING
%{_libdir}/pgsql/*.so
%{_datadir}/pgsql/extension/*.control
%{_datadir}/pgsql/extension/*.sql

%changelog
* Thu Jan 29 2015 Kouhei Sutou <kou@clear-code.com> - 0.2.0-1
- initial packaging for CentOS.

0 comments on commit 1a4d2bd

Please sign in to comment.