Monthly Archives: 11月 2009

日本語ファイルを含むzipが展開できない件

Pocket

Windowsで圧縮した日本語ファイルをFreeBSDでunzipすると文字化けする。

ここでの文字化けは、ファイル名だけでなく、どうも中身も壊れてしまうようだ。

該当ファイルをlsしてみると、(無効なエンコーディング)と表示される。

仕事上、メールをFreeBSDマシンで受けることがあるのだが、このおかげでメールに添付されたファイルを開けない。

困っていて検索したところ、以下のページがヒット。

これで内容が壊れる件は問題なく出来た。(ファイル名はSJISなのでやっぱり化ける。UTF-8やEUC-JPにするにはconvmvが必要)

http://nhh.mo-blog.jp/ttt/2007/03/zipunzip_315b.html

ここに記載の通り、”CFLAGS+=-D’Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr)'”をつけてmake。

出来たカスタム版unzipだが、/usr/local/bin配下に置くのはちょっと嫌なので、ホームディレクトリのbin配下にコピー。さらにカスタム版だということが分かるよう、名前はunzip.custに変えた。

No tags for this post.

特定の文字をファイルから取り除くには

Pocket

sedの使い方なんてすぐ忘れるからメモ。

例) あるファイルから改行を取り除く

No tags for this post.

カスタムカーネルを使用しているときのfreebsd-update。

Pocket

大したことはないのだが。

カスタムカーネルを使っている場合でも、/boot/GENERICにGENERIC kernelを置いとけば更新してくれるよ、という話。ハンドブックに書いてある。

カスタムカーネルを使っていて、なおかつ/boot/GENERICを置いているマシンでfreebsd-udpdateをした場合。

通常は/boot/kernel/と表示されるはずが、/boot/GENERICとなっているのに注目。

あとは普段どおりinstallして、reboot -kか、nextbootでGENERICを指定すればOK。

通常のrebootでは当然7.2-RELEASEのまま。

reboot -kでGENERICを指定すると。

No tags for this post.

freebsd-updateを使ったら楽すぎて吹いた。

Pocket

自宅サーバはほぼ10年前のノートPCだ。

ここにFreeBSDを入れてApache, Samba, mt-daapdを動かしている。バッテリーはさすがに死んでいるが動作には全くといっていいほど問題ない。

とはいえ、通常運用時はともかくとして、セキュリティフィックスなどでOSやportsの更新が発生したときの手間がさすがにつらくなってきた。

portsはもうかなり前から別マシンでコンパイルするようにしていて、これはもう解決。

OSは別マシンでbuildした/usr/objからインストールしたり、snapshotsのISOイメージを使うようにしていたが、とうとうこれもあきらめてfreebsd-updateに移行することにした。

そしたら予想以上に楽で驚いた。

ただ、RELEASEなど安定版バージョン(とそのBETA版、RC版)でなければ使えない。

FreeBSDにはRELEASEブランチのほかに開発版であるSTABLE, CURRENTというのもある。人柱用のCURRENTはともかく、CURRENTで実験済みのソースがバンバン突っ込まれるSTABLEで使えないのはちょっと寂しく、これが今まで俺がfreebsd-updateを使わなかった理由なんだが、まあSTABLEでのバイナリアップデートはきつかろう。

あともう一つ、カーネルもカスタマイズしている場合には注意が必要。

そういった訳で、7-STABLEからわざわざ7.2-RELEASEに戻してやってみた。

実際にやったのは1ヶ月ほど前なので、以下の例では7.2-p3までのアップデートです。11/5時点では7.2-p4が最新。

freebsd-update fetchで必要なファイルをダウンロード。

その後、installして再起動。

uname -rとすればパッチレベルの上がっている事が確認できる…はずだが、unameの応答はp2になっていてp3ではない。

これはなぜかというと、p2からp3で修正されたのはbindだけで、kernelは修正されておらず、p2の時のままだから。

unameに対してkernelが返す値は、/usr/src/sys/conf/newvers.shが元になっているが、こちらを確認すればしっかりp3になっていることが確認できる。

繰り返しになるが、p2からp3になったときに、freebsd-updateはbindを更新し、kernelは更新しないからunameの応答はp2になるというわけ。

ただ、freebsd-updateはパッチレベルが上がった時には必ずnewvers.shを更新しているので、kernelに更新がなくとも、kernelを再作成すればパッチレベルは上がる。

真面目なサーバの場合は、kernelを再作成しておいた方がよいと思う。

ロールバックも試しにやってみた。

No tags for this post.