Recipe

今回はSnow Leopardに導入します。
とはいえ、あくまでemacs周りの環境構築なので、emacsさえ動いていればOSは問題にならないと思います。

前提条件として、以下のソフトウェアがインストール済みであることとします。

Gitはgithubでホストされているensimeを入手するために使用しますが、zipで落とすことも可能ですので、必須ではありません。

Preface

はてなダイアリーの使い方を完全に忘れました。
おかげで、タイトルだけの記事をずいぶんと放置してしまったわけですが、やっとこの記事の内容を編集する方法がわかったので、遅ればせながら中身をちゃんと書いておこうと思います。

scalaは言語自体の進化も早く、IDE系のサポートもまだ未成熟です。
とりあえず、クラスベースのオブジェクト指向をサポートする言語ではコード補完機能が欲しいところですので、以下の機能を満足する環境を探すことにしました。

  • シンタクスハイライト
  • 補完
  • エラーチェック

いろいろ調べた結果、Emacs, scala-mode, ensimeの組み合わせで実現できることがわかりました。

Recipe

とりあえず、Haskellデファクトな実装であるGHCとパッケージ管理システムCabal、それから開発に必要となる最低限のライブラリは入れておきたいので、お手軽なHaskell Platformを入れることにします。インストール先の環境は次の通りです。

Server: CentOS 5.5 (お名前.com レンタルサーバ VPS-01プラン)

CentOSなので適当なyumリポジトリからインストールするのもアリですが(Fedoraリポジトリにはhaskell-platformがあるっぽい)、ここは本家からダウンロードしましょう。

http://hackage.haskell.org/platform/linux.html

上に書いたとおり、Fedoraにはパッケージがあるようですが今回はコンパイルすることにします。

# wget http://hackage.haskell.org/platform/2010.2.0.0/haskell-platform-2010.2.0.0.tar.gz

早速展開して、Haskell Platformのインストールをしたいところですが、Build from sourceの項目を見ると次のよなパラグラフがあります。

You need GHC 6.12.3 installed before building the platform. You can get this from your distro or you can get a GHC 6.12.3 generic binary.

Haskell PlatformをコンパイルするにはGHCが必要となるため、GHC6.12.3のバイナリを先にインストールしておく必要があるようです。

GHCの本家から最新安定版をインストールしましょう。
下のURLからCurrent Stable Releaseを選択し、Binary Packagesから自分の環境にあったバイナリパッケージを選択しましょう。

http://www.haskell.org/ghc/download.html

今回は64bitのCentOSなので、Linux (x86_64)を選択します。

# wget http://darcs.haskell.org/download/dist/6.12.3/ghc-6.12.3-x86_64-unknown-linux-n.tar.bz2

ダウンロードが終わったら展開します。

# tar xvfj ghc-6.12.3-x86_64-unknown-linux-n.tar.bz2

展開されたディレクトリに移動し、configureでお好みの構成にしてください。
(ここではインストール先のみ指定しています)

# cd ghc-6.12.3
# ./configure --prefix=/usr/local/haskell/ghc/6.12.3

問題なく終了したら、インストールをしましょう。

# make install

インストールが完了したら、パスを通して無事にインストールされたかを確認します。
(パスが通っている場所にインストールした場合は不要です)

# export PATH=/usr/local/haskell/ghc/6.12.3/bin:$PATH
# ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.3

無事にインストールが完了しました。処理系に触るだけであれば、ここまでで十分です。
続いて、本題であるHaskell Platformのインストールにとりかかります。
先程Haskell Platformをダウンロードしたディレクトリに移動し、アーカイブを展開します。

# tar xvfz haskell-platform-2010.2.0.0.tar.gz

展開したディレクトリに入り、ファイルの確認をしましょう。

# cd haskell-platform-2010.2.0.0
# ls
Makefile  aclocal.m4  autom4te.cache  configure  configure.ac  packages  scripts

configureがあるのでお好みの構成にしてください。
(ここではインストール先のみ指定しています)

# ./configure --prefix=/usr/local/haskell/haskell-platform/2010.2.0.0
...
...
...
configure: error: The OpenGL C library is required

エラーが出ました。どうやらOpenGLのライブラリが必要のようです。
CentOSOpenGL C libraryがどのパッケージなのかわからなかったので、GULTをまとめてインストールします。

# yum install freeglut-devel freeglut

もう一度configureスクリプトを実行します。

# ./configure --prefix=/usr/local/haskell/haskell-platform/2010.2.0.0
...
...
...
 **************************************************
 * Configuration completed successfully.
 *
 *   Install prefix: /usr/local/haskell/haskell-platform/2010.2.0.0
 *     Haskell packages will be registered into
 *     the global ghc package database
 *
 *   If you wish to change these settings then
 *   use --prefix= and/or --enable-user-install
 *
 * Now do "make" followed by "sudo make install"
 **************************************************

無事に完了しました。
メッセージにしたがって、makeを実行しビルドを行ないます。

# make
...
...
...
 **************************************************
 * Building Haskell Platform completed successfully.
 *
 * Now do "sudo make install"
 **************************************************

ビルドには5分程度かかりました。無事にビルドが完了したら、インストールを行ないましょう。

# make install
...
...
...
 *******************************************************
 * Installation completed successfully.
 *
 * Programs installed into:
 *   /usr/local/haskell/haskell-platform/2010.2.0.0/bin
 *
 * Now do "cabal update" to initialize the package list
 *
 * Additional packages may be found at http://hackage.haskell.org
 * or via "cabal list "
 *
 * Use "cabal install " to install additional packages
 *
 *******************************************************

インストールが無事に完了したら、パスを通してパッケージ管理システムであるcabalのアップデートを行ない、最新のパッケージリストを取得しておきましょう。

# cabal update

これでCentOS上でGHCによるHaskell開発を愉しむことができるようになります。

Preface

一年以上も何も書いていないわけですが、最近Haskellを勉強中なので、久しぶりに書いてみようと思います。

家ではMac、職場ではWindows、サーバはFreeBSDUbuntuを愛用しているわけですが、何を間違えたか初期費用無料キャンペーンなんてやっていたお名前.comのVPSを契約しちゃったので、そこにとりあえずHaskellの開発環境を入れてみようと思います。

追記

ただユーザー認証のみを行っているだけでは少し寂しいので、FreeRADIUSからPrivilegeを渡す設定を追加してみる。

確認、設定が必要なファイルは以下の2つ。

  • /etc/raddb/users
  • /usr/share/freeradius/dictionary.netscreen

dictionary.netscreen

各ベンダーごとのパラメータが記載されたファイル。今回はNetScreenのためdictionary.netscreenだが、Cisco機器の場合はdictionary.ciscoとなる。

参考までにdictionary.netscreenの全文を記載する。

# -*- text -*-
#
#       From:
#       http://www.netscreen.com/support/downloads/4.0_configuring_screenOS_for_
NTdomain_v11.pdf
#

VENDOR          Netscreen                       3224

BEGIN-VENDOR    Netscreen

ATTRIBUTE       NS-Admin-Privilege                      1       integer
ATTRIBUTE       NS-VSYS-Name                            2       string
ATTRIBUTE       NS-User-Group                           3       string
ATTRIBUTE       NS-Primary-DNS                          4       ipaddr
ATTRIBUTE       NS-Secondary-DNS                        5       ipaddr
ATTRIBUTE       NS-Primary-WINS                         6       ipaddr
ATTRIBUTE       NS-Secondary-WINS                       7       ipaddr

#
#  Values VSYS-Admin and Read-Only-VSYS-Admin require a NS-VSYS-Name
#  attribute in the response packet.
#
VALUE   NS-Admin-Privilege              Root-Admin              1
VALUE   NS-Admin-Privilege              All-VSYS-Root-Admin     2
VALUE   NS-Admin-Privilege              VSYS-Admin              3
VALUE   NS-Admin-Privilege              Read-Only-Admin         4
VALUE   NS-Admin-Privilege              Read-Only-VSYS-Admin    5

END-VENDOR      Netscreen

これを見ると、NS-Admin-Privilegeという属性に1〜5の整数値を付与することでPrivilegeをRADIUSから渡すことができそうだ。

属性と値を確認したら、usersファイルを編集する。

users

viで普通に開き、ファイルの任意の位置に以下のような文を追加する。

hoge[Privilegeを付与したい任意のユーザー名]
                NS-Admin-Privilege = 1

また、以下のように書くことでLinuxユーザーではなく、このファイルで定義したユーザー名とパスワードを使用した認証も可能である。

hoge  Auth-Type := Local, User-Password == "hogehoge"
         NS-Admin-Privilege = 1

ここまで設定を完了したら以下のコマンドを実行し、NetScreenの設定変更を行う。

# /etc/init.d/radiusd restart

NetScreenの設定

ネットスクリーンでの変更点は、メニューバーより、Configuration > Admin > Administratorsへと移動し、先ほど External admin has read-write privilegeに設定した箇所をGet privilege from RADIUS serverに変更すればよい。

最後に

FreeRADIUSそんなに詳しくないにも関わらず、思いつくまま勢いで書いたため、かなり適当である。そのうちきちんとまとめよう。

NetScreenの設定

サーバーの準備が整ったらNetScreen側の設定を行う。
NetScreenに管理者権限でログインしていることを前提とする。

メニューバーより、Configuration>Auth>Auth Serverへと移動する。

左上のNewボタンをクリックし、認証サーバーの設定画面に入る。

ここで以下のような設定を行う。

Name: RADIUS [任意の名前] 
IP/Domain Name: 192.168.1.254 [RADIUSサーバーのIPアドレスもしくはドメインネーム]
Account Type: Adminのみチェック [何の認証に使用するか]

RADIUS, Secure ID, LDAPのなかからRADIUSを選択肢、以下の設定を行う。

RADIUS Port: 1812 [ラディウスサーバーの使用する認証ポート]
Shared Secret: juniper [セッションに使用する共有シークレット]

Shared SecretはFreeRADIUSのclients.confに設定したsecretを入力する。

ここまで入力をしたら、OKボタンを押し設定を反映する。これでRADIUSサーバーの登録は完了だ。続いて、Admin認証にこのサーバーを使用するように設定をしよう。

メニューバーより、Configuration > Admin > Administratorsへと移動する。

Admin Privileges: External admin has read-write privilegeを選択 [設定変更可能な管理ユーザーを作るため、RWを選択]
Admin Auth Server: Local/RADIUSを選択

現状ではRADIUSでPrivilegeパラメータを提供していないため、NetScreen上でRW, ROを選択する必要がある。今回はRWを指定したが、ROにすることもできる。

ここまで設定したらApplyボタンを押し設定を反映する。

これで管理ユーザーの認証にRADIUSサーバーを使用し、Linuxユーザーを使用したログインが可能になったはずだ。

一度ログアウトをし、任意のLinuxユーザーでNetScreenにログインを試みてもらいたい。