Ubuntu14.04にソースコードからXen4.5をインストール

  1. まず、aptをアップデートする

  2. 次に必要なパッケージをインストールする

  3. 次にXen4.5のソースコードをダウンロードする

  4. 次に、コンパイルする

  5. 次に、インストールする

  6. 次に、bootの順序をXenから起動するように変更する
    まず、カーネルのバージョンを以下のコマンドで確認する

    /etc/default/grubに以下の内容を追加する
    カーネルのバージョンは適宜置き換える

    最後に、grubの設定をアップグレードする

  7. 再起動する

  8. 以下のコマンドでうまくインストールされたことを確認する

Xenをインストールし,準仮想化

オフィシャルサイトに従い,Ubuntu Server 14.04 64bitを使ってUbuntu 14.4をdomUとしてインストールする

1. Ubuntu Serverをインストールする

    • 普通にインストールよいが,パーティションのところで”Guided  - use the entier disk and setup LVM”を選択し,Dom0(つまり今インストールしているUbunu Server)の領域を最小限サイズにして残りをLVMボリュームとして残しておく.これを失敗するとXenの中でdomUに割り当てる領域が確保できなくなる.
    • インストール後,以下のコマンドでaptをアップデート.
      • $sudo apt-get update
      • $sudo apt-get upgrade

2. Xenのインストール

    • 以下のコマンドを実行
      • sudo apt-get install xen-hypervisor-amd64
      • sudo reboot
    • うまくいっていれば,リブート後,ブートローダーでXenのメニューが出てくる.また,ブートの途中のメッセージが変わる.
    • ログイン後,以下のコマンドで確認
      • $sudo xl list
    • これで”Domain-0″が見えていれば,今起動しているのはXenからdom0として起動したUbuntuということになる.

3. ネットワークの設定

以下の前提で話を進める.

      • ホスト側物理IP:172.21.33.20
      • ホスト側物理インタフェース:em1
      • デフォルトゲート: 172.21.33.1
    • bridge-utilsのインストール
      • $sudo apt-get install bridge-utils
      • ただし,これは既にインストールされているかもしれない.
    • ブリッジインタフェースの定義(重要). xenbr0という仮想インタフェースを作成し,em1でブリッジする
        • $sudo vi /etc/network/interfaces

      # The loopback network interface
      auto lo
      iface lo inet loopback
      # The primary network interface
      auto em1 xenbr0       –> xenbr0を加える
      iface em1 inet static  –> ホスト側インタフェース(em1)の設定
      address 172.21.33.20
      netmask 255.255.255.0
      network 172.21.33.0
      broadcast 172.21.33.255
      gateway 172.21.33.1
      dns-nameservers 172.21.33.16
      dns-search fd.ise.shibaura-it.ac.jp

      まちがい.これは行う必要はない.

      iface xenbr0 inet static   –> ブリッジインタフェースの作成.
      address 172.21.33.22
      netmask 255.255.255.0
      network 172.21.33.0
      broadcast 172.21.33.255
      gateway 172.21.33.1
      dns-nameservers 172.21.33.16
      bridge_ports em1      –> em1にこのインタフェース(xenbr0)を加える.
      iface em1 inet manual   –> この意味は不明.これは,xenbr0を実行する物理的なインタフェースがem1で,そこにはIPはふらないのでこの設定が必要.

    • 定義した変更を反映
      • $sudo ifdown em1
      • sudo ifup xenbr0
      • sudo ifup em1
    • ifconfigなどでxenbr0が作成され,IPが付いているかを確認する

4. 論理ボリュームの作成

    • 論理ボリュームブループ(vgs)に論理ボリューム(lv)を作成する.まず,論理ボリュームグループを確認する
      • $sudo vgs

                                      Screen Shot 2015-05-15 at 09.17.49

                                      この例ではxen-vgという論理ボリュームグループが確認できる

    • 論理ボリュームをlv_vm_ubuntuという名前で作成する
      • $sudo lvcreate -L 30G -n lv_vm_ubuntu /dev/xen-vg
    • 作成された論理ボリュームを確認する
      • $sudo lvs

Screen Shot 2015-05-15 at 09.25.43

                                     この例では,lv_vm_ubuntuという名前で30G確保されていることがわかる.

5. ゲストのインストール

    • domUにインストールするイメージを取得する
      • $sudo mkdir -p /var/lib/xen/images/ubuntu-netboot/trusty14LTS
      • $cd /var/lib/xen/images/ubuntu-netboot/trusty14LTS
      • $wget http://ftp.riken.jp/Linux/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/vmlinuz
      • $wget http://ftp.riken.jp/Linux/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/xen/initrd.gz
    • 設定ファイルの準備.Xenでは,インストールイメージの指定,CPUの数,メモリ量などを設定ファイルに記述し,xlコマンドを使ってインストールや起動を行う.以下は,ゲスト名dom0, 仮想cpu2, メモリ1024MBの設定を行う例.設定ファイルはubun1.cfg
      • $cd /etc/xen
      • $sudo cp xlexample.pvlinux ubud1.cfg
      • $vi ubud1.cfg

# Guest name
name = “dom1″  –> ゲストのホスト名

# Kernel image to boot
kernel = “/var/lib/xen/images/ubuntu-netboot/trusty14LTS/vmlinuz” –>ダウンロードしたイメージの場所

# Ramdisk (optional)
ramdisk = “/var/lib/xen/images/ubuntu-netboot/trusty14LTS/initrd.gz” –> ダウンロードしたイメージの場所
#bootloader = “/usr/lib/xen-4.4/bin/pygrub”                      –> 作成したイメージから起動する場合にはコメントを外す

# Kernel command line options
extra = “root=/dev/xvda1″   –> 意味不明

# Initial memory allocation (MB)
memory = 1024                      –> メモリサイズ

# Maximum memory (MB)
# If this is greater than `memory’ then the slack will start ballooned
# (this assumes guest kernel support for ballooning)
#maxmem = 512

# Number of VCPUS
vcpus = 2                                 –> CPUの数

# Network devices
# A list of ‘vifspec’ entries as described in
# docs/misc/xl-network-configuration.markdown
vif = [ 'bridge=xenbr0' ]       –> ゲストが利用する仮想インタフェースの名前.
disk = [ '/dev/xen-vg/lv_vm_ubuntu,raw,xvda,rw' ]  –> ディスクイメージの設定.xen-vmとlv_vm_ubuntuを指定

    •  ゲストをインストールするときにはkernel, ramdiskを指定し,インストールして作成したイメージから起動するときにはbootloaderのコメントを外し,kernel, ramdiskをコメントアウトする
    • インストールの実行.編集した設定ファイルを指定してゲストを起動する.今回はインストールになる.
      • sudo xl create -c /etc/xen/ubud1.cfg
      • インストールの途中,インターフェースの指定では,ホストと同一ネットワークを指定し,IPアドレスは変更する.
    • インストールが終わると再起動されるが,そのままホストのコンソールに戻される.動いているかどうか確認するには以下のコマンドを実行
      • xl list
      • これでDomain-0だけでなく,dom1(指定した名前)のゲストが見えるはず

6. ゲストの起動と確認

    • ゲストを落とす
      • $sudo xl shutdown ubud1
    • ゲストをインストールしたイメージから起動する
      • 前述したように,設定ファイルのbootloaderのコメントを外し,kernel, ramdiskをコメントアウトする
      • $sudo xl create -c /etc/xen/ubud1.cfg
    • ゲストにリモートからログイン
      • ホストにログインし,ゲストのIPを指定してsshなどを行ってみる.
      • $ssh 172.21.33.22
      • ログインできていたら成功

7.  2台目以降の仮想マシン

これから仮想マシンを増やすときには,論理ボリュームを作成,設定ファイルの作成し,xl createで作ればよい.ブリッジインタフェースは使いまわすこと!

8. domUをバックアップして再利用

//スナップショットを取る(-s)
lvcreate -L 5G -s -n ‘pracb1_2′ /dev/xen-vg/prac1_2

//イメージを作る
dd if=/dev/xen-vg/pracb1_2 of=/home/hiroaki/snapshot.img bs=1k

//消す
lvremove /dev/xen-vg/pracb1_2

//論理ボリュームを作る
lvcreate -L 5G -n ‘pracb1_2′ /dev/xen-vg

//イメージから戻す
dd if=/home/hiroaki/snapshot.img of=/dev/xen-vg/pracb1_2 bs=1k

Ubuntu12.04でOpen vSwitchをインストール

Ubuntu12.04.4 LTSでOpen vSwitchをインストールし,設定した.

インストール

1. Ubuntu12.04を普通にインストール

2. apt-get updateでアップデート

3. 以下のコマンドで必要なパッケージをインストール

# apt-get install -y git linux-source kernel-package \

 devscripts debhelper libtool autoconf automake \

 libssl-dev python-all python-qt4 python-twisted-conch

4. http://openvswitch.org/releases/から,openvswitch-2.1.2.tar.gzをダウンロード

5. tar -xzvf openvswitch-2.1.2で展開

6. linuxカーネルモジュールを作成するため,以下のオプションを付けてconfigure

>./configure –with-linux=/lib/modules/uname -r/build

>make

>make install

7. コンパイルしたディレクトリから,以下のモジュールができていることを確認

>ls -la ./datapath/linux/openvswitch.ko

8. モジュールをインストール

# make module_install

“Can’t read private key”とか言われるが気にしない.

9. lsmodでopenvswitchがインストールされているかどうか確認

#lsmod | grep open

設定

動かすためには,データベースを作成し,serverを起動する必要があるので,まずはそれをやる.

1. データベースの作成

# mkdir -p /usr/local/etc/openvswitch

# ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

この実行は,コンパイルしたディレクトリで行うこと.vswitch.ovsschemaというのがDBのスキーマなので,それを指定しないといけない

2. DBにアクセスするためのサーバの起動.やたら長いオプションをつけて起動しなければいけない(INSTALLに書いてあるのをそのままやればいい).

# ovsdb-server –remote=punix:/usr/local/var/run/openvswitch/db.sock \
–remote=db:Open_vSwitch,manager_options \
–private-key=db:SSL,private_key \
–certificate=db:SSL,certificate \
–bootstrap-ca-cert=db:SSL,ca_cert \
–pidfile –detach

3. データベースの初期化.これは1度やればいいらしい

# ovs-vsctl –no-wait init

4. メインサーバを起動

# ovs-vswitchd –pidfile –detach

これで起動したはず.

ネットワークの設定

いまいちOpen vSwitchの概念がわからなかったが,やっと分かった.FreeBSDでVlanを作るときの概念に似ている.

まず,仮想インタフェースを作り,その仮想インタフェースに物理的なインタフェースをアサインする.そして,その仮想インタフェースがbridgeだったり,vlanだったり色々設定できるようになっているらしい.とりあえず,SDNのHelloWorld的なブリッジインタフェースを作ってみる.

今回は,3つの物理的なインタフェースを全て1つのブリッジインタフェースにアサインする.これは以下のコマンドで行う.

1. ブリッジインタフェースの作成

# ovs-vsctl add-br br0

これでbr0という仮想インタフェースができる.ifconfigで確認できる

# ifconfig br0
br0       Link encap:Ethernet  HWaddr fe:b2:9d:a2:84:45
BROADCAST MULTICAST  MTU:1500  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)

2. 物理インタフェースを仮想インタフェースにアサインする.

# ovs-vsctl add-port br0 eth0

# ovs-vsctl add-port br0 eth1

# ovs-vsctl add-port br0 eth2

3. 確認する

# ovs-vsctl show
a54365a7-c6a5-43b0-b920-bf56e53f37f5
Bridge “br0″
Port “eth1″
Interface “eth1″
Port “eth2″
Interface “eth2″
Port “br0″
Interface “br0″
type: internal
Port “eth0″
Interface “eth0″

なお,この設定でこのホスト自身にIPを振る場合,仮想インタフェースに対して振らないといけない.

#dhclient br0

要注意

接続実験

以下のような環境で接続実験をしたところ,Mac1からMac2にpingが送信できた.かつ,Mac1もMac2もルータを通じて外部ネットワークに接続できた.つまり,Open vSwitchはブリッジで動作していることがわかる.

Screen Shot 2014-06-06 at 21.03.41

補足

上の構成だと,br0とeth1にも192.168.1.xが振られるため,スイッチ自身は外部ネットワークにつながらなかった.よって,物理的なインタフェース(eth0~eth2)にDHCPを使うのをやめたらつながった.インタフェースの設定でinternalのような設定にしたけれど,どうやったか忘れた.

gitの基本的な使い方

Gitでファイルを管理するには,ローカルレポジトリ(git initを行ったディレクトリ)でファイルを追加/編集し,サーバへプッシュすれば良い.そのためには,以下の作業を行う.

  1. ローカルでファイルを追加
  2. ローカルでファイルをコミット
  3. サーバへプッシュ

例えばローカルレポジトリtesでaaa.txtを管理するには,以下のことをやればよい

この作業ができるためには,ローカルレポジトリとサーバレポジトリを関連付けておく必要がある.これはこの作業を行うことでできる.また,この例はファイルを追加したが,ディレクトリを追加する場合も同じ.ディレクトリを追加した場合には,そのディレクトリ以下のファイルすべてが追加されるので注意すること

研究室でのGitLabの使い方

以下に,分散ソフトウェアシステム研究室でのGitLabの使い方を解説する.

  • 初期設定

    • GitLabをブラウザでアクセスする.
    • ログインする(新規ユーザは個別に作ってもらう).
    • My Profileをクリックする.

myprofile

    • 名前,e-mailを入力し,その他の情報は適宜埋める.

user_regist

  • SSHの公開鍵設定

GITを使うには,利用するPCの公開鍵を登録する必要がある.以下の手順で公開鍵を作成し,gitlabに登録する.

    • コマンドプロンプトでssh-keygenを実行する.デフォルトでは${HOME}/.ssh/id_rsa, ${HOME}/.ssh/id_rsa.pubが作成される.
    • id_rsa.pubが公開鍵になるので,このファイルをviなどで開き,内容をコピーする

rsa_key

    • My Profileをクリックし,”Add Public Key”ボタンをクリックしてキーの登録画面を表示する

addkey

    • Titleにはキーを識別できる何らかの文字列を入力し,Keyの欄に,コピーしたキーを貼り付けてSaveをクリックする.これでエラーが出ていなければ,キーの登録が完了する

registkey

  • プロジェクトの作成

4年生は,1年間を通し,様々なものを作成していきます.そのため,研究室の活動で作成するすべてのものを1つのディレクトリで管理します(もちろんサブディレクトリを作成して分類します).例えばmygrad_projectのようなフォルダを作成し,次のような構成でフォルダ分けすること原則とします.しかし,研究室で行っているプロジェクトの一部を作成する場合などはこの限りではありませんので,個別に対応します.

  • mygrad_project   -> 親ディレクトリ
  • mygrad_project/book_resume -> 輪読用の資料
  • mygrad_project/rinkou   -> 輪講の資料
  • mygrad_project/intermediate/ppt -> 中間発表のプレゼン資料
  • mygrad_project/intermediate/resume -> 中間発表のレジュメ
  • mygrad_project/final/ppt -> 卒論発表のプレゼン資料
  • mygrad_project/final/resume-> 卒論発表のレジュメ
  • mygrad_project/final/thesis -> 卒論
  • mygrad_project/programs/{aaa/bbb/ccc}  -> 卒論で作成するプログラムなど(aaa,bbbはそれぞれフォルダ)

このように,mygrad_project以下にサブディレクトリを作成して分類しますが,サブディレクトリは随時追加していけばよいです.ここでは,全ての親ディレクトリとなるmygrad_projectを以下の手順でプロジェクトとして作成します.

なお,このままだと全員同じフォルダ名(mygrad_project)になってしまうので,実際に作成し共有するときには,mygrad_xxxxxのxxxxに当たる部分は自分の名前,または苗字,学生番号にして重複しないようにしてください!

    • DashBoardをクリックし,その次にprojectsをクリック,そして「New Project」をクリックする

newproject

    • プロジェクト名を例えば「mygrad_project」と入力する(これがディレクトリ名になる).
    • Namespaceに自分の名前(アカウント登録の時につけた名前)であることを確認し,「Create Project」をクリックする.
  • createproject
      • プロジェクトの作成が成功すると,PCで実行するべき指示が表示される.

    gitinit

    • Git global setup:にあるように,PCのコンソールでコマンドを実行する.
    • Create Repository:にあるように,ローカルにフォルダを作り,指示通りコマンドを実行する.なお,フォルダを作る場所はどこでも良いが,忘れないようにすること.また,フォルダを移動することはいつでもできる.この作業は,PCにフォルダを作り,プロジェクトに1つファイル(README)を追加し,gitlabと同期する作業を意味している.
    • Dashboradをクリックし,右のprojectsタブに,今追加したプロジェクトがあることを確認する

    confirmproject

      • 自分のプロジェクトを選択し,Filesタブをクリックする.そして,今追加したREADMEファイルが存在することを確認する.

    confirm_readme

    • 「Settings」タブをクリックし,その後「Term」タブをクリックする.

    addterm

    • 「New Term Member」をクリックする.
    • Peopleに福田(Hiroaki Fukuda)を追加し,Project Accessは「Reporter」を選択してAdd Usersをクリックする

    addmember

    以降,このプロジェクトにファイルを追加し,適宜gitlabと同期することによって,いつPCが壊れてもサーバにバックアップが作成されることになる.また,複数のPCで同期することも可能となる.

  • テンプレートはこちらから

卒論の書き方

卒論の書き方として学習したことをまとめる.

卒論を書く時に意識するべきこと:

1.abstractと1章で研究の概要がわかるように書く.他の章はそれを詳しくしたものを書く.また,各章は冒頭にその章で説明することを書く(論文の読者は途中で読むのをやめるかもしれない).

2.論理的に書く.誰が読んでも納得できるように書く.論理の飛躍がないように書く.

3.なるべく解釈の幅を少なくするように書く.色々な意味でとれる文章を書かない.

4.流れを意識して書く.突然意味の分からない用語を出さない.

5.過不足なく研究内容を伝える(なるべく質問がなくなるように書く).多少くどいぐらいでも大丈夫.

卒論を書く時の注意点:

1.句読点の書き方(。→. 、→,).また,句読点の後は半角スペース空ける.

2.表や図はページの一番上か下.TeXのfigureのオプションは[tb]