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
- Install (1) 導入編
- Install (2) PAE問題
- Install (3) PAEとLVM
- Install (4) 設定見直し
- SSH, SFTPを使う
- Serial Consoleを使う
- GlassFish v3 Prelude の導入(1) Install
- GlassFish v3 Prelude の導入(2) Service化
- GlassFish v3 Prelude の導入(3) Apache連携
何かにつけて作業量が多く、情報が少なく、いろんなところで引っかかってしまう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アドレスを取得して先に進むものと思われます。
続けるしか選択肢が無いので続けますが、ネットワークの設定方法を選択する画面になります。
うちの環境では手動で設定します。
まずはIPアドレスの入力です。192.168.xxx.xxxみたいな形で入力します。ここは一応プライバシー情報になるのでオレンジ帯で隠しています。(以降同様)
次にネットマスクの入力です。ビット数ではなく、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回とも同じパスワードが入力されたらそれを正規なものみなします。一致しなかったらどちらが正しいか分からないので入力し直しです。
ここからはインストールするパッケージ(ソフト)に関する設定です。Ubuntuではネットワークの設定がうまく行っていればInstall時にも最新の状態を取得しに行きます。もし、インターネットに接続するためにプロキシサーバーを使用しているのであればその設定をここで入力します。
インストールするパッケージを選択します。スクロールバーが出ていないので選択肢は下の画面に表示されているもので全てです。ここに出ないものはインストール完了後に個別にインストール作業が必要になります。ここでは目的のLAMP ServerとPostgreSQL Database、そして、リモートログインやFTPがセキュアに出来るOpenSSH Serverを選択しておきます。
MySQLのrootユーザのパスワードを入力します。OSの管理者であるrootとは異なるもののようです。ちなみにUbuntuのrootユーザーのパスワードを入力する機会がInstall時にはありませんが、パスワードは未設定の状態になっています。
おなじみのパスワード再入力です。直前の画面で入力したものと同じものを入力します。
最新ファイルの取得やインストールでしばらく待ちます。すると、もう完了です。CD/DVDがイジェクトされる場合もあります(VaioZ PCG-Z1V/Pではイジェクトされました。)がVirtualBOXでは自動でアンマウントとはならないので手動でマウントを解除しておきます。これを忘れて続行してしまうと、再起動しますのでまたインストーラー画面が起動されることになります。
お疲れ様でした。これでインストールは完了。再起動となります。うまく起動すると良いですね。
Install (2) PAE問題
Ubuntu Serverをインストールし終えていよいよ起動というときに、下の画面のような表示が出て起動しない場合があります。 意訳すると、「このカーネルはあんたのCPUには無い機能を必要としているよ。起動できまへん。あんたのCPUに合ったカーネルを使ってね。」とこんな感じ。 このような場合、PAE (Physical Address Extension)が無効なせいかもしれません。 さて、肝心の対処方法ですが、インストーラーCD/DVDで起動して「壊れたシステムを修復(R)」を選択します。 これは実験的にVirtualBOXにてPAE無効で仮想マシンを作成してインストールしてみたものです。ディスクは1つで全体を使用し、LVMを導入しています。 上の3つは物理(といっても仮想ですけど)パーティション。下の2つは論理ボリュームです。「te3」というのはホスト名です。 カーネルを入れ替えたいので/bootの存在するパーティションを選択します。自動でパーティションを作成した場合は一番上のパーティションで良いでしょう。 次にレスキュー操作を選択しますが、「インストーラー環境内でシェルを実行」を選択します。 レスキューモード説明の画面が出てきます。ファイル配置がレスキューする側の環境でスタートします。選択した修正したいパーティションは/target配下に配置された状態でスタートします。 シェルが実行できるようになりますので以下のコマンドを実行しましょう。 うまく行ったら、exitで抜ければ「レスキュー操作」の画面に戻りますから、CD/DVDをイジェクトまたはアンマウントして「システムの再起動」をします。 再起動しても状況が変わらないようであれば、標準で選択されるカーネルが以前と同じものである可能性がありますので、起動時に少しの時間だけ下のような画面が表示されているときに [Esc] キーを押下します。 するとカーネル選択(またはメモリテスト)画面になりますので、修正インストールしたカーネルを選択します。下の画面例ではlinux-generic出てないですけど修正インストールが成功していれば現れるはずです。 カーネル選択を毎回するのも大変ですので一度起動したところでDefaultのカーネルを変更しておきましょう。 14行目あたりに とあります。この数字がDefaultで選択されるカーネルを指しています。この数字を変更するのが一つの方法です。 しかし、serverカーネルは起動しないことがハッキリしているのでぶっちゃけ要らないんですよね。このファイルの最後の方を見てみましょう。 これがカーネル選択画面で表示される内容です。これのserverカーネルの固まりをゴッソリ削除してしまうのも一つの方法ですね。 しくみがキッチリ理解できていれば躓くことは無かったんでしょうけど、Install (2) PAE問題とLVMの複合問題でハマっていたのでメモ。 PAE問題の対処としてカーネルの入れ替えを行うわけですが、LVMを導入している場合はこのことに留意しておく必要があります。 詳しく調べた訳ではないですがLVMが動く前にアクセスが必要になるであろうブート関連のファイル群はLVMの配下に置くことは出来ないということなのでしょう。 個人使用の単純なシステムに暗号化をするわけでもないのにLVMの導入が必要なのか?と考え直して、LVMの導入を辞めてしまったのでLVMを導入しつつレスキューでカーネル入れ替えは未検証ですが、しばらくハマっていたのでメモしておきます。 それにしても、UbuntuはScrollLock利かないんですね。エラーメッセージがすぐに画面外にスクロールアウトしてしまうのでエラーの根本原因を見つけるまで随分画面を凝視しました。この辺はScrollLockで流れたメッセージの確認ができるFreeBSDの方が便利だったなと思います。 Installを終えてから、Install時に設定できなかったもの、設定を間違えたもの、設定を見直したいものなど出てくる場合もあるかと思います。 設定ファイルを編集する際は「nano」コマンドを使用すると便利です。簡易テキストエディタです。まぁ、慣れている人は「vi」とかで全然良いんですけど。 /etc/network/interfaces ファイルを編集します。root権限が必要ですので、rootユーザになるか、sudoコマンドを使用しましょう。 するとこのような固まりがあるかと思います。 staticのところはDHCPを使用するのであれば「dhcp」として、以下は不要になります。 /etc/resolv.conf ファイルを編集します。root権限が必要です。 するとこのような固まりがあるかと思います。 searchにはドメイン名(dodoit.infoはこのブログのドメイン名なので皆さんの名前にして下さいね)を、nameserverにはそのマシンがDNS参照したいIPアドレスを記入します。 さて、ネットワークの設定を変更したら、それを反映させましょう。自動即時反映はされませんので。とはいえ、OSの再起動は不要です。 tasksel コマンドを使用します。 Install時にネットワーク設定がうまく出来ていた場合やapt-get updateなどしていた場合は選択肢が増えているかもしれません。 SSH (Secure SHell) は従来のTelnetやrloginに相当するリモート通信を暗号化してセキュリティを向上させたものです。 ここではUTF-8とSSHに対応したターミナルエミュレータ Tera Term Professional と、ファイル転送には WinSCP を使用します。 暗号化および復号を行う際の鍵を作成します。今回は Tera Term, WinSCP どちらにも使用できる PuTTYgen を使用します。リンク先からputtygen.exeをダウンロードして実行します。Installは不要です。 そのまま Generate ボタンをクリックします。 ステータスバーが100%になるまでマウスカーソルをグリグリ適当に動かします。すると、下のような画面に切り替わります。 パスフレーズ(接続するときに入力するパスワードになります)を入力します。 Key passphrase と Confirm passphrase の欄2ヶ所に同じものを入力します。 Tera Term で接続できるように設定します。 編集し終えたら、設定を反映させましょう。 一応、状況を確認してみます。 Tera Term Professional をダウンロードしてInstallし、実行します。 ホストにUbuntu ServerのIPアドレスを入力して、OK しましょう。 チャレンジレスポンス認証が選択されていることを確認して、OKします。 パスワードを入力するわけですが、ここでは上記鍵を作成した時のパスフレーズではなくて、Ubuntu Serverのユーザーパスワードになります。 チャレンジレスポンス認証ができる状態のままではセキュリティの面でマズいので、設定しなおします。 ここで、Tera Term のメニュー「ファイル(F)」→「ファイル送信(S)...」を選択するとダイアログが出ます。 ここではたまたまid_rsa.pubというファイル名になっていますが、ここは皆さんが上記鍵の作成で保存した公開鍵 (Public Key) のファイルを選択してください。 その他、必要に応じて編集します。例えば、、、 接続できる(Ubuntuの)ユーザーを制限する。以下の行を追記します。(xxxxxはユーザー名) GUIの無効化(厳密には正しくない言い回しだと思いますが)。noにします。 編集が終ったら、先ほどと同じ様に設定反映をしておきましょう。 Tera Term をもう一度実行するか、既に開いている Tera Term メニューの「ファイル(F)」→「新しい接続(N)」を選択します。 鍵を使うようになっているかと思います。パスフレーズには鍵作成時に入力したパスフレーズを、RSA/DSA鍵を使うの欄には鍵作成時に保存した秘密鍵のファイルパスを入力します。 「秘密鍵(K)」ボタンをクリックするとファイル選択ダイアログが出ますのでそれで選択した方が確実かも知れませんね。 WinSCP をダウンロードしてInstallし、実行します。既に鍵のセッティングは済んでいるのでもう簡単です。 「新規(N)」ボタンをクリックします。 ホスト名にはUbuntu ServerのIPアドレス(Hostsとか設定してあればホスト名でも可)を、 上記鍵作成時に入力したパスフレーズを入力して、OKします。 めっきり使用されることが少なくなった感があるシリアルコンソールですが、使ってみればなかなか便利、そして、まだまだ案外使えるもんです。 サーバーは通常、淡々とリクエストに答えてくれていれば良いわけで、そのようなハードにキーボードやディスプレイを繋いでおく必要はありません。SSH / SFTP で充分に事足ります。でも、非常時には? SSH / SFTP で接続できないような事態に陥ったとき、そんな時でもシリアルコンソールなら接続できます。OSが起動してからでないと接続が出来ないSSH / SFTP に対して、OS起動中のメッセージすらシリアルコンソールなら確認することができるのです。遠隔操作というわけには行きませんが、無駄にキーボードやディスプレイを準備しなくても済む便利なものです。 実は自分、この便利さに気付いたのはつい最近なのですが。 最近のマザーボードからすっかり消えた感のあるSerial Portですが、コンシューマー向けの機能が少ないシンプルな構成のマザーボードなどではまだまだ見かけますし、バックパネルからは消えていてもヘッダピンとして残っている場合があります。USB変換のシリアルポートを購入する前にあなたのマザーボードにシリアル(COM)ヘッダピンが無いか確認してみてください。 ヘッダピンがあれば、そこからブラケットでSerial Port端子を設置することが出来ます。 どちらを適用すべきかよく調査してから購入してください。例えばブラケットは上記の他にIDC-GBが、ケーブルも99FF18などがあります。 /etc/event.d/ttyS0 ファイルを作成します。 内容は下記のように。 /boot/grub/menu.lst ファイルを編集します。 まず、GRUBメッセージの出力をシリアルコンソールに出す設定です。 タイムアウトの15秒は好きな数値に変更して下さい。 編集し終えたら、設定反映します。update-grub を実行します。 /boot/grub/menu.lst の最後部が下記のように変わります。 Tera Term を起動し、メニュー「設定(S)」→「シリアルポート(E)」を選択します。 パラメータが合っていることを確認してOKします。もし、修正していたら、設定の保存をしておくと良いでしょう。 さぁ、メニュー「ファイル(F)」→「新しい接続(N)」でシリアルを選択します。OKで接続します。 といっても、まだ、Ubuntu Server側の設定反映が済んでいないので繋がりません。 Ubuntu Serverを再起動してみましょう。 設定がうまくいっていれば、再起動直後から下記のようにTera Term上にメッセージが現れます。 [Esc] を押してみるとこの通り。 シリアルコンソール接続でも通常のディスプレイとキーボードを接続した状態と同じオペレーションが可能です。 ボーレートも115,200と高速ですのでなかなか快適です。 アプリケーションサーバーである、GlassFish を導入してみます。今回はまだ導入されている方も少ないかもしれない GlassFish v3 Prelude をインストールします。 GlassFish v3 PreludeはGlassFishとしての機能がフルに実装されたものではありません。ですが、使用したい機能が満たされているならば動作結構が軽くなるのでオススメです。Preludeという語感が正規のリリースでないような気もさせますが、正規のRelease版です。 さて、Ubuntuならaptということで、パッケージを探してみます。 おや、まだ入っていないですね。今回は独自にインストールします。GUI環境も無いので「プラットフォームに依存しないダウンロードファイル」を選択してダウンロードします。 解凍しましょう。ってUnZipも入っていませんでした。UnZipをインストールします。 気を取り直してUnZipします。 この状態でもコマンドを打てば起動します。 終るときはブラウザからInstallしたサーバーのポート4848に接続して管理コンソールを開いて、「アプリケーションサーバ」を選択して「インスタンスの停止」ボタンをクリックするか、 で停止できます。 独自にインストールしたGlassFishはOSの起動・終了に連携してくれませんので自分で連携するように設定する必要があります。 というわけで、サービス化と呼んで良いのか分かりませんが、GlassFishの起動・終了をOSの起動・終了に連携させてみます。 まずは、スクリプトを作成します。/etc/init.d/glassfishとでもしましょうか。あまり詳しくないのでこれが全く正しくてふさわしいのか分かりませんが、とりあえず自分が作成したのはこんな感じ。GlassFishの実行ディレクトリは皆さんの環境に合わせて修正して下さいね。 Restart, Reloadには対応していませんので対応させたい方は自力で頑張って下さい。流れとしてはasadmin stop-domainで停止コマンドを発行した後、asadmin list-domainsで動いているdomainが無くなったことを確認してからasadmin start-domainで起動という流れです。 ちなみにWindowsで作成してアップロードする場合は改行コードにCRが付かないように気を付けましょう。 update-rc.dというコマンドで自動起動/終了の登録ができます。今回は既にインストールされているApacheよりも後に起動し、Apacheよりも先に終了させようと思います。Apacheのシーケンスコードが起動=91、終了=09となっていましたので、GlassFishはそれぞれ92, 08としてみました。 さぁ、起動・終了の確認をしてみましょう。 通常のWebリクエストはApacheで受けて特定のURIはGlassFishに流して結果を返すという、いわゆるApacheとGlassFishの連携を設定します。ここでのやり方はかなりシンプルです。 どこかのサイトでGlassFish v2のApache連携はTomcat5.5をベースにほにゃららという記述があって、ならばGlassFish v3はTomcat6だと勝手に思い込んで作業したのですが正解だった模様です。Tomcatのファイルなど必要ありません! 連携に必要となるモジュールproxy_ajpを有効化します。 /etc/apache2/mods-enabled/proxy.conf という設定ファイルができていると思います。デフォルトでは全拒否状態ですので使用状況に応じて修正します。今回はいわゆるReverseProxyという形になります。<proxy>タグの中にDeny from allとなっているところをAllow from allに書き換えます。 ちなみに冒頭にコメントされているのですが、ProxyRequestsはフォワードプロキシ用の設定であり、今回はリバースプロキシとして設定するため絶対にOnにしてはいけません。スパマーの踏み台されます。 次に、/etc/apache2/mods-enabled/proxy_ajp.conf ファイルを作成します。この中にGlassFishに渡したいURIパターンと渡す先を記述します。 例えば、このサイトでは/pcと/music配下はGlassFishにデプロイしたServlet + JSPで動いていますのでこんな感じになっています。 ちなみに、既にApacheまでリクエストが到達してからの話ですので、連携先のGlassFishが同じマシン内にあるのであればProxyPassはlocalhostで良いのです。 次にGlassFishの設定ですが、上で設定した8009ポートでajpプロトコルを受け渡しするよという設定をするだけです。 を追加して再起動するだけです。 これでOK。簡単になったものです。(^^)
検索で辿り着けるようにテキストでも書いておきましょうか。
「This kernel requires the following features not present on the CPU:0:6
Ubuntu ServerではPAEが有効である前提でインストールをしているようなのです。
Intel PentiumPro以降のCPUの多くがPAEを実装しているとのことで、問題が出るケースはそう多くはないのかもしれませんが、PAEを有効にできない仮想環境や運悪くPAEを実装していないCPUで起動した場合には対処が必要になります。というか、うちの自宅サーバーのCPUはIntel PentiumM (Banias)でがっつり引っかかってしまいました。PentiumMは省電力・高効率を目指したモバイル(ノート)PC向けのCPUなのでPAEには対応しなかったのかもしれませんね。
ネットワークの設定くらいまでは通常のインストールと同じですが、その後下のような画面が出ます。# chroot /target
# bash
# aptitude update
# aptitude install linux-generic
ちなみに、PentiumMの実機に上記操作をしたときは linux-generic の代わりに linux-686 としました。少しでも最適化されている方が良いかなと思って。
(うちの環境ではこの操作をしなくても起動するようになったのでDefaultのカーネルがちゃんと置き換わっているようです。)
/etc/grub/menu.lst を開いてみてみましょう。viでもnanoでもいいです。あっ、root権限が必要ですのでsudoを先頭に付けます。$ sudo nano /boot/grub/menu.lst
[sudo] password for xxxxxx:
default 0
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
(この例では3つめ、4つめのブロックを削除)Install (3) PAEとLVM
カーネル入れ替え作業時には/bootを手動でマウントしたうえで行う必要があります。(未検証ですが)
これを分かってなくてエラーが出て、パッケージに不具合があるのかなと勝手に解釈して数日ほったらかして、よく見たら/bootが無いって怒られてて、mkdirしちゃって成功したかに見えたけど再起動したら何も変わっていないという状況に陥りました。
(mkdirした/bootはLVM配下にあって、起動時には/dev/sda1の/bootに隠蔽されてしまう。というか起動時にLVM配下は見えていないのでしょう。)Install (4) 設定見直し
ここではそれらの設定についてまとめておきます。
その前に。IPアドレスの設定
$ 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
DNSリファラーの設定
$ sudo nano /etc/resolv.conf
search dodoit.info
nameserver 192.168.xxx.xxx
nameserver xxx.xxx.xxx.xxx
ネットワーク設定反映
$ sudo /etc/init.d/networking restart
Installするサーバーの変更
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を使う
SFTP (Ssh File Transfer Protocol) はSSHを利用したFTPでファイル転送のセキュリティが向上します。
Ubuntu Server のIstall時、あるいは、taskselでOpenSSHを選択していれば、SSH / SFTP共に使用できる状態にあります。鍵の作成
入力を終えたら、Save public key ボタンをクリックして、公開鍵を保存します。Save private key ボタンもクリックして、秘密鍵も保存しましょう(拡張子ppk)。SSH の設定 (その1)
最初だけ、鍵が無くても通信ができるように、設定変更します。$ 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)
入力したら、OKします。SSH の設定 (その2)
まず、上記鍵で接続ができるようにします。接続したいユーザーのホームディレクトリ配下に .ssh ディレクトリを作成します。次に、作成したディレクトリに authorized_keys ファイルを作成し、そこに上記鍵の作成で保存した公開鍵の内容をコピーします。手で入力するのは大変ですし間違え易いので Tera Term にある機能を使用しましょう。$ mkdir .ssh
$ cat > .ssh/authorized_keys
するとファイルの内容が流し込まれます。そしたら [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
AllowUsers xxxxx
X11Forwarding no
$ sudo /etc/init.d/ssh reload
Tera Term で接続 (その2)
ダイアログが出たら、IPアドレス・Port番号が合っているか確認してOKすると、認証画面が出ます。
これで、接続ができたら完了です。接続するホスト(IPアドレス)やTCPポートなどはTera Term メニューの「設定(S)」→「TCP/IP」を選択して出るダイアログにて編集した後、「設定(S)」→「設定の保存(S)」で保存しておくと便利でしょう。(これをやらないとTera Termは設定を記憶してくれません。)WinSCP で接続
ポート番号には上記SSHの設定で設定したTCPポート番号を、
ユーザ名・パスワードにはUbuntu Serverのユーザ名・パスワードを、
秘密鍵には上記鍵作成時に保存した秘密鍵のファイルパスを(「...」クリックでファイル選択ダイアログが出ます。)
それぞれ入力すると「ログイン」ボタンがクリック可能になるのでクリックします。
Tera Termの接続に成功していれば、成功すると思います。上記の設定画面に戻って設定を保存すると便利でしょう。Serial Consoleを使う
何がそんなに便利なの?
意外に生きてるSerial Port
売っている店舗を探すのも大変になりつつありますが、自分はCOMON (カモン)のIDC-BBという製品を購入しました。また、ケーブルは同じくCOMON (カモン)の99FFC-18という製品を購入しました。
秋葉原の千石通商で購入したのですが、CompuAce (コンピュエース)でも売っているようです。
皆さんも探してみて下さい。
一つ、注意点があります。実はSerial Portのピン配列は2パターンあります。ケーブルもまるでLANケーブルかのようにストレートとクロスが存在します。SerialConsoleの設定
$ 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の設定
$ sudo nano /boot/grub/menu.lst
ファイル先頭に下記の内容を追加します。# 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
次に起動メッセージをシリアルコンソールに出す設定です。
下記の固まりを見つけて、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
$ 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
$
## ## 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 の設定
もし、選択できるようになっていなかったら、メニュー「ファイル(F)」→「新しい接続(N)」でシリアルを選択してOKして開いたウインドウ上でもう一度試してみて下さい。いよいよ接続確認
$ sudo shutdown -r now
何かキーを押すと、通常のディスプレイに表示されるものと同じ「Press `ESC' to enter the menu...」というメッセージが表示されます。
起動中のメッセージも出ます。GlassFish v3 Prelude の導入(1) Install
$ 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
$
$ 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]
$
$ 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 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]。
$
$ glassfishv3-prelude/bin/asadmin stop-domain
GlassFish v3 Prelude の導入(2) Service化
(いや、無いですけど、OSと別に起動・終了を行うのも大変だし、忘れますよね。)#!/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
ファイル作成後は権限をルートのものにしておくことと、実行権限を与えておきましょう。$ sudo chown root glassfish
$ sudo chgrp root glassfish
$ sudo chmod 755 glassfish
$ sudo mv glassfish /etc/init.d/
$ 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連携
Apache モジュールの有効化
$ 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 の設定
<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>
<IfModule mod_proxy_ajp.c>
<Location /pc/>
ProxyPass ajp://localhost:8009/pc/
</Location>
<Location /music/>
ProxyPass ajp://localhost:8009/music/
</Location>
</IfModule>
設定ができたら反映しておきましょう。$ sudo /etc/init.d/apache2 force-reload
* Reloading web server config apache2 [ OK ]
$
GlassFish の設定
管理コンソールからなら、アプリケーションサーバー を選択して、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 は正常に実行されました。
$