人生というドラマにおいて、Linuxサーバーを用意しなければ幕が下りてしまう展開にいきなり遭遇するかもしれません。今回は、そんなシーンが訪れても慌てなくてすむように、Ubuntu Serverをインストールするいくつかの方法を紹介します。
Ubuntu Server
UbuntuはともすればデスクトップOSと見られがちですが、サーバーにも力を入れています。
ベースとなったDebianが世界でもっとも使われているLinuxウェブサーバーであり、最近とみに話題なARMサーバーやOpenStackにも対応していること、LTSという5年間サポートするリリースが2年に一度リリースされることから、デスクトップと同様に採用事例を増やしてきました[1]。
サーバー版といってもデスクトップ版と同じリポジトリを使用するため、使われるソフトウェアはデスクトップ版と変わりありません。Ubuntu 11.04からカーネルもデスクトップ版と統合化されたので、ソフトウェアレベルで何か違いを感じることはないでしょう。
ではなぜサーバー版とデスクトップ版でインストールCDが異なるのでしょうか[2]。これはデスクトップ版がGUIインストールのためにデスクトップ環境をインストールCDに含んでいるのに対して、サーバー版は原則としてテキストベースでインストールを行うためにGUIソフトウェアをCDに用意する必要がないためです。
よって、デスクトップ版をインストール後にサーバーソフトウェアを追加したり、その逆を行うことも可能です。
必要要件
ただUbuntu Serverを試してみたいだけであれば、それほどハイスペックなマシンは必要ありません。例えばサーバーガイドにある最小要件は次のとおりです。
- 300MHzのCPU
- 128MBのメモリー
- ベースシステムに500MBのHDD
- すべてのタスクをインストールするには1GBのHDD
静的なウェブサーバー程度であればこれでも十分動作します。ただプライベートクラウドを構築したいなど、より本格的に使用したいのであれば、仮想化支援機構付きの64ビットCPUや数GB以上のメモリーなどが必要になるでしょう。実際にサーバー版のイメージは用途を考えてすでに64ビット版の方が推奨環境になっています。
ちなみに、x86 CPUだけでなくARMもサポートしています。Armada XP用のイメージも公開されているため、OpenBlocks AX3でも動作します。ただしARMv7以降のアーキテクチャーのみのサポートです。たとえばRaspberry Piでは動作しませんので注意してください。
インストール方法
ISOイメージファイルを使う
Ubuntu Serverの場合も、デスクトップと同様にISOイメージファイルをダウンロードしてインストールするのが一般的な方法です。Ubuntu 12.04.2、12.10ともにイメージがファイルが公開されているので、それをダウンロードして使いましょう。
デスクトップ版と同じく、「スタートアップ・ディスクの作成」ツールを使って、USBメモリーをインストールディスクにすることも可能です。
- この方法のメリット・デメリット
- 通常のインストールと同じステップでインストールできる。
- ネットワークがない環境でも実行できる。
- 実機か仮想環境かを問わずに使える方法である。
- インストールの自動化にはイメージのリマスタリングなどの手間がかかる。
ちなみにCloudCore VPSやさくらのVPSではISOイメージをアップロードしてインストールに使う機能が存在します。Ubuntuのカスタムインストールイメージを作成した時は、これらの機能と併用するとより簡単にインストールできるでしょう。
LXCを使う
LXC(Linux Containers)を使えば、コマンド一つでUbuntuのミニマルな仮想環境を作成できます。このため、お手軽さという意味では一番簡単な方法でしょう。例えば、Ubuntu 12.04.2 (precise)の仮想マシンを作りたいなら、lxcパッケージをインストールした上で、lxc-createコマンドを実行すれば作成できます。
$ sudo apt-get update
$ sudo apt-get install lxc
$ lxc-create -t ubuntu -n precise
- この方法のメリット・デメリット
- インストール完了まで自動化されているため、今回紹介した方法の中では一番シンプルな手順になっている。
- 実機サーバーを必要としない。
- ARMサーバーでも使えるし、x86マシン上でARMマシンをエミュレートすることもできる。
- lxcコマンドを使えば、サスペンドやコピーもすぐに行える。
- LXC on LXCのような入れ子構造も可能。
- どの環境でもカーネルだけはホストと同じバージョンが使われる。
- ユーザー名などは実行時にオプション指定するか、テンプレートを編集する必要がある。
LXCについては、第226回の記事も参照してください。
ネットワークインストール
別途TFTP/DHCPサーバーを用意できるなら、ネットワークインストールという方法を用いて、メディアを用意することなくUbuntuをインストールできます。お手軽さで言えばインストールメディアを用意するほうがはるかに簡単なのですが、一度セットアップをすませてしまえば、何度でも流用できるため、複数台のインストールが必要な場合に有効な手段となるでしょう[3]。
- この方法のメリット・デメリット
- USB/CDブートできないマシンでも使用できる。
- 起動時にpreseedファイルを渡すことで、比較的かんたんにインストールを自動化できる。
- あらかじめダウンロードしなければいけないファイルは最小となる。
- インストール時にパッケージをダウンロードすることになるため、それなりに高速なネットワークが必要になる。
詳しい手順については、第47回の記事を参照してください。ちなみにVirtualBoxのような仮想マシンにインストールする場合でもこの方法が使えます。
Amazon Web ServiceとJujuを使う
Amazon Web ServiceのEC2インスタンス上にUbuntu Serverを構築すれば、物理マシンは必要ありません。Ubuntu Serverを試用するぐらいの用途であれば、料金もそれほどかかるわけではないので、物理マシンの電気代やメンテナンスよりも安上がりになるでしょう。
ただ、Amazon EC2のAPIを使用するためにはいろいろと設定が必要です。そこで今回はJujuを使ってできるだけこの部分を簡素化した方法を説明します[4]。
まずAWSのアカウントを作成しておいてください。手順は「AWSのアカウントの作成の流れ」にスクリーンショット付きで説明されているのでそちらを参考にすると良いでしょう。ssh鍵を持っていないなら、作成しておきましょう。
$ ssh-keygen -t rsa -b 2048
さらにJujuの最新版をPPAからインストールし、設定テンプレートを作成します。最後のコマンドは設定が足りないためにエラーになりますが、設定ファイルの作成をするだけなので問題ありません。
$ sudo add-apt-repository ppa:juju/pkgs
$ sudo apt-get update && sudo apt-get install juju
$ juju bootstrap
次に、設定ファイルである~/.juju/environments.yamlファイルを編集して、AWS EC2の設定を行います。
environments:
amazon:
type: ec2
access-key: YOUR-ACCESS-KEY-GOES-HERE
secret-key: YOUR-SECRET-KEY-GOES-HERE
region: ap-northeast-1
control-bucket: juju-faefb490d69a41f0a3616a4808e0766b
admin-secret: 81a1e7429e6847c4941fda7591246594
default-series: precise
juju-origin: ppa
ssl-hostname-verification: true
environmentsの次の行が環境名です。access-keyとsecret-keyはAWSのコントロールパネルにあるアクセス証明書の「アクセスキーID」「シークレットアクセスキー」を指定します。他のAWSのツールと同様に、環境変数AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYが指定されていればそれを使用します。regionはインスタンスを生成するリージョンでここでは東京リージョンを指定しています。control-bucketはS3用ですが今回は使いません。admin-secretは現時点では未実装です。それ以外の設定内容については、Jujuのドキュメントを参照してください。
Amazo EC2用の設定が完了したので、Juju用のインスタンスを一つ生成します。
$ juju bootstrap -e amazon
2013-03-10 22:57:21,612 INFO Bootstrapping environment 'amazon' (origin: ppa type: ec2)...
2013-03-10 22:57:37,218 INFO 'bootstrap' command finished successfully
実際にインスタンスを使えるようになるまで、数分かかります。環境名を毎回指定したくない場合は、environments.yamlにdefault設定を追加しておくと良いでしょう。次のコマンドで、作成されたインスタンスの情報を確認できます。
$ juju status -e amazon
2013-03-10 22:59:12,155 INFO Connecting to environment...
(サーバーの鍵のfingerprintの表示と追加の確認)
2013-03-10 23:01:34,741 INFO Connected to environment.
machines:
0:
agent-state: running
dns-name: (インスタンスのアドレス).amazonaws.com
instance-id: i-3aaeb349
instance-state: running
services: {}
2013-03-10 23:01:37,433 INFO 'status' command finished successfully
このインスタンスは、Jujuを使って各種デプロイを実行するために必要なインスタンスです。JujuではCharmという設定スクリプトを使うことで、Bootstrapインスタンスからさまざまなサーバーインスタンスを自動生成・設定できるのです。
Charmには、純粋にUbuntu Serverを立ち上げるだけのubuntu charmが存在するので、それをデプロイしましょう。
$ juju deploy -e amazon ubuntu
juju statusすると「新しいインスタンス(machine)」とサービスが追加され、それれが紐づいていることを確認できるはずです。このUbuntu ServerインスタンスにSSHでログインするには次のコマンドを実行します。
$ juju ssh -e amazon ubuntu/0
もちろん、statusで表示されるアドレスに対してsshコマンドで接続してもかまいません。その場合、ユーザー名は「ubuntu」になることに注意してください。
今回作ったインスタンスをすべて破棄するには、次のコマンドを実行します。
$ juju destroy-environment -e amazon
この場合データもすべて破棄され、次にサーバーを作るにはbootstrapから始めなければいけません。ただ、インスタンスはすべて停止されるため、料金がかからない状態となります。
- この方法のメリット・デメリット
- 物理的なリソースの制約にしばられることなく、簡単に複数台のマシンを作成できる
- Juju/Charmは使い方が若干特殊なため、使い方をおぼえる必要がある
- 使い方をおぼえておけば、Ubuntu Serverのインストールだけでなく、他のサービス(WordPressやMongoDBなど)のデプロイも自動化できる
- 利用には料金がかかる[5]
ちなみに、Juju GUIというウェブブラウザーを使ったGUIフロントエンドもあります。
インストールしたその後に
Ubuntu Serverをインストールしたら、次は目的に応じた各種サービスのインストールでしょう。これはデスクトップと同様に、apt-getコマンドを使って行えますし、taskselコマンドでタスクごとにインストールもできます。
ウェブ上でも公開されているUbuntuサーバーガイドには、目的ごとによく使われるサーバーソフトウェアの一覧や代表的な設定方法が掲載されていますので、次に何をするべきかの指針になるでしょう。