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

Raspberry Pi + FreeBSD で mrubyをビルドする。

mrubyをFreeBSD+Raspberry Pi で動かすためのメモ。

mrubyをコンパイルするにはGNU bison やらrubyやらが必要なのですが、とにかく非力なRaspberry Piではちょっと厄介。環境を整えるのに何時間もかかってしまうという。

しかし、mrubyはcross-compileが簡単に出来るように作られているので、その3のように make worldがクロス環境でビルドが出来ているのなら、そのまま簡単にビルドできちゃいます。

クロス開発環境一式は
/usr/obj/arm.armv6/PATH/tmp/usr/bin
(PATHはコンパイルしたソースのパスが入るので適宜修正)
に出来上がってるので、それを使ってクロスコンパイルをするように、build_config.rbの最後に追加してやれば終わりです。例えば以下のようになります。
MRuby::CrossBuild.new('armv6') do |conf|
  toolchain :gcc  
  conf.cc do |cc|
    cc.command = "/usr/obj/arm.armv6/PATH/tmp/usr/bin/cc"
  end
  conf.linker do |linker|
    linker.command = "/usr/obj/arm.armv6/PATH/tmp/usr/bin/cc"
  end 
  conf.archiver do |archiver|
    archiver.command = "/usr/obj/arm.armv6/PATH/tmp/usr/bin/gnu-ar"
  end
end
これで makeをすると、build/armv6 というディレクトリの下に諸々のファイルが出来ます。簡単。

なお、書くまでもないと思いますが、ソース一式はgithubから git cloneでhttps://github.com/mruby/mruby.git あたりからもってきましょう。

確認したリビジョンは 0410bb7623a27ac427f190e3144c85b6446bec0 です。
Posted by issei

カテゴリ: BSD

Raspberry Piで FreeBSD 動かしてみた その3

Raspberry Piで make buildworldをしてみたら、24時間以上かかりました。こういう場合はクロスコンパイルのほうが現実的でしょう。

クロスコンパイルで make worldをするやり方は「ハンドブックを見れ」の一言で終わりといえば終わりなんですが、ざっとしたやり方を書いときます(自分も毎回ハンドブック読んでで思い出すのが面倒になってきたんで)

まず、クロスコンパイルは 別のFreeBSDを用意する必要があるわけですが、手元にamd64の 9.1-RELEASEがあるのでそれで挑戦。

ソース一式を展開したら(前のエントリ参照)いくつかのパラメータを設定してmakeするわけですが、これは三種類やり方があります。一つは/etc/make.confに記述する方法、もう一つはmakeのコマンドラインのオプションに指定する方法、もう1つは環境変数で定義しておく方法です。

どれを選ぶかは好みの問題。

とりあえず環境変数に定義する方法とコマンドラインのパラメータの双方でビルドすることにします。

絶対設定しないといけないのは

TARGET および TARGET_ARCH

です。これはビルドするアーキテクチャのタイプ。それぞれarmとarmv6に設定。tcshならこんな感じ。
setenv TARGET arm
setenv TARGET_ARCH armv6
sh大好きっ娘なら敢えて書くまでもないだろうけど、
export TARGET=arm
export TARGET_ARCH=armv6
あとはソースディレクトリのトップで次のようにビルドすればOK。
make MALLOC_PRODUCTION=yes buildworld
make WITH_FDT=yes KERNCONF=RPI-B buildkernel 
これで、/usr/obj 以下にオブジェクトが作成されていくと。 ちなみに、この/usr/objを変えたいときは、環境変数
MAKEOBJDIRPREFIX
を変更すればOKです。

で、ビルドが終わった後のインストールですが、Raspberry PiはSDで動いているので、SD抜いてそれをそのままクロス環境のBSDでマウントしちゃうのが早いでしょう。USBのカードリーダとか用意しておくべし。

私の環境では da2に見えますので、
# mount /dev/da2s2a /mnt
とかで/mntにマウント。そののち
make DESTDIR=/mnt KERNCONF=RPI-B-issei installkernel
make DESTDIR=/mnt installworld
です。注意点としてFreeBSD 9.1では installするときは auditdistdなるユーザがいないとか怒られてしまうので、vipw等で以下の行を追加してuserを追加しましょう。
auditdistd:*:78:77::0:0:Auditdistd unprivileged user:/var/empty:/usr/sbin/nologin
追加したくねーよ!って人はjail環境作ってからやるとか、まぁそのあたりは好みの問題で(こればっかりだな)。こんな感じです。

まとめると、ポイントは TARGETと TARGET_ARCH。

配布されてるSDのイメージに上書きするならこれでよいのですが、まっさらに一からビルドしたいというときはnewfsで/dev/da2s2aをまっさらにしてから、先ほどに加えて
make DESTDIR=/mnt distribution
とするとよいでしょう。/etc/fstab /etc/rc.conf /boot/loader.rc /etc/ttysあたりを書き換えてやらないととても寂しいことになりますが。
Posted by issei

カテゴリ: BSD

Raspberry Piで FreeBSD 動かしてみた その2

本家の掲示板見てたら新しいSDのimageが一昨日あたりに出たらしいのでとりあえず試すにはこちらのほうがよいでせう。

http://www.raspberrypi.org/archives/3094

カーネルもセルフビルドしてみました。

svn checkout http://svn.freebsd.org/base/head -r245446

でCURRENTをチェックアウトしてきて、makeするだけです。/usr/srcの下に置くのが楽ちんです。オイラは別マシン上にとりあえず展開して nfsで /usr/srcにマウントしましたが。あと、/usr/objも nfs上に置いておくと捗るんじゃないでしょうか?

で、

/usr/src/sys/arm/conf/RPI-B

を適当にいじります。普通は別名にして保存。

# make buildkernel KERNCONF=RPI-B-hoge WITH_FDT=yes
# make installkernel KERNCONF=RPI-B-hoge


これでok。

なお、上記imageは/etc/fstabにtmpfsが記述されているので、options TMPFSを入れておかないと、boot途中で止まっちゃうので追加しておいたほうがよいでしょう。(あるいはtmpfsを/etc/fstabから消す)それと、options INET6が記述されてないので、IPv6使いたいならそれいれたりとか。

なお、clangでビルドしたい場合はこちらが参考に

http://shell.peach.ne.jp/aoyama/archives/2467
Posted by issei

カテゴリ: BSD

Raspberry Piで FreeBSD 動かしてみた。

IMG_5868JPG
といっても、とりあえず動かしただけ。面白みのない内容ですんません。ここからイメージもってきて SD に ddで書くだけの簡単な作業。

何回か再起動してたらbootんとこでコンソールにおちて起動しなくなった。電源切っていれたらブートの途中で固まった。再度電源切っていれたら、fsckが動き無事起動した。

CURRENTは設定方法がよくわからんなー。とりあえずIPv6は使えていない。どうすればいいのだろう。

VCHIQ使った OpenGL ESのデモも動くよ

http://kernelnomicon.org/?p=185

さて、こんくらいにして、子供の6ヶ月検診に行ってきます。

root@raspberry-pi:~ # dmesg
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 10.0-CURRENT #1 r243778: Sat Dec  1 12:29:02 PST 2012
    root@bsdbox:/src/FreeBSD/obj/arm.armv6/src/FreeBSD/head/sys/RPI-B arm
CPU: Sheeva 88SV581x rev 7 (Marvell core)
 Supported features: ARM_ISA THUMB2 JAZELLE ARMv4 Security_Ext
 WB enabled LABT branch prediction enabled
  16KB/32B 4-way instruction cache
  16KB/32B 4-way write-back-locking-C data cache
real memory  = 536870912 (512 MB)
avail memory = 386371584 (368 MB)
kbd0 at kbdmux0
simplebus0:  mem 0xf2000000-0xf2ffffff on fdtbus0
intc0:  mem 0xf200b200-0xf200b3ff on simplebus0
systimer0:  mem 0xf2003000-0xf2003fff irq 8,9,10,11 on simplebus0
Event timer "BCM2835 Event Timer 3" frequency 1000000 Hz quality 1000
Timecounter "BCM2835 Timecounter" frequency 1000000 Hz quality 1000
sdhci_bcm0:  mem 0xf2300000-0xf23000ff irq 70 on simplebus0
bcmwd0:  mem 0xf210001c-0xf2100027 on simplebus0
gpio0:  mem 0xf2200000-0xf22000af irq 57,59,58,60 on simplebus0
gpio0: read-only pins: 46,47,48,49,50,51,52,53.
gpio0: reserved pins: 48,49,50,51,52,53.
gpioc0:  on gpio0
gpiobus0:  on gpio0
uart0:  mem 0xf2201000-0xf2201fff irq 65 on simplebus0
dwcotg0:  mem 0xf2980000-0xf299ffff irq 17 on simplebus0
usbus0 on dwcotg0
fb0:  on fdtbus0
sc0: Unknown <16 virtual consoles, flags=0x300>
Timecounters tick every 10.000 msec
usbus0: 480Mbps High Speed USB v2.0
ugen0.1:  at usbus0
uhub0:  on usbus0
uhub0: 1 port with 1 removable, self powered
mmcsd0: 14GB  at mmc0 25.0MHz/4bit/65535-block
fb0: 1280x1024(0x0@0,0) 16bpp
fb0: pitch 2560, base 0x59385000, screen_size 2621440
Root mount waiting for: usbus0
ugen0.2:  at usbus0
uhub1:  on usbus0
uhub1: MTT enabled
Root mount waiting for: usbus0
uhub1: 3 ports with 2 removable, self powered
Root mount waiting for: usbus0
ugen0.3:  at usbus0
smsc0:  on usbus0
Trying to mount root from ufs:/dev/mmcsd0s2a [rw,noatime]...
smsc0: chip 0xec00, rev. 0002
warning: no time-of-day clock registered, system time will not be set accurately
miibus0:  on smsc0
ukphy0:  PHY 1 on miibus0
ukphy0:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ue0:  on smsc0
ue0: Ethernet address: b8:27:eb:8b:37:6a
smsc0: chip 0xec00, rev. 0002
Posted by issei

カテゴリ: BSD

11行でFreeBSD 9.0-RELEASEをUSBメモリにインストールする。

9.0-RELEASEからは配布がtxz形式になったので連結する手間が省けた分だけ簡単に。なんかもうインストーラとか煩わしいだけな気がしてきた。

1)USBのストレージから起動できるPCがあること

2)既にFreeBSDがinstallされてるマシンがあること

3)ftp//ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/9.0-RELEASE/ あたりから base.txzと kernel.txzを持ってきてどこかに置いてあること(この例では /usr/freebsd-dist)

4)USBメモリをいれると/dev/da0に見えること

# dd if=/dev/zero of=/dev/da0 bs=1m count=1
# gpart create -s gpt da0
# gpart add -s 64K -t freebsd-boot da0
# gpart add -t freebsd-ufs -l freebsd da0
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0
# newfs /dev/da0p2
# mount /dev/da0p2 /mnt
# cd /mnt
# tar xvfzp /usr/freebsd-dist/base.txz
# tar xvfzp /usr/freebsd-dist/kernel.txz
# echo '/dev/da0p2 / ufs rw,noatime 0 0' > /mnt/etc/fstab


以上でおしまい。最低限のことしかしてないんで、もう少しこだわれますが、基本はこんな感じ。

以下駄文

FreeBSDのルータなんかほとんどHDDに書きにいかないようにできるわけで、ルータくらいならUSBメモリ onlyのPCでいいんじゃね?と思ったが、FreeBSDの8だと(少なくとも8.1-RELEASEまでは)起動したあとrootをマウントするところでこける。

これはUSBメモリが使えるようになるまで時間がかかるのに、その分待たないからで、カーネルにrootをマウントする前に数秒waitを入れるパッチをいれればいいというところまでは気がついた。

オイラはこれを sys/kern/vfs_mount.cの vfs_mountroot内の root_mount_prepare()の次あたりに

pause("mount root", 2*hz);

とか書いてカーネルを再構築して対処していたわけですが、最近改めて調べてみたら

/boot/loader.conf に kern.cam.boot_delay=10000

と書くというやり方があるそうな。(こちらのほうがカーネルの再構築がないからスマート)

9.0ではこのあたりが大きく書き直されていて、こんなことをしなくても良いようになったようです。

追記

動いているFreeBSDなんてネーヨ!って人は

ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.0/

あたりから起動用のimgをゲットしてなんとかしてUSBメモリに書き込んだりCDに書き込んで起動させる。 でもってそれからブートしたのちLiveCDまたはshellにおとして、インストールしたいUSBメモリをつっこむ。

それが da0 または da1に見えるはずなので、適当に読み替えて頑張ってください。
Posted by issei

カテゴリ: BSD