portupgradeと更新
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[FrontPage]]
更新履歴と目次
更新履歴
2010-03-03ページを公開しました.
*目次 [#m31f6c5d]
#contents
*はじめに [#p04621c7]
このページは FreeBSD の ports を portupgrade を利用して更...
*portupgradeを使う [#b3502179]
portupgrade は FreeBSD の ports からインストールしたソフ...
**インストールと初期設定 [#z14a2601]
まず,portupgrade をインストールしないことには話が進みま...
# pkg_add -r portupgrade
# rehash
同時に Ruby がインストールされることに注意してください. ...
portupgrade の設定ファイルは既定では/usr/local/etc/pkgtoo...
ENV['PACKAGEROOT'] = 'ftp://ftp.jp.FreeBSD.org'
日本の FTP サーバーはいくつかありますが, 日本にある Free...
IGNORE_CATEGORIES = [
'arabic',
'chinese',
'french',
'german',
'hebrew',
'hungarian',
'korean',
'polish',
'portuguese',
'russian',
'ukrainian',
'vietnamese']
最後に 「設定ファイルmake.confをカスタマイズする」 でバイ...
ENV['PACKAGES'] ||= 'somewhere'
portupgrade が FTP から取得したパッケージやバックアップと...
**portupgrade の引数 [#id6c8f48]
ここでは portupgrade の引数で良く知られているものについて...
portupgrade -a
この引数はインストールされている全ての port を全自動で最...
portupgrade -b
portupgrade が port をインストールする前に構築したバック...
portupgrade -n
この引数を組み合わせた場合, portupgrade は実際のインスト...
portupgrade -p
インストール作業のついでにパッケージを作成します. ディス...
portupgrade -w
既定の動作における更新作業の前のmake cleanの実行を抑制し...
portupgrade -N
新規インストールを行ないます. この引数は port 名の他に o...
# portupgrade -N firefox
# portupgrade -N www/firefox
# portupgrade -N www/firefox35
上段のように指定した場合は対話的にバージョンの指定を行な...
portupgrade -P
更新作業にビルド済みのバイナリパッケージを利用します. FT...
portupgrade -r
依存関係を下にたどって更新作業を行ないます. 引数で与えた...
portupgrade -R
依存関係を上にたどって更新作業を行ないます. 引数で与えた...
**便利なコマンド [#gcc0443d]
portupgrade と同時にインストールされる便利なコマンドにつ...
pkg_fetch
ネットワーク経由でパッケージを取得するコマンドです. 次の...
# pkg_fetch -R somepackage@
前述の通り,格納先は設定ファイルpkgtools.confに記述します...
pkgdb
portupgrade が利用するパッケージデータベースを管理するた...
# pkgdb -auF
引数-uはデータベースの更新, -Fはデータベースの依存関係の...
portsclean
port のインストールやビルドに利用した一時ファイルや配布フ...
portsclean -C
/usr/ports以下の作業ディレクトリworkを探索して削除します.
portsclean -P
現在の ports ツリーと比較して最新版でないバイナリパッケー...
portsclean -D
現在の ports ツリーから参照されない配布ファイルを探索して...
portsclean -L
二重に存在する,または出所不明の共有ライブラリを削除しま...
portversion
インストール済みの port のバージョンを ports ツリーと調査...
# portversion -vl '<'
あらかじめデータベースを構築しておくため,システム標準のp...
portinstall
新規に port をインストールします.portupgrade -Nとしても...
portupgrade の実行例
続いて, portupgrade のマニュアルからいくつかの事例を抜き...
ある port を必要とする port を対話的に全て更新する# portu...
前述のようにsomepackageを必要とする全ての port を対象とし...
ある port の名称が変更されたので更新しつつ依存関係を修正...
somepackageがrenamedpackageに名称変更された場合に利用しま...
ある port が依存する port を全て更新してパッケージを作る#...
somepackageが依存する port を全て更新し, インストールし...
ある port をパッケージ限定でインストールする
# portupgrade -NPP somepackage
somepackageを新規インストールします. ただし,現在のツリ...
引数-oや引数-fなど解説していないものをいくつか挙げました...
ここまでで, portupgrade ,そして同時にインストールされる...
*ports 更新の Tips [#g0e53cec]
**地獄の蓋を開ける時 [#l8bc07d3]
FreeBSD の port を更新するには,まず,何らかの方法で port...
port を更新するための手順は主に次のようになります.
+ports ツリーを更新する
+pkg_versionかportversionを利用して更新可能な port を調査...
+参考資料をもとに更新範囲を決定する
+port の更新を実行する
+まともに動作するかどうか確認する
重要なのはとにかく「前準備」の部分であって,実際の作業で...
まず,port のバージョン比較の結果をファイルに書き出してお...
# portversion -vl '<' > /root/ports.info
FreeBSD の port のバージョンは概ね以下のように記述されま...
foo-$PORTVERTION$_$PORTREVISION,$PORTEPOCH
例えば,fooというパッケージのfoo-1.23_4,5というバージョン...
バージョン番号を比較して更新する port を決定したら, 前項...
**三つ子の依存関係 [#gec78580]
更新したい port を決定したら,次はその依存関係を調査しま...
BUILD_DEPENDS
port のビルド自体に必要となる依存関係です. 共有ライブラ...
BUILD_DEPENDS= var>=1.2:${PORTSDIR}/foo/var
この場合,当該 port のビルドにはvarという port の1.2以上...
LIB_DEPENDS
port が必要とするライブラリに関する依存関係です. 以下の...
LIB_DEPENDS= var.1:${PORTSDIR}/foo/var
読み方はBUILD_DEPENDSとほぼ同じですが, バージョン番号は ...
RUN_DEPENDS
port が実行時に必要とするファイルやコマンドに関する依存関...
いま,ソフトウェアfooが共有ライブラリlibvarに BUILD_DEPEN...
# portupgrade -R foo
こうすることで多くの場合はfooの前にlibvarの更新が行なわれ...
# portupgrade -r libvar
この記述では,まずlibvarの更新が行なわれ, そのあとでlibv...
fooと共有ライブラリlibvarの関係だけに着目すれば両者は同じ...
-libvarがfoo以外のfoo2からも必要とされている場合
この場合に引数-Rでfooを更新した場合, libvarのバージョン...
-libvar自体が多量の port に依存している場合
このような場合に引数-Rでfooを更新した場合, fooから遡った...
最悪なのがlibvarがlibvar2に依存しているとして, libvar2が...
まとめると-R引数や-r引数による依存関係の自動解決には限界...
次節では本節で扱ったような影響範囲の大きな port の更新に...
**「sweeping change」と「祭」 [#i212d101]
前節でport を更新する場合にそれぞれの port の依存関係から...
Perl (lang/perl5.10,lang/perl5.8等)
言わずと知れたスクリプト言語の処理系です. 定期的に発生す...
GNU gettext (devel/gettext)
GNU gettext というソフトウェアの国際化に関する共有ライブ...
PNG, TIFF(graphics/png,graphics/tiff等)
それぞれ PNG,TIFF 形式の画像を扱うための共有ライブラリで...
Xorg (x11/xorg)
X Window のライブラリおよびサーバー類,アプリケーション類...
Linux 互換機能 (emulators/linux_base-f10等)
Linux 互換関連の port は全てこの port に依存しています. ...
上述したような著名なものでなくとも/usr/ports/MOVED に記述...
まとめると portsnap や csup で妙に大量の更新が行なわれた...
**「更新しない」という選択 [#yd04c51e]
依存関係を含む port の更新はとにかく面倒です. セキュリテ...
&color(red){/usr/local/etc/pkgtools.confで行ないます. 更...
する形で記述します.
HOLD_PKGS = [
'bsdpan-*',
]
前述の sweeping changes にかかる port はここに追加しても...
これまでも散々書いてきたことですが, 面倒ごとを抱え込まな...
「ports ツリーを更新したらコンパイルエラーが…」であるとか...
*まとめ [#o33effba]
このページの結論は…
+pkg_versionの比較結果を調査
+更新範囲ができるだけ小さくなるよう依存関係を自力で見極める
+更新範囲の頂点にある port に対して引数-frを実行
という素人には全く参考にならない手順となります.
*付録 [#gf6cbce3]
**発生しうる災害 [#n1874e37]
port の更新で依存関係の修正を間違えたときに発生しうる災害...
更新前の ports ツリー
-hoge1 → libhuga1
-hoge2 → libhuga1
-libhuga1
-libhuga-devel
更新後の ports ツリー
-libhuga-develのlibhuga2への名称変更と依存関係の修正
-hoge1→libhuga2
-hoge2→libhuga2
-libhuga1 はバージョン番号の変更無し
いま, ports のツリーを更新したことで libhuga1の開発版のl...
LIB_DEPENDS= huga>=2:huga
hoge1の更新だけに興味があるとして,以下のように実行すると...
# portupgrade -R hoge1
以下は最悪の例であることに注意して下さい (運が良ければ更...
+hoge1が依存するlibhuga1を更新しようとする
+libhuga1は更新不要
+処理がhoge1の更新に戻る
+hoge1のビルドが開始される
+LIB_DEPENDSを解決するために,新しいバージョンのlibhuga2...
+ビルドが成功してlibhoge2のインストールに移る
+運悪く,libhoge1とlibhoge2は共存不可
+portupgrade はlibhuga2のインストールを強行する
+libhoge2に依存する形で新たなhoge1がインストールされる
port が「共存不可」であることはMakefileのCONFLICTという記...
-(新)hoge1→libhuga2
-(旧)hoge2→libhuga1
-libhuga1はlibhuga2と競合している
-libhuga1を消去したいところだが,(旧)hoge2から必要とされ...
この場合,最初の更新計画においてhoge1とhoge2 が必要とする...
事後にこの問題を修復するにはhoge2とlibhuga1を強制的に削除...
**必要とされないパッケージを探す [#ya3ad02b]
port のビルドを繰り返すとBUILD_DEPENDS等の指定によって, ...
#!/bin/sh
plist=`pkg_info | awk '{print $1}'`
for pname in $plist ; do
result=`pkg_info -R $pname | grep -v Information`
if [ -z "$result" ] ; then
echo $pname
fi
done
リストされたパッケージの中で不要と判断されたものはアンイ...
また,このような Required By の指定がないパッケージは更新...
**「野良ビルド」に関する提言 [#u0d59dde]
ソフトウェアの開発元から入手した配布ファイルから得られるc...
-FreeBSD の ports システムは「勝手に改変された」インスト...
-configureはシステムの情報に基づく「最適な」インストール...
-FreeBSD の ports システムは信用にならない
本件に関する著者の見解は「分かっているなら御自由に」とい...
-少なくとも ports のメンテナはその改変が大多数のユーザー...
-ファイルのインストール先が大体決まっている
-インストールするファイルのリストとハッシュ値を記憶している
-バイナリパッケージとして再利用が可能
ports を利用する場合,ファイルのインストール先は概ね/usr/...
-一人前管理者
システムの状態と目的に従って,種々の手段を比較検討し最適...
-日曜管理者
必要ならば ports にパッチを当てるなど,FreeBSD の ports ...
-初心者
知識がないなら他者への屈従を強いられるのは当然で ports を...
-configure原理主義者
聞く耳をもたぬ方にはこのページの記述は全く役に立ちません...
ちなみに,著者は「日曜管理者」です. 日常的に ports のMak...
終了行:
[[FrontPage]]
更新履歴と目次
更新履歴
2010-03-03ページを公開しました.
*目次 [#m31f6c5d]
#contents
*はじめに [#p04621c7]
このページは FreeBSD の ports を portupgrade を利用して更...
*portupgradeを使う [#b3502179]
portupgrade は FreeBSD の ports からインストールしたソフ...
**インストールと初期設定 [#z14a2601]
まず,portupgrade をインストールしないことには話が進みま...
# pkg_add -r portupgrade
# rehash
同時に Ruby がインストールされることに注意してください. ...
portupgrade の設定ファイルは既定では/usr/local/etc/pkgtoo...
ENV['PACKAGEROOT'] = 'ftp://ftp.jp.FreeBSD.org'
日本の FTP サーバーはいくつかありますが, 日本にある Free...
IGNORE_CATEGORIES = [
'arabic',
'chinese',
'french',
'german',
'hebrew',
'hungarian',
'korean',
'polish',
'portuguese',
'russian',
'ukrainian',
'vietnamese']
最後に 「設定ファイルmake.confをカスタマイズする」 でバイ...
ENV['PACKAGES'] ||= 'somewhere'
portupgrade が FTP から取得したパッケージやバックアップと...
**portupgrade の引数 [#id6c8f48]
ここでは portupgrade の引数で良く知られているものについて...
portupgrade -a
この引数はインストールされている全ての port を全自動で最...
portupgrade -b
portupgrade が port をインストールする前に構築したバック...
portupgrade -n
この引数を組み合わせた場合, portupgrade は実際のインスト...
portupgrade -p
インストール作業のついでにパッケージを作成します. ディス...
portupgrade -w
既定の動作における更新作業の前のmake cleanの実行を抑制し...
portupgrade -N
新規インストールを行ないます. この引数は port 名の他に o...
# portupgrade -N firefox
# portupgrade -N www/firefox
# portupgrade -N www/firefox35
上段のように指定した場合は対話的にバージョンの指定を行な...
portupgrade -P
更新作業にビルド済みのバイナリパッケージを利用します. FT...
portupgrade -r
依存関係を下にたどって更新作業を行ないます. 引数で与えた...
portupgrade -R
依存関係を上にたどって更新作業を行ないます. 引数で与えた...
**便利なコマンド [#gcc0443d]
portupgrade と同時にインストールされる便利なコマンドにつ...
pkg_fetch
ネットワーク経由でパッケージを取得するコマンドです. 次の...
# pkg_fetch -R somepackage@
前述の通り,格納先は設定ファイルpkgtools.confに記述します...
pkgdb
portupgrade が利用するパッケージデータベースを管理するた...
# pkgdb -auF
引数-uはデータベースの更新, -Fはデータベースの依存関係の...
portsclean
port のインストールやビルドに利用した一時ファイルや配布フ...
portsclean -C
/usr/ports以下の作業ディレクトリworkを探索して削除します.
portsclean -P
現在の ports ツリーと比較して最新版でないバイナリパッケー...
portsclean -D
現在の ports ツリーから参照されない配布ファイルを探索して...
portsclean -L
二重に存在する,または出所不明の共有ライブラリを削除しま...
portversion
インストール済みの port のバージョンを ports ツリーと調査...
# portversion -vl '<'
あらかじめデータベースを構築しておくため,システム標準のp...
portinstall
新規に port をインストールします.portupgrade -Nとしても...
portupgrade の実行例
続いて, portupgrade のマニュアルからいくつかの事例を抜き...
ある port を必要とする port を対話的に全て更新する# portu...
前述のようにsomepackageを必要とする全ての port を対象とし...
ある port の名称が変更されたので更新しつつ依存関係を修正...
somepackageがrenamedpackageに名称変更された場合に利用しま...
ある port が依存する port を全て更新してパッケージを作る#...
somepackageが依存する port を全て更新し, インストールし...
ある port をパッケージ限定でインストールする
# portupgrade -NPP somepackage
somepackageを新規インストールします. ただし,現在のツリ...
引数-oや引数-fなど解説していないものをいくつか挙げました...
ここまでで, portupgrade ,そして同時にインストールされる...
*ports 更新の Tips [#g0e53cec]
**地獄の蓋を開ける時 [#l8bc07d3]
FreeBSD の port を更新するには,まず,何らかの方法で port...
port を更新するための手順は主に次のようになります.
+ports ツリーを更新する
+pkg_versionかportversionを利用して更新可能な port を調査...
+参考資料をもとに更新範囲を決定する
+port の更新を実行する
+まともに動作するかどうか確認する
重要なのはとにかく「前準備」の部分であって,実際の作業で...
まず,port のバージョン比較の結果をファイルに書き出してお...
# portversion -vl '<' > /root/ports.info
FreeBSD の port のバージョンは概ね以下のように記述されま...
foo-$PORTVERTION$_$PORTREVISION,$PORTEPOCH
例えば,fooというパッケージのfoo-1.23_4,5というバージョン...
バージョン番号を比較して更新する port を決定したら, 前項...
**三つ子の依存関係 [#gec78580]
更新したい port を決定したら,次はその依存関係を調査しま...
BUILD_DEPENDS
port のビルド自体に必要となる依存関係です. 共有ライブラ...
BUILD_DEPENDS= var>=1.2:${PORTSDIR}/foo/var
この場合,当該 port のビルドにはvarという port の1.2以上...
LIB_DEPENDS
port が必要とするライブラリに関する依存関係です. 以下の...
LIB_DEPENDS= var.1:${PORTSDIR}/foo/var
読み方はBUILD_DEPENDSとほぼ同じですが, バージョン番号は ...
RUN_DEPENDS
port が実行時に必要とするファイルやコマンドに関する依存関...
いま,ソフトウェアfooが共有ライブラリlibvarに BUILD_DEPEN...
# portupgrade -R foo
こうすることで多くの場合はfooの前にlibvarの更新が行なわれ...
# portupgrade -r libvar
この記述では,まずlibvarの更新が行なわれ, そのあとでlibv...
fooと共有ライブラリlibvarの関係だけに着目すれば両者は同じ...
-libvarがfoo以外のfoo2からも必要とされている場合
この場合に引数-Rでfooを更新した場合, libvarのバージョン...
-libvar自体が多量の port に依存している場合
このような場合に引数-Rでfooを更新した場合, fooから遡った...
最悪なのがlibvarがlibvar2に依存しているとして, libvar2が...
まとめると-R引数や-r引数による依存関係の自動解決には限界...
次節では本節で扱ったような影響範囲の大きな port の更新に...
**「sweeping change」と「祭」 [#i212d101]
前節でport を更新する場合にそれぞれの port の依存関係から...
Perl (lang/perl5.10,lang/perl5.8等)
言わずと知れたスクリプト言語の処理系です. 定期的に発生す...
GNU gettext (devel/gettext)
GNU gettext というソフトウェアの国際化に関する共有ライブ...
PNG, TIFF(graphics/png,graphics/tiff等)
それぞれ PNG,TIFF 形式の画像を扱うための共有ライブラリで...
Xorg (x11/xorg)
X Window のライブラリおよびサーバー類,アプリケーション類...
Linux 互換機能 (emulators/linux_base-f10等)
Linux 互換関連の port は全てこの port に依存しています. ...
上述したような著名なものでなくとも/usr/ports/MOVED に記述...
まとめると portsnap や csup で妙に大量の更新が行なわれた...
**「更新しない」という選択 [#yd04c51e]
依存関係を含む port の更新はとにかく面倒です. セキュリテ...
&color(red){/usr/local/etc/pkgtools.confで行ないます. 更...
する形で記述します.
HOLD_PKGS = [
'bsdpan-*',
]
前述の sweeping changes にかかる port はここに追加しても...
これまでも散々書いてきたことですが, 面倒ごとを抱え込まな...
「ports ツリーを更新したらコンパイルエラーが…」であるとか...
*まとめ [#o33effba]
このページの結論は…
+pkg_versionの比較結果を調査
+更新範囲ができるだけ小さくなるよう依存関係を自力で見極める
+更新範囲の頂点にある port に対して引数-frを実行
という素人には全く参考にならない手順となります.
*付録 [#gf6cbce3]
**発生しうる災害 [#n1874e37]
port の更新で依存関係の修正を間違えたときに発生しうる災害...
更新前の ports ツリー
-hoge1 → libhuga1
-hoge2 → libhuga1
-libhuga1
-libhuga-devel
更新後の ports ツリー
-libhuga-develのlibhuga2への名称変更と依存関係の修正
-hoge1→libhuga2
-hoge2→libhuga2
-libhuga1 はバージョン番号の変更無し
いま, ports のツリーを更新したことで libhuga1の開発版のl...
LIB_DEPENDS= huga>=2:huga
hoge1の更新だけに興味があるとして,以下のように実行すると...
# portupgrade -R hoge1
以下は最悪の例であることに注意して下さい (運が良ければ更...
+hoge1が依存するlibhuga1を更新しようとする
+libhuga1は更新不要
+処理がhoge1の更新に戻る
+hoge1のビルドが開始される
+LIB_DEPENDSを解決するために,新しいバージョンのlibhuga2...
+ビルドが成功してlibhoge2のインストールに移る
+運悪く,libhoge1とlibhoge2は共存不可
+portupgrade はlibhuga2のインストールを強行する
+libhoge2に依存する形で新たなhoge1がインストールされる
port が「共存不可」であることはMakefileのCONFLICTという記...
-(新)hoge1→libhuga2
-(旧)hoge2→libhuga1
-libhuga1はlibhuga2と競合している
-libhuga1を消去したいところだが,(旧)hoge2から必要とされ...
この場合,最初の更新計画においてhoge1とhoge2 が必要とする...
事後にこの問題を修復するにはhoge2とlibhuga1を強制的に削除...
**必要とされないパッケージを探す [#ya3ad02b]
port のビルドを繰り返すとBUILD_DEPENDS等の指定によって, ...
#!/bin/sh
plist=`pkg_info | awk '{print $1}'`
for pname in $plist ; do
result=`pkg_info -R $pname | grep -v Information`
if [ -z "$result" ] ; then
echo $pname
fi
done
リストされたパッケージの中で不要と判断されたものはアンイ...
また,このような Required By の指定がないパッケージは更新...
**「野良ビルド」に関する提言 [#u0d59dde]
ソフトウェアの開発元から入手した配布ファイルから得られるc...
-FreeBSD の ports システムは「勝手に改変された」インスト...
-configureはシステムの情報に基づく「最適な」インストール...
-FreeBSD の ports システムは信用にならない
本件に関する著者の見解は「分かっているなら御自由に」とい...
-少なくとも ports のメンテナはその改変が大多数のユーザー...
-ファイルのインストール先が大体決まっている
-インストールするファイルのリストとハッシュ値を記憶している
-バイナリパッケージとして再利用が可能
ports を利用する場合,ファイルのインストール先は概ね/usr/...
-一人前管理者
システムの状態と目的に従って,種々の手段を比較検討し最適...
-日曜管理者
必要ならば ports にパッチを当てるなど,FreeBSD の ports ...
-初心者
知識がないなら他者への屈従を強いられるのは当然で ports を...
-configure原理主義者
聞く耳をもたぬ方にはこのページの記述は全く役に立ちません...
ちなみに,著者は「日曜管理者」です. 日常的に ports のMak...
ページ名: