BSD

FreeBSD 10.0 でqemuを使う

FreeBSDでqemuを使うためのメモ。基本的にはここのwikiを参考にしています。

基本

1) パッケージのインストール

# pkg install qemu

2) /boot/loader.confに以下の4行を追加する

if_bridge_load="YES"
bridgestp_load="YES"
if_tap_load="YES"
aio_load="YES"

再起動しておしまい。再起動が嫌ならkldloadでモジュールを読み込ませるとよいかと。

3)適当な起動可能なゲストのCDのimageを用意して起動させて動くのを確認する

以下の例ではFreeBSD-9.0のimageを使用しています。

# qemu-system-x86_64 \
-hda vm00.img -m 1024 -monitor telnet::4444,server,nowait -vnc :0 \
-cdrom Images/FreeBSD-9.0-RELEASE-amd64-disc1.iso 

確認は適当なvncclientで

% vncviewer localhost

とかやればOKです。

応用

動かすだけならこれでもいいのですが、これだけですとHostがDHCPサーバ&ルータになり、ゲストと外界が遮断されている状態なので、もうひと捻りします。具体的には bridgeとtapデバイスを使って、ホスト側からのパケットをゲスト側にも持ってくるという作戦。

4) /etc/sysctl.confに以下の2行を追加

net.link.tap.up_on_open=1

これは tapデバイスがopenされたとき自動的にupするというものの設定らしいです。設定しなくてもqemu起動する度に ifconfig tap0 upとかしてやればいいのですが、煩雑なので設定しておいたほうがよいでしょう。

5) /etc/rc.confに以下の3行を追加 (re0は使用しているNICの名前に適宜読み替えてください)

cloned_interfaces="bridge0 tap0"
autobridge_interfaces="bridge0"
autobridge_bridge0="re0 tap*"
ifconfig_bridge0="up"

cloned_interfacesにbridge0と書いただけでは bridge0がupされた状態でやってこないので、ifconfig_bridge0="up"を書いています。もっとスマートな手法があるかもしれませんが。ここまで設定したら念のため再起動します。これも再起動が嫌だというひとは4の設定も含めてsysctrlやifconfigで自力で設定するという手法もあります。

6) 適当な起動可能なゲストのCDのimageを用意して起動させて動くのを確認

qemu-system-x86_64 -net nic -net tap,name=tap0,script=no \
-hda vm00.img -m 1024 -monitor telnet::4444,server,nowait -vnc :0 \
-cdrom Images/FreeBSD-9.0-RELEASE-amd64-disc1.iso

VNCで起動を確認し、LiveCDやshellに移行し dhclient ed0等するとDHCPサーバからアドレスが振られるのがわかるかと思います。

Posted by issei

カテゴリ : BSD

FreeBSD 10.0-RELEASEへのアプグレード続きの続き

どうも現状のportsだと、glib20は /usr/local/include/iconv.hがあれば使わないようにconfigureしても絶対それをincludeしちゃうようです。なら gnuのiconvを削除すればいいんじゃね?と思ったわけですが、libiconvを pkg remove -fで削除したら(当然ながら)いろいろなモノが動かなくなり、それでもまぁもっかいビルドすればいいかと思ってたんですが、portsそのものがコンパイルできなくなるという状態に(pythonとか動かないので)。これはいかんと、いうことで zfs rollbackで戻しました。いずれiconvは削除できるのは削除するという方向にして、 とりあえずは /usr/local/include/iconv.hだけを別名に renameして glib20をごまかしてやることにしました。(あとで忘れそうだな

この状態で

portmaster -a -w -d

としたら、大部分がリビルドできるように。たまに出るエラーは手動で修正。大抵は依存関係の問題なんで、先に別なほうをビルドしちゃえばOKですが(めんどうくさいw

全部まっさらにして入れ直したほうが早かったかなー?しかしFreeBSD8から継ぎ足して使ってきた秘伝の・・・(略

 

Posted by issei

カテゴリ : BSD

FreeBSD 10.0-RELEASEへのアプグレード続き

いくつか標準から外れたものがあるようだ。とりあえず cvsは消えてくれてサンキューだが、digは無いと困るので入れた。

portsのリコンパイルはportmasterにお任せなんですが、それでもiconv関連で以下のようなメッセージが出て、

error: GNU libiconv not in use but included iconv.h is from libiconv

エラーで止まって悩みました。

これ以前別のプロジェクトでもハマったんだよな。おそらくconstがついてるか否かとかそういう(些細な)問題だったような記憶があるけど、これは古い何かと何かがかち合って、何かと何かのiconv.hの宣言がかみ合ってないのか?まずはググるが、適切な回答みつからず。しゃーないから自分で調べる

/usr/ports/devel/glib20のMakefile

を眺めると

ICONV_LIBというのが定義されていると、 configureに  --with-libiconv=gnuが渡されるようである。エラーで止まったあとに workの下で ./config.statusしてみると

# ./config.status --config
'--enable-static' '--disable-gtk-doc' '--with-html-dir=/usr/local/share/doc' '--disable-man' '--without-xml-catalog' '--with-pcre=system' '--disable-fam' '--disable-dtrace' '--with-libiconv=native' '--disable-modular-tests' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=x86_64-portbld-freebsd10.0' 'build_alias=x86_64-portbld-freebsd10.0' 'CC=cc' 'CFLAGS=-O2 -pipe -DLIBICONV_PLUG -fno-strict-aliasing' 'LDFLAGS= -L/usr/local/lib' 'CPPFLAGS=-I/usr/local/include -DLIBICONV_PLUG' 'CPP=cpp' 'CXX=c++' 'CXXFLAGS=-O2 -pipe -DLIBICONV_PLUG -fno-strict-aliasing -DLIBICONV_PLUG' 'PKG_CONFIG=pkgconf' 'PYTHON=/usr/local/bin/python2.7'

と、nativeなiconvを使おうとしてるので、これが効いていないっぽい。devel/glib20/Makefileを強引に gnuを使うように書き換えたらちゃんとコンパイルが通った。

つまるところ、nativeな iconvを使おうとしてるのに /usr/local/include/iconv.h をincludeしているのがよくないのであろう。ここまではわかった。

コンパイラのインクルードパスを見る順番という問題な気もするが、iconvを全削除して、portsをリビルドするとうまくいくような気もする?それはそれでいろいろ別な問題が発生するような気がするが、さてどちらの対処でいくかべきか?

 

Posted by issei

カテゴリ : BSD

FreeBSD10へのアプグレード

放置していたFreeBSD RELEASE-10へのアプグレードですが、OSはほぼ問題なく移行できました。まぁ問題はその後の設定なんですけどね。

  • jailの起動でいろいろ言われるので、警告どおり jail.confに書き換える
  • パッケージ管理システムがpkgへ移行したのでpkg2ngでコンバート(なにやら色々と嫌な感じの警告が沢山でてる)

とりあえずここまで。あとlinux関係のモジュールでいくつかエラーが出てたのう・・・

Posted by issei

カテゴリ : BSD

FreeBSD 9.2で6rdを使う

9.1まではこちらの記事にあるこちらのパッチが適用できたのですが、9.2からは数ヶ所rejectされるようになってしまいました(ちなみに /usr/ports/net/stf-6rd-kmodから入れても同じようなことになるような感じ)

なので手動でセコセコ直す作業が発生。疲れた~。 一応sakuraのVPSではちゃんと動いているようです。 疲れたついでに9.2用のパッチをここにおいときます。

Posted by issei

カテゴリ : BSD

FreeBSD 9.2にしたらjail内でPostgreSQLが動かなくなった

前は/etc/rc.confに

jail_sysvipc_allow="YES"

としとけば動いたんですが、9.2からは

jail_jail171_parameters="allow.sysvipc=1"

のように書かないとダメっぽい。これ以上詳しくは追ってない・・

Posted by issei

カテゴリ : BSD

FreeBSD 9.2にしたらjailが動かなくなった

cannot start jailと出て起動しなく。手動では起動するので/etc/rc.d/jailが何か変更になったぽい。で追っていくとIPv6の指定の仕方が不味いということに気がつきました。パラメータのIPのリストをみてIPv4のときはip4.addr, IPv6のときはip6.addrで指定するように変わったようです。で、/etc/rc.confには以下のようにかいていたのですが

jail_jail171_hostname="jail171.jail"
jail_jail171_ip="192.168.253.171,2400:XXXX:100::192.168.253.171"
jail_jail171_rootdir="/jails/jail171"
jail_jail171_procfs_enable="YES"
jail_jail171_devfs_enable="YES"
jail_jail171_exec_start="/bin/sh /etc/rc"
jail_jail171_exec_stop="/bin/sh /etc/rc.suhtdown"
jail_jail171_mount_enable="YES"

2400:XXXX:100::192.168.253.171が *.*.*.*にマッチしてしまいIPv4のアドレスだと思われてしまうようです。故に全部:で区切って書けば問題なさげです。あるいは/etc/rc.d/jailの以下の部分:

    # Identify type {inet,inet6}.
    case "${_addr}" in
    *\.*\.*\.*)     _type="inet" ;;
    *:*)            _type="inet6" ;;
    *)              warn "jail_extract_address: type not identified"
                    ;;
    esac

これを

    # Identify type {inet,inet6}.
    case "${_addr}" in
    *:*)            _type="inet6" ;;
    *\.*\.*\.*)     _type="inet" ;;
    *)              warn "jail_extract_address: type not identified"
                    ;;
    esac

とするとよいようです。

Posted by issei

カテゴリ : BSD

FreeBSDでVirtualBoxのファイルダイアログが開けない

起動して何かしようとすると、

VirtualBox cannnot talk to klauncher Not connected to D-Bus server. FreeBSD

のようなエラーが出て動かないという。まさかファイルのダイアログが開けなくて動かないとか・・・うーん。

で、検索してみると、このあたりがズバリそれのようです。

[Solved] DBus running but not working - The FreeBSD Forums

上のリンクを読んでみると分かる通り解決方法はdbusのダウングレード。何か負けてるような気もしますが、詳細を追ってる時間がないのでオイラもそれに習いダウングレードで解決を目指すことにしました。負け犬。

ダウングレードは古いソースをもってきて自分でmakeしてinstallすればいいんですけど、どうせならportsで管理しておきたいところ。そこで、 portdowngadeとportmasterでダウングレードすることにしました。portdowngradeは /usr/ports/ports-mgmt/portdowngrade/にあるのであらかじめ installしておきます。

ちなみにこのブログ書いてる時点でdbusのバージョンは 1.6.12 です。このバージョンがinstallされていると仮定します。

# portdowngrade devel/dbus

とやるとdbusの更新履歴がずらずらと出てきます。見ると

r312209

が 1.4系の最終バージョンのようなので、このときのportsのディレクトリをチェックアウトしてきます。

# cd /home/hoge
# portdowngrade devel/dbus 312209

このチェックアウトは/usr/portsの下とかでやらないほうがよいでしょう。自分のホームディレクトリとかでやります。するとdbusというディレクトリにr281729のportsのdbusのディレクトリが現れます。

その後

# portmaster -w -o <dbusを展開したディレクトリ> /var/db/pkg/dbus-1.6.12

とやります。これでdbusを再起動したら大体動いているようです。もっとも他のdbusを使うpkgはdbusのバージョンが1.6.12だと思ってるから何か予期せぬ問題が発生するやもしれませんけどね・・・まぁそんときはそんときということで。とりあえず今は何事もなく動いているようです。

Posted by issei

カテゴリ : BSD

FreeBSDでacroread8が起動しない。対処のメモ

新しいPCにFreeBSDを環境を構築しているのですが、acroread8が以下のようなメッセージを吐いて動かないという・・・

Freebsd linux NIS getpwuid_r(): failed due to unknown user id XXXX

LinuxエミュがNIS引いてないのが原因。

/compat/linux/etc/nsswitch.conf

をNISを見るように修正で対処。古いPCではちゃんと対処してたんですがね・・・ すっかりそういう対処をしたというのを忘れていたようで。 あるいは妖精さんが対処してくれてたのかなぁ?

Posted by issei

カテゴリ : BSD

ruby 2.0.0をFreeBSDにインストールしてみた。

大々的にrailsのバージョンアップをしなくてはならない(ことが予想される)ので、まずは入れてみました。

https://www.freshports.org/lang/ruby20/

によると、24 Feb 2013 15:37:37 であるからホヤホヤの模様。

と言っても、基本 /usr/ports/lang/ruby20の下でmake installとするだけです。その後
/etc/make.conf
RUBY_VER=2.0
と書くとよいでしょう。書かないとportsで酷い目にあいます。

以上・・・なんですが、rails3をsetupするときに httpsでファイルが持って来れない。具体的には
bundler http.rb:917:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
のようなエラーでハマりました。

これは結論から言うと以下のサイトのとおり。

homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応
http://qiita.com/items/12457815d5cee3723b97


FreeBSDについてはデフォルトの位置は /etc/ssl/cert.pem です。そこにコピーすればOKです。
Posted by issei

カテゴリ : BSD