Mac の VirtualBox に CentOS 6.3 minimal をインストールしてターミナルから ssh で操作できるようにする

自分でクラウドインスタンスや物理的なサーバーを持っていると、ネットワークを経由するプログラムを開発・検証するのに楽ですが、自分のラップトップの内部で Linux システムを一個持っていると、インターネットに繋がっていない状態であっても快適に開発することが出来るので有効です。

Mac で仮想OSソフトを考えると、VMWare Fusion がありますが 5000円ぐらいするようです。私の用途ですと ssh で接続できれば OK でリッチな環境などいらないので、無償のものがあれば嬉しいですが、Oracle VirtualBox は無料のようです。さっそく使ってみて、ssh で接続まで出来ましたので、備忘録的に設定方法を書いておきます。

– まずは、VirtualBox を落としてきます → https://www.virtualbox.org/wiki/Downloads

– 次に、CentOS6.3 minimal を落としてきます(minimal にするかどうかはその人次第ですが個人的には iso がわずか 300MB 以下で、インストールも素早く終わるので好きです。GUIは付属していませんが…) → http://isoredirect.centos.org/centos/6/isos/i386/

– VirtualBox の dmg ファイルを開いて、インストーラを実行します。

– VirtualBox のインストールが終わったら、アプリケーションフォルダにある VirtualBox のアイコンをダブルクリックして、VirtualBox を実行します。

– VirtualBox を実行したら、「Command + ,」か、メニューバー → 「環境設定」、で「環境設定」を開きます。GUI で見えている「設定」ではないので要注意!ここは間違えやすいです!詳細↓


– 「環境設定」の「ネットワーク」のところで、「+」ボタンをクリックします(↓の画像で○で囲ったところ)


– vboxnet0 にフォーカスを合わせて、↓の画像の、ドライバーみたいなボタンを押します。


– ↓のようにデフォルトでIPアドレスが設定されていると思います。たぶん、192.168.xxx.1 (xxx は好きにして良い)という風に自分で変更もできると思いますがデフォルトのままが良いかと思います。また、ここでの「DHCP サーバー」→ 「サーバーを有効化」にはチェックを*入れない*、でおいてください。チェックを入れてしまって、DHCP サーバーを有効にしてしまうとたぶんうまく動きません。




– 次に、VirtualBox で「新規」をクリックします↓


– ウィザードを進めていき、「仮想マシンとOSタイプ」は CentOS6 32bit の場合は↓のように、Red Hat に合わせます(CentOS は Red Hat Enterprise Linux のクローン、らしい)。


– 「メモリ割り当て」は 512MB(お好みで。とりあえず 512MB で足りるかと)、次の、仮想ハードディスクは「起動ディスク」にチェックを入れて、「新規ハードディスクの作成」を選択、次の「Welcome to the virtual disk creation wizard」では、「VDI(VirtualBox Disk Image)」を選択、次に「Dynamically Allocated」を選択して進めていくと、新しい Virtual Machine が出来上がります↓。また、「ネットワーク」の項目では、「アダプタ 1: Intel PRO/1000 MT Desktop (NAT)」とだけ表示されていることが分かります。


– 次に、この centos_32bit_minimal を選択した状態で、「設定」をクリックします↓。


– 先の「設定」をクリックして出てきたウィンドウで、「ネットワーク」→「アダプタ2」→「ネットワークアダプタを有効化」にチェックを入れます。「割り当て」を「ホストオンリーアダプタ」に合わせて、「名前」は先程作った vboxnet0 を選択します(↓の画像だと vboxnet1 となっていますが気にしないでください)。「高度」をクリックするとさらに項目が出てきます。「アダプタタイプ」「Promiscuous Mode」「MAC アドレス」はデフォルトのままでOKです。「MACアドレス」に書いている文字列は後で使うので紙に書き写すなどしておきましょう。そして、「OK」を押します。


– 上記で追加したネットワークがきちんと反映されているか確認してください。↓の画像のように、NAT と ホストオンリーアダプタが2つあればOK(ちなみにこの画像だと、vboxnet1 となっていますが、初めてやってみている方は vboxnet0 になっているはずです)。


– 次に、「起動」をクリックします。「Welcome to the First Run Wizard!」と表示されます、「Continue」をクリック、「Select Installation Media」では、↓の画像を参照して欲しいのですが、フォルダみたいなアイコンをクリックします。


– すると、ファイルブラウザが開きますので、先ほどダウンロードしてきた、「CentOS-6.3-i386-minimal.iso」を選択して、続けます。(または、仮想マシンが立ち上がった状態で、メニューバーの 「Devices」 → 「CD/DVD Devices」 → 「Choose a virtual CD/DVD file…」で iso を選択してから、「Machine」→「Reset」で可能かと思います)

– VirtualBox 内での CentOS6 のインストール画面が出てくると思います。CentOS のインストール方法に関しては、省略させて頂きます。グーグルなどで検索してみてください。

– CentOS のインストールが終わったら、login:と表示されるので、root と打って、CentOS のインストール中に設定したパスワードを打ちましょう。次に、yum update などと打ってもこの時点ではネットワークに繋がっていないのであまり意味がありません。以下、ネットワークの設定に入ります。

– まず、↓

cd /etc/sysconfig/network-scripts/
↑とします。次に、
vi ifcfg-eth0
として、編集します。viの使い方は検索してみてください(nano などの、もっと簡易なエディタがあるんですが、CentOS6.3 minimal だと最初からは入っておらず、yum install nano としないと使えないのですが、残念ながらネットワークに繋がっていないのでこれも出来ません。vi を使わざるを得ないかと)。そして、ONBOOT=”no” → ONBOOT=”yes” に書き換えます。あとは変更しなくていいと思います。こんな感じ↓になります。HWADDR や UUID は、人によって様々かと思います。
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="08:00:27:09:F1:40"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="50f6e026-5dc6-4bb0-9d2c-cff7473eb34b"
—–追記@2012-10-06—–
↑のeth0の設定ですが、dhcpにしない方が良いかも知れません。というのもネットワークが変更した際に、/etc/resolv.conf はdhcp機能により自動生成される場合があり、他のネットワークに移動した時に更新されずつながらない(名前解決が出来ないという意味です。IPアドレスを指定すれば行けます)場合があるからです。
[root@centos6-32bit etc]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="08:00:27:09:F1:40"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=10.0.2.15
NETMASK=255.255.255.0
TYPE="Ethernet"
UUID="50f6e026-5dc6-4bb0-9d2c-cff7473eb34b"
↑こんな感じにするといいと思います。
—–追記ここまで—–

—–追記ここから—–
@ 2012年12月9日

完全版がこちら↓
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR="192.168.0.150"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
IPV6INIT="no"
TYPE="Ethernet"
DNS1=192.168.0.1
DNS2=129.250.35.250
UUID="a42a7a27-19a4-45a8-ae5b-8c98dd9afe5c"

DNSを書いておかないと、/etc/resolv.conf が書き換わり、存在しないよ!とか言われてどこにもアクセスできなくなったりする。。。
—–追記ここまで—–

さて次に、↓
[root@localhost network-scripts] vi ifcfg-eth1
↑として、BOOTPROTO=”dhcp” → “static”、ONBOOT=”no” → “yes”、と書き換えます。また、HWADDRが、先ほど確認しておいたMACアドレスと一致しているか確かめましょう。一致していなければ一致するよう書き換えが必要です。次に、先ほど作った、vboxnet0 のIPアドレス、「192.168.56.1」を参考にして(ここは、先の設定によりけりです。vboxnet0 の IPアドレスが、192.168.xxx.1 (xxx は1 ~ 255の数字)、であれば、それに合わせてください)、「IPADDR=192.168.56.10」と追加します。これがこの CentOS の IPアドレスになります。192.168.56.10、となっていますが、2~254なら何でもOKです、つまり、192.168.56.254 や 192.168.56.2 などにしてもいいでしょう。ただ、この 192.168.56 までは変更してはいけません。変更できるのは、192.168.56.xxx の xxx の部分だけです。一例はこんな感じになります↓。HWADDRと、IPADDRは各自それぞれの設定があると思います。UUIDは最初から割り当てられていればそのままで、書いていなければ↓にあるのをそのままコピペでもいいと思います(たぶん他と被らなければなんでも良い)。

一例:
DEVICE="eth1"
BOOTPROTO="static"
HWADDR="08:00:27:CB:A3:B7"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="50f6e026-5dc6-4bb0-9d2c-cff7473ebbbb"
IPADDR=192.168.56.10
NETMASK=255.255.255.0

次に、リゾルバ(ドメインからIPアドレスを教えてくれる)を設定します。これが出来ていないと、IPアドレスを指定すれば繋がるのにドメインを指定してもつながらない、という状態になります。
vi /etc/resolv.conf
↑として、

/etc/resolv.conf
# ↓ NTT AMERICA
nameserver 129.250.35.250

# ↓ Google Public DNS
nameserver 8.8.8.8
↑とでもしておきましょう。

次に、
service network restart

として、ネットワークを再起動します。ネットワーク設定が上手く行っているか確かめるために、↓
ping yahoo.co.jp

↑などとしてみましょう。↓のように、
4 bytes from f11.top.vip.tnz.yahoo.co.jp (203.216.243.240): icmp_seq=1 ttl=63 time=5.53 ms

↑帰ってくればOKです。帰って来なかったら、上記の設定が間違っているかと思います。BOOTPROTO=”dhcp” となっていたり(static、にしないとだめ)している可能性があります。また、Mac のターミナルを開いて、この CentOS 宛に ping を打ってみましょう↓。
ping 192.168.56.10
PING 192.168.56.10 (192.168.56.10): 56 data bytes
64 bytes from 192.168.56.10: icmp_seq=0 ttl=64 time=0.753 ms

↑のようにきちんと帰ってきていたらOKです。ホスト(Mac)から VirtualBox の CentOS にアクセスできている証拠です。お疲れ様でした、こうなれば既に ssh 可能です。mac のターミナルで↓とコマンドを打つと、
ssh root@192.168.56.10

入れます。デフォだとパスワード認証になっていると思います。この辺の ssh の設定はいろいろとありますので調べてみてください。とりあえず公開鍵認証にしたいところですね。ちなみに、CentOS 以外だと、上記のコマンドでは入れない可能性はあり、/etc/ssh/sshd_conf の設定が必要かもしれません。

おまけとして、先の CentOS で ifconfig したときの結果を載せておきます↓。上手く行かなかったときの参考になるかもしれません。
ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:09:F1:40  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe09:f140/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23779 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13085 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19127821 (18.2 MiB)  TX bytes:715786 (699.0 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:CB:A3:B7  
          inet addr:192.168.56.10  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fecb:a3b7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:931 errors:0 dropped:0 overruns:0 frame:0
          TX packets:493 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:93490 (91.2 KiB)  TX bytes:90748 (88.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

– さらにおまけ。httpd(apache)を使いたければ、↓とコマンドを打って、
vi /etc/sysconfig/iptables

“-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT”を書き加える(↓を参照)。他はそのままでOK。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

次に、iptables を再起動して、httpd をインストールして起動↓
service iptables restart
yum -y install httpd
/etc/init.d/httpd start
chkconfig httpd on

↑として、先ほどのIPアドレスをブラウザに打ち込むと(例:http://192.168.56.10/)、Apache 2 Test Page を見ることが出来きます。ついでに、↓
yum -y update
↑としてアップデートしておくと良いでしょう。

—–追記@2012-10-06—–
VirtualBox のせいなのか、時間がやたらと乱れます。早くなったり遅くなったり…。とりあえず、15min毎にntpdateという、時間合わせコマンドを実行することにしました。cronという、定期的な実行を司るデーモンを使います。

vi /etc/crontab
↑として、↓のようにしてみました。ntp.nict.jpはntpサーバーという時間を合わせてくれるサーバーです。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
HOME=/

*/15 * * * * root /usr/sbin/ntpdate ntp.nict.jp > /dev/null 2>&1

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

これでひとまずおさまった感があるので、よしとします。また、/etc/grub.confにて、divider=10 clocksource=acpi_pm という文字列を追加すると良いそうです(編集後rebootが必要)。
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-279.9.1.el6.i686)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-279.9.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet divider=10 clocksource=acpi_pm
	initrd /initramfs-2.6.32-279.9.1.el6.i686.img

# title CentOSの、 kernelの行のquietのあと、またはinitrdの前の行の最後に、divider=10 clocksource=acpi_pm という文字列を追加した。
—–追記ここまで—–


—–追記ここから—–
@2012年10月23日

諸悪の根源(?)、selinuxを無効にしましょう。WebでのPHPが動かなかったりします。パーミションもあっているしphp.iniもあっているしhttp.confもきちんと編集したのになぜなの状態の原因はたいていこれだったり…。

vi /etc/sysconfig/selinux
として開いて、SELINUXの項目について、enforcing->disabledと書き換えます。↓
~中略~
# SELINUX=enforcing
# ↓のように書き換える
SELINUX=disabled
~中略~

次にrebootします↓。
reboot
—–追記ここまで—–

Bookmark the permalink.

Comments are closed.