FreeBSD Daily Topics

2008年1月31日 portsnap(8)でPorts Collectionをアップデートする方法,BATCHと/etc/make.confでシームレスアップグレード

この記事を読むのに必要な時間:およそ 1 分

heads-up

portsnap(8)

ports - Ports Collectionのアップデートはcvsup(8)を使う方法が旧来からありました。ベースシステムにC言語で再実装されたcsup(1)が追加されてからは,csup(1)を使ってアップデートを実施する方法が簡単です。しかし,portsnap(8)がベースシステムに追加されてからは,portsnap(8)を使う方法がより簡単です。

次のような関数またはコマンドを用意して使うようにすると便利です。

リスト1 portsnap(8)を使ってPorts Collectionを更新,インデックスを作成して,アップグレードすべきリストを表示する

updateports() 
{
    if [ -f /usr/ports/.portsnap.INDEX ]
    then
        portsnap fetch update
    else
        portsnap fetch extract update
    fi
    (cd /usr/ports/; make index)

    portversion -v -l \<
}

上記処理ではインデックスの不整合を避けるためにインデックスを作成し直しています。この処理には時間がかかります。ダウンロートしたインデックスのままで構わないという場合は,次のようにmake indexの処理を抜いた関数またはコマンドを用意して使うといいでしょう。

リスト2 portsnap(8)を使ってPorts Collectionを更新して,アップグレードすべきリストを表示する

updateports() 
{
    if [ -f /usr/ports/.portsnap.INDEX ]
    then
        portsnap fetch update
    else
        portsnap fetch extract update
    fi

    portversion -v -l \<
}
BATCH NO_CHECKSUM

ports - Ports Collectionではビルド時にオプションを指定できます。一度指定したオプションは/var/db/ports/に保存され,2度目以降はオプション選択画面が表示されなくなります。これは便利な方法ですが,シームレスにアップデートを実施したい場合には不便ですし,指定するオプションが変更になった場合に反映されない状況が生まれるという問題もあります。

頻繁にアップデートを実施するのであれば,次のように環境変数BATCHをYESに指定しておきます。使っているシェルに合わせて設定ファイルに記述しておくと便利です。また指定すべきオプションは次のように/etc/make.confで指定しておきます。これで必要なオプションを有効にしつつ,オプション指定をたずねられることなくシームレスなアップデートが可能になります。

リスト3 環境変数BATCHを設定

export BATCH=YES

リスト4 portに指定するオプションを/etc/make.confに記載する例

### Ports Compile Options
.if ${.CURDIR:M/usr/ports*} != ""

# NVIDIA GL enable
WITH_NVIDIA_GL= yes

. if ${.CURDIR:M/usr/ports/converters/libiconv} != ""
WITH_EXTRA_PATCHES= yes
. endif

. if ${.CURDIR:M/usr/ports/editors/openoffice.org*} != ""
LOCALIZED_LANG= ja
WITH_SYSTEM_FREETYPE= yes
. endif

. if ${.CURDIR:M/usr/ports/emulators/qemu*} != ""
WITH_KQEMU= yes
. endif

. if ${.CURDIR:M/usr/ports/multimedia/vlc*} != ""
WITH_SKINS= yes
. endif
.endif

ports

www/yahoo-ui

先日,The Yahoo! User Interface (YUI) Libraryのportがwww/yuiとして追加されましたが,既存のeditors/yuiと名称がぶつかることから一旦削除され,www/yahoo-uiとして再び追加されました。

バックナンバー

FreeBSD Daily Topics

バックナンバー一覧

コメント

  • 2008年1月31日付 FDT での些細な疑義

    > portversion -v -l \<の部分は `pkg_version -v | grep '<'` (私は -v だけでなく -I もつけています.`portsnap fetch update` する度に INDEX もほぼ(これについては意見が分かれるところではありますが)最新のものに更新されるので)に代替する方がいいのではないかと思いました.
    そうすればベースシステムのものだけで間に合いますし,portsnap(8)がベースシステムに組込まれた事実とも整合性がとれますし.
    大地さんに対しては言うまでもありませんが,portversion(1)は ports-mgmt/portupgrade の副産物のひとつで,この port は ruby や bdb に依存していますので(余談ですが私はこの依存性を理由に ports-mgmt/portmaster の方を好みます).

    Commented : #1  hoge (2008/01/31, 21:42)

コメントの記入