パンダのメモ帳

技術系のネタをゆるゆると

CentOS 6.3 に Ruby 1.9.3 をインストールする

CentOS 6.3 に yum を使って Ruby の標準パッケージをインストールする場合、バージョンは1.8系の1.8.7となる。 ところが一部の Ruby 製アプリケーション(ex. Gitlab )では1.9系が求められるケースがあるため、 今回はソースから Ruby の最新版をインストールすることにした。

依存パッケージをインストール

Ruby のコンパイルに必要なパッケージをインストールする(要EPEL)。

[user@localhost ~]$ sudo yum install --enablerepo=epel make gcc zlib-devel openssl-devel readline-devel ncurses-devel gdbm-devel db4-devel libffi-devel tk-devel libyaml-devel

ダウンロード → コンパイル

Ruby のダウンロードのページから1.9系の最新版をダウンロードして解凍、コンパイルする。 2012年12月20日現在の最新版は 1.9.3-p327 だった。

[user@localhost ~]$ cd /usr/local/src
[user@localhost src]$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p327.tar.gz
[user@localhost src]$ tar xf ruby-1.9.3-p327.tar.gz
[user@localhost src]$ cd ruby-1.9.3-p327
[user@localhost ruby-1.9.3-p327]$ ./configure --prefix=/usr/local
[user@localhost ruby-1.9.3-p327]$ make

RPM化 → インストール

コンパイルに成功したら checkinstall を使って RPM化してインストールする(checkinstall のインストール手順はこちら)。

[user@localhost ruby-1.9.3-p327]$ sudo checkinstall --fstrans=no
(中略)
**********************************************************************

 Done. The new package has been saved to

 /root/rpmbuild/RPMS/x86_64/ruby-1.9.3-p327-1.x86_64.rpm
 You can install it in your system anytime using: 

      rpm -i ruby-1.9.3-p327-1.x86_64.rpm

**********************************************************************
[user@localhost ruby-1.9.3-p327]$ sudo rpm -ivh --nodeps /root/rpmbuild/RPMS/x86_64/ruby-1.9.3-p327-1.x86_64.rpm

checkinstall のオプションに --fstrans=no を付けないとエラーになる。 また、checkinstall 実行時「それらをパッケージから除外しますか?(yesと答えることをおすすめします) [y]:」に素直に yes と答えると処理が進まなくなる罠がある。no と答えても問題ないのでここは no と答えておく。 さらに rpm のインストール時に --nodeps を指定しないとエラーになるので注意。

参考

CentOS 6.3 に checkinstall をインストールする

64bit版 CentOS 6.3 に checkinstall をインストールする。

要点

  • 64bit版 CentOS 6.3 では、2012年12月19日現在の最新版 1.6.2 をダウンロードして make しようとしてもエラーで失敗する。
  • 公開されている git リポジトリから最新版を clone して一部を修正し、コンパイル → インストールする。

依存パッケージをインストール

checkinstall をコンパイル・実行するためには gettext をインストールする必要がある。

[user@localhost ~]$ sudo yum install gettext rpm-build

ソースコードを入手 → 修正

http://checkinstall.izto.org/ で公開されている git リポジトリから ソースコード一式を入手しファイルを修正する。

[user@localhost ~]$ cd /usr/local/src
[user@localhost src]$ git clone http://checkinstall.izto.org/checkinstall.git
[user@localhost src]$ cd checkinstall
[user@localhost checkinstall]$ vi Makefile
[user@localhost checkinstall]$ vi checkinstallrc-dist
[user@localhost checkinstall]$ vi installwatch/Makefile

修正後の diff は次の通り。

[user@localhost checkinstall]# git diff
diff --git a/Makefile b/Makefile
index 2e28adc..b6d217c 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@
 PREFIX=/usr/local
 BINDIR=$(PREFIX)/sbin
 LCDIR=$(PREFIX)/lib/checkinstall/locale
-CONFDIR=$(PREFIX)/lib/checkinstall
+CONFDIR=$(PREFIX)

 all:
        for file in locale/checkinstall-*.po ; do \
diff --git a/checkinstallrc-dist b/checkinstallrc-dist
index d4feb4e..fe5f56e 100644
--- a/checkinstallrc-dist
+++ b/checkinstallrc-dist
@@ -117,7 +117,7 @@ RESET_UIDS=0
 NEW_SLACK=1

 # Comma delimited list of files/directories to be ignored
-EXCLUDE=""
+EXCLUDE="/selinux"

 # Accept default values for all questions?
 ACCEPT_DEFAULT=0
diff --git a/installwatch/Makefile b/installwatch/Makefile
index ae34fc1..fb41eb3 100644
--- a/installwatch/Makefile
+++ b/installwatch/Makefile
@@ -11,7 +11,7 @@ PREFIX=/usr/local
 VERSION=0.7.0beta7

 BINDIR=$(PREFIX)/bin
-LIBDIR=$(PREFIX)/lib
+LIBDIR=$(PREFIX)/lib64

 all: installwatch.so

コンパイル → インストール

修正が完了したら make → make install でインストール。

[user@localhost ~]$ make
[user@localhost ~]$ sudo make install

実行

まずは checkinstall 自体を rpm 化して上書きインストールする。 /root/rpmbuild/SOURCES というディレクトリが必要になるので先に作成しておく。

[root@localhost ~]# mkdir -p ~/rpmbuild/SOURCES
[root@localhost ~]# cd /usr/local/src/checkinstall
[root@localhost checkinstall]# checkinstall

いくつか入力を求められるので入力していくと次のような結果が表示される。

**********************************************************************

 Done. The new package has been saved to

 /root/rpmbuild/RPMS/x86_64/checkinstall-20121220-1.x86_64.rpm
 You can install it in your system anytime using: 

      rpm -i checkinstall-20121220-1.x86_64.rpm

**********************************************************************

生成された rpm をインストール&確認する。

[root@localhost ~]# rpm -ivh /root/rpmbuild/RPMS/x86_64/checkinstall-20121220-1.x86_64.rpm
準備中...                ########################################### [100%]
   1:checkinstall           ########################################### [100%]
[root@localhost ~]# rpm -qi checkinstall
rpm -qi checkinstall
Name        : checkinstall                 Relocations: (not relocatable)
Version     : 20121220                          Vendor: (none)
Release     : 1                             Build Date: 2012年12月20日 00時04分10秒
Install Date: 2012年12月20日 00時09分59秒      Build Host: localhost
Group       : Applications/System           Source RPM: checkinstall-20121220-1.src.rpm
Size        : 453050                           License: GPL
Signature   : (none)
Packager    : checkinstall-1.6.3
Summary     : CheckInstall installations tracker, version 1.6.2
Description :
CheckInstall installations tracker, version 1.6.2

CheckInstall  keeps  track of all the files created  or
modified  by your installation  script  ("make install"
"make install_modules",  "setup",   etc),   builds    a
standard   binary   package and  installs  it  in  your
system giving you the ability to uninstall it with your
distribution's  standard package management  utilities.

参考

CentOS 6.3 に openssh-ldap を導入する

CentOS5 時代に書いた記事 が時代遅れになっていたので、2012年12月現在の最新版 CentOS6.3 で OpenSSH + LDAP による RSA鍵管理についてまとめてみた。

openssh-ldap とは?

openssh-ldap は openssh が導入されている環境に追加することで、LDAPサーバーに格納されている RSA公開鍵を使って SSH にログインできるようになる CentOS6 標準のパッケージ。 CentOS5 では、openssh そのものをサードパーティー製のパッケージに置き換える必要があったことを考えると、 標準でサポートされているのはうれしい限り。

要件と仮定

  • LDAP サーバーで RSA公開鍵を管理し、その RSA公開鍵を使って認証、SSHサーバーに接続できるようにする。
  • LDAP サーバーは構築済とする。参考記事

便宜上、設定等については次の通り仮定する。

  • LDAPサーバーのアドレスは ldap.example.jp, ベースDNは dc=example,dc=jp とする。
  • SSHサーバーのホスト名は hostname.example.jp とする。

LDAP サーバーの設定

LDAP サーバーが LPK(LDAP-Public-Key) に対応していない場合、次の手順で設定する。 設定・対応済の場合は次の手順へ。

CentOS6 の場合

openssh-ldap をインストールし /usr/share/doc/openssh-ldap-5.3p1 以下にインストールされるスキーマOpenLDAP サーバーで使えるようにする。 具体的には /etc/openldap/slapd.conf に次の行を追加すればOK。

include /usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema

最後に LDAP サーバーを再起動する。

[root@localhost ~]# yum ldap restart

CentOS5 の場合

外部からスキーマを入手して使用する。

[root@localhost ~]# cd /etc/openldap/schema
[root@localhost schema]# wget http://dev.inversepath.com/openssh-lpk/openssh-lpk_openldap.schema

次に /etc/openldap/slapd.conf から読み込むように設定する。

include /etc/openldap/schema/openssh-lpk_openldap.schema

最後に LDAP サーバーを再起動する。

[root@localhost ~]# yum ldap restart

インストール済のパッケージを確認

openssh および openssh-server が導入されていることを確認する。

[user@localhost ~]$ yum list installed | grep openssh
openssh.x86_64          5.3p1-81.el6_3  @updates
openssh-server.x86_64   5.3p1-81.el6_3  @updates

インストールされていない場合は yum を使ってインストールする。

[user@localhost ~]$ sudo yum install openssh-server

openssh-ldap のインストールと設定

yum を使って openssh-ldap をインストールする

[root@localhost ~]# yum install openssh-ldap

次に /etc/ssh/ldap.conf を編集する(存在しない場合は作成する)。

[root@localhost ~]# cat > /etc/ssh/ldap.conf <<__EOF__
uri ldap://ldap.example.jp/
base dc=example,dc=jp
host hostname.example.jp

ssl no
#ssl start_tls
#tls_cacertdir /etc/openldap/cacerts
#tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt
#tls_checkpeer no
__EOF__
[root@localhost ~]# chmod 600 /etc/ssh/ldap.conf

/etc/ssh/ldap.conf の設定が完了すると /usr/libexec/openssh/ssh-ldap-wrapper コマンドを使ってユーザーのRSA鍵が取得できるようになる 下記コマンドを実行し、RSA鍵が返ってくればOK。返ってこない場合は ldap.conf または LDAPサーバー側の設定を見直す。

[root@localhost ~]# /usr/libexec/openssh/ssh-ldap-wrapper username

続いて /etc/ssh/sshd_config に次の2行を追加する。

AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
AuthorizedKeysCommandRunAs root

もちろん RSAAuthentication および PubkeyAuthentication が yes である必要がある。 設定が間違いないか確認し、sshd を再起動する。

[root@localhost ~]# service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

試しにRSA鍵を使ってログインしてみて、無事に認証できればOK。

参考

CentOS 5.6 上のリポジトリを Subversion から Git に移行する

svn2git を使って Subversionリポジトリを Git に移行した時のメモ。

1. git, git-svn をインストール

git をインストールするのはもちろんのこと、 svn2git が内部で使用する「git svn」コマンドを実行するためには git-svn パッケージも必要となる。両方とも yum でインストール可能。

[user@localhost ~]$ sudo yum install git git-svn

2. svn2git をインストール

Subversion から git への移行ツール svn2git をインストール。 svn2git は ruby スクリプトなので gem でインストールする。

[user@localhost ~]$ sudo gem install svn2git
[sudo] password for user: 
sudo: gem: command not found

gem がない……

[user@localhost ~]$ which gem
/usr/bin/which: no gem in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin)
[user@localhost ~]$ which ruby
/usr/bin/which: no ruby in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin)

gem も ruby も入っていませんでした(´Д`)

3. Ruby + RubyGems をソースからインストール

CentOS 5.6 の yum で ruby をインストールすると 1.8.5 がインストールされ、そのままだと svn2git をインストールすることができない(gem install svn2git が失敗してしまう)。そこでソースから Ruby および RubyGems をインストールする。yum でインストール済の場合は yum erase で ruby を一旦アンインストールする。

3-1. Ruby のインストール

とりあえず make まで

[user@localhost ~]$ cd /usr/local/src
[user@localhost src]$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p358.tar.gz
[user@localhost src]$ tar xzf ruby-1.8.7-p358.tar.gz
[user@localhost src]$ cd ruby-1.8.7-p358
[user@localhost ruby-1.8.7-p358]$ ./configure --prefix=/usr/local
[user@localhost ruby-1.8.7-p358]$ make

通常のインストール手順

[user@localhost ruby-1.8.7-p358]$ sudo make install

checkinstall を使う場合のインストール手順

[user@localhost ruby-1.8.7-p358]$ sudo checkinstall --fstrans=no
[user@localhost ruby-1.8.7-p358]$ rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p358-1.x86_64.rpm

確認

[user@localhost ~]$ which ruby
/usr/local/bin/ruby
[user@localhost ~]$ ruby --version
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
3-2. RubyGems のインストール
[user@localhost ~]$ cd /usr/local/src
[user@localhost src]$ wget http://rubyforge.org/frs/download.php/76011/rubygems-1.8.22.tgz
[user@localhost src]$ tar xvzf rubygems-1.8.22.tgz
[user@localhost src]$ cd rubygems-1.8.22
[user@localhost rubygems-1.8.22]$ sudo ruby setup.rb

確認

[user@localhost ~]$ which gem
/usr/local/bin/gem
[user@localhost ~]$ gem --version
1.8.22

4. 今度こそsvn2git をインストール

[user@localhost ~]$ sudo gem install svn2git
[sudo] password for user: 
Fetching: svn2git-2.2.1.gem (100%)
Successfully installed svn2git-2.2.1
1 gem installed
Installing ri documentation for svn2git-2.2.1...
Installing RDoc documentation for svn2git-2.2.1...
[user@localhost ~]$ which svn2git
/usr/local/bin/svn2git

インストールできた!(´∀`)

5. svn2git を実行する

ポイントは「svn+ssh 経由で実行しない」こと。Subversionリポジトリsvn+ssh 経由でアクセスすると「Malformed network data ...」とかいうエラーが頻発してまともに変換ができない。そのために今回は CentOS 上に svn2git 環境を構築することでサーバー内で完結できるようにした。

svn2git のコマンドは次のようになる。

svn2git <SVNリポジトリURL> --verbose --authors /path/to/authors

ここで最後に指定している「authors」と呼ばれるファイルは、subversion 上の author 情報を git の author 情報に変換するためのマッピング定義ファイルで、次のような内容であらかじめ作成する。

john = John Smith <john_smith@example.com>

左辺が Subversion 上に記録されている author 名、右辺が git に保存する author名+メールアドレスとなる。Subversion 上に未定義の author が出現するとエラーとなるので、必要な情報を随時追加していってもよい。

というわけで、ローカルの SVNリポジトリをGitリポジトリにインポートするコマンドは次の通り。

[user@localhost ~]$ cd /path/to/git
[user@localhost git]$ svn2git file:///path/to/svn --verbose --authors /path/to/authors

上記手順で、 /path/to/git ディレクトリ以下に .git ディレクトリ および作業コピーが生成される。

おつかれさまでした。

CentOS 5.6 に Jenkins をインストールする

CentOS 5.6 に Jenkins をインストールした時のメモ。

1. Jenkins をインストールする

このページを参考に下記の通りコマンドを実行する。

[user@localhost ~]$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
[user@localhost ~]$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
[user@localhost ~]$ sudo yum install jenkins

上記手順で

  • /usr/lib/jenkins/jenkins.war が作成される。これが本体(Javaプログラム)。
  • 設定ファイル /etc/sysconfig/jenkins が作成される。
  • Jenkins のリポジトリ情報 /etc/yum.repos.d/jenkins.repo が作成される。
    • さらに /etc/yum.repos.d/jenkins.repo.rpmnew まで作成されるので、内容を確認して片方を削除する。

2. Java 環境を構築する

今回は Java の実行環境がインストールされていなかったため、下記の通りインストールを実施した。

[user@localhost ~]$ sudo yum install java-1.6.0-opensdk
[user@localhost ~]$ which java
/usr/bin/java

3. Jenkins を起動する

[user@localhost ~]$ sudo service jenkins start

4. アクセスしてみる

http://localhost:8080 にアクセスしてみると下記の様なページが表示される。
f:id:shogo0809:20120410175827p:image
おしまい。