あお日記

理系研究者のブログです。勉強したことや本の感想などを中心に残して行くつもりです。

VMのubuntu-desktopでterminalの表示がおかしかったので直した

ホストOSのubuntu上で仮想マシンマネージャーを使用してインストールしたゲストOSのubuntu-desktopのterminalの表示がおかしかったので直しました。

ゲストOSをVNC等を使って表示した時に起こる現象のようで、デスクトップなど他の描画は正常なのにterminalの表示がおかしい。具体的にはterminalウィンドウが写真のような状態。
f:id:ckh23020:20150605125713p:plain

調べたところデフォルトのディスプレイドライバのcirrusが原因のようで、
  仮想マシンマネージャ→詳細→ビデオカード→モデル
でcirrusをvmvgaに変更する事で正常に表示する事ができました。

ちなみにコマンドvirshでも変更可能で、

virsh edit HOGE     //HOGEは設定した仮想マシン名

として

<video>
  <model type='cirrus' vram='9216' heads='1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>

のmodel typeの値を

<video>
  <model type='vmvga' vram='9216' heads='1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>

のように書き換える事でも修正可能です。

同じ現象で悩んでいる方の助けになれば幸いです。

参考:
[SOLVED] Terminal window strange and not opaque via VNC on VM

Ubuntu12.04へのDPDK1.7.1のインストール

少し詰まったのでメモ。

make install 時に

/home/HOGE/dpdk-1.7.1/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h:3868:1: エラー: ‘skb_set_hash’ と型が競合しています
/usr/src/linux-headers-3.13.0-49-generic/include/linux/skbuff.h:736:1: 備考: 前の ‘skb_set_hash’ の宣言はここです

とのエラーが出た。

/dpdk-1.7.1/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
内の

#if (!(RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7,0)))

の部分を

#if (!(RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(6,6)))
 #if (!(UBUNTU_KERNEL_CODE >= UBUNTU_KERNEL_VERSION(3,13,0,30,54) \
     && (UBUNTU_RELEASE_CODE == UBUNTU_RELEASE_VERSION(12,4) \
      || UBUNTU_RELEASE_CODE == UBUNTU_RELEASE_VERSION(14,4))))

のようにする必要があった。

参考URL:
[dpdk-dev] Building 1.7.1 or 1.8.0-rc4 on latest CentOS 6.6 fails

VirtualBox+ホストオンリーアダプタ+Gitでソケットプログラミング環境構築

手元のMac上でソケットプログラムのテストをするための環境構築をしました。

ホストマシンのGitリポジトリVirtualBoxを使って構築したLAN内のゲストマシンにクローンして編集・テストします。

ゲストマシンでプログラムを編集・テストし、プログラムを外に持ち出す際にホストマシンにコピー、 外で更に編集しゲストにコピー、というのを繰り返しているウチにソースコードが分散し新旧などが不明になったため、 きちんとホストマシン上で管理しようとしたのがきっかけです。

つまづいたりした部分を含めて全体を書いていきます。

  1. VirtualBoxを使ったLAN構築(ホストオンリーアダプタ)

  2. ゲストマシンOSの設定

  3. Gitの設定(ホスト・ゲスト)

1. VirtualBoxを使ったLAN構築(ホストオンリーアダプタ)

ソケットプログラムをテストするためのゲストマシン(サーバ・クライアント等)と、 Gitリポジトリのあるゲストマシン間の通信が必要なので、 VirtualBoxのホストオンリーアダプタでゲスト・ホストをまとめたLANを構築します。

その際にVirtualBox→環境設定→ネットワーク、からホストオンリーネットワークの設定を行います。 ホストのアダプターに適当な固定IPアドレスを振り、DHCPサーバを動かしておきます。

以下を参考にさせて頂きました。

【VirtualBox】ホストオンリーアダプター + DHCP の設定 - pospomeのプログラミング日記

これでゲストマシンを起動すると上記で設定したサブネットでLANが構築されます。

2. ゲストマシンOSの設定

ただしこの時いくつか注意点があります。 ホストオンリーアダプタ以外にブリッジアダプターを設定していたりすると 起動時にホストオンリーアダプタ用のNICが見えていなかったりします。 (特にアダプター1をブリッジ、アダプター2をホストオンリー、などに設定した場合)

NICが見えていないだけなので毎回ifconfig等で立ち上げてIPアドレスを振っても良いのですが面倒なので設定ファイルを編集します。

Ubuntu12.04の場合だと、/etc/network/interfacesが

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp/etc/network/interfaces

等になっているはずなのでここにeth1の分を追記します。 eth0の記述をコピーしてeth1にすればOKです。

ただしここでもつまづく事があります。 NICの番号設定がおかしくなっていたりすると設定されないのでその際にはNICの番号を振り直します。 (上記だとブリッジがeth1, ホストオンリー用がeth2になってる場合など)

/etc/udev/rules.d/70-persistent-net.rulesを編集すればOKです。

以下を参考にさせて頂きました。

Technical Memorandum: LinuxでNIC番号が思った通りにならない

この時にVirtualBoxのネットワーク設定から各アダプタのMACアドレスを確認し、eth番号を書き直します。 間違えて同じMACアドレスで2種類の設定を書いたりすると上手く行きません。というか上手く行きませんでした。

以上でホストマシン(IPは固定)・ゲストマシン(IPはDHCPなので台数を増やしたりしてもOK)でLANが構築できました。

ちなみに文章中でifconfigと書きましたがifconfigは非推奨と言う事でipコマンドを使用した方が良いみたいです。 今までありがとう「ifconfig」 | ツチノコブログ

3. Gitの設定

あとはホストでGitリポジトリを立てゲストにクローンし、ソースコードの編集・テスト・バージョン管理をします。

ホストではプログラムを置いたディレクトリで

$ git init
$ git add *
$ git commit -m "initial import"
$ git config --bool core.bare true #リモートリポジトリをbareに設定

等とし、ゲストで

$ git clone ssh://user@hostname/path/to/repos

とすればOKです。userはssh接続を許可したホストOSのユーザ名、hostnameは1. で設定したホストの固定IP、/path以下はホストマシン上のGitリポジトリまでの絶対パスです。

以下を参考にさせて頂きました。

GitHub - いまさら聞けないgitの使い方 - Qiita

リモートリポジトリへの git push に失敗した場合 (remote rejected) - まじめにゆいがどくそん

以上、誰かのお役に立てば幸いです。

Virtualbox上のUbuntu12.04にDPDK1.7.0+Lagopusをインストールした

手元のMacでOpenFlowを使った実験をするために
VirtualBoxにLagopus switchを入れてみる。
を参考にさせて頂いてOpenFlowスイッチLagopusをインストールしていたけど詰まったのでその部分を。

上記のリンクと違って自分はDPDK1.7.0を使用した。
その際に

nmmintrin.h:31:3: error: #error "SSE4.2 instruction set not enabled"

なるエラーが出てきたので調べていた所
Lagos running on small factor machine
を見つけた。

上記のスライド8枚目にあるように、使用不可能なNICのconfigがyesとなっているため起こるようだった。
同スライドにある通りconfigを書き換える事でエラー回避。

次にLagopusのインストールに進んだのだがmakeの時点でこちらでも同じようにエラーが。

/usr/bin/ld: cannot find -lrte_pmd_ixgbe

との事。

DPDKのconfigをいじったせいだろうと言う事でlagopusのフォルダ配下にあるconfigファイルから

grep "lrte_pmd_ixgbe" *

のようにして当該箇所を見つけ

-Xlinker -lrte_pmd_ixgbe

などを削除して再度configureすることでエラー回避&動作確認できました。

追記:
lagopus/QUICKSTART.md at master · lagopus/lagopus · GitHub
では特に記述が無いが実行は/etc/lagopusなどlagopus.confを置いた場所で実行する必要があった。

Emacsの改行時の自動インデントを無効にする方法

久しぶりにEmacsをアップデートしてtex文書を書いていたら改行毎に自動でインデントが入るようになっておりストレスでハゲたので無効にしました。

どうやらEmacs24.4でelectric-indent-modeなるものがデフォルトでenableになっているのが原因だったようです。
emacs 24.4 をインストールしてみる - LGTM

~/.emacs.d/init.elに

(electric-indent-mode -1)

を追記することで無効にできました。

ただしこれをすると全てのモードで無効になるようなので使い分けるのであればelectric-indent-local-modeを使うなど別の設定が必要なようです。
emacs - How to turn of electric-indent-mode for specific Major mode? - Stack Overflow

C言語などだとelectric-indent-modeも便利なようなので自分は

(add-hook 'yatex-mode-hook '(lambda ()
			      (electric-indent-local-mode -1)))

として取りあえずYatextexを書いている間は無効にするよう設定しました。

それにしてもいつもEmacs LISPの書き方分からないまま人のをコピーしてて良くない...

dstatとかddstatとかDataDogとか。監視・可視化に便利です。

マシンの状況を監視したり可視化するのにdstatがとても便利なのでご紹介。
UbuntuとかCentOSだとapt-getやyumで簡単にインストールできます。

リソース監視のdstatが凄くいい - rochefort's blog
dstatの便利なオプションまとめ - Qiita

特に--outputオプションでログをファイル保存しておき(csv形式で保存される)、
それに-tオプションも合わせて時刻情報も記録しておくと簡単に時系列グラフが書けたりします。

便利で使ってましたが、dstatの結果をリアルタイムにグラフ化できないかなーと思ってたらid:winebarrel さんが作って下さってました。

ddstatはrubyのgemでインストール可能です。

あとはDatadogの方のアカウント登録をし、Datadogクライアントを監視したいマシンにインストールした後にddstatを実行すると綺麗にグラフ表示されます。
Datadogのグラフはドラッグ範囲指定で簡単にタイムスケール変更もできます。

おすすめです。

高校数学でわかる線形代数:竹内淳

こちらは論文読んだりしていてどうも行列が良く分からなかったので再勉強。
大学の時も線形代数は学んだはずなんだけど何にも覚えてない。


高校数学でわかる線形代数

高校数学でわかる線形代数―行列の基礎から固有値まで (ブルーバックス)

高校数学でわかる線形代数―行列の基礎から固有値まで (ブルーバックス)


前回と同じく竹内亨先生の本です。

竹内先生の本は合間に偉大な数学者たち
(時には偉大な物理学者や天文学者であったりもします)
の歴史が書かれていて楽しく読むことができます。


本著では行列を中心として、
行列式の意義、単位行列逆行列行列式、行列の計算、
そして行列と空間・ベクトルの関係、固有値問題、複素行列、
最後に行列と量子力学の関係が学べます。


量子力学シュレディンガー方程式、といった言葉に
わくわくする人は特におすすめかも知れません。

個人的には冲方丁の小説である天地明察が好きな本の1つなのですが、
これの登場人物である関孝和が行列に深く関わっているという事を
本著で知ることができ、勉強をしながら非常にテンションが上がりました。

天地明察(上) (角川文庫)

天地明察(上) (角川文庫)

天地明察(下) (角川文庫)

天地明察(下) (角川文庫)

本著ではあくまでもシュレディンガー方程式では行列がどう活かされているか、
という解説のみがなされており、方程式そのものを深く理解する事はできなかったので、
次はシュレディンガー方程式を勉強してみようか。

こうやって世界が広がっていくのは楽しい。