2003/12/01 Mon
Portupgrade
実験機上にはいろんなアプリを入れたり出したり消したりしてるんですが、 そのおかげで、私のサーバにはgdが3つもインストロールされてみたり、imakeが2つ合ったり かなり微妙なことになっています。

ソレを解消するべくPortupgradeを入れてみましたら、あらビックリ。 テケトーにごにょごにょしてくれました。

ウーン超便利カモ〜。小さいしとがえらい薦めるのもよく分かる〜バンザーイ。

もうちょっと調べてみて、まとまったらTipsに掲載しよう。もちろん自分用に。



portupgradeの導入

portupgradeとは、パッケージの管理を容易にする拡張システム。 何かと煩雑になるパッケージをクリーンに保ちます。
依存関係の修復や、登録上複数のバージョンがインストールされている アプリケーションをごにょごにょと直してくれたりかなり便利。

まずはcvsupでportsを最新版に更新。
cvsupについては「FreeBSDハンドブック」 とか、「make buildworld」を参照。

# cd /usr/share/example/cvsup
# vi my-portsfile
(編集)
# cvsup -g -L 2 my-supfile

portupgradeのインストール。

# cd /usr/ports/sysutils/portupgrade
# make && make install
# rehash

これだけでおしまい。

インストールが出来たら、以下のコマンドを実行しとくと吉。但し、portsdbの-Uオプションは数時間単位で時間が掛かるので寝るときにやりませう。

# portsdb -uU
# pkgdb -aF

週一回、cvsupしてバージョンアップした報告をするシェルスクリプトを仕込みました。 (fkimura.comより)

#!/bin/csh
/usr/local/bin/cvsup -g -L 2 /etc/ports-supfile >& /var/log/portupgrade_daily.log
/usr/local/sbin/portsdb -Uu >>& /var/log/portupgrade_daily.log
/usr/local/sbin/portversion -v -L '='
自動更新するのはいいんだけど、CPUパワーをえらい食う(ていうかPC自体が時代遅れ;;)。ロードアベレージ2〜3くらいでガンガンです。
普段のログ更新時間(早朝5時頃)をさけ、朝7~8時くらいにセットしておこう。



リファレンスみたいなもの

良く使いそうなものをまとめた。コマンドが結構似通ってて紛らわしい。

pkgtools.conf'

portupgradeの設定ファイル。/usr/local/etc/pkgtools.conf。 アップデート時にうっかりインストールオプションを忘れてしまわない様に、予めこのファイルへ書いておくことが出来る。

MAKE_ARGS = {
    'mail/qpopper'      => 'WITH_DRAC=yes',
}

portupgradeでアップグレードしたくないパッケージは以下の記述でホールドできる。

HOLD_PKGS = [
'bsdpan-*',
'graphics/gd*',
]
ちゃんとportversionにも表示される。すばらC〜。
portversion -vL '=' gd
gd-1.8.4_7,1     <  [held] needs updating (port has 2.0.15_1,1)

その他 'AFTERINSTALL'をセットする事によって、インストール後の簡単なオペレーション(chownしたりとか)を設定できる。 man pkgtools.confとかpkgtools.confファイルの説明とか、http://www.fkimura.com/portupgrade1.htmlとか参照してください


portupgrade

Portsを新しくインストールしたり、 アップグレードインストールしたりするツール。
portinstallもあるけど、普段はこちらを使う。ややこしいから。

  • portupgrade -N <Ports-name>
    -N (--new) : 関連するファイルも更新する

  • portupgrade -r <Ports-name>
    -r (--recursive) : 依存したファイルも一緒に更新する

  • portupgrade -na
    パッケージがどのバージョンへアップグレードされるかチェックする
    -n (noexecute)更新しない
    -a すべてのPortsを対象とする

  • portupgrade -m 'WITHOUT_CLI=yes' <Ports-name>
    -m (--make-args=ARGS) : Specify arguments to append to each make(1) command line
    -M (--make-env=ARGS) : Specify arguments to prepend to each make(1) command line

  • portupgrade -rf <Ports-name>
    -f (--force) : force installする。エラーがでてのっぴきならない時にはこれ。


pkgdb

portsの依存関係を示したファイル(/var/db/pkg)を調べて、 依存関係の不一致を知らせてくれたり、直してくれたりするツール。

  • pkgdb -F
    -F (--fix) : 順番に依存関係をチェックする

    不整合があると、以下のような質問が投げられることがある。

    Stale origin: 'security/bzip2': perhaps moved or obsoleted.
    Skip this for now? [yes] yes
    「多分security/bzip2が古いバージョンか、移動したかも。 とりあえず、スキップしますよ?」

    Stale dependency: asclock-1.0 -> imake-4.2.0_1:
    New dependency? (? to help): ?
    [Enter] to skip, [Ctrl]+[D] to delete, [.][Enter] to abort, [Tab] to complete
    New dependency? (? to help): yes
    「asclockがimakeを参照しているが実際には使われて無いみたい。どうする?」 と聞いてるみたい。Ctrl+Dで消しても問題無いと思う。多分ね。

  • pkgdb -aF
    -a (--auto) : -Fが指定されている場合、自動修復を行う。
    -aF (--autofix) : 同上

portsdb

Ports データベースファイルを管理する為のツール

  • portsdb -uU
    -U (--updateindex) :"INDEX"を更新する。超時間かかる。
    -u (--update) :"INDEX.db"を更新する。時間かからない。
    もちろん別々で実行してもよい。 portinstallを使わずにインストールしてしまったときは、データベースを更新した方がいいらしい。

pkg_glob

<Ports-name>に対するお互いの依存関係を調べて表示する。
(なんとなくpkg_treeをインストールの方が見やすいような気がする)

  • pkg_glob -r <Ports-name>
    -r (--recursive) : <Ports-name>の依存関係を調べて表示する

  • pkg_glob -R <Ports-name>
    -R (--upward-recursive) <Ports-name>を必要としている他のPortsを表示する。

  • pkg_glob -a
    -U (--updateindex) :インストールされている<Ports-name>を表示。


portversion

インストールされているのPortsと、Portsdbのバージョンを比較し、簡単なフラグ(後述)で表示する。

(表示フラグ)
=   現在のPortsバージョンと同じものがインストールされている。
<   現在のPortバージョンより低いものがインストールされている(最新版入れませう)
>   現在のPortバージョンより新しいものがインストールされている? Ports Collectionのインデックスファイルが古いとか、 新しいPortsのテストに発生してるんじゃないの?
  • portversion -L 'FLAGS'
    -L 'FLAGS' (--inv-limit 'FLAGS') : 'CHARS'で指定したステータスフラグ以外を表示する

  • portversion -vL 'FLAGS'
    -v (--verbose) 詳細モード


portsclean

掃除屋。

  • pkg_glob -r <Ports-name>
    -C : 過去のmake installのごみファイルを削除して回ってくれる。

  • pkg_glob -R <Ports-name>
    -D : distfilesに溜まりまくったソースを削除してくれる


Posted by sakagami at 2003/12/01 Mon | TrackBack
Comments
Post a comment










Remember personal info?



表示されているランダムな4桁の数字(セキュリティコード)を入力してください。