2010年9月30日木曜日

さくらのVPS Ubuntu 10.04 SSH サーバの設定

Google Developer Day 2010 から帰ってまいりました。非常に有意義なイベントでとても刺激を受けました。

さて、今日はさくらの VPS の Ubuntu に SSH サーバをインストールしてみたいと思います。

とはいえ、インストールについては簡単で、メタパッケージ ssh を
# apt-get install ssh
としてインストールするだけです。インストールが成功すると、自動的に ssh サーバが起動しますので、一旦
# service ssh stop
として、sshサービスを停止させておきます。Ubuntu の ssh サーバではデフォルトでパスワード認証を許可する設定となっていますが、ブルートフォース攻撃をかけられたり、パスワードが何らかの経路で漏れたときにVPSサーバを危険にさらしてしまいます。ブルートフォース攻撃については前回のファイヤーウォールの設定でそれなりに障壁を作っていますが、できれば、公開鍵認証を使うことにして、設定を変えておきたいところです。ssh の設定を変更するには /etc/ssh/sshd_config を編集します。
/etc/ssh/sshd_config
49 # Change to no to disable tunnelled clear text passwords
50 #PasswordAuthentication yes
51
52 # Kerberos options
53 #KerberosAuthentication no
54 #KerberosGetAFSToken no
ここでパスワード認証の設定部分である、PasswordAuthentication の部分を no と設定します。
/etc/ssh/sshd_config
49 # Change to no to disable tunnelled clear text passwords
50 #PasswordAuthentication yes
51 PasswordAuthentication no
52
53 # Kerberos options
54 #KerberosAuthentication no
55 #KerberosGetAFSToken no
この設定をすることにより、このサーバに対してはパスワードだけでの認証について受け付けない設定となりました。

さくらのVPS にログインするためには、 ~/.ssh/authorized_keys2 に公開鍵を追記 ( 存在しなければ作成 ) します。あまり意味はありませんが、今回作った公開鍵の場合には
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2
とします。公開鍵については何らかの方法で VPS サーバに転送する必要がありますが、あくまで公開鍵ですので、一時的に適当な Web ページにアップロードして、wget コマンドで取得するのが良いでしょう( あとでファイルを消すことができて、かつ信用のおけそうなところを使うべきではありますが... )。設定が終わったら
# service ssh start
で ssh サービスを起動しましょう。あとは ssh が使えるプラットホームであれば、Winodws なり Mac なりなんでも作業端末になります。

2010年9月27日月曜日

Google Developer Day 2010 Japan に行ってまいります

明日 9/28 、Google Developer Day 2010 Japan ( 東京会場 ) に行ってまいります。このイベントは Google のテクノロジーに関する、開発者向けのイベントなのですが、参加するためには Google テクノロジーやプログラミング等についてのクイズに答え、一定のポイントを得ないと参加権がもらえないという一風変わった仕組みになっています。( Google Developer Day - DevQuiz にご参加ありがとうざいました。 )

このクイズ、開発者向けのガチンコな内容だけでなく、ソーシャル面での貢献、エッセイなどを加味したものとなっていますが、興味本位で挑戦してみたら、「Super Hackers 枠 ( 優れたプログラミング能力を持つ方に当てはまる枠 ) 」で参加できることになりました。さらに先週末になって「Super Hackers 枠」の参加者向けの交流会の招待メールなんてものまで届き、これらのおまけを含めて参加してきたいと思います。

なお予定としては、28日は東京泊、29日は移動以外の予定を入れていませんので、リアルで会いたいという奇特な方がおられましたら、twitter @chonan に連絡でもいただければと思います。

2010年9月24日金曜日

さくらのVPS Ubuntu 10.04 ファイヤーウォールの設定

Ubuntu 10.04 が入った、さくらのVPS ですが、今回はファイヤーウォールの設定について書いてみたいと思います。

Ubuntu をファイヤーウォールに


「ファイヤーウォール」というと、たぶん皆さんは Windows マシンにインストールするウィルス対策ソフトウェアのデスクトップファイヤーウォールを想像するのではないかと思いますが、Linux ベースの OS では多くの場合、iptables コマンドを使って制御します。ここで「詳しくは iptables のマニュアルを読んで設定してください」と書いてしまうと、話は終わってしまうのですが、実はこの iptables には色々な機能が実装されていて、なかなか手数がかかって複雑かつ面倒だという事情があります。インタフェースをたくさん持っていてたくさんのネットワーク間の通信制御を行おうとすると、もはや人力で設定するのは難しいレベルに到達したりもします。こういったファイヤーウォールの設定を本気で作ろうとすると fwbuilder などで設定を作ることも検討しなければいけないのですが、さくらのVPS を使うのにはそこまで大がかりになるのもどうかとも思いますし、実は Ubuntu には iptables の使いやすいラッパー ufw が用意されているので、これを使って設定してしきましょう。

ufw でファイヤーウォールの設定を


ufw コマンドはすでにインストールされていると思いますので、早速設定してみたいと思います。コンソール(ここ重要)でログインし、ufw を有効にします。
# ufw status
Status: inactive
# ufw enable
Firewall is active and enabled on system startup
# ufw status
Status: active
現在の ufw の状況は ufw status で見ることができるので、ufw enable したあとに本当に有効になっているのか、上記のコマンド実行例のようにして確認してください。もしかしたら読者のみなさんの中にはすでに ssh サーバをインストールして、sshでログインしている人がいるかもしれませんが( ssh についてはこの連載(?)でも後で扱いたいと思います )、そのような場合でもファイヤーウォールについての操作はコンソールで作業することをお勧めします。設定に失敗した場合に ssh ではどうにもならない事態に陥ることもままあるので、はじめからコンソールで作業するのが無難です。逆の言い方をすれば、コンソールへアクセスする手段がない状況でこの手の作業を行うのは非常にリスクが高いことだということになります。

次にファイヤーウォールの設定に合致しなかったパケットについての処理について決めておきます。さくらのVPS は文字通りサーバとして使うので、入力時に規制ルールを書き、出力時は特に制限をかけないことにしておきたいと思います。ufw default コマンドで
# ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
# ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
# ufw reload
Firewall reloaded
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
として、デフォルトルールとして、入力については deny、出力については allow と設定してください。なお、この状態では具体的なルールを書いていませんので、入力パケットについては全て破棄されることになります。

提供(予定の)サービスについて許可ルールを追加


ここではじめて、提供(もしくは提供予定の)サービスについて、許可ルールを追加します。ここでは、ssh と http について、許可ルールを追加してみたいと思います。
# ufw limit in ssh/tcp
Rule added
# ufw allow in http/tcp
Rule added
# ufw status numbered
Status: active

To Action From
-- ------ ----
[ 1] 22/tcp LIMIT IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere

# ufw reload
Firewall reloaded
さくらのVPS にとって、入力パケットはすべてVPSサーバ自身へのパケットですので、IPアドレスを書かずに allow in や limit in という風に指定することができます。

ここで、ssh については limit in を指定しましたが、これは、ssh に対してブルートフォース攻撃( ユーザ名とパスワードを総当りで試す攻撃 )が横行している状況を受けて、同一 IP アドレスから 30 秒間に 6回以上の接続がある場合には接続を拒否するという設定です。これで ssh と http のみを受け付ける設定ができました。

ufw の優れているところは、ループバックインタフェース lo の通信や icmp 、接続が確立されている通信などについての許可ルールや、マルチキャストやブロードキャストアドレスの通信を拒否するといった設定が暗黙のうちに組み込まれているところです( 詳しくは /etc/ufw や /lib/ufw のファイルを覗いてみてください )。文献によってはこの ufw を「簡易Firewall」と書いているところもありますが、なかなかしっかりしている印象をうけました( 正直私にはこれだけの設定内容を iptables で短時間にスクラッチから書くことはできません )。iptables で実現できるすべてのことを ufw で制御できるわけではないのですが、さくらのVPS のようなサーバに対してはジャストフィットな仕組みだと思います。

次回は


ファイヤーウォールの設定もできたので、ここらで ssh サーバを立ち上げたいと思います。

2010年9月22日水曜日

さくらのVPS Ubuntu 10.04 セカンダリDNSサーバとNTPの設定

Ubuntu 10.04 をインストールしてきた、さくらのVPS ですが、OSそのものの設定についてはあとちょっとだけ残っている部分があります。

セカンダリDNSサーバを設定する


標準のCentOSの時に控えてきた情報の中で、まだ設定していない項目があります。セカンダリ(2つ目)で使用する DNS サーバと、 NTP サーバです。まずは DNS リゾルバの設定です。設定ファイルは /etc/resolv.conf ですので、このファイルを root 権限で編集します。インストールしたそのままの状態では
search (インストール時に設定したDNSサーチドメイン名)
nameserver (インストール時に設定したDNSサーバ)
という状態で、DNSサーバは1個設定されている状態だと思います。すくなくとも1個設定してあり、このDNSサーバが稼働していれば特に問題はありませんが、CentOSでの設定に合わせる形で
search (インストール時に設定したDNSサーチドメイン名)
nameserver (インストール時に設定したDNSサーバ)
nameserver (設定を控えておいたセカンダリDNSサーバ)
と1行追加しておきましょう。ファイルを変更したら一般ユーザでDNSでの名前解決ができることを確認しておきましょう。
ubuntu@foobar$ dig google.com

; <<>> DiG 9.7.0-P1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22486
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 128 IN A 66.249.89.99
google.com. 128 IN A 66.249.89.104

;; Query time: 14 msec
;; SERVER: (ここに /etc/resolv.conf で設定した nameserver のIPアドレスが表示されます)
;; WHEN: Wed Sep 22 15:21:48 2010
;; MSG SIZE rcvd: 60
このようにIPアドレスが検索できれば大丈夫です。

Ubuntu は生き物だ ( apt-get によるアップデート)


ここまで設定して、さくらのVPS からインターネット上のリソースを利用できるようになりました( 逆に、さくらのVPSマシンはサービスをインストールしていないのでまだコンソールからしか操作できません )。 ここで、Ubuntu システムのアップデートをしておきましょう。ログインすると
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/

(途中略)

8 packages can be updated.
8 updates are security updates.

ubuntu@foobar$
などと表示されるかと思います。ここで重要なのは最後の 2 行の部分で、この例では 8 個のパッケージがアップデート可能で、そのうち 8 個が ( この場合は全部ですね ) がセキュリティ関連のものだという意味になります。インストール時にはこういったアップデートは手動で行うように設定したので、自動的にアップデートしたり再起動したりすることはありませんが、Windows Update のように折を見て更新しておく必要があります。アップデートするためには
ubuntu@foobar$ sudo apt-get update
[sudo] password for ubuntu: (ログインパスワードを入力します)
Hit http://jp.archive.ubuntu.com lucid Release.gpg
Hit http://jp.archive.ubuntu.com lucid-updates Release.gpg

(途中略)

Hit http://security.ubuntu.com lucid-security/multiverse Sources
Reading package lists... Done
ubuntu@foobar$
として、(一応念のため) パッケージリストを最新状態にアップデートした上で、アップデート操作を行います( 以降、sudo の部分は # プロンプトで省略するので適宜読み替えてください)。
# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
bzip2 dpkg ... ( ここにアップデート対象のパッケージが列挙されます )
8 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 45.8MB of archives.
After this operation, 4096B of additional disk space will be used.
Do you want to continue [Y/n]?
ここで対象パッケージを確認したうえで、質問に "Y" と答えるとアップデート作業がはじまります。アップデート対象パッケージによっては再起動が必要になる場合がある ( その旨が表示されます ) ので、念のためブートローダ周りを確認して ( コンソール設定でスクリプトの内容も変更したので注意が必要です。grub 関連パッケージがアップデートされた場合には要注意です ) 再起動します。

システム時刻を同期させる


インストール時に控えていた項目で設定を入れていないのは NTP だけとなりました。現在の状況では、NTP サービスすらインストールされていないので、インストールします。パッケージ名は "ntp" なので、これをインストールするということで apt-get コマンドを使ってインストールします。
# apt-get install ntp
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
ntp-doc
The following NEW packages will be installed:
ntp
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 559kB of archives.
After this operation, 1450kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com/ubuntu/ lucid/main ntp 1:4.2.4p8+dfsg-1ubuntu
2 [559kB]
Fetched 559kB in 0s (790kB/s)
Selecting previously deselected package ntp.
(Reading database ... 41610 files and directories currently installed.)
Unpacking ntp (from .../ntp_1%3a4.2.4p8+dfsg-1ubuntu2_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up ntp (1:4.2.4p8+dfsg-1ubuntu2) ...
* Starting NTP server ntpd [ OK ]

今回は一つのパッケージでしたが、複数のパッケージを一度にインストールしたり、他のパッケージに依存しているものは必要なパッケージをリストアップして同時にインストールしれくれます。また、 ntp パッケージをはじめ、多くのパッケージでは、自動的にサーバサービスが起動されるようになっています。とはいえ、ntpサーバは ubuntu のサーバを参照するように設定されているので、ここは変更しておきましょう。設定ファイルは /etc/ntp.conf で
 14  
15 # You do need to talk to an NTP server or two (or three).
16 # server ntp.ubuntu.com ( デフォルト設定のサーバは # でコメントアウト )
17 server ( 控えておいた ntp サーバをここに記入 )
18
というふうに書き換えます。書き変えたら、ntpサーバを再起動します。
# service ntp restart
* Stopping NTP server ntpd [ OK ]
* Starting NTP server ntpd [ OK ]
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
(設定したサーバ).GPS. 1 u 2 64 1 0.406 2.388 0.001
#
ntp サービスを再起動したところで、 ntpq -p コマンドで設定したサーバが参照されていることを確認してください。このような形でサービスを追加していくのが今後の構築の流れになります。ただ、今回はセキュリティ面を特に気にせずにサービスの導入を行いましたが、設定もれなどがあるとそこが弱点になるので、ひとつひとつ段階を踏んでサービスを増やしていくと良いでしょう。なお、 Ubuntu 10.04 の ntp サービスでは、設定ファイルで特に明示しないかぎり外部からのntpサービスへの参照を拒否する設定となっています( 本当にそうなのか設定ファイルを確認してください )。

次回は


インターネット上でサービスを公開する上ではセキュリティは避けて通れない話題ですが、そのあたりを書いてみたいと思います。

2010年9月18日土曜日

さくらのVPS Ubuntu 10.04 コンソール環境の整備

さてみなさん、さくらのVPS に Ubuntu をインストールすることはできたでしょうか? 微妙に誰も読んでない気もしないではないのですが、気にせず続けていきたいと思います。前回の作業でインストールはしたけどサービスとしては何も稼働していない、純白の花嫁のような環境ができたのですが、インストーラでは設定しきれない部分について拾っておきたいところです。なお、この「何一つサービスを公開していない」という状況は裏を返せば「攻撃を受ける要素がない」という状況なので、このまましばらく設定を続けていきたいと思います。

コンソール環境の整備しよう


さくらのVPSでは、VPSのシリアルポートをコンソール端末として使用できる「リモートコンソール」と、ディスプレイとキーボード相当に相当する「VNCコンソール」が利用できますが(現在「VNCコンソール」はベータ版扱いでまだ公式なものではありません)、このコンソール環境についても標準OSである CentOS の時と同じようにブートローダーやログインできるように整備しておくと、いざというときに役にたちそうです。

「リモートコンソール」からログインできるようにしよう


ということで、VPSのシリアルポートに相当する「リモートコンソール」でログインできるようにしてみたいと思います。UNIX や Linuxマシンでは端末を監視するのに getty という仕組みを使い、 getty は OS が起動した直後に実行される init で実行されます。Ubuntu 10.04 では init の挙動を /etc/init ディレクトリの設定ファイル群で指示する形になっています。実際に /etc/init の中をのぞいてみると、tty1.conf や tty2.conf といったファイルがあるのが確認できるかと思います。この設定ファイルにならってシリアルコンソール用の設定を作ります。最初のシリアルポートは /dev/ttyS0 ですので、/etc/init/ttyS0.conf を以下の内容で作成します。
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -8 115200 ttyS0
といっても、デバイスと通信速度以外は tty1.conf と一緒なので、
# cd /etc/init
# cp tty1.conf ttyS0.conf
# vi ttyS0.conf
( 速度を 115200, デバイスを ttyS0 に変更するよう内容を編集 )
というふうにすると良いでしょう。ファイルの作成が終わったらVPSを再起動すると「リモートコンソール」にも Login: プロンプトが出現し、ログインして作業できるようになります。

「リモートコンソール」でブートローダも制御できるようにしよう


これで、「リモートコンソール」でログインできるようになりましたが、VPSの電源投入時や再起動時に VNC コンソール同様にリモートコンソールブートローダの制御も行えるようになるとさらに安心できそうです。これは Ubuntu が起動するまでの部分ですので、さきほどの getty や init ではなく、ブートローダの設定を変更することになります。VPSの標準OSの CentOS では grub v1 が採用されていましたが、 Ubuntu では grub も新バージョンの grub v2 が採用されています。 grub 2 になって様々な部分が拡張され、より複雑になってしまいましたが、設定は /etc/default/grub で指定し、各種スクリプトなどを使い、/usr/sbin/update-grub コマンドでそれらを反映させる仕組みとなっています。

今回は標準の CentOS と同じように、リモートコンソールとVNCコンソールの両方で制御を行うことを目標にしますが、現行の Ubuntu 10.04 のスクリプト群では複数のデバイス ( この場合はシリアルポートとディスプレイ ) を入出力デバイスをして使うことは想定されていない状況なので、スクリプトにも手を入れる必要があります。

さしあたり、設定ファイル /etc/default/grub の冒頭の部分を
# If you change this file, run 'update-grub' afterwards to update         
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
という内容から
# If you change this file, run 'update-grub' afterwards to update         
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
# GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="nosplash console=tty1 console=ttyS0,115200n8r"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
GRUB_TERMINAL_INPUT="serial console"
GRUB_TERMINAL_OUTPUT="serial console"
と書き換えてください。ポイントは
  • GRUB_HIDDEN_TIMEOUT をコメントアウト
  • GRUB_CMDLINE_LINUX_DEFAULT と GRUB_CMDLINE_LINUX を編集 ( console= は2か所あり、tty0 ではなくて tty1 を指定してください )
  • GRUB_SERIAL_COMMAND, GRUB_TERMINAL_INPUT, GRUB_TERMINAL_OUTPUT を新規に作成
  • これ以降の部分はそのままに
というところです。また、このようにGRUB_TERMINAL_OUTPUT を指定すると /usr/sbin/grub-mkconfig スクリプトの中のチェックに引っ掛かりエラーとなるので、/usr/sbin/grub-mkconfig の 145 行目をコメントアウトします。
141       fi
142     fi
143   ;;
144   xconsole | xserial | xofconsole) ;;
145 #   *) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1;;
146 esac
147
148 # check for terminals that require fonts
149 case ${GRUB_TERMINAL_OUTPUT} in 
また、この書き方をするとシリアルポートを使用しないものとみなされ、GRUB_SERIAL_COMMAND の設定内容が無視されてしまうので、/etc/grub.d/00_header の 68 行目について
67 case ${GRUB_TERMINAL_INPUT}:${GRUB_TERMINAL_OUTPUT} in
68   *serial*:* | *:*serial*)
69     if ! test -e ${grub_prefix}/serial.mod ; then
70       echo "Serial terminal not available on this platform." >&2 ; exit 1
71     fi
72
73     if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
74       grub_warn "Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default parameters will be used."
75       GRUB_SERIAL_COMMAND=serial
76     fi
77     echo "${GRUB_SERIAL_COMMAND}"
78   ;;
79 esac
と、serial:* | *:serial) から *serial*:* | *:*serial*) へと変更します(念のため各ファイルについてはオリジナルのものを保存して、元に戻せるようにしておきましょう)。

ここまできたら、update-grub コマンドを root 権限で実行します。
# /usr/sbin/update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-24-generic
Found initrd image: /boot/initrd.img-2.6.32-24-generic
Found memtest86+ image: /boot/memtest86+.bin
done
#
エラーが出ずに正常に更新されたようであれば、再起動してうまくいくかどうか確認します。うまく設定できたら、VNCコンソールの ALT + F1~F6 キーで切り替えられる仮想コンソールの設定について粛清します。tty1 と tty2 だけ残しておけば大丈夫だと思いますので、
# rm /etc/init/tty6
...
# rm /etc/init/tty3
と設定ファイルを消して資源の節約をはかっておきましょう。

今回のTips


これで標準のCentOSの時のようにコンソールが使えるようになったかと思いますが、作業についての小技を紹介しておきたいと思います。
  1. Ubuntu の標準では root ユーザのパスワードが利用できない
  2. Ubuntu の標準では root のパスワードが利用できない設定となっています。これはパスワードで特権ユーザである root ユーザの利用をするのではなく、資格のあるユーザが必要に応じて root 権限でコマンドを発行することにより事故を防ごうというものです。コマンド実行例ではその部分についてばっさり省略して、root 権限でコマンドを実行することを # プロンプトで示していますが、実際に作業を行う際には sudo コマンドを活用してください。sudo コマンドは
    $ whoami
    chonan
    $ sudo whoami
    [sudo] password for chonan: (ここでログイン時のパスワードを入力します)
    root
    $
    といったふうにroot権限でコマンドを実行するのに使います。なお、sudo コマンドの詳しい使用方法についてはマニュアルや他サイトの解説を参考にしてください。
  3. テキストエディタは何を?
  4. 今回はじめてテキストファイルを編集するシチュエーションが出てきましたが、テキストエディタについては詳しく触れませんでした。私はこういったオペレーションをよくやるので、vi や vim などの vi 系のエディタを愛用しています。vi はちょっと癖があってという人は、nano というエディタが Ubuntu の最小構成でも利用できるので、これを使うのが良いと思います。emacs 系のものは最小構成には入っていないので、nano か vi を使ってしばらくは凌いでください :)


次回予告


書きだすとどうしても分量が増えてしまいますが、次回は引き続きインストーラーでカバーされなかった内容の設定について書きたいと思います。

2010年9月17日金曜日

さくらのVPS OS入替 ( Ubuntu 10.04 amd64) まで

サーバ要件の調査


さて、思わず申し込んでみた「さくらのVPS」ですが、OSを入れ替える前にVPSサーバの要件を調べておく必要があります。これは初期状態で即使えるようにセットアップされている( もちろん「OS再インストール」を行ってもこの状態になります ) 親切設計なのですが、この状況から OS セットアップに必要な情報を収集しておかないと、いざインストールのときに困ることになるからです。仮にOSを入れ替えることを企てないような場合でも使い始めるまえにこの辺の情報は控えておいたほうが良いと思います。

とりあえずこの項目を調べてね


ということで、まずは Linux 管理の復習もかねて、VPSに設定されている以下の項目を調べておいてください。初期状態でユーザを作っていない状態でも、コントロールパネルの「リモートコンソール」や、ベータ版非公式の 「VNC コンソール」 ( https://secure.sakura.ad.jp/vpscontrol/main/vnc ) で root ユーザでログインすることができます( root ユーザの初期パスワードはメールで通知されます。また再インストールを行う際にはパスワードを指定することができます )。調べ方については詳しく触れませんが、不安な方はここで参考書などを読み復習しておきましょう。
  • ホスト名
  • DNSドメイン名
  • DNS FQDN名
  • IPアドレス
  • ネットマスク
  • ルーティング情報(デフォルトゲートウェイも含む)
  • DNSサーバ指定(複数指定されていればその全て)
  • DNSサーチドメイン名
  • NTPサーバ

なお、「VNC コンソール」については、Ubuntu 10.04 のインストールでよく使うので、ブックマークに登録しておくと良いでしょう。

Ubuntu のネットワークインストーラの入手


VPS サーバには仮想CD-ROMが接続されているようにOSから認識されていますが、「CD-ROM媒体を挿入する」という動作を行うことが現状ではできないので、ネットワークインストーラを入手し、それを起動する方向でいきたいと思います。「VNC コンソール」上にログインし、現在利用できる Ubuntu 10.04 amd64 版のカーネルとインストーラーinitrdイメージを入手します。root ユーザで
# mkdir /boot/ubuntu
# cd /boot/ubuntu
# wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/
installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux
...
# wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/
installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz
(URLが長いので折り返しましたが、この部分は1行で続けて書いてください)
としてファイルを取得します。URLが長いですが、rootの標準シェルになっている bash のヒストリ機能をつかうと2回目のコマンドの大部分の入力を楽に行うことができます。

Ubuntu のネットワークインストーラの起動


うまくファイルを取得できたら、問答無用でリブートします。他のサイトさんの Ubuntu インストールの手引きでは grub の設定ファイルを編集してますが、どうせ使い捨てになるので、ブートしたときに入力することにして、迷わず reboot です。
# reboot

VPS が再起動すると、Press any key to continue と出てくるので何かキーを押し、その後 Booting CentOS と出たところでも再度なにかキーを押すと、Grub のメニュー画面となります。

ここで中央下の部分にも書いてありますが、 'c' キーを押して、 grub コマンドラインモードに移ります。

grub のコマンドラインではこのように
grub> root (hd0,0)
grub> kernel /ubuntu/linux
grub> initrd /ubuntu/initrd.gz
grub> boot
と指定します。ここで、キーボードは us モードになっているので、一般的な日本語キーボードでは開き丸カッコは Shift + 9 、閉じ丸カッコは入力できないので root (hd0,0 とここまで入力したところで TAB キーを押して閉じ丸カッコを補完させます。また、kernel の部分についてはオプションを指定する必要が本当はありますが、VNC コンソールを使う前提であれば、こんな程度で大丈夫です。kernel や initrd のところでもファイル名については TAB キーによる補完が効くので、適当なところまで入力した後に TAB キーを押してとっとと補完させておくのがスマートだと思います。

Ubuntu のインストール


うまくいくとコンソールにメッセージが流れ、インストーラーが起動します。インストーラの質問に答えながら作業を進めていきます。
  • Choose language "C - No locale" ( 日本語もイケるけど、デフォルトの言語と設定されコンソールで日本語が表示されずに文字化けしてイヤな思いをするので、 C を推奨 )
  • - continent , country "Asia , Japan"
  • Detect keyboard layout? "No"
  • Origin of the keyboard, Keyboard layout "Japan, Japan" ( もちろんいつも使うキーボードに合わせて設定してください )
  • Charactet set to support ". Conbined - latin; Slavic Cyrillic; Hebrew; basic Arabic" ( デフォルトのままで OK )
  • DHCP "すぐにcancel" ( VPS 網に DHCP パケット飛ばしても迷惑なだけで意味はありません )
  • Network autoconfiguration failed "continue"
  • Network configuration method: "Configure network manually" ( 手動設定を選択 )
  • IP address: ( 事前に調べておいた IP アドレスを入力。よく確認して! )
  • Netmask: ( 事前に調べたネットマスクを入力。きっと 23ビットなので、きちんと確認を )
  • gateway IP address: ( 事前に調べたデフォルトゲートウェイアドレスを入力 )
  • Name server address: ( 事前に調べたネームサーバのうちいずれかを入力。インストール後に完全な設定を作ることにします )
  • Hostname: ( IPアドレスが正しく入力されていればDNS逆引きの結果得たホスト名がデフォルトの文字列になっているはずです。事前に調べたものとあってるか確認を )
  • Domain name: ( Hostname 同様確認を )
  • Choose a mirror: "Japan" ( Japan が一番有利なはず )
  • Ubuntu archive mirror: "jp.archive.ubuntu.com" ( これだけが選択可能になってるはず )
  • HTTP proxy: "" ( Proxy サーバは使用しません )
  • Time zone: "Asia/Tokyo" ( となっているはずなので確認を )
  • Partition disks: "Guided - use entire disk" ( LVM にしてもメリットなさそうなので、単にディスク全体を使用 )
  • Partition disks: ( 仮想HDD 1台のみが選択可能なはずです )
  • Write the changes to disks: "yes" ( こだわりある人はレイアウト変えるのもよいでしょうけど、所詮仮想環境なので凝っても仕方がないと思います )
  • Full name for the new user: ( 常用するユーザの本名をローマ字で )
  • Username for your account: ( 常用するユーザのアカウント名を )
  • Choose a password for the new user: ( 常用するユーザのパスワード )
  • Encrypt your home directory: "no" ( 暗号化はやめときます )
  • manage updates: "No automatic updates" ( 更新は手動でやることにします )
  • Software selection
いろいろありますが、後でから追加できるので、 Basic Ubuntu server のみを選択。
今回のようにリソースが限られている環境では、
この段階で色気を出してもロクなことにならない場合が多いので注意。
  • Install the GRUB: "yes" ( grub ブートローダもインストールします )
  • Is the system clock set to UTC? "yes" ( マルチブート環境でもありませんし、 UTC にしておいたほうが良いでしょう )
  • Installatio complete: "continue" ( インストール完了。Continue を選択すると再起動します )
と、ここまでで、インストールが完了しました。インストール中に指定したアカウント名でログインできることを確認してください。


この次は?


OSのインストールには成功しましたが、この状態では何のサービス ( ssh でさえも ) 動いていない状態です。また、シリアルポートが接続されていることになっているはずの「リモートコンソール」のほうは何の反応もない状態となっているはずです。次回はこの辺の部分の整備について書いてみたいと思います。

さくらのVPS はじめました

前回の OpenSolaris OGB 解散のエントリから少し開いてしまいましたが、その間に OpenIndiana という新たな Solaris 系のディストリビューションが発表されるなど、新たな Solaris 関連の動きもありますが、まだまだ将来が見えない状況ですが皆さんお元気でしょうか。

そのような中、さくらインターネットさんの新たな VPS サービス「さくらのVPS」がサービスインいたしました。この「さくらのVPS」はIT技術者を中心にベータテスト段階から大きな関心が寄せられ、比較的自由度の高い環境を安価( 980円/月 )で気軽に利用できるということもあり、自宅サーバで運用しているもののうちのいくつかをそちらに移してしまおうかと考え、「さくらのVPS」に申し込んでみました。余談ですが、私は自宅サーバそのものについては「フレッツISDN」の頃から運用してきましたが軌道に乗ってくると構築する要素は減り、トラブル対応などの後ろ向きな要素が増えてしまう部分があります。レンタルサーバ、自宅サーバそれぞれ醍醐味やメリット、デメリットがあるので、その時々の情勢に応じて使い分けをしたいところです。

「さくらのVPS」襲来


さて、「さくらのVPS」ですが、すでに色々なところでニュースレビューが掲載されているので、詳しい内容はそちらに譲るとして、ざっくり特徴をあげてみると
  • データセンター内の仮想サーバ環境をレンタル
  • HDD は 20GB、メモリは 512MB、固定 IPv4 アドレス 1個
  • コントロールパネル上で起動・停止・再起動・シリアルコンソール・OS再インストールができる
  • OS 環境は CentOS
  • 正式版ではないものの VNC コンソールも提供されている
といった特徴があります。他のユーザに迷惑をかけることをしてはいけないのはもちろんではあるのですが、オペレータの方に対応依頼しなくてもOSの再インストールができるので、色々と多い日でも安心です。

おおまかな目標をたてる


VPS 環境を申し込んで、いろいろ試してみた感覚での感想を書いてみると
  • ネットワーク環境はデータセンター内ということで本当に快適
  • CPUは占有できるわけではないけれども高性能 ( いつもジャンクのような機械を自宅サーバに使っているからそう感じるのかもしれません )
  • 20GB の HDD 空間は使い方に工夫すれば結構なことができそう
  • 512MB の割当メモリが目下の課題。「全部入り」でなんでも動かすようなことをしているとすぐに壁にぶちあたりそう
といった印象を受けました。余裕のサーバ構築というわけにはいきませんが、工夫すればそこそこの仕事をこなせるのではないかという印象です。とりあえずの目標として
  • OS は Ubuntu amd64 環境に入替える
  • 自宅で稼働させている bbsden.com と flky.org の Web 環境(blog)、flky.org のメール環境を移行する
といったあたりを目標にしたいところです。

OSについては標準のCentOSでも良いのですが、サーバ用途として見た場合でも標準環境でもすでにフットプリントが大きい感じがするというのと、Ubuntu の関係者の方には twitter でお世話になっている方がいらっしゃる部分もあるのでということで Ubuntu を使うことにしました ( Solaris 系の OS はメモリ割当量の関連から断念しました )。次回からは作業の様子もふくめてお伝えしたいと思います。

... と書いて、連載にするつもりなのでしょうか?