windows上でubuntu7.10を動かす

僕がVMwareを導入した際のまとめです。

Linuxを沢山いじって勉強したいが、今更パーテーションを作ってインストールするのが面倒臭い!」(まさに僕)
という方には、お役立ていただけるかもしれません。

VMwareって?

OS上に仮想マシン(コンピュータ)を生成します。
そして、その仮想マシン上にOSをインストールすることができます。

導入理由

僕がVMwareを入れた理由は3つあり、

  • Linuxの勉強をしたい
  • Linuxの恩恵(コマンドやshellスクリプト等)にあやかりながら研究を行いたい
  • しかし、今更Linux用にパーテーションを作れません。

Linuxの勉強や使用だけなら、普通に入れればいいのですが、僕の場合XPがディスクを占領していたため
今更パーテーションを作るのも面倒くさいし…ということでVMwareを入れました。
また、仮想マシンなので沢山いじって壊しても被害は少なく、さらにはシステムのバックアップも取りやすい
ので、Linux初学者にはお勧め!という事を聞き、使うことにした次第です。

用意するもの

VMwareには、VMware server以外にもあるので、自身の用途に合ったものを選ばれるのが良いと思います。
僕は個人利用の上に、手軽に導入したかったので、VMware server もしくはVMware playerの二つで迷いました。

結局VMware serverを選んだのは、複数のOSをインストールする事ができるという理由からです。
VMware playerは一つしかインストールすることができません。(その分軽いようです。)

ubuntuを選んだ理由は、「今人気のディストリビュージョン」のような言葉に乗せられたからです笑
もう一つは、vmwareにインストールするためのパッケージが用意されているため、インストール時に
CDを作成する必要がないということもあります。

自分の動作環境

パソコンのCPUとメモリだけ簡単に書くと、以下の通りです。

  • 研究室
  • 自宅
    • CPU:Athron X2 5200+ 2.7GHz×2
    • メモリ:2GB

どちらともそれなりに快適に動いています。
メモリは1GB位はあった方が良いと思います。(512MBで入れた後輩は涙を流してました)

導入までの大きな流れ

導入までの大きな流れを示します。
ここでは、僕の中で快適にC言語数値計算シミュレータの開発ができるという
レベルまで持っていく所までを書きたいと思います。

1.仮想マシン上でubuntuを動くようにする

  • VMware1.08のインストールする
  • ubuntuのインストールおよびダウンロード

2.初期設定-ネットワークの設定

  • ubuntuのパッケージファイルのアップグレード
  • vmware toolsのインストール
  • 画面、マウスの設定

3.C開発環境を整える

  • Cのパッケージをインストール
  • Xlibのインストール
  • emacs22のインストール

実際の作業

1.仮想マシン上でubuntuを動くようにする

VMware1.08のインストールする

VMwareのインストールは簡単です。
まず、
http://www.vmware.com/download/server/
からvmware serverをダウンロードしてください。
次に、シリアルナンバーを入手してください。
入手のためには、同サイト内にある register for your free serial number(s).をクリックし、
情報を登録すると入手できます。
その後、ダウンロードしたファイルを実行し、ドンドン進んでいけばインストールはできます。

ubuntuのインストールおよびダウンロード

http://cdimage.ubuntulinux.jp/releases/7.10/ubuntu-ja-7.10-vmware-i386.zip
からダウンロードする。
先程も言いましたが、このファイルをダウンロードすれば、インストール用CDを作成しないでも、
ubuntuのインストールができます。とてもお手軽!

ダウンロード後、ファイルを展開し、出てきたフォルダを仮想マシン上にそのまま移動すれば
ダウンロードの作業は完了です。(ex.僕の場合、Cの直下に仮想マシンを作ったので、
「C:\Virtual Machines」に「Ubuntu-7.10」を移動)


2.初期設定

ネットワークの設定

次にネットワークの設定方法です。ご自宅で使われる場合は特に不要かもしれませんが、
僕の場合、研究室のネットワークはプロキシサーバを経由するので、ちょっと設定が必要でした。

ethernetのタイプを設定します。
「NAT」は、ホストコンピュータに対して、プライベートIPアドレスを持つことになるので、
実際にネットワークにつながる時は、ホストコンピュータを介しての接続となります。
「Brigde」は、ネットワークに直接繋がる、自身のIPアドレスを持つことになるので、割り振りが
必要となります。
研究室は、IPアドレスをすべて管理してて、追加するのが面倒なので「NAT」で済ませました。

  • proxyの設定

「システム」→「設定」→「プロキシの設定」で、設定を行うことができます。

ubuntuのパッケージファイルのアップグレード

ネットワークにつながる事が確認できたら、synapticパッケージマネージャーを使って、
パッケージファイルのアップグレードを行います。
「システム」→「システム管理」→「synaptic パッケージマネージャー」を選択して、
「全てアップグレード」→「適用」としてください。
かなり時間がかかります。

vmware toolsのインストール

vmwareの使い勝手を向上させるのに、「vmware tools」というものがあります。
これをインストールすると、

  • グラフィックパフォーマンスの向上
  • 共有フォルダの利用
  • ゲストOSとホストOS間の、時刻の同期化
  • ゲストOSとホストOS間の、マウスカーソルのシームレスな移動
  • ゲストOSとホストOS間の、テキストのコピーと貼り付け

という快適さを得ることができます。
インストール方法は、こちらの記事を参考にさせていただきました。

http://viva-ubuntu.net/?p=709

画面、マウスの設定

解像度の設定は、
「システム」→「設定」→「画面の解像度」で、ご自身の画面に合わせてください。

マウスの設定に関してですが、デフォルトではマウスホイールが機能しないので、
設定を変更してください。
その際、こちらの記事を参考にさせていただきました。

http://fun.poosan.net/sawa/index.php?UID=1201445726

xorgの変更を加える際には、バックアップファイルを作成しておくことをお勧めします…

日本語環境を整える

こちらのコミュニティサイトをご覧ください。
http://www.ubuntulinux.jp/products/JA-Localized


3.C開発環境を整える

Cのライブラリをインストール
$ sudo apt-get install libc6-dev

で開発用ライブラリのインストールができます。

Xlibのインストール

関係ある方は少ないかもしれませんが、開発する時に、Xwindowを使ってGUIプログラミングする
必要のある方は

$ sudo apt-get install libxll-dev

でX関係のライブラリを入手する必要があります。

emacs22のインストール

エディタは、何でも良いと思うのですが、僕はemacsを使いたかったので、

$ sudo apt-get install emacs22

を実行してインストールをしました。

他にも、gnuplotやらtgifやらtexやらが欲しかったりするのですが、大体apt-getで手に入るので割愛します。


以上です。

色々といじることができて楽しいですね^^

testで似た処理をまとめよう

最近railsで開発している時に、TDDにもちょっとづつ慣れてきたつもりになっていますが、テストを書いている時、同じような処理をコピペでごまかしている自分がいました。
DRYに反する自分。でも、どうにもできない自分。
「これじゃいかん!」と言うことで休日を利用してチャレンジしました。

前提

Hogeという、テーブルの中に

    • title
    • content
    • author

という属性が存在する。

やりたい事

    • 各属性title,content,authorともに、nilだとvalidではじかれる事を、テストで確認できるようにしたい。


今までのテスト

def setup
  @hoge = Hoge.new
end

def test_valid_failure_nil_title
  @hoge.title = nil
  @hoge.content = "fuga"
  @hoge.author = "piyo"
  assert_equal false, @hoge.valid?
end

def test_valid_failure_nil_content
  @hoge.title = "fuga"
  @hoge.content = nil
  @hoge.author = "piyo"
  assert_equal false, @hoge.valid?
end

def test_valid_failure_nil_author
  @hoge.title = "fuga"
  @hoge.content = "piyo"
  @hoge.author = nil
  assert_equal false, @hoge.valid?
end

んー、似てることやってるのに凄く効率が悪い…


と言うことで、改造してみました。

結果

def create_default_description(substitute_value)
  @hoge = Hoge.new
  description = {"title" => "hoge",      …  (1)
                 "content" => "fuga",
                 "author" => "piyo"
                }
  description.update(substitute_value)   …  (3)
  
  description.each do |key,value|
	  eval("@hoge.#{key} = value")       
  end
end

def test_create_failure_nil_title
  substitute_value = {"title" => nil}  …  (2)
  create_default_description(substitute_value)
  assert_equal false, @hoge.valid?
end

def test_create_failure_nil_content
(省略)


と言う感じです。

一般化したメソッドに、どうやって、title,content,authorに
違う値をいれれば良いのか悩んでしまったのですが、

(1) 一般化したメソッド内に、description というHashに、初期値を用意してあげておく。
(2) テストしたい属性もHashにいれてあげて、引数として渡す。
(3) updateメソッドを使ってあげる事で、初期値と引数の差分の所だけ更新してもらう。

と言うことで解決できることが分かりました。
リファレンスマニュアルさまさまです!!

これなら、属性の数が増えても、そして、nil以外の色々な値を試したくなっても大丈夫そう。かな?
しかし、衝撃の事実。ソースが長くなっている…

そもそも、全てのケースを試さないで大丈夫なような、効率の良いテストをしっかり考えられるように、勉強しなければなぁと思った一日でした。


以下は、実際に挙動を確かめるためのソースです。

class Hoge
  attr_accessor :title, :content, :author
  
  def initialize
    @title 
    @content
    @author
  end
end


def create_default_description(s_v)
  @hoge = Hoge.new
	description = {"title" => "hoge",
                       "content" => "fuga",
                       "author" => "piyo"
                      }
  description.update(s_v)
  
  description.each do |key,value|
	  eval("hoge.#{key} = value")
  end

  p hoge  #=> #<Content:0x2b5582c @author="piyo", @content="fuga", @title=nil>
end

substitute_value = {"title" => nil}
create_default_description(substitute_value)