Ubuntu 8.04 LTS Server

約1年間、FreeBSD 7.0-ReleaseにGlassFish v2UR2、PostgreSQL8.3でJava Servlet+JSPなWebページを作って運用してきましたが、今回、Ubuntu 8.04 LTS ServerでいわゆるLAMP(Linux+Apache+MySQL+PHP)の導入に踏み切ってみました。
すっ飛ばしたい方用Index

何かにつけて作業量が多く、情報が少なく、いろんなところで引っかかってしまうFreeBSDは勉強にはなるものの、ちょっとした更新作業をするにも大きな決心とモチベーションが必要とされるので、正直しんどかった。
ちょっと新しいことをしてみたいと思っても周りはLAMP全盛でLAMPの一文字もかすっていないうちの環境では導入できないものばかり。
いや、AMPを導入すれば良い話なのですが、FreeBSDを導入した経験からして相当な勉強と時間が必要とされそうで尻込みしてしまう。
そんななか、Ubuntu ServerでLAMPが簡単に導入できるということでチャレンジしてみました。
勿論、既にあるコンテンツもそのまま運用したいので、PostgreSQLとGlassFishも導入します。

思えば、1年ちょっと前、自宅サーバーを立てようとしたときのUbuntuはデスクトップ向けLinuxの新興勢力といった感じでServerで使うようなものではないといった雰囲気でした。その時検討していたのはCentOSでした。しかし、当時のうちの環境ではInstallすらできず。FreeBSDの思想にも共感するものがあって、FreeBSDの導入を決めたのでした。

FreeBSDは素晴しいものだと思います。約1年間の稼動でノントラブル・ノンストップでした。今回のUbuntu Serverの導入は割とスムーズにできましたが、FreeBSDで勉強した成果でもあるかと思います。また、時間があったら戻ってみたい気もします。(^^ゞ

それにしても、自宅サーバーの導入は楽になりました。数年前、自宅サーバーを立てようとしてUTF-8(文字コード)の導入がうまく行かずに挫折したことが嘘のようです。今はUTF-8なんて当たり前ですもんね。

Install (1) 導入編

Ubuntu 8.04 LTS Server のインストールの過程を追ってみましょう。Sun VirtualBOX 2.2.2という仮想環境の中で仮想マシンを作成してインストールしてみます。

いやぁ、仮想化便利ですねぇ。今までOSのインストール経過を画像にしようとすると、何かしらハードウェアでのキャプチャ環境が必要だったわけですが、仮想環境ではホストOSのPrintScreenで一発です。

今回用意した仮想マシンはこんな感じ。

仮想マシンのスペック

メモリは実際に運用するサーバーのスペックに合わせました。
ここでの肝はPAE/NXを有効にしておくことです。PAE (Physical Address Extension) は32BitCPUに於いて、アドレスを36Bitまで拡張する機能でIntel PentiumProから搭載されている機能です。

殆どのCPUが対応しているせいか、Ubuntu 8.04 LTS Serverではこの機能がある前提でインストールを行ってしまうようです。これが、PAEを有効にできない仮想環境やPAEを持たない一部のCPUで問題を起こします。具体的には「Install (2) PAE問題」で。

さて、起動順序がCD/DVD優先になっていれば、CD/DVDのマウント(実環境ではCD/DVDの挿入)を行っておくだけで、電源を投入すればインストーラーが起動します。

インストーラー起動

言語を選択するとこの言語選択ダイアログを消えてインストーラーの初期画面になります。

インストーラー初期画面

必要があればメモリテストやCDの異常チェックなどしてみてもよいでしょう。
ここでは早速インストール開始です。

まずは漢字モードへの切替に使用するキーを選択する画面が出ます。あれ?表題以外全部英語じゃん。まぁ、Serverで日本語を相手にすることはほとんど無いと思いますので気にすることもないかと思います。

Defaultでは [Alt+Shift] になっていますが、個人的趣味で [CapsLock] を選択。

英数/漢字の切替に使用するキーを選択

さて、しばらく待っているといろいろ準備をしてくれているわけですが、ネットワークの設定のところでうちの環境ではつまづきます。
DHCP(自動IDアドレス取得機能)を使用していないためです。DHCPを使用している環境では自動でIPアドレスを取得して先に進むものと思われます。

DHCP失敗

続けるしか選択肢が無いので続けますが、ネットワークの設定方法を選択する画面になります。
うちの環境では手動で設定します。

ネットワーク設定方法の選択

まずはIPアドレスの入力です。192.168.xxx.xxxみたいな形で入力します。ここは一応プライバシー情報になるのでオレンジ帯で隠しています。(以降同様)

IPアドレスの入力

次にネットマスクの入力です。ビット数ではなく、255.xxx.xxx.xxxの形式で入力します。

ネットマスクの入力

次にゲートウェイの入力です。通信相手のIPアドレスが上記IPアドレスとネットマスクから求められるローカルに無いと判断された場合に転送される先のIPアドレスです。小難しく言いましたが、一般家庭ではいわゆるルーターのIPアドレスをやはり192.168.xxx.xxxみたいな形式で入力します。

ゲートウェイの入力

次にネームサーバアドレスの入力です。DNSってやつですね。一般家庭の多くはルーターが代理を務めてくれていますのでルーターのIPアドレスがDefaultで表示されています。必要があれば追加や修正をします。

ネームサーバーアドレスの入力

次にホスト名の入力です。Windowsで言うところのコンピューター名ですね。このホスト名とIPアドレスを解決してくれるシステムが整っていれば、ホスト名を使用してのアクセスが可能になります。簡単なところでは Hosts の設定ですね。

ホスト名の入力

次にドメイン名の入力です。このブログでいうと「dodoit.info」の部分がドメインです。もっとも、ローカルエリアでは関係のない話ですが。(LAN内では何を入れても良い。というか使わないような……)

ドメイン名の入力
デル株式会社

さて、ディスクのパーティショニングについてです。まずは全体的な方針ということで、ディスク全体を使って良ければ自動が楽です。LVM (Logical Volume Manager) はディスクが複数あるとかパーティションを沢山作りたいという場合に有効ですが、ディスク1つで自動の場合はパーティションは2つしか作られません(/とswap)ので、下の画像ではLVMを選択していますが、暗号化を考えるのでもない限り不要なものかもしません。というか、LVM(とPAEの複合要因)でハマったので。

ディスクのパーティショニング方法

次にパーティショニングをするディスクの選択ですが、ディスクが1つしかなければ選択肢は1つしか出てこないのでそのまま続行です。[Enter] で進みます。

パーティショニングするディスクの選択

既にディスクになんらかのデータが入っていれば、削除するよって確認が出ると思います。

既存データ削除の確認

ディスクのパーティショニングについて確認です。ここで「はい」を選択するとディスクの書き換えを行いますので、既存のデータはなくなります。

ディスクパーティショニングの確認

続いてLVM作るぞと確認がきます。

ディスクのパーティショニングの確認2

ユーザーアカウントの作成に入ります。まずはユーザーのフルネームを入力ということですが、これはログインに使われるものではありません。基本的に表示に使用されるものです。本名って書かれてますけど、いわゆるメールの表示名みたいな感覚で入力すれば良いかと。

ユーザーのフルネーム入力

次にユーザ名の入力です。ここで入力したものがログインするときのユーザー名になります。

ユーザー名の入力

次にパスワードの入力です。ここで入力したものがログインするときのパスワードになります。

パスワードの入力

パスワードは非常に重要なものですので、入力し間違いがあると大問題です。そこで同じパスワードを2回入力し、2回とも同じパスワードが入力されたらそれを正規なものみなします。一致しなかったらどちらが正しいか分からないので入力し直しです。

パスワードの再入力
デル株式会社

ここからはインストールするパッケージ(ソフト)に関する設定です。Ubuntuではネットワークの設定がうまく行っていればInstall時にも最新の状態を取得しに行きます。もし、インターネットに接続するためにプロキシサーバーを使用しているのであればその設定をここで入力します。

HTTPプロキシの入力

インストールするパッケージを選択します。スクロールバーが出ていないので選択肢は下の画面に表示されているもので全てです。ここに出ないものはインストール完了後に個別にインストール作業が必要になります。ここでは目的のLAMP ServerとPostgreSQL Database、そして、リモートログインやFTPがセキュアに出来るOpenSSH Serverを選択しておきます。

インストールするパッケージの選択

MySQLのrootユーザのパスワードを入力します。OSの管理者であるrootとは異なるもののようです。ちなみにUbuntuのrootユーザーのパスワードを入力する機会がInstall時にはありませんが、パスワードは未設定の状態になっています。

MySQLのrootパスワード入力

おなじみのパスワード再入力です。直前の画面で入力したものと同じものを入力します。

MySQLのrootパスワード再入力

最新ファイルの取得やインストールでしばらく待ちます。すると、もう完了です。CD/DVDがイジェクトされる場合もあります(VaioZ PCG-Z1V/Pではイジェクトされました。)がVirtualBOXでは自動でアンマウントとはならないので手動でマウントを解除しておきます。これを忘れて続行してしまうと、再起動しますのでまたインストーラー画面が起動されることになります。

CD/DVDのアンマウント

お疲れ様でした。これでインストールは完了。再起動となります。うまく起動すると良いですね。

インストールの完了

Install (2) PAE問題

Ubuntu Serverをインストールし終えていよいよ起動というときに、下の画面のような表示が出て起動しない場合があります。
検索で辿り着けるようにテキストでも書いておきましょうか。
「This kernel requires the following features not present on the CPU:0:6Unable to boot - please use a kernel appropriate for your CPU.」

意訳すると、「このカーネルはあんたのCPUには無い機能を必要としているよ。起動できまへん。あんたのCPUに合ったカーネルを使ってね。」とこんな感じ。

PAE無効では起動しないUbuntu 8.04 LTS Server

このような場合、PAE (Physical Address Extension)が無効なせいかもしれません。
Ubuntu ServerではPAEが有効である前提でインストールをしているようなのです。
Intel PentiumPro以降のCPUの多くがPAEを実装しているとのことで、問題が出るケースはそう多くはないのかもしれませんが、PAEを有効にできない仮想環境や運悪くPAEを実装していないCPUで起動した場合には対処が必要になります。というか、うちの自宅サーバーのCPUはIntel PentiumM (Banias)でがっつり引っかかってしまいました。PentiumMは省電力・高効率を目指したモバイル(ノート)PC向けのCPUなのでPAEには対応しなかったのかもしれませんね。

さて、肝心の対処方法ですが、インストーラーCD/DVDで起動して「壊れたシステムを修復(R)」を選択します。
ネットワークの設定くらいまでは通常のインストールと同じですが、その後下のような画面が出ます。

レスキューモードのデバイス選択

これは実験的にVirtualBOXにてPAE無効で仮想マシンを作成してインストールしてみたものです。ディスクは1つで全体を使用し、LVMを導入しています。

上の3つは物理(といっても仮想ですけど)パーティション。下の2つは論理ボリュームです。「te3」というのはホスト名です。

カーネルを入れ替えたいので/bootの存在するパーティションを選択します。自動でパーティションを作成した場合は一番上のパーティションで良いでしょう。

次にレスキュー操作を選択しますが、「インストーラー環境内でシェルを実行」を選択します。

レスキュー操作選択

レスキューモード説明の画面が出てきます。ファイル配置がレスキューする側の環境でスタートします。選択した修正したいパーティションは/target配下に配置された状態でスタートします。

レスキューモード説明

シェルが実行できるようになりますので以下のコマンドを実行しましょう。

# chroot /target
# bash
# aptitude update
# aptitude install linux-generic

うまく行ったら、exitで抜ければ「レスキュー操作」の画面に戻りますから、CD/DVDをイジェクトまたはアンマウントして「システムの再起動」をします。
ちなみに、PentiumMの実機に上記操作をしたときは linux-generic の代わりに linux-686 としました。少しでも最適化されている方が良いかなと思って。

再起動しても状況が変わらないようであれば、標準で選択されるカーネルが以前と同じものである可能性がありますので、起動時に少しの時間だけ下のような画面が表示されているときに [Esc] キーを押下します。

GRUB Loding画面

するとカーネル選択(またはメモリテスト)画面になりますので、修正インストールしたカーネルを選択します。下の画面例ではlinux-generic出てないですけど修正インストールが成功していれば現れるはずです。
(うちの環境ではこの操作をしなくても起動するようになったのでDefaultのカーネルがちゃんと置き換わっているようです。)

カーネル選択画面

カーネル選択を毎回するのも大変ですので一度起動したところでDefaultのカーネルを変更しておきましょう。
/etc/grub/menu.lst を開いてみてみましょう。viでもnanoでもいいです。あっ、root権限が必要ですのでsudoを先頭に付けます。

$ sudo nano /boot/grub/menu.lst
[sudo] password for xxxxxx:

14行目あたりに

default        0

とあります。この数字がDefaultで選択されるカーネルを指しています。この数字を変更するのが一つの方法です。

しかし、serverカーネルは起動しないことがハッキリしているのでぶっちゃけ要らないんですよね。このファイルの最後の方を見てみましょう。

title		Ubuntu 8.04.2, kernel 2.6.24-24-generic
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.24-24-generic root=UUID=85423330-189f-4abe-8a6c-f271a862c9fc ro quiet splash
initrd		/boot/initrd.img-2.6.24-24-generic
quiet

title		Ubuntu 8.04.2, kernel 2.6.24-24-generic (recovery mode)
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.24-24-generic root=UUID=85423330-189f-4abe-8a6c-f271a862c9fc ro single
initrd		/boot/initrd.img-2.6.24-24-generic

title		Ubuntu 8.04.2, kernel 2.6.24-23-server
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.24-23-server root=UUID=85423330-189f-4abe-8a6c-f271a862c9fc ro quiet splash
initrd		/boot/initrd.img-2.6.24-23-server
quiet

title		Ubuntu 8.04.2, kernel 2.6.24-23-server (recovery mode)
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.24-23-server root=UUID=85423330-189f-4abe-8a6c-f271a862c9fc ro single
initrd		/boot/initrd.img-2.6.24-23-server

title		Ubuntu 8.04.2, memtest86+
root		(hd0,0)
kernel		/boot/memtest86+.bin
quiet
### END DEBIAN AUTOMAGIC KERNELS LIST

これがカーネル選択画面で表示される内容です。これのserverカーネルの固まりをゴッソリ削除してしまうのも一つの方法ですね。
(この例では3つめ、4つめのブロックを削除)

Install (3) PAEとLVM

しくみがキッチリ理解できていれば躓くことは無かったんでしょうけど、Install (2) PAE問題とLVMの複合問題でハマっていたのでメモ。

PAE問題の対処としてカーネルの入れ替えを行うわけですが、LVMを導入している場合はこのことに留意しておく必要があります。

詳しく調べた訳ではないですがLVMが動く前にアクセスが必要になるであろうブート関連のファイル群はLVMの配下に置くことは出来ないということなのでしょう。
カーネル入れ替え作業時には/bootを手動でマウントしたうえで行う必要があります。(未検証ですが)
これを分かってなくてエラーが出て、パッケージに不具合があるのかなと勝手に解釈して数日ほったらかして、よく見たら/bootが無いって怒られてて、mkdirしちゃって成功したかに見えたけど再起動したら何も変わっていないという状況に陥りました。
(mkdirした/bootはLVM配下にあって、起動時には/dev/sda1の/bootに隠蔽されてしまう。というか起動時にLVM配下は見えていないのでしょう。)

個人使用の単純なシステムに暗号化をするわけでもないのにLVMの導入が必要なのか?と考え直して、LVMの導入を辞めてしまったのでLVMを導入しつつレスキューでカーネル入れ替えは未検証ですが、しばらくハマっていたのでメモしておきます。

それにしても、UbuntuはScrollLock利かないんですね。エラーメッセージがすぐに画面外にスクロールアウトしてしまうのでエラーの根本原因を見つけるまで随分画面を凝視しました。この辺はScrollLockで流れたメッセージの確認ができるFreeBSDの方が便利だったなと思います。

Install (4) 設定見直し

Installを終えてから、Install時に設定できなかったもの、設定を間違えたもの、設定を見直したいものなど出てくる場合もあるかと思います。
ここではそれらの設定についてまとめておきます。
その前に。

設定ファイルを編集する際は「nano」コマンドを使用すると便利です。簡易テキストエディタです。まぁ、慣れている人は「vi」とかで全然良いんですけど。

IPアドレスの設定

/etc/network/interfaces ファイルを編集します。root権限が必要ですので、rootユーザになるか、sudoコマンドを使用しましょう。

$ sudo nano /etc/network/interfaces

するとこのような固まりがあるかと思います。

iface eth0 inet static
        address 192.168.xxx.xxx
        netmask 255.255.xxx.xxx
        network 192.168.xxx.xxx
        broadcast 192.168.xxx.xxx
        gateway 192.168.xxx.xxx

staticのところはDHCPを使用するのであれば「dhcp」として、以下は不要になります。

DNSリファラーの設定

/etc/resolv.conf ファイルを編集します。root権限が必要です。

$ sudo nano /etc/resolv.conf

するとこのような固まりがあるかと思います。

search dodoit.info
nameserver 192.168.xxx.xxx
nameserver xxx.xxx.xxx.xxx

searchにはドメイン名(dodoit.infoはこのブログのドメイン名なので皆さんの名前にして下さいね)を、nameserverにはそのマシンがDNS参照したいIPアドレスを記入します。

ネットワーク設定反映

さて、ネットワークの設定を変更したら、それを反映させましょう。自動即時反映はされませんので。とはいえ、OSの再起動は不要です。

$ sudo /etc/init.d/networking restart

Installするサーバーの変更

tasksel コマンドを使用します。

taskselコマンド実行結果

Install時にネットワーク設定がうまく出来ていた場合やapt-get updateなどしていた場合は選択肢が増えているかもしれません。
GUI環境が欲しい場合は「Ubuntu desktop」など選択してみても良いかもしれませんね。
参考までにうちの環境で出た選択肢を挙げておきます。

DNS server
Edubuntu server
LAMP server
Mail server
OpenSSH server
PostgreSQL database
Print server
Samba File server
2D/3D creation and editing suite
Audio creation and editing suite
Edubuntu KDE desktop
Edubuntu desktop
Gobuntu desktop
Kubuntu KDE 4 desktop
Kubuntu desktop
LADSPA and DSSI audio plugins
Mythbuntu additional roles
Mythbuntu frontend
Mythbuntu master backend
Mythbuntu slave backend
Ubuntu Studio desktop
Ubuntu desktop
Video creation and editing suite
Xubuntu desktop
Edubuntu live CD
Gobuntu live CD
Kubuntu live CD
Kubuntu live CD
Mythbuntu live CD
Ubuntu live CD
Ubuntu live DVD
Xubuntu live CD

SSH, SFTPを使う

SSH (Secure SHell) は従来のTelnetやrloginに相当するリモート通信を暗号化してセキュリティを向上させたものです。
SFTP (Ssh File Transfer Protocol) はSSHを利用したFTPでファイル転送のセキュリティが向上します。
Ubuntu Server のIstall時、あるいは、taskselでOpenSSHを選択していれば、SSH / SFTP共に使用できる状態にあります。

ここではUTF-8とSSHに対応したターミナルエミュレータ Tera Term Professional と、ファイル転送には WinSCP を使用します。

鍵の作成

暗号化および復号を行う際の鍵を作成します。今回は Tera Term, WinSCP どちらにも使用できる PuTTYgen を使用します。リンク先からputtygen.exeをダウンロードして実行します。Installは不要です。

PuTTY Key Generator起動画面

そのまま Generate ボタンをクリックします。

PuTTY Key Generator ランダマイズ

ステータスバーが100%になるまでマウスカーソルをグリグリ適当に動かします。すると、下のような画面に切り替わります。

PuTTY Key Generatorパスフレーズ入力

パスフレーズ(接続するときに入力するパスワードになります)を入力します。 Key passphraseConfirm passphrase の欄2ヶ所に同じものを入力します。
入力を終えたら、Save public key ボタンをクリックして、公開鍵を保存します。Save private key ボタンもクリックして、秘密鍵も保存しましょう(拡張子ppk)。

HP Directplus -HP公式オンラインストア-

SSH の設定 (その1)

Tera Term で接続できるように設定します。
最初だけ、鍵が無くても通信ができるように、設定変更します。

$ sudo nano /etc/ssh/sshd_config
次のような固まりがあります。yesとすることでチャレンジレスポンス認証が可能となります。
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes

編集し終えたら、設定を反映させましょう。

$ sudo /etc/init.d/ssh reload

一応、状況を確認してみます。

$ sudo lsof -aPi:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
sshd    4155 root    3u  IPv6  11143       TCP *:22 (LISTEN)
$

Tera Term で接続 (その1)

Tera Term Professional をダウンロードしてInstallし、実行します。

Tera Term 起動

ホストにUbuntu ServerのIPアドレスを入力して、OK しましょう。

Tera Term チャレンジレスポンス認証

チャレンジレスポンス認証が選択されていることを確認して、OKします。

Tera Term チャレンジパスワード入力

パスワードを入力するわけですが、ここでは上記鍵を作成した時のパスフレーズではなくて、Ubuntu Serverのユーザーパスワードになります。
入力したら、OKします。

SSH の設定 (その2)

チャレンジレスポンス認証ができる状態のままではセキュリティの面でマズいので、設定しなおします。
まず、上記鍵で接続ができるようにします。接続したいユーザーのホームディレクトリ配下に .ssh ディレクトリを作成します。次に、作成したディレクトリに authorized_keys ファイルを作成し、そこに上記鍵の作成で保存した公開鍵の内容をコピーします。手で入力するのは大変ですし間違え易いので Tera Term にある機能を使用しましょう。

$ mkdir .ssh
$ cat > .ssh/authorized_keys

ここで、Tera Term のメニュー「ファイル(F)」→「ファイル送信(S)...」を選択するとダイアログが出ます。

公開鍵ファイル選択

ここではたまたまid_rsa.pubというファイル名になっていますが、ここは皆さんが上記鍵の作成で保存した公開鍵 (Public Key) のファイルを選択してください。
するとファイルの内容が流し込まれます。そしたら [Ctrl+D] でcatコマンドを終了します。
一応、more .ssh/authorized_keys などと打って確認してみても良いでしょう。
ちなみに、この公開鍵はAsciiファイルで途中で改行とか入っても大丈夫なようです。
次に上記SSHの設定(その1)で編集した/etc/ssh/sshd_configファイルを再び編集します。
yesとしていたチャレンジレスポンス認証をnoに戻します。

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

その他、必要に応じて編集します。例えば、、、
DefaultのTCPポートをセキュリティ向上のために変更する。22以外の数値にします。

# What ports, IPs and protocols we listen for
Port 22

接続できる(Ubuntuの)ユーザーを制限する。以下の行を追記します。(xxxxxはユーザー名)

AllowUsers xxxxx

GUIの無効化(厳密には正しくない言い回しだと思いますが)。noにします。

X11Forwarding no

編集が終ったら、先ほどと同じ様に設定反映をしておきましょう。

$ sudo /etc/init.d/ssh reload

Tera Term で接続 (その2)

Tera Term をもう一度実行するか、既に開いている Tera Term メニューの「ファイル(F)」→「新しい接続(N)」を選択します。
ダイアログが出たら、IPアドレス・Port番号が合っているか確認してOKすると、認証画面が出ます。

Tera Term 鍵認証

鍵を使うようになっているかと思います。パスフレーズには鍵作成時に入力したパスフレーズを、RSA/DSA鍵を使うの欄には鍵作成時に保存した秘密鍵のファイルパスを入力します。

「秘密鍵(K)」ボタンをクリックするとファイル選択ダイアログが出ますのでそれで選択した方が確実かも知れませんね。
これで、接続ができたら完了です。接続するホスト(IPアドレス)やTCPポートなどはTera Term メニューの「設定(S)」→「TCP/IP」を選択して出るダイアログにて編集した後、「設定(S)」→「設定の保存(S)」で保存しておくと便利でしょう。(これをやらないとTera Termは設定を記憶してくれません。)

WinSCP で接続

WinSCP をダウンロードしてInstallし、実行します。既に鍵のセッティングは済んでいるのでもう簡単です。

WinSCP 初期画面

「新規(N)」ボタンをクリックします。

WinSCP 接続設定

ホスト名にはUbuntu ServerのIPアドレス(Hostsとか設定してあればホスト名でも可)を、
ポート番号には上記SSHの設定で設定したTCPポート番号を、
ユーザ名・パスワードにはUbuntu Serverのユーザ名・パスワードを、
秘密鍵には上記鍵作成時に保存した秘密鍵のファイルパスを(「...」クリックでファイル選択ダイアログが出ます。)
それぞれ入力すると「ログイン」ボタンがクリック可能になるのでクリックします。

WinSCP パスフレーズ入力

上記鍵作成時に入力したパスフレーズを入力して、OKします。
Tera Termの接続に成功していれば、成功すると思います。上記の設定画面に戻って設定を保存すると便利でしょう。

HP Directplus -HP公式オンラインストア-

Serial Consoleを使う

めっきり使用されることが少なくなった感があるシリアルコンソールですが、使ってみればなかなか便利、そして、まだまだ案外使えるもんです。

何がそんなに便利なの?

サーバーは通常、淡々とリクエストに答えてくれていれば良いわけで、そのようなハードにキーボードやディスプレイを繋いでおく必要はありません。SSH / SFTP で充分に事足ります。でも、非常時には?

SSH / SFTP で接続できないような事態に陥ったとき、そんな時でもシリアルコンソールなら接続できます。OSが起動してからでないと接続が出来ないSSH / SFTP に対して、OS起動中のメッセージすらシリアルコンソールなら確認することができるのです。遠隔操作というわけには行きませんが、無駄にキーボードやディスプレイを準備しなくても済む便利なものです。

実は自分、この便利さに気付いたのはつい最近なのですが。

意外に生きてるSerial Port

最近のマザーボードからすっかり消えた感のあるSerial Portですが、コンシューマー向けの機能が少ないシンプルな構成のマザーボードなどではまだまだ見かけますし、バックパネルからは消えていてもヘッダピンとして残っている場合があります。USB変換のシリアルポートを購入する前にあなたのマザーボードにシリアル(COM)ヘッダピンが無いか確認してみてください。

ヘッダピンがあれば、そこからブラケットでSerial Port端子を設置することが出来ます。
売っている店舗を探すのも大変になりつつありますが、自分はCOMON (カモン)のIDC-BBという製品を購入しました。また、ケーブルは同じくCOMON (カモン)の99FFC-18という製品を購入しました。
秋葉原の千石通商で購入したのですが、CompuAce (コンピュエース)でも売っているようです。
皆さんも探してみて下さい。
一つ、注意点があります。実はSerial Portのピン配列は2パターンあります。ケーブルもまるでLANケーブルかのようにストレートとクロスが存在します。

どちらを適用すべきかよく調査してから購入してください。例えばブラケットは上記の他にIDC-GBが、ケーブルも99FF18などがあります。

SerialConsoleの設定

/etc/event.d/ttyS0 ファイルを作成します。

$ sudo nano /etc/event.d/ttyS0

内容は下記のように。

# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5

stop on runlevel 0
stop on runlevel 1
stop on runlevel 6

respawn
exec /sbin/getty 115200 ttyS0

GRUBの設定

/boot/grub/menu.lst ファイルを編集します。

$ sudo nano /boot/grub/menu.lst

まず、GRUBメッセージの出力をシリアルコンソールに出す設定です。
ファイル先頭に下記の内容を追加します。

# Enable console output via the serial port. unit 0 is /dev/ttyS0, unit 1 is /dev/ttyS1...
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=15 serial console

タイムアウトの15秒は好きな数値に変更して下さい。
次に起動メッセージをシリアルコンソールに出す設定です。
下記の固まりを見つけて、ro以下に「console=tty0 console=ttyS0,115200n8」を追記します。
理屈は分かりませんが、ここの行コメントの「#」は付けたままです。外すとうまくいきません。

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=/dev/mapper/ws2-root ro console=tty0 console=ttyS0,115200n8

編集し終えたら、設定反映します。update-grub を実行します。

$ sudo update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /vmlinuz-2.6.24-23-server
Found kernel: /memtest86+.bin
Replacing config file /var/run/grub/menu.lst with new version
Updating /boot/grub/menu.lst ... done
$

/boot/grub/menu.lst の最後部が下記のように変わります。

## ## End Default Options ##

title           Ubuntu 8.04.2, kernel 2.6.24-23-server
root            (hd0,0)
kernel          /vmlinuz-2.6.24-23-server root=/dev/mapper/ws2-root ro console=tty0 console=ttyS0,115200n8 quiet splash
initrd          /initrd.img-2.6.24-23-server
quiet

title           Ubuntu 8.04.2, kernel 2.6.24-23-server (recovery mode)
root            (hd0,0)
kernel          /vmlinuz-2.6.24-23-server root=/dev/mapper/ws2-root ro console=tty0 console=ttyS0,115200n8 single
initrd          /initrd.img-2.6.24-23-server

title           Ubuntu 8.04.2, memtest86+
root            (hd0,0)
kernel          /memtest86+.bin
quiet

### END DEBIAN AUTOMAGIC KERNELS LIST

Tera Term の設定

Tera Term を起動し、メニュー「設定(S)」→「シリアルポート(E)」を選択します。
もし、選択できるようになっていなかったら、メニュー「ファイル(F)」→「新しい接続(N)」でシリアルを選択してOKして開いたウインドウ上でもう一度試してみて下さい。

Tera Term シリアルポート設定

パラメータが合っていることを確認してOKします。もし、修正していたら、設定の保存をしておくと良いでしょう。

さぁ、メニュー「ファイル(F)」→「新しい接続(N)」でシリアルを選択します。OKで接続します。

Tera Term シリアルポート接続

といっても、まだ、Ubuntu Server側の設定反映が済んでいないので繋がりません。

いよいよ接続確認

Ubuntu Serverを再起動してみましょう。

$ sudo shutdown -r now

設定がうまくいっていれば、再起動直後から下記のようにTera Term上にメッセージが現れます。
何かキーを押すと、通常のディスプレイに表示されるものと同じ「Press `ESC' to enter the menu...」というメッセージが表示されます。

起動直後コンソールメッセージ

[Esc] を押してみるとこの通り。

コンソールカーネル選択画面

シリアルコンソール接続でも通常のディスプレイとキーボードを接続した状態と同じオペレーションが可能です。
起動中のメッセージも出ます。

起動中のコンソールメッセージ

ボーレートも115,200と高速ですのでなかなか快適です。

GlassFish v3 Prelude の導入(1) Install

アプリケーションサーバーである、GlassFish を導入してみます。今回はまだ導入されている方も少ないかもしれない GlassFish v3 Prelude をインストールします。

GlassFish v3 PreludeはGlassFishとしての機能がフルに実装されたものではありません。ですが、使用したい機能が満たされているならば動作結構が軽くなるのでオススメです。Preludeという語感が正規のリリースでないような気もさせますが、正規のRelease版です。

さて、Ubuntuならaptということで、パッケージを探してみます。

$ sudo aptitude search glassfish
p   glassfish-activation                                - Open source Java EE 5 Application Server
p   glassfish-appserv                                   - Open source Java EE 5 Application Server
p   glassfish-javaee                                    - Open source Java EE 5 Application Server
p   glassfish-jmac-api                                  - Open source Java EE 5 Application Server
p   glassfish-mail                                      - Open source Java EE 5 Application Server
p   glassfish-toplink-essentials                        - Open source Java EE 5 Application Server
p   glassfishv2                                         - Sun's open source GlassFish(TM) v2 Update 1 Application Server
p   glassfishv2-bin                                     - Sun's open source GlassFish(TM) v2 Update 1 Application Server
p   glassfishv2-doc                                     - GlassFish(TM) v2 Update 1 Documentation
$

おや、まだ入っていないですね。今回は独自にインストールします。GUI環境も無いので「プラットフォームに依存しないダウンロードファイル」を選択してダウンロードします。

$ wget http://download.java.net/glassfish/v3-prelude/release/glassfish-v3-prelude-ml.zip
--14:47:40--  http://download.java.net/glassfish/v3-prelude/release/glassfish-v3-prelude-ml.zip
           => `glassfish-v3-prelude-ml.zip'
Resolving download.java.net... 72.5.124.114
Connecting to download.java.net|72.5.124.114|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33,366,749 (32M) [application/zip]

100%[============================================================================>] 33,366,749     1.66M/s    ETA 00:00

14:48:02 (1.41 MB/s) - `glassfish-v3-prelude-ml.zip' saved [33366749/33366749]

$

解凍しましょう。ってUnZipも入っていませんでした。UnZipをインストールします。

$ sudo apt-get install unzip
[sudo] password for ty:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
提案パッケージ:
  zip
以下のパッケージが新たにインストールされます:
  unzip
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 36 個。
154kB のアーカイブを取得する必要があります。
この操作後に追加で 348kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com hardy/main unzip 5.52-10ubuntu2 [154kB]
154kB を 0s で取得しました (566kB/s)
未選択パッケージ unzip を選択しています。
(データベースを読み込んでいます ... 現在 21330 個のファイルとディレクトリがインストールされています。)
(.../unzip_5.52-10ubuntu2_i386.deb から) unzip を展開しています...
unzip (5.52-10ubuntu2) を設定しています ...
$

気を取り直してUnZipします。

$ unzip glassfish-v3-prelude-ml.zip
Archive:  glassfish-v3-prelude-ml.zip
creating: glassfishv3-prelude/
:
inflating: glassfishv3-prelude/javadb/LICENSE
$

この状態でもコマンドを打てば起動します。

$ glassfishv3-prelude/bin/asadmin start-domain
開始されたドメインの名前: [domain1] と
その位置: [/home/xxxxx/glassfishv3-prelude/glassfish/domains/domain1]
ドメインの管理ポート: [4848]。
$

終るときはブラウザからInstallしたサーバーのポート4848に接続して管理コンソールを開いて、「アプリケーションサーバ」を選択して「インスタンスの停止」ボタンをクリックするか、

$ glassfishv3-prelude/bin/asadmin stop-domain

で停止できます。

GlassFish v3 Prelude の導入(2) Service化

独自にインストールしたGlassFishはOSの起動・終了に連携してくれませんので自分で連携するように設定する必要があります。
(いや、無いですけど、OSと別に起動・終了を行うのも大変だし、忘れますよね。)

というわけで、サービス化と呼んで良いのか分かりませんが、GlassFishの起動・終了をOSの起動・終了に連携させてみます。

まずは、スクリプトを作成します。/etc/init.d/glassfishとでもしましょうか。あまり詳しくないのでこれが全く正しくてふさわしいのか分かりませんが、とりあえず自分が作成したのはこんな感じ。GlassFishの実行ディレクトリは皆さんの環境に合わせて修正して下さいね。

#!/bin/sh
### BEGIN INIT INFO
# Provides:          glassfish
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: StartUP and Shutdown for GlassFish v3 Prelude.
# Description: Written by Doitaroh
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting application server" "glassfishv3prelude"
/xxxxx/glassfishv3-prelude/bin/asadmin start-domain
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported. Use stop and wait and start." >&2
exit 3
;;
stop)
/xxxxx/glassfishv3-prelude/bin/asadmin stop-domain
log_daemon_msg "Stopping application server" "glassfishv3prelude"
;;
*)
;;
esac

Restart, Reloadには対応していませんので対応させたい方は自力で頑張って下さい。流れとしてはasadmin stop-domainで停止コマンドを発行した後、asadmin list-domainsで動いているdomainが無くなったことを確認してからasadmin start-domainで起動という流れです。

ちなみにWindowsで作成してアップロードする場合は改行コードにCRが付かないように気を付けましょう。
ファイル作成後は権限をルートのものにしておくことと、実行権限を与えておきましょう。

$ sudo chown root glassfish
$ sudo chgrp root glassfish
$ sudo chmod 755 glassfish
$ sudo mv glassfish /etc/init.d/

update-rc.dというコマンドで自動起動/終了の登録ができます。今回は既にインストールされているApacheよりも後に起動し、Apacheよりも先に終了させようと思います。Apacheのシーケンスコードが起動=91、終了=09となっていましたので、GlassFishはそれぞれ92, 08としてみました。

$ sudo update-rc.d glassfish defaults 92 08
 Adding system startup for /etc/init.d/glassfish ...
   /etc/rc0.d/K08glassfish -> ../init.d/glassfish
   /etc/rc1.d/K08glassfish -> ../init.d/glassfish
   /etc/rc6.d/K08glassfish -> ../init.d/glassfish
   /etc/rc2.d/S92glassfish -> ../init.d/glassfish
   /etc/rc3.d/S92glassfish -> ../init.d/glassfish
   /etc/rc4.d/S92glassfish -> ../init.d/glassfish
   /etc/rc5.d/S92glassfish -> ../init.d/glassfish
$

さぁ、起動・終了の確認をしてみましょう。

GlassFish v3 Prelude の導入(3) Apache連携

通常のWebリクエストはApacheで受けて特定のURIはGlassFishに流して結果を返すという、いわゆるApacheとGlassFishの連携を設定します。ここでのやり方はかなりシンプルです。

どこかのサイトでGlassFish v2のApache連携はTomcat5.5をベースにほにゃららという記述があって、ならばGlassFish v3はTomcat6だと勝手に思い込んで作業したのですが正解だった模様です。Tomcatのファイルなど必要ありません!

Apache モジュールの有効化

連携に必要となるモジュールproxy_ajpを有効化します。

$ sudo a2enmod proxy_ajp
Enabling proxy as a dependency
Module proxy installed; run /etc/init.d/apache2 force-reload to enable.
Module proxy_ajp installed; run /etc/init.d/apache2 force-reload to enable.
$

Apache の設定

/etc/apache2/mods-enabled/proxy.conf という設定ファイルができていると思います。デフォルトでは全拒否状態ですので使用状況に応じて修正します。今回はいわゆるReverseProxyという形になります。<proxy>タグの中にDeny from allとなっているところをAllow from allに書き換えます。

ちなみに冒頭にコメントされているのですが、ProxyRequestsはフォワードプロキシ用の設定であり、今回はリバースプロキシとして設定するため絶対にOnにしてはいけません。スパマーの踏み台されます。

<IfModule mod_proxy.c>
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Allow from all
                #Allow from .example.com
        </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
</IfModule>

次に、/etc/apache2/mods-enabled/proxy_ajp.conf ファイルを作成します。この中にGlassFishに渡したいURIパターンと渡す先を記述します。

例えば、このサイトでは/pcと/music配下はGlassFishにデプロイしたServlet + JSPで動いていますのでこんな感じになっています。

<IfModule mod_proxy_ajp.c>
    <Location /pc/>
        ProxyPass ajp://localhost:8009/pc/
    </Location>
    <Location /music/>
        ProxyPass ajp://localhost:8009/music/
    </Location>
</IfModule>

ちなみに、既にApacheまでリクエストが到達してからの話ですので、連携先のGlassFishが同じマシン内にあるのであればProxyPassはlocalhostで良いのです。
設定ができたら反映しておきましょう。

$ sudo /etc/init.d/apache2 force-reload
 * Reloading web server config apache2                                                                           [ OK ]
$

GlassFish の設定

次にGlassFishの設定ですが、上で設定した8009ポートでajpプロトコルを受け渡しするよという設定をするだけです。
管理コンソールからなら、アプリケーションサーバー を選択して、JVM設定 → JVMオプションで

-Dcom.sun.enterprise.web.connector.enableJK=8009

を追加して再起動するだけです。
コマンドでやるなら、

$ glassfishv3-prelude/bin/asadmin create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009
created 1 option(s)

コマンド create-jvm-options は正常に実行されました。
$

これでOK。簡単になったものです。(^^)

2009-05-11

この記事のタグ

PC

Linux/BSD

WebServer