パンダのメモ帳

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

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。

参考

Scala 2.10 + Play Framework 2.1 開発環境を構築する

ScalaPlay Framework 2.0 おもしろそう!
→ でも Anorm はちょっと……
ScalaQuery ってのがよさげ
→ よく調べると ScalaQuery は古くて SLICK が後継らしい
→ でも SLICK は安定版の Scala 2.9 じゃなくて開発版の 2.10 が必要
Scala 2.10 だと Play も開発版の 2.1 が必要……だと……!?

というわけで、安定版の Scala 2.9 + Play 2.0 じゃなくて Scala 2.10 + Play 2.1 な環境を構築することにしました。ちなみに安定版なら

$ brew install scala
$ brew install play

でおしまい。かんたーん!

2013-02-12 追記:
すでに Homebrew で Scala 2.10 + Play 2.1 が提供されるようになったので、前述のコマンドで問題ないです。

お品書き

  1. Scala 2.10 をインストール
  2. Play Framework 2.1 をインストール
  3. Scala IDE for Eclipse をインストール
  4. とりあえず試してみる!

環境

  • OSX 10.8.2 Mountain Lion (Macbook Pro with Retina Display Mid 2012)
  • Eclipse 4.2 Juno
  • Scala 2.10.0-RC1
  • Play Framework 開発版
  • Scala IDE 2.1.0 Milestone 2 for Eclipse 3.8/4.2 (Juno)

Scala をインストール

ここから Release Candidates の scala-2.10.0-RC1.tgz をダウンロードして展開する。 Windows 向けの .bat ファイルは邪魔なだけなので削除しておく。

$ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.10.0-RC1.tgz
$ tar xf scala-2.10.0-RC1.tgz
$ mv scala-2.10.0-RC1 /usr/local/opt/scala
$ rm /usr/local/opt/scala/bin/*.bat

.bashrc を編集してパスを通しておく。

PATH=$PATH:/usr/local/opt/scala/bin

とりあえず起動してみる。

$ scala
Welcome to Scala version 2.10.0-RC1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_37).
Type in expressions to have them evaluated.
Type :help for more information.

scala> :quit

Scala のインストールはこれでおしまい。

Play Framework をインストール

Play Framework は最新版を使いたいので、 まずは Github から最新版を clone する。 ディレクトリなどは適当に。

$ mkdir ~/git
$ cd git
$ git clone git://github.com/playframework/Play20.git play

次に README.md に従ってインストールを行う。

$ cd ~/git/play/framework
$ ./build
> build-repository

最後に play コマンドを使えるように PATH の通ったディレクトリにシンボリックリンクを作っておく。

$ cd ~/bin
$ ln -s ~/git/play/play

バージョンを確認する。

$ play help
       _            _
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/

play! 2.1-SNAPSHOT (using Java 1.6.0_37 and Scala 2.10.0-RC1), http://www.playframework.org

Welcome to Play 2.0!

These commands are available:
-----------------------------
license            Display licensing informations.
new [directory]    Create a new Play application in the specified directory.

You can also browse the complete documentation at http://www.playframework.org.

これで Play Framework のインストールはおしまい。

Scala IDE for Eclipse をインストール

Scala IDE for EclipseEclipse のバージョンごと + Scala のバージョンごとに Update Site が違うので注意。 今回は Eclipse 4.2 Juno + Scala 2.10 なので

http://download.scala-ide.org/sdk/e38/scala210/dev/site/

を使用する。 ヘルプ > 新規ソフトウェアのインストール… から Update Site を追加し、下記のプラグインをインストールする。

他にもいくつかプラグインがあるけどよくわからないのでパス。 インストールが終わったら Eclipse を再起動しておしまい。

とりあえず試してみる!

まずは play コマンドで simple scala application を作成する。

$ cd /path/to/eclipse-workspace
$ play new hoge
       _            _
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/

play! 2.1-SNAPSHOT (using Java 1.6.0_37 and Scala 2.10.0-RC1), http://www.playframework.org

The new application will be created in /path/to/eclipse-workspace/hoge

What is the application name? 
> hoge

Which template do you want to use for this new application? 

  1             - Create a simple Scala application
  2             - Create a simple Java application
  <g8 template> - Create an app based on the g8 template hosted on Github

> 1
OK, application hoge is created.

Have fun!

次に作成したアプリケーションを Eclipse のプロジェクトとして使用できるようにする。

$ cd hoge
$ play eclipse
[info] Loading project definition from /path/to/eclipse-workspace/hoge/project
[info] Set current project to hoge (in build file:/path/to/eclipse-workspace/hoge/)
[info] About to create Eclipse project files for your project(s).
[info] Updating {file:/path/to/eclipse-workspace/hoge/}hoge...
[info] Done updating.                                                             
[info] Compiling 5 Scala sources and 1 Java source to /path/to/eclipse-workspace/hoge/target/scala-2.10/classes...
[info] Successfully created Eclipse project files for project(s):
[info] hoge

$ play eclipse-create-src
[info] Loading project definition from /path/to/eclipse-workspace/hoge/project
[info] Set current project to hoge (in build file:/path/to/eclipse-workspace/hoge/)
[info] EclipseCreateSrc.ValueSet(Unmanaged, Source)

作成したアプリケーションを Eclipse でインポートしてみる。

f:id:shogo0809:20121107005714p:plain

作成されたままのアプリケーションを起動してみる。 アプリケーションを起動する場合は下記コマンド。

$ play run
[info] Loading project definition from /path/to/eclipse-workspace/hoge/project
[info] Set current project to play-slick-sample (in build file:/path/to/eclipse-workspace/hoge/)

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0%0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

Port 9000 で Listen しはじめるので http://localhost:9000/ にアクセスしてみる。 こんな画面が出てくればOK!

f:id:shogo0809:20121107112247p:plain

とりあえずここまで。

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
おしまい。

第4回シャープハッカソン@東広島に参加してきました!

3/10-11 にシャープ株式会社主催、株式会社ブリリアントサービス運営のもと開催された第4回シャープハッカソン@東広島に参加してきました!

開催地はシャープ様の東広島工場。テーマは「女子力向上アプリ」。女子力とは最も縁遠いといっても過言ではないエンジニア達に女子力とはなんぞや、を伝えるべく一般女性もメンバーとして参加するという、珍しいハッカソンでした。

開発開始まで

今回のハッカソンは特にアイデアソンは行われず、いつの間にか近くにいたメンバーでなんとなくチームに分かれ、チーム毎にアプリのアイデアを考える、という形で進められました。僕が参加したチームのメンバーは

の8人。ちなみに4チーム中最多人数でした。

お昼ご飯(豪華なお弁当!)を食べながら、14時ぐらいまでアプリ案をみんなで考えました。

  • デート用にパンツのローテーションを管理するアプリ
  • かわいいホームアプリ
  • 女子力診断アプリ

などのアイデアを検討した末、最終的には下記の様なアプリを作ることになりました。

  • 最近のプリクラ機のような、写真にラクガキができるアプリ(ここまでは結構競合アプリもある)。
  • みんなでワイワイキャッキャしながらできるように、複数の端末で同時にラクガキができる(ここが今回のすごい所!)。

ただし、序盤にパンツトークで盛り上がりすぎたためかチーム名は かわいいはパンツ!! に。

検討&担当分け

複数の端末で同時にラクガキをするためには何らかの通信が必要になります。今回は Bluetooth を使って通信することに。また、複数端末の接続はいわゆるデイジーチェインで実現できないか提案したところ、その方向で開発することになりました。その上で次のように担当分け。

  • @eaglesakura さん…… ラクガキ機能ロジック担当
  • @akai_t さん…… ラクガキ機能UI担当
  • @patorash さん& @Toro_kun さん…… Bluetooth 通信部分担当
  • @shogogg ……その他UI担当
  • @youten_redo さん……フリー(サポート・調整役)
  • @rie05 さん……デザイン担当

正直 Bluetooth 周りにかなり興味津々だったんですが「どこやりたいですかー?」なんてみんなに聞く役をしていたらいつのまにかその他UI担当に。今回の反省点一つ目。

開発1日目

14時頃には担当も決まり、どんなアプリを作るのか全体に簡単に発表して開発スタート。Bluetooth でデイジーチェインできるとかできないとかヤンヤヤンヤ議論しながら開発は着々と進んでいきました。僕の担当は基本的なUIだったため、カメラとの連携にSDカードを使うと決めて以降は結構あっという間に終わっちゃいました。

……そんなわけでその後はデザイナーの @rie05 さんとUIの構成や画面の流れを検討したり、それをみんなに確認したり……と開発バリバリ!というよりはなんかずっとしゃべっていた気がします。

1日目の開発は(とりあえず)17時で終了。

懇親会

1日目の夜は こちらのお店 で懇親会が行われました。日本酒の酒蔵が経営しているお店で、この地方の名物である「美酒鍋」をいただきつつ、おいしい日本酒をたくさんいただきました。酔っ払いました。えぇ、酔っ払いましたよ。懇親会終了からもくもく開始までの記憶はぼんやり。

開発1.5日目

懇親会の後はホテルに戻って大浴場&サウナで汗を流した後 @youten_redo さんの部屋に集まってみんなでもくもく。ラーメンを食べに行ったりしつつ深夜2時ぐらいまで作業していました。ラーメンを食べている最中に Bluetooth 班から接続成功の報告!さらにデイジーチェインも実現できそう、とこのあたりでアプリの完成がかなり見えてきました。この時点で「優勝はパンツチームがいただいた!」と思ってました。割と真剣に。

開発2日目

2日目は9時からまた会場でもくもく。1日目でやり残した部分も早々に作り終えた僕は10時ぐらいからずっと発表資料を作ってました。途中、らくがきが同期された瞬間やデイジーチェインに成功した瞬間など、かなり興奮したと共に「おぉぉ!!」と大騒ぎしてました。本当、うちのチームがいちばんうるさかった気がします。ごめんなさい。

14時から発表、ということでそれまでに資料作りとデモ用に4台での同時ラクガキを確認。誰もが興奮するそのおもしろさに「パンツが優勝間違いないな!」と思ってました。結構本気で。

結果発表

他のチームがどんなアプリを作ったか、などはきっと色んな人が書いてくれると思うので割愛。結果として我がチームは4チーム中4位でした。実は同率3位だったのですが、僕がじゃんけんに負けました。だから俺にじゃんけんさせちゃダメって言ったのに!!。゚(゚´Д`゚)゚。

どのチームも本当にすごいアプリばかりで、特にそれぞれのアプリの完成度の高さには目を見張りました。また、マネタイズに言及しているチームや、すでにPRサイトまで作っているチームなど、本当にみんなすごかったです。

我がチームは技術力勝負だったので、その辺りのアピール力不足だったかな……と反省。とはいえ、あまり開発自体に寄与できていなかった気がするので、個人的にはそれが今回の最大の反省点です。

最後に

今回、惜しくも優勝は逃しましたが、非常に有意義な時間を過ごすことができたと思っています。このような素晴らしいイベントを主催くださったシャープ株式会社様と、運営してくださった株式会社ブリリアントサービス様に深く感謝いたします。次回もぜひ参加できたら、次こそは。次こそは……!