VirtualBox orVMWare PlayerでLinux環境をWindows 7×64に構築するメモ
今回はVirtualBoxTurnkey Linux coreを使って構築した。

と見せかけて、最終的にはUbuntu Server使う事にしたので途中まで飛ばしていいです。

なんでVMを使ってまでやるかというと
WIndowsでのCUIはConsole+NYAOSでコンソールとしていいのですが、node.jsなど実行できないものが出てきたので、VM上に環境を作ることにしました。
Cygwin : 食わず嫌いでしたが、食ったら嫌いでした。
coLinux : 64 bitが非対応でした。

必要なもの

  • VirtualBox(仮想化ソフトウェア)
  • TurnKey Core(サーバー、そこら辺の便利なソフトが入ってる感じのディストリビューション)
  • RLogin(SSHクライアント)

Turnkey Linux coreはVM向けにovf形式でも配布してるので、OVFと書かれてるリンクからturnkey-core-バージョン-lucid-x86-ovf.zipをダウンロードして使う。

2011-04-20-ss11

VirtualBoxを起動してメニューの仮想アプライアンスのインポートから、先ほどのovfをインポートすると自動でTurnKey Coreが仮想マシン一覧に並ぶ。(設定するのは仮想マシンの名前ぐらい)

2011-04-20-ss8

起動するとパスワードの設定などがあって、パスワード以外はEnter押してればいいと思う。
設定が終わると起動して下のようなメニュー画面が表示される。

2011-04-20-ss12
メニューを終了させると、CUIで操作できるけどキーやマウスの関係で扱いにくいのでSSHからアクセスして操作する。

RLoginを起動して、サーバの接続から新規追加して、プロトコロルにSSH、アドレスにはLinuxサーバーのIPアドレス、ユーザーはrootで、パスワードは最初の起動時に設定したものを入力して接続する

2011-04-20-ss13

2011-04-20-ss9

こっからはサーバー{ゲスト側(Ubuntu)}の設定

まずはrootだとあんまりよくないので、ユーザー(azuという例で)を追加、そのユーザーのパスワードを設定する。

root@core ~# useradd -m -s /bin/bash azu
# ユーザーazuを追加する。mオプションがないとHOMEディレクトリが追加されなかった
root@core ~# ls /home/     
azu/
# HOMEディレクトリがあるのを確認
root@core ~# passwd azu
# パスワードの設定
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
useraddの-sオプションでログインシェルを決めないとかなり不自由な感じになります。

後からログインシェルを決める場合はchsh -s /bin/bash などとする。
と、このままTurnkey Linuxを使おうと思っていたんだけど、ファイル共有でどうしても上手くGuest Additionsのインストールが上手くできないのと、なんかroot前提なような環境で他とは少し違った感じで躓く事がありそうだったので、Ubuntu Serverに切り替えました。
 

Ubuntu Serverを使って環境構築(改めて)

(ちょこちょログにTurnkeyが出てくるのはそのときの名残です。プロンプトの文字は無視してください)
(Turnkey Linuxの事は忘れてください)
必要なもの

ホストOS

ゲストOS

Windows 7 64bit

Ubuntu Server

で環境を作っていきます。
Ubuntu Serverのisoをダウンロードしてきて、新規仮想マシン作成から適当な配分で仮想マシンを作りますが、ネットワークをブリッジ接続に変更しないとUbuntu ServerのIPアドレスが10.0.2.25とかいう感じになってSSH接続できなかったので、ネットワークをブリッジ接続に変更して作成しました。
image
追記: ネットワークがNATでもポートフォワーディングすればSSH接続できました(こっちの方がいいかも)
ネットワークの設定をNATにしてから、高度の設定でポートフォワーディングにホストには任意のポート、ゲストにはUbuntu側に設定したSSHのポート番号(デフォルト22)を設定します。
2011-04-23-ss1
この状態で、RLoginに接続IPアドレスに127.0.0.1 or localhost で、ポート番号にはホストに設定したポート番号を入力すればSSH接続できます。

任意のポートだけを開く感じで使えるのでこっちの方がいい気がします。同様の方法でWebのポートである8080もポートフォワーディングに設定しました。

 

仮想マシンを起動したUbuntu Serverのインストール画面でユーザーアカウントの作成ができるので、下のガイドに従って入力していくだけで先ほどのTurnkey Linux でのユーザーアカウント追加までと同じ事ができます。

注意点としては18.サーバーソフトウェアの選択画面でOpenSSH SERVERを選択してSSHでつなげるようにしておくと楽でいいです(スペースキーで選択チェックが入る)

忘れた場合でも

sudo apt-get install openssh-server
とすればいいだけなので、そこまで問題ないです。
Ubuntu Serverはそのまま使うと文字化けして扱いにくいので、RLoginを使ってアクセスすれば文字化け対策をしなくてもいいので、最初からRLoginを使って作業します。

サーバのIPアドレスは

ifconfig

で、わかると思います。

初期設定なら、インストール時に入力したアカウントとパスワードでログインできると思います。



SSHで鍵を使って接続

セキュリティ的にパスワードではなく鍵でSSHをつなぐのが普通だと思うので、SSHの鍵設定をします。

root@core ~# cd /home/azu/
# ユーザのHOMEへ
root@core /home/azu# mkdir .ssh
root@core /home/azu# cd .ssh
# .sshディレクトリを作って移動
root@core azu/.ssh# ssh-keygen -t rsa
# 鍵を生成する
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): turnkey # ファイル名は適当に
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in turnkey.
Your public key has been saved in turnkey.pub.
root@core azu/.ssh# ls
turnkey  turnkey.pub
# .sshディレクトリに秘密鍵と暗号鍵が生成される
root@core azu/.ssh# mv turnkey.pub authorized_keys
# turnkey.pub を authorized_keysにリネームする
root@core azu/.ssh# ls
authorized_keys  turnkey
<div>
  鍵は生成して公開鍵(authorized_keys)の登録ができたので、秘密鍵をホスト側のPCに転送します。<br /> <br /><a href="http://nanno.dip.jp/softlib/man/rlogin/">RLogin</a>にファイル転機能がついてるので、.sshディレクトリにある秘密鍵(turnkey)をホスト側に移動させます。 </p> <p>
    ゲスト側(Ubuntu)に秘密鍵は置いておく必要はないので、秘密鍵(turnkey)は転送したら削除します。</div> <div>
      <a href="http://efcl.info/wp-content/uploads/2011/04/2011-04-20-ss15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2011-04-20-ss15" border="0" alt="2011-04-20-ss15" src="http://efcl.info/wp-content/uploads/2011/04/2011-04-20-ss15_thumb.png" width="240" height="115" /></a>
    </div>

    <div>
      次にSSHの設定で、鍵以外でのログインはできないように/etc/ssh/sshd_configを書き換えます。
    </div>

    <div id="codeSnippetWrapper">
      <pre id="codeSnippet" class="csharpcode"><span class="rem"># それぞれをnoに書き換える </span>

PermitRootLogin no
PasswordAuthentication no
UsePAM no

面倒だったので一度rebootした

      <p>
        自分はportも22から適当なものに変更しました。
      </p>
    </div>

    <div>
      後はRLoginに秘密鍵を登録してSSHログインするだけです。
    </div>

    <div>
      SSH Identity keyに転送した秘密鍵をセットして、ポートを変えた場合はポートも任意のものに設定してから接続します。
    </div>

    <ul>
      <li>
        <a href="http://d.hatena.ne.jp/Fiore/20080228/1204174833">Ubuntuでsshdの設定をしてリモートから接続できるようにする &#8211; そ、そんなことないんだから!</a>
      </li>
      <li>
        <a href="http://blog.myfinder.jp/2010/09/vpsssh.html">myfinder&#8217;s blog: さくらのVPSを借りたら真っ先にやるべきssh設定</a>
      </li>
    </ul>

    <div>
      <strong>共有フォルダの設定</strong>
    </div>

    <div>
      Ubuntu Server にはGUIがないので、Guest AdditionsのインストールもCUIで行わないといけません。
    </div>

    <div>
      ここで結構はまりました
    </div>

    <ul>
      <li>
        <a href="http://amis-annex.posterous.com/virtualbox-4xguest-ubuntu-server">virtualbox 4.x/Guest ubuntu-server で共有フォルダを使う &#8211; As mind is suitable&#8230;</a>
      </li>
      <li>
        <a href="http://blog.brettalton.com/2010/04/28/installing-guest-additions-in-virtualbox-for-an-ubuntu-server-guest/">Articles • brettalton.com</a>
      </li>
    </ul>

    <p>
      が大変参考になった。
    </p>

    <p>
      まずは適当な共有フォルダを設定しておく。
    </p>

    <p>
      <a href="http://efcl.info/wp-content/uploads/2011/04/image1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/04/image_thumb1.png" width="240" height="214" /></a>
    </p>

    <p>
      そして、起動してるVMのメニューにある”<em>Guest Additionsのインストール</em>”を押しておく。
    </p>

    <p>
      何にも起きてないように見えるが、CDドライブにCDが入った感じになる。
    </p>

    <pre id="codeSnippet" class="csharpcode">sudo apt-get install build-essential linux-headers-`uname -r`

sudo apt-get install xserver-xorg xserver-xorg-core #必要なものを先にインストールしておく ################### # ここまでにGuest Additionsのインストールを押してマウントの準備が必要 ################### mkdir /tmp/cdrom sudo mount /dev/sr0 /tmp/cdrom # Guest Additionsのディスクをマウントする cd /tmp/cdrom sudo bash VBoxLinuxAdditions.run --nox11 sudo addgroup --system --quiet vboxsf sudo usermod -a -G vboxsf azu # ユーザーをvboxsfグループに加える sudo reboot

リブート

azu@ubuntu:/media$ ls cdrom  sf_azu

    <div>
      自動マウントするためにはユーザーをvboxsfグループというグループに加える必要があることに注意。<br /> <br />リブートすると/media以下にsf_フォルダ名が現れてアクセスできるようになる。
    </div>

    <div>
      大体ここまで基礎的な環境ができあがるので、後は好きなソフトを入れていく感じになると思います。(一応スナップショットをとっておきました)
    </div>

    <div>
      Ubuntu Server + VirtualBox GUIありでメモリ使用量は45MBぐらい、VBoxHeadless.exeで画面表示なしで起動させると30MBになって結構メモリ使用量は少ない。<br /> <br />VirtualBoxをタスクトレイに入れて管理するには<a href="http://www.toptensoftware.com/VBoxHeadlessTray/">VBoxHeadlessTray</a>がおすすめ。ヘッドレスモードやシャットダウンとなどの操作もタスクトレイで行えるのでとてもいい。
    </div>

    <p>
      ついでにNode.jsの環境も作ってみる<br /> <br />Node.jsは直接入れるよりもバージョン管理するツールから入れるのがいいらしいので、naveかnvmを使う事にした。
    </p>

    <p>
      <a href="https://github.com/isaacs/nave">nave</a>は何かインストールが面倒だったので、<a href="https://github.com/creationix/nvm">nvm</a>を使う事にした。
    </p>

    <p>
      nvmは自動でnpmもインストールしてくれるので便利。
    </p>

    <div id="codeSnippetWrapper">
      <pre id="codeSnippet" class="csharpcode">azu@ubuntu:~$ sudo apt-get install build-essential libssl-dev git-core 

azu@ubuntu:~$ sudo apt-get install curl # 必要なものを先にインストールしておく azu@ubuntu:~$ git clone git://github.com/creationix/nvm.git ~/.nvm
azu@ubuntu:~$ cd .nvm/ azu@ubuntu:~$ bash ./nvm.sh azu@ubuntu:~$ nvm install latest # 最新のnodeをインストールする azu@ubuntu:~$ node -v
v0.4.5