パスワードを忘れた? アカウント作成
397251 journal

cyber205の日記: NetBSD環境再構築

日記 by cyber205

新たな環境でNetBSDシステムのパッケージを再構築ちう。
これまで作ったパッケージとかで手早くセットアップできるかと思ったが、甘かった。
おかげで、いまだにIRCへ復帰できません(ぉ

古い時代のNetBSD-2.0あたりで作ったパッケージがそのまま転がっていたりして、
インストールしようとしても危険っぽいのな。(警告される)
pkg_chk コマンドで自動アップデートだと新しい更新されたパッケージは
保存されないのかしらん。
いや、ちゃんとマニュアル読んだら何か出てくるかも…(汗

以下、知ってる人は読まなくていい情報。
===

FreeBSDに移植(ポーティング)されたパッケージの移植コード集、
これはportsと呼ばれているが、
NetBSDでも同様のものがあって、これをpkgsrcと言う。

本来はsupコマンドでオンラインアップデートするものらしいが、
私は週末にtarで固めて公開されるものを使っている。
私が週間NetBSD Updateと称して書き込んでいるのはコレがもとだ。

Current向けのパッケージコレクションなんだが、ちゃんと動くのよね。
おかげで、NetBSDに移植された最新のKDEなんかを楽しめる。

このファイルを、 /usrで展開すると、/usr/pkgsrc/ 以下にパッケージの
移植コード(中味はパッチファイルとちょっとしたスクリプト)がインストールされる。
あとは、欲しいパッケージのあるディレクトリで、makeを実行するだけ。

できれば、パッケージで持っておくほうが有利(のような気がする)ので、
make package コマンドでパッケージを作ってしまうのが吉かな。

依存関係が複雑なのがUNIX系システムのパッケージ管理で煩わしい所だが、
これはpkgsrcのmakeを行うシステムが勝手に処理してくれるので頼るといい。
いつもちゃんと働くとは限らないのがタマにきずだが。

私の場合、とりあえず新たに欲しいソフトを見つけたら、
それを格納したディレクトリでmake fetch-list-recursive | bash
とでも行って、必要になりそうなソースを一括で取得、
そこからmake packageを実行するパターンが多い。

これで勝手にソースファイル取得、パッケージコンパイル、インストール、
バイナリパッケージをtgz形式で作成、格納まで一気にやってくれる。

なお、取得したソースファイルは/usr/pkgsrc/distfilesに格納され、
作成されたパッケージは/usr/pkgsrc/packages以下に格納される。
この2つは、pkgsrcでもっとも重要なディレクトリと言ってもいいかもしれない。

インストール可能なパッケージには、特殊なライセンスが必要なものもあり、
そういうのをインストールしたい時には、make失敗時に指示が出るので、
/etc/mk.confにACCEPTABLE_LICENCES+=hogeを追加してmakeする。
私のマシンの場合、以下のような感じになっている。
--
ACCEPTABLE_LICENSES+=emiclock-license
ACCEPTABLE_LICENSES+=jdk13-license
ACCEPTABLE_LICENSES+=kermit-license
ACCEPTABLE_LICENSES+=no-commercial-use
ACCEPTABLE_LICENSES+=adobe-acrobat-license
ACCEPTABLE_LICENSES+=graphviz-license
--

既にインストールしたパッケージを自動アップグレードするには、
/usr/pkgsrc/pkgtoolsにあるpkg_chkをmakeしてインストールしておくといい。
私の場合、毎週pkgsrcディレクトリを刷新してからpkg_chk -u を
実行することで最新のパッケージコレクションを使えるようにしている。
毎週のスパンでは、緊急度の高い致命的なセキュリティホールのアップデートは
間に合わないだろうが、やっておいたほうがいいよ~という程度の修正ならこれで十分対応できる(はず)。
そういうわけで、毎週やってる作業の実態はコレなわけだな。
でも、KDEとか、Firefoxとかが修正された時は処理が重いんだ、これが。
# CPUパワーの無いマシンでこんな運用をするのはお勧めできない。

注意すべきポイントは/usr/pkgsrc/distfilesを保存し、
入れ替えてから書き戻すこと。
私はもうひとつ、さっき重要だと書いていた
/usr/pkgsrc/packages以下も保存しておいて書き戻すことにしている。
いちいち新たにソースコードを取得しに行くのは時間と回線帯域の無駄だし。

で、pkgsrcの入れ替えはそういう感じで保存するファイルセットやら、
入れ替えるファイルセットやら、幾つかあって多少面倒なので、
一気にそれを行ってくれるあやしぃスクリプトを組んで
自動でやってしまうことにしている。
これはrootでないと動かないし、/usrディレクトリにpkgsrc.tar.gzを置き、
おまけにバックアップファイルも/usrに作ったりするので、
きれい好きにはお勧めしない。
wgetとbashがある環境専用だったりするし…。

いや、再度見直してみると、やっつけ仕事で作ったのがアリアリと見えるな、これ。
本来はWORKINGDIRを指定できるはずが、いつのまにか決め打ちでディレクトリ操作してるし…、
とてもおおっぴらに公開できるようなレベルじゃね~わ(汗
(もう公開してるっちゅーの(笑))

ちうわけで、コレがあるので、
週末に新しいpkgsrc.tar.gzができあがっているのを確認して、
このスクリプトで一気に書き換え、最後にpkg_chk -uを実行するだけ。
実は最近、pkg_chk のログも保存してるのだが、
これも別に難しいことをやってるわけではなくて、
pkg_chk -u 2>logfilename.txt 1>&2 &という感じで、
最後に&をつけてバックグラウンドで実行させながら、標準出力とエラー出力を
どんどんlogfilename.txtに書き込んでいくだけのもの。
で、これを見て日記のネタにしようという魂胆なのだね。
(あ、私はbash使いだからNetBSDデフォルトのcshで同じことは無理です、念のため。
(つか、結合しなくていい分cshのほうがログ取りは楽か?))

これだけだと何も表示されなくなって処理の進行状況がわからないので、
フォアグラウンドで tail -f logfilename.txtを実行させておく。
tail -f ってのは、ファイルに更新があった時にそれを表示させるオプション。
つまり、ログに何か書き加えられたならそれを表示してくれるわけ。
エラーで止まった場合にそれを確認するのにはこれで十分。
だいたいの場合、エラーの原因は依存関係のある必要なパッケージの作成に
失敗してるだけなので、怪しそうなパッケージを
make distcleanしてからmake package とか、
make updateなんかを、依存しているパッケージのディレクトリに移動して実行すると、
それなりに依存関係チェックにひっかからなくなって動かせるようになる場合が多い。
# それ以上に複雑な対処が必要な場合、私はお手上げだ(w

エラー後に再実行する時に気をつけるポイントは
  pkg_chk -u 2>>logfilename.txt 1>&1 &という感じで、
追記モードでログに書き込むこと。別に必須ではないけどね。
以上、私が毎週やってるNetBSDメンテナンスの概要だ。

ただ、こいつには欠点もあって、処理が終了しても、
それを知る方法が無いんだな。ログファイルの書き込みが停止しても、
それが次の処理まで時間がかかってるのか、
元のプロセスが終了したからなのか、ちょっとわからない。

そのへん、チョコチョコと改良したらいいのはわかってるけど、
面倒なので放置している。
本当のことを言えば、配布サイトのpkgsrc.tar.gzがちゃんと
更新されたのかをチェックする機能も追加できるとさらにラクチンなんだけどね。
(実際、何度か失敗したし)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

読み込み中...