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のライブラリが必要のようです。
CentOSのOpenGL 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
追記
ただユーザー認証のみを行っているだけでは少し寂しいので、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にログインを試みてもらいたい。