タグ別アーカイブ: ubuntu

etcディレクトリのバージョン管理にはetckeeperが便利

etckeeperはgitなどのバージョン管理システムでetcフォルダの中身をバージョン管理してくれる優れもの。
例のごとくUbuntu 12.04LTSでの設定方法。
続きを読む etcディレクトリのバージョン管理にはetckeeperが便利

Ubuntu 12.04 LTS + KVMでシャットダウン時自動サスペンド

以前から何回も書いているとおり、Ubuntu 12.04でKVMを使っているけれど、ホストがシャットダウンすると、ゲストは電源ぶち切り状態で終了してしまう。したがって、Parallels Desktopみたいに、ホストシャットダウン時に自動でサスペンドさせたい。

以下のようにすれば良いらしい。

sudo -s
cp /usr/share/doc/libvirt-bin/examples/libvirt-suspendonreboot /etc/init.d/
chmod 755 /etc/init.d/libvirt-suspendonreboot
mkdir -p /var/lib/libvirt/autosuspend
update-rc.d libvirt-suspendonreboot defaults 21 19
exit

とりあえず上手くいったっぽい。

(2012/08/17追記)ゲストWindowsはディスプレイドライバの関係上休止状態にならずシャットダウンになる模様。まぁそれはそれで良いか。

参考: http://d.hatena.ne.jp/matoken/20101217/1292602675

Ubuntu 12.04LTS + kvmでPCIパススルー

Ubuntu 12.04 LTS上のkvmでPCIパススルーをしようと思ったら色々躓いたので、その解決策を調べてみた。
自分用メモ。

まず、鼻毛鯖(NEC Express5800/S70 タイプPJ)に標準搭載のCPUである Pentium G6950 はVT-dに対応していないので、Core i5 660に換装した。換装作業自体はとても簡単。参考にしたのはこのブログ

次に、virt-managerを使って、仮想マシンにホストのPCIデバイスを追加した(ここら辺はGUIなので何も考えずに設定できる)。

さて、これだけでPCIパススルー使えるのかと思ったのだが、ちゃんと設定しても仮想マシンが起動してくれない。
実際には以下の設定が必要だった。

1. 起動オプションでiommuを有効にする

/etc/default/grubのGRUB_CMDLINE_LINUX=の行を編集する。

GRUB_CMDLINE_LINUX="intel_iommu=on,igfx_off,pass-through"

igfx_offを指定しておかないと、dmesg |grep DMARで何かエラー吐いてたので指定する。どうやら統合グラフィックスとは相性が悪い模様。これを指定してもホストでは3D使えてるし、指定して損はない? 詳しい人がいれば教えて欲しい。
pass-throughに関しては不明だけど、書いてあるサイトがあったので書いた。

update-grub2を実行して設定を反映させる。

2. カーネルモジュールの設定をする

1をやってみてもまだ仮想マシンが立ち上がらない。
これは本当に分からず丸一日使ってしまったのだけど、以下のようにして解決した。

/etc/modprobe.d/kvm.conf を作成して以下のように記述する。

options kvm allow_unsafe_assigned_interrupts=1

あとは再起動するだけ。

これで問題なくゲストOSからホストのPCIデバイスを認識出来るようになった。
某ボードを試しに認識させてみたら認識して問題なく使えている。本当はSATAボードとか認識させてパフォーマンス計測したいけど、今は持っていないのでまたいつか。

さくらVPS + Ubuntu 12.04LTSで「Booting from Harddisk」から進まない(ように見える)現象

昨日、さくらVPSを再起動したところ、標記の現象に遭遇した。
再起動をかけたところ一向にUbuntuが立ち上がってこないので、おかしいぞと思ってVNCコンソールを見ると以下のような画面で止まっていた。

Booting from Hard Disk

やべー、バックアップまだ取ってないし、どうしよう。

続きを読む さくらVPS + Ubuntu 12.04LTSで「Booting from Harddisk」から進まない(ように見える)現象

Ubuntu 11.10 64bitでInspircdをmakeしたときのエラーと脆弱性を回避する

普通に./configureとmakeとかすればいいのだけど、引っかかったところをメモ。

バージョンは、inspircd-1.2.8。
普通にコンパイルしようとすると以下のビルドエラーが出る。

        LINK:               inspircd
command_parse.o: In function `CommandParser::FindSym(void**, void*, std::stringconst&)':
command_parse.cpp:(.text+0x2a50): undefined reference to `dlsym'
command_parse.cpp:(.text+0x2a5c): undefined reference to `dlerror'
command_parse.o: In function `CommandParser::ReloadCommand(std::string, User*)':
command_parse.cpp:(.text+0x2d80): undefined reference to `dlclose'
command_parse.o: In function `CommandParser::LoadCommand(char const*)':
command_parse.cpp:(.text+0x3257): undefined reference to `dlopen'
command_parse.cpp:(.text+0x3271): undefined reference to `dlerror'
dynamic.o: In function `DLLManager::DLLManager(InspIRCd*, char const*)':
dynamic.cpp:(.text+0x68): undefined reference to `dlopen'
dynamic.cpp:(.text+0x82): undefined reference to `dlerror'
dynamic.o: In function `DLLManager::~DLLManager()':
dynamic.cpp:(.text+0xc9): undefined reference to `dlclose'
dynamic.o: In function `DLLManager::GetSymbol(void**, char const*)':
dynamic.cpp:(.text+0x130): undefined reference to `dlerror'
dynamic.cpp:(.text+0x147): undefined reference to `dlsym'
dynamic.cpp:(.text+0x153): undefined reference to `dlerror'
collect2: ld returned 1 exit status
make[1]: *** [inspircd] Error 1
make: *** [ircd] Error 2

./configure を実行後、以下のファイルを修正する必要がある。
./src/Makefike

修正前

        $(RUNCC) $(FLAGS)   -rdynamic -L. -o inspircd $(LDLIBS)  bancache.o base.o channelmanager.o channels.o cidr.o command_parse.o commands.o configreader.o cull_list.o dns.o dynamic.o filelogger.o hashcomp.o helperfuncs.o inspircd.o inspsocket.o inspstring.o listensocket.o logger.o mode.o modules.o server.o snomasks.o socket.o socketengine.o testsuite.o threadengine.o timer.o user_resolver.o usermanager.o userprocess.o users.o wildcard.o xline.o modes/modeclasses.a socketengine_epoll.o threadengine_pthread.o

修正後

        $(RUNCC) $(FLAGS)   -rdynamic -L. -o inspircd  bancache.o base.o channelmanager.o channels.o cidr.o command_parse.o commands.o configreader.o cull_list.o dns.o dynamic.o filelogger.o hashcomp.o helperfuncs.o inspircd.o inspsocket.o inspstring.o listensocket.o logger.o mode.o modules.o server.o snomasks.o socket.o socketengine.o testsuite.o threadengine.o timer.o user_resolver.o usermanager.o userprocess.o users.o wildcard.o xline.o modes/modeclasses.a socketengine_epoll.o threadengine_pthread.o $(LDLIBS) 

変わったところは、$(LDLIBS)の場所。
どうやら、gccの仕様変更で、リンクのコマンドオプションはオブジェクトよりも後にしなければならないらしい。
モジュールとかもその要領で変更する必要があるのがあるかも。なんか、LDLIBSに自分でライブラリ追加指定しても使ってなかったらリンクされないとかいう仕様になってるっぽいし、ちょっと不便。

あと、Inspircdには、セキュリティ上の問題点(脆弱性)が指摘されている。
JVNVU#212651 InspIRCd にメモリ破損の脆弱性

これについては、ここを参考に、./src/dns.cppを修正する必要がある。

修正前

                case DNS_QUERY_PTR:
                        o = 0;
                        q = 0;
                       while (q == 0 && i < length && o + 256 < 1023)

修正後

                case DNS_QUERY_PTR:
                        o = 0;
                        q = 0;
                       while (q == 0 && i >= 0 && i < length && o + 256 < 511)

iが0以下になったり、512以上になったりするということなのかな?