top page > PC unix > here

ports/packages



概要

  1. 新旧 package system が共存できるか試した結果を提示する.
  2. 最近の ports についての雑感.

検討した環境は次のようなものです.

  1. OS は FreeBSD/amd64 9.3, 10.4, 11.2, 11.3, 11.4, 12.0, 12.1, 12.2, 13.0 です.

目次

1. packages
1.1 FreeBSD 9 系
1.2 FreeBSD 10 系
1.3 FreeBSD 11 系
1.4 FreeBSD 12, 13 系
2. ports
2.1 perl5
2.2 OS の version との関係
2.3 security 関連
2.4 ports tree の更新

1.  packages

2014.9.1 に FreeBSD のパッケージ管理は pkgng と呼称される新しい仕組みに更新されました. ほぼすべての操作は pkg コマンドに種々の option を付けることにより行な えます.

一方,pkg_add, pkg_delete, pkg_info 等の古い仕組みには正式な呼称がないのか,表記は人それぞれです. (「pkg_* 系コマンド」とか.) これではどちらのことなのか分かりにくいので,ここでは「新」「旧」package system と呼称します.

新 package system に移行して困るのは,旧 package system 用に配布されているものを取り扱えないことです.[1] FreeBSD の ports/packages になっているものは支障ありませんが,市販のソフトで新 package system に対応していないものは install できません.

そこで,新旧の package system が共存できるのかを調べてみました. ファイルや動作はお互いに干渉せず,共存は可能でした. また,そもそも旧 package system は残されているのかを調べてみました. FreeBSD の version により,以下のような状況でした.

1.1  FreeBSD 9 系

FreeBSD 9.3 には旧 package system が残っております.

1.2  FreeBSD 10 系

旧 package system は使える状態になっておりません. しかしソースは残されており,以下のようにして導入することができます.

# cd /usr/src/usr.sbin/pkg_install
# make
# make install

FreeBSD/amd64 10.3 での例を 旧 package system に示します.

1.3  FreeBSD 11 系

FreeBSD 11.2 においては,旧 package system は使える状態になっておらず,ソースも削除されております. 11.0, 11.1 は不明です.

また,FreeBSD 10.4 の /usr/src/usr.sbin/pkg_install/cp した場合,make ができません. それができるようにするためには,この中だけでなく,/usr/src/ のあちこちを修正する必要がありました. ただし,そのやり方ですと freebsd-update で OS を更新する際に面倒なことになります.[2]

この patch を作ったものかと逡巡している間に,以下のように状況が変わりました.

(2018.11.10) freebsd-update により FreeBSD 11.2-RELEASE-p4 に更新しました. その環境では,旧 package system が復活しておりました.

自分で make install する必要もありません. (置き場は同じ /usr/src/usr.sbin/pkg_install/ なのですが,ソースはなくなっており,binary のみです.[3])

(2020.1.18) FreeBSD 11.3 を新規に install したところ,再び旧 package system がなくなっておりました.

[1] pkg2ng は,旧 package system のデータベースを新 package system のそれに変換するだけです.
  pkg convert はマニュアルには「変換」とありますが,何を何に変換するのか不明です.

[2] 可能ならば,旧 package system を ports にしてしまった方が後々楽だと思います.

[3] それなりに要望があったから復活したのでしょうが,配布の仕方に一時しのぎを感じます.

1.4  FreeBSD 12, 13 系

FreeBSD 12.0, 13.0 においては,旧 package system は提供されておりません.

2.  ports

2.1  perl5

ports にて何かの port を make する際に,依存関係で perl5 (/usr/local/bin/perl5) が必要になることがあります.

ところが,ports から perl を導入した場合,/usr/local/bin/perl5.26.2-5.26.2 のように version が不必要なまでに付いたものしか install されないことがあります.[1] それゆえ "not found" になってしまいます.

perl を make する際に表示されるメッセージに従い /etc/make.conf

DEFAULT_VERSIONS+=perl5=5.26

のように書いても影響がないようです.

これは,pkg からならば導入できました.

# pkg install perl5

perl としては,以下の三つが install されます. これらはファイル名が違うだけで中身は同一です.[2]

/usr/local/bin/perl
/usr/local/bin/perl5         ← ports からだとこれがありません.
/usr/local/bin/perl5.26.2    ← ports よりはすっきりした名前になります.

[1] 悩ましいことに,必ず失敗するわけではありません. ports がまっさらな状態から始めた場合には,うまく行くことが多いです.

[2] 今思い付きましたが,それならば ports から install されたものを perl5 として cp すれば良いのかもしれません. 次に機会があったら試してみます.

2.2  OS の version との関係

2018.11.4 に FreeBSD 10.4 にて portsnap update しました. すると,こう言われて make が止まりました. (この時点では 10.4 は既に EOL なので,文句は言えないのすが.)

Ports Collection support for your FreeBSD version has ended, and no ports are
guaranteed to build on this system. Please upgrade to a supported release.

No support will be provided if you silence this message by defining
ALLOW_UNSUPPORTED_SYSTEM.

*** Error code 1

これ自体は,

# setenv ALLOW_UNSUPPORTED_SYSTEM

とするか,または /etc/make.conf に次のように書けば make を始めてくれます.

ALLOW_UNSUPPORTED_SYSTEM=yes

しかし,様々な ports の make に Error や Warning が出て難航しました. 結局,freebsd-update により 11.2 に更新しました.

最新の ports は,以前よりも OS や個々の port の version に厳格にかつ過敏になってる印象です. 今後は,OS の version を上げたくないなら,安易に portsnap update をするべきではないですね.

あと,「この port はメンテナーがいません」と表示される port も地味に増えている気がします.

2.3  security 関連

security も以前より敏感になっているのか,それとも対応が追い付かないものが増えているのか,素直に make できないものが増えました.

「どうしても使いたいなら,次のようにして下さい」と言われながら使うのもいい気分ではないです. この問題に無自覚になってトラブルが起こるよりはましですが.

# make DISABLE_VULNERABILITIES=yes

2.4  ports tree の更新

今まで ports tree の更新には portsnap を使ってきましたが,2021.4.1 以降は git (系列) でしか出来なくなりました.

(1) 準備
  portsnap が管理している ports tree を廃棄するため,/usr/ports を空にします.

# cd /usr
# mv ports ports.orig  ← うまく行かない場合に備えて,かつ後で distfiles を mv するため,消しません.
# mkdir ports          ← これは必要ないかもしれません.

(2) git による更新
  先ず,ports/devel/git を install します. より新しい git を使いたいので,少なくとも最初は pkg から入れた方が良いでしょう.

# pkg install git

初回は次のようにします.

# git clone --depth 1 -o upstream -b main https://git.freebsd.org/ports.git .

2 回目以降は次のようにします.

# git -C /usr/ports pull

(3) gitup による更新
  先ず,ports/net/gitup を install します. より新しい gitup を使いたいので,少なくとも最初は pkg から入れた方が良いでしょう.

# pkg install gitup

次のようにします.

# gitup ports

(補足 1) 少なくとも ports tree に関しては,gitgitup とは混在できません. これを変更したければ,ports を空にしてやり直す必要があります. (より合理的な方法もあるかもしれませんが.)

(補足 2) 少なくとも gitup の場合,ports tree に work が残っていると相当時間をかけてそれらを消した後,もう一度 gitup を実行しろと言われます. まめに make clean しておくべきです.

(補足 3) portsnap から git になってから,pkg version の実行時間が格段に増えました. 支障が生じるほどではありませんが.