Ports の FLAVOR を調べてみた
2017 年 12 月 22 日
(株)創夢 内藤 祐一郎
FLAVOR とは
● ビルドオプションが違うパッケージを作るための仕組み
● 各 port の Makefile に
FLAVORS = < フレーバ名 > ...
を入れます
● ビルドする時に
make FLAVOR=< フレーバ名 >
とします
FLAVOR とは
● make FLAVOR=all は NG です
● make pretty-flavors-package-names で
フレーバ名とパッケージ名に一覧が表示されます
例:
$ cd /usr/ports/net/bird
$ make pretty-flavors-package-names
ipv4: bird-1.6.3_3
ipv6: bird6-1.6.3_3
FLAVOR のパッケージ名
● FLAVOR 名がパッケージ名のどこに入るのかは
各 port 毎に異なります
● 前または後ろにつけるという約束はあるようです
● 既存の port を FLAVOR 対応した場合、なるべくパッケー
ジ名が変わらないように配慮しているようです
● とあるパッケージの FLAVOR 名を知りたい場合は
pkg info コマンドで flavor: の行を見ましょう
Python での利用
● Python を使う port に FLAVOR サポートが入りました
● ただし、 Python 自身の port には FLAVOR はありません
● python を使う側の port に以下のような FLAVORS を定義
する仕組みを用意しています
FLAVORS = py27 py34 py35 py36
Python での利用
● Python を利用する port にサポートバージョンに応じた
FLAVORS を入れるために USE_PYTHON を拡張したよう
です
● USE_PYTHON=noflavors で FLAVOR なし
● USE_PYTHON=flavors でデフォルトバージョンの
Python を指定します(現時点では py27 )
● USE_PYTHON=allflavors  で全てのバージョンの Python
を指定します
Python での利用の例
● 例えば devel/py-setuptools では
USE_PYTHON= allflavors
$ make pretty-flavors-package-names
py27: py27-setuptools-36.5.0
py36: py36-setuptools-36.5.0
py35: py35-setuptools-36.5.0
py34: py34-setuptools-36.5.0
Python での利用の例
● 例えば devel/py-gobject では
USE_PYTHON= flavors
$ make pretty-flavors-package-names
py27: py27-gobject-2.28.6_7
Python での利用の例
● 例えば sysutils/ansible では
USE_PYTHON= noflavors
$ make pretty-flavors-package-names
no flavor: ansible-2.4.2.0
● noflavors の場合は FLAVOR が無いときと同じ動作
pkg ユーザにとっての利点
● FLAVOR の数だけパッケージが増えたように見えます
● 依存関係などもそれぞれに応じて入ります
● アップグレードも今まで通り行えます
● バイナリパッケージの扱いについて特に変わることはあり
ません
ports のビルド
● poudriere は既に FLAVOR に対応しています
設定次第で FLAVOR のパッケージをビルドします
( FLAVOR_DEFAULT_ALL = yes )
● portmaster は 3.17.11 以降で対応しました
FLAVOR のない port から FLAVOR ありへアップデートで
きるようになりました
● portupgrade は未対応のようです
まとめ
● バイナリパッケージを使う分には特に変わったことはあり
ません
● Ports ツリーから自分でビルドしている人は poudriere 、
portmaster を使いましょう
● Ports を作る人は本当に必要かよく考えて使いましょう
下手につかうと依存関係の組み合わせ数が爆発する恐れが
あります

FreeBSD Ports Flavors

  • 1.
    Ports の FLAVORを調べてみた 2017 年 12 月 22 日 (株)創夢 内藤 祐一郎
  • 2.
    FLAVOR とは ● ビルドオプションが違うパッケージを作るための仕組み ●各 port の Makefile に FLAVORS = < フレーバ名 > ... を入れます ● ビルドする時に make FLAVOR=< フレーバ名 > とします
  • 3.
    FLAVOR とは ● makeFLAVOR=all は NG です ● make pretty-flavors-package-names で フレーバ名とパッケージ名に一覧が表示されます 例: $ cd /usr/ports/net/bird $ make pretty-flavors-package-names ipv4: bird-1.6.3_3 ipv6: bird6-1.6.3_3
  • 4.
    FLAVOR のパッケージ名 ● FLAVOR名がパッケージ名のどこに入るのかは 各 port 毎に異なります ● 前または後ろにつけるという約束はあるようです ● 既存の port を FLAVOR 対応した場合、なるべくパッケー ジ名が変わらないように配慮しているようです ● とあるパッケージの FLAVOR 名を知りたい場合は pkg info コマンドで flavor: の行を見ましょう
  • 5.
    Python での利用 ● Pythonを使う port に FLAVOR サポートが入りました ● ただし、 Python 自身の port には FLAVOR はありません ● python を使う側の port に以下のような FLAVORS を定義 する仕組みを用意しています FLAVORS = py27 py34 py35 py36
  • 6.
    Python での利用 ● Pythonを利用する port にサポートバージョンに応じた FLAVORS を入れるために USE_PYTHON を拡張したよう です ● USE_PYTHON=noflavors で FLAVOR なし ● USE_PYTHON=flavors でデフォルトバージョンの Python を指定します(現時点では py27 ) ● USE_PYTHON=allflavors  で全てのバージョンの Python を指定します
  • 7.
    Python での利用の例 ● 例えばdevel/py-setuptools では USE_PYTHON= allflavors $ make pretty-flavors-package-names py27: py27-setuptools-36.5.0 py36: py36-setuptools-36.5.0 py35: py35-setuptools-36.5.0 py34: py34-setuptools-36.5.0
  • 8.
    Python での利用の例 ● 例えばdevel/py-gobject では USE_PYTHON= flavors $ make pretty-flavors-package-names py27: py27-gobject-2.28.6_7
  • 9.
    Python での利用の例 ● 例えばsysutils/ansible では USE_PYTHON= noflavors $ make pretty-flavors-package-names no flavor: ansible-2.4.2.0 ● noflavors の場合は FLAVOR が無いときと同じ動作
  • 10.
    pkg ユーザにとっての利点 ● FLAVORの数だけパッケージが増えたように見えます ● 依存関係などもそれぞれに応じて入ります ● アップグレードも今まで通り行えます ● バイナリパッケージの扱いについて特に変わることはあり ません
  • 11.
    ports のビルド ● poudriereは既に FLAVOR に対応しています 設定次第で FLAVOR のパッケージをビルドします ( FLAVOR_DEFAULT_ALL = yes ) ● portmaster は 3.17.11 以降で対応しました FLAVOR のない port から FLAVOR ありへアップデートで きるようになりました ● portupgrade は未対応のようです
  • 12.
    まとめ ● バイナリパッケージを使う分には特に変わったことはあり ません ● Portsツリーから自分でビルドしている人は poudriere 、 portmaster を使いましょう ● Ports を作る人は本当に必要かよく考えて使いましょう 下手につかうと依存関係の組み合わせ数が爆発する恐れが あります