FreeBSD 9.0 アップグレード失敗

| FreeBSD 9.0 アップグレード失敗 | | コメント(0) | トラックバック(0)| Edit
FreeBSD 9.0 がリリースされた(FreeBSD 9.0-RELEASE アナウンス)ので、うちの環境も9.0に上げてみることにする。
早速、supfile の tag を RELENG_8 から RELENG_9 に変更して csup する。csupの間にリリースノートを読んだりしてたんだけど、9.0Rをソースから入れる場合のタグは RELENG_9_0 とか、svn の場合は releng/9.0 ブランチだとか書いてある。
あれ? RELENG_9 と RELENG_9_0 の違いってなんだっけ?と調べたところ、RELENG_9 は 9-STABLE ブランチで、RELENG_9_0 は 9.0-RELEASE のスナップショットらしい。
そして、2008年から開発はCVSからsvnに移っていることもわかったが、公式サイトではsvnwebと言うwebインターフェイス([base] Index of /)のURLしか見つけることができなかった。これだと、subversionクライアントから取得することができない。
ちょっとぐぐったら、FreeBSDのソースコードを Subversionリポジトリから取得する - Life is very shortと言うページを見つけたので、svn://svn.freebsd.org/base/ だと言うことがわかった。9-STABLE なら、svn://svn.freebsd.org/base/stable/9 なのだろう。(releng/9 じゃないので、CVSのタグポリシーと違うみたいだけど、こっちの方がわかりやすいと思う)

どっちが早いかとか調べるのも面倒だったので、当面はCVSup(csup)を使い続けることにする。

さて、Upgradeを開始する前に読むべきはFreeBSD 9.0-RELEASE Release Notesの3 Upgrading from previous releases of FreeBSD
つらつらと眺めると、以下のような変更があるらしい。
  1. インストーラやportsで使われる dialog ライブラリが新しくなりました。
  2. パーティションメタデータの整合性チェックがデフォルトで有効になりました。
  3. ATA/SATAがcamベースになり、デバイスファイル名が /dev/ad0 等から /dev/ata0 等に変更になりました。互換性のために、/dev/ada0から/dev/ad0へのシンボリックリンクが提供されます。
  4. /etc/rc.conf でのネットワークの設定が変更になりました。IPアドレスの前にアドレスファミリの指定が必須になりました。ipv6_enableはdeprecatedになり、デフォルトで有効になりました。
  5. resolv.conf を設定するためのresolvconfユーティリティが追加されました。
  6. disk partision 関連のユーティリティ(fdisk, disklabel, bsdlabel)は将来的にサポートされなくなり、gpartの使用が推奨されます
大きいのはad?のデバイスファイル名の変更かなと思ったけど、リンクが張られるなら問題ないはず。
と、言うことで、いつものようにbuildworld & buildkernel。
いつもなら、ここでそのまま installkernel, installworld, reboot, mergemaster なんだけど、流石にメジャーバージョンアップなので、world の再構築の手順に従って真面目にやることにする。(結果的に、このおかげで助かった)
はじめて make world したころとは、ドキュメントの中身がだいぶ変わっていて、すごく詳細に書いてあるので、最近読んでないな〜という人は一読をおすすめする。

と、言うわけで installkernel したところで一度reboot、起動メニューで4番の Single user mode を選ぶ。
と、あっと言う間に kernel panic。ほっておくと15秒で再起動、キーを押すと再起動のカウントダウンを止められるけど、コンソールに出ているメッセージは更に数行流れてしまうため、エラーの原因が良くわからない。
カーネルが起動すれば dmesg とか messages とかログの調べようがあるのだけれど、boot時のpanicだとどうやってログを取得すれば良いのかわからない。

fixitフロッピーとか作ってないし、そもそもFDドライブないし、8のCDもどこにあるかわからないし、どうやって復旧したもんかな〜と悩んだ結果、別のメディアから起動しなくても、一個前のカーネルくらい残ってるんじゃね?と思いつく。
そこで、起動メニューから6番を選んでプロンプトに降りて、
boot kernel.old
と入力してみたら、無事に8.2-STABLEで起動した。
これで、何か調べて installkernelしてしまうと、kernel.old は起動できない 9-STABLE になってしまうので、まずは保全を考える。
/boot/kernel.old を /boot/kernel.8 にコピー(tar使いました)して再起動して、
boot kernel.8
としてみたところ、ちゃんと起動できたので、このディレクトリを取っておけば大丈夫だろう。
ついでに、/boot/loader.conf に
kernel="kernel.8"
とか書けば、こっちがデフォルトになるんじゃないかと思うけど、そんな頻繁に再起動するものでもないからこのままにする。

保全ができたので、panicの原因を追求する。
しかし、起動時のログが取れないので、iPhoneのカメラで動画を撮影して、手でコピーしてみた。
(前略)
agp1: <Intel 82855GME (855GME GMCH) SVGA controller> on vgapci0
panic: make_dev_credv: bad si_name (error=17, si_name=agpgart)
cpuid = 0
KDB: stack backtrace:
#0 0xc0a9a3d7 at kdb_backtrace+0x47
#1 0xc0a66679 at panic+0x119
#2 0xc0a1cf1e at make_dev_credv+0x9e
#3 0xc0a1d15a at make_dev+0x4a
#4 0xc05510ee at agp_generic_attach+0x12e
#5 0xc0d7d288 at agp_i810_attach+0xb8
#6 0xc0a93d77 at device_attach+0x387
(後略)
agpのドライバ周りでpanicしてる?ぐぐると、"panic: make_dev_credv: bad si_name" で結構ひっかかるんだけど、どうも関係ないっぽい。
ちなみに、8.2だと以下のような感じ。
agp1: <Intel 82855GME (855GME GMCH) SVGA controller> on vgapci0
agp1: aperture size is 128M, detected 32636k stolen memory
vgapci1: <VGA-compatible display> at device 2.1 on pci0

もうちょっと情報を集めないと、9.0にできないかなあ。

PostgreSQL9.1.1に上げる

| PostgreSQL9.1.1に上げる | | コメント(0) | トラックバック(0)| Edit
最近PostgreSQLのバージョンを上げていなかったので、たまには上げてやろうと思う。
きっかけは、pg_upgrade と言う新機能のマニュアルを読んだこと。こいつがあると、今までのように pg_dump しなくてもバージョンがあげられるらしい。
ところが、良く良く読んでみると、なかなか条件が厳しい。
  • 旧バージョンと新バージョンの両方のdataディレクトリが別の場所にあること
  • 旧バージョンと新バージョンのバイナリが別の場所にあること
まあ、前者は当然と言えば当然の条件だけど、後者が厳しい。FreeBSDのportsでは複数バージョンの混在を許していないから。
ちなみに、portsから入れたデフォルトではデータディレクトリも /usr/local/pgsql/data なんだけど、これはrc.conf に postgresql_data を定義してやれば自由に変えられる。
試しにpg_dumpallしてみたら1分程度で終わったので、今回も pg_upgrade ではなく dump/restore でバージョンアップすることにする。
前回の記事が postgresqlバージョンアップ - PC日記にあるのだが、あまりにざっくりしているのでもう少し丁寧に書く。(やったことは基本同じだけど)
  1. pgsqlユーザで現在のデータベースのバックアップを取る
    $ pg_dumpall -f dumpall.20111207
    
  2. root でデータベースを止め、既存のバージョンを削除する。
    # /usr/local/etc/rc.d/postgresql stop
    # pkg_deinstall postgresql-server-8.4.7
    # pkg_deinstall -f postgresql-client-8.4.7
    
  3. root で既存のデータディレクトリをリネームする。
    # mv /usr/local/pgsql/data /usr/local/pgsql/data.8.4
    
    これは、将来pg_upgradeみたいな仕組みが使いやすくなったときに、いつも同じディレクトリを使うのではなく、バージョン毎のディレクトリにしておいた方が良さそうなため。PostgreSQLは、x.y.zのx.yの部分が同じならばデータディレクトリは互換性があることになっているので、バージョン8.4.7でもディレクトリは8.4で良い。
  4. 新バージョンをインストール
    # portupgrade -N databases/postgresql91-server
    
  5. /etc/rc.conf 修正
    既存のデータディレクトリのリネームで説明した通り、今後はデータディレクトリにはバージョンをつけることにしたので、/etc/rc.conf に以下を追加
    postgresql_data="/usr/local/pgsql/data.9.1"
    
  6. データベース作成
    # /usr/local/etc/rc.d/postgresql initdb
    
    ※ 前回の記事では、initdb -E utf8をやり直したと書いてあるが、最近の rc.d/postgresql では initdb のデフォルトのオプションで "--encoding=utf-8 --lc-collate=C" が指定されているので、そのままで問題ない。
  7. データベース起動
    # /usr/local/etc/rc.d/postgresql start
    
  8. データベースのバックアップからの復元
    # psql -U pgsql postgres < dumpall.20111207
    
これで、dump/restore を使った PostgreSQL のバージョンアップの出来上がり。
後は、各種クライアントの動作チェックをして、っていきなり MovableType でログインしようとすると Can't use string ("x42494e3a53455247000000000000000") as an ARRAY ref while "strict refs" in use と言うエラーが出る。
mt-error.jpg

これはまた泣きながら8.4に戻さないと駄目か?と思ったが、一応エラーメッセージでぐぐってみるといきなり正解にたどり着いた。Can't use string .... as an ARRAY ref while strict refs in use - Movable Type Forums
ここには、postgresql.conf に bytea = 'escape' と書けとあるが、9.1の実際の postgresql.conf を見ると bytea_output と書いてあるようなので、以下の行を追加した。
bytea_output = 'escape'
これで、無事に MovableType も動くようになった。

Jenkinsのインストール

| Jenkinsのインストール | | コメント(0) | トラックバック(0)| Edit
Jenkinsではじめるビルド職人入門 が、11月中だけ発売記念で無料(12月から1,000円)だったので読んでみた。
自分で使ったことはないけど、隣のプロジェクトが使ったりしているので、そんなに目新しいことはなかったのだけれど、とりあえずうちにも入れてみようと思う。
portsを調べると、devel/jenkinsと言うのがあったのでインストールしてみる。
すると、jenkins.warをダウンロードしてきて /usr/local/share/jenkins にインストールして、後はユーザやグループを作ったり、ディレクトリを作ったり、/usr/local/etc/rc.d に起動スクリプトを作ってくれたりするらしい。
jenkinsは、warなので、tomcatのようなServletコンテナでも実行できるし、直接javaに渡すことでjenkinsに入っている Winstone と言うコンテナでスタンドアローンでも起動できる。
rcスクリプトで jenkins_enable="YES" にした場合は、Winstone を使うことになる。
既にtomcatなどを動かしている場合は、そちらを使った方が良いかも知れない。設定方法わからないけど。

とりあえず、うちではtomcatは動いていなかったので、rcスクリプトをそのまま使う。/usr/local/etc/rc.d/jenkinsを読むと、jenkins_enable="YES"にしたときのデフォルトの挙動と、それぞれの設定項目が読める。
: ${jenkins_enable="NO"}
: ${jenkins_home="/usr/local/jenkins"}
: ${jenkins_args="--webroot=${jenkins_home}/war --httpListenAddress=127.0.0.1 --httpPort=8180 --ajp13ListenAddress=127.0.0.1 --ajp13Port=8009 --prefix=/jenkins"}
: ${jenkins_java_home="/usr/local/jdk1.6.0"}
: ${jenkins_user="jenkins"}
: ${jenkins_group="jenkins"}
: ${jenkins_log_file="/var/log/jenkins.log"}
※ jenkins_java_home は、portsが決めてくれたんだと思う。うちはjdk1.6.0が入っていたので。
これを見ると、jenkins_homeは/usr/local/jenkinsであり、httpが8180で、ajp13が8009で、それぞれlocalhostだけでLISTENすることがわかる。
なんとなく頻繁に書き変わるものは/varに置きたいので、/etc/rc.conf は以下のようにした。
# jenkins                                                                       
jenkins_enable="YES"
jenkins_home="/var/local/jenkins"
そして、/var/local/jenkinsを作成。
# mkdir /var/local/jenkins
# chown jenkins:jenkins /var/local/jenkins
そして、jenkins起動。
# /usr/local/etc/rc.d/jenkins start

FreeBSDにはグラフィカルなブラウザを入れていないので、このままではアクセスできない。apache経由でアクセスできるように、httpd.conf の VirtualHostの中に以下を追加。
    <Location /jenkins>
        ProxyPass ajp://127.0.0.1:8009/jenkins
    </Location>
apacheに読み込ませる。
# apachectl graceful
これで、apache経由でjenkinsにアクセスできる。
アクセスすると、最初は誰でもjenkinsが使えるモード。
Jenkinsの管理→システムの設定で、「セキュリティを有効化」にチェックを入れる。
アクセス制御のところでアカウント管理のバックエンドが選べるので、小規模なのであれば「Jenkinsのユーザーデータベース」で問題ないだろう。PAMも使えるようなので、そちらでも良いかも知れない。
この後の手順が良くわかっていないのだが、私の場合は同じ画面の「権限管理」で「行列による権限設定(プロジェクト単位)」を選び、ユーザを追加してすべての権限にチェックを入れ、画面一番下の「保存」を押したらサインアップの画面が出て来たので、先ほど権限で追加したのと同じユーザ名でユーザを登録した。
普通に保存だけして、最初の一人は管理者としてサインアップできるのかも知れないが、面倒ので検証していない。
後は、普通にジョブを追加してjenkinsに実行してもらえば良いのだが、開発中のプロジェクトもないのでやってもらうことがないのである。
明日会社でプロジェクトのリリース手順でも自動化しようかな・・・。

スキャナが使えない

| スキャナが使えない | | コメント(0) | トラックバック(0)| Edit
息子が写真を取り込みたいと言うので、久しぶりにスキャナを使うことにする。
試しに、USBで直接Macに繋いだ所、認識しない。
メーカーのページで調べてみたところ、ドライバはMac OS X 10.4まで、もしくはWindows Vista 32bitまで。
Lionでは当然使えなさそうなので、他の方法を探す。
と、言うか、以前Macを買ったときに、xsaneを使えるようにしていた。Macからsaneのスキャナを使う - PC日記
ので、xsaneを起動してみたところ、スキャナが見つからないと言う。
サーバであるFreeBSDでscanimage -L してみると、やはりスキャナが見つからない。
/var/log/messageを見ると、
Nov  5 10:35:46 sv kernel: ugen0.3: <National Semiconductor> at usbus0
のように出ている。以前は、
Nov  5 11:10:20 sv kernel: ugen0.3: <Canon> at usbus0
のように出ていたはずなのに。USBを抜き差しすると、もとに戻った。
sane-find-scannerやscanimage -L を実行すると、
# sane-find-scanner
found USB scanner (vendor=0x04a9 [Canon], product=0x220d [CanoScan], chip=LM9832/3) at libusb:/dev/usb:/dev/ugen0.3
# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
以前は認識していたはずなのに、scanimage -L で出てこない。
いろいろ試してみた結果、/usr/local/etc/sane.d/plustek.conf の
[usb]
の行を、
[usb] 0x04a9 0x220d
のようにしたら、
# scanimage -L
device `plustek:libusb:/dev/usb:/dev/ugen0.3' is a Canon CanoScan N670U/N676U/LiDE20 flatbed scanner
のように出て来た。
plustek: の部分は、canonとかcanon630uとかになるべきじゃないかと思って、canon.confとかcanon630u.conf をいじっってみたけど、変わらず。さらに、plustek.conf を元に戻しても、認識したまんまだったりして、良くわからない。

841SHとAperture

| 841SHとAperture | | コメント(3) | トラックバック(0)| Edit
親から、携帯の写真を取り込みたいと言われて、見に行ったら結構はまったのでメモ。
まず、親のPC環境は MacBook Pro に Aperture を入れてある。で、携帯はソフトバンクの 841SH。USBケーブルが用意してあった。
Macと841SHをつなぐと、841SHの画面に選択肢が出るので、「カードリーダモード」を選択する。すると、Mac側でApertureが起動して、841SHのmicroSDが 「/Volumes/NO NAME」にマウントされる。
しかし、写真が一枚も表示されない。
Finderで見てみると、DCIMディレクトリは空っぽ。そして、探しまわった結果、写真は「PRIVATE/MYFOLDER/My Items/Pictures」にあった。
Apertureは、標準的なDCIM下しか見てくれないので、取り込むことができない。(やり方がわからない)
しょうがないので、Finderでコピーしてから取り込んだのだが、こんな手順は親には要求できない。せっかく「Mac買ってAperture入れれば写真の扱いも簡単だよ〜」と言った立場がないのである。
ちなみに、マニュアルの14章の14-24ページには、このフォルダ構成のことが一応書いてあるのだが、DCIM/XXXSHARPには何が入るのだろうか。

その後も諦めきれなくて、メニューをカチャカチャいじっていたら、どうも841SHはBluetoothもついているらしいので、Macとペアリングしてみたのだが、そうすると今度はmicroSDではなくて本体の内蔵メモリしか見ることができない・・・。
なんとかならないものかしらね。
2012年1月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
[New] [Admin]

最近のコメント

841SHとAperture by false: 試してみたところ、デ
841SHとAperture by false: なんと、今度親の携帯
841SHとAperture by 匿名: 841SHで撮るとき
TeraStationでsnmp by OZA: 大変助かります。
Squidで認証 by たけちゃん: 最初から、入れ直した

Photos

  • mt-error.jpg
  • lisp-type.png
  • graph_47_5.png
  • items.jpg
  • feeds.jpg
  • false.jpg

アーカイブ

コンタクト

広告

Powered by Movable Type 5.12
$