SlideShare a Scribd company logo
1 of 27
パッケージサーバの作り方
カスタムビルドパッケージ
の作成と公開について
2017年4月28日
(株)創夢 内藤 祐一郎
はじめに
● FreeBSD のバイナリパッケージは
とっても便利ですが
● オプションがデフォルト
● DEFAULT_VERSIONS もデフォルト
● make.conf もデフォルト
→ 自分好みにカスタマイズしたパッケージを作りたい
パッケージビルドツール
● Poudriere
– プドゥリエル:仏語で火薬庫の意
– AsiaBSDCon2017 でたくさん言及されてました
– 調べると日本語の記事もたくさんありました
● FreeBSD ハンドブック
● Qiitaの記事
● CBUGの資料
● その他、Blog記事多数
Poudriere
● これら多数の情報とっても参考になりました。
ありがとうございます。
● これらの情報を踏まえつつ、実際に使ってみた
感じをまとめたいと思います。
Poudriereとは
● Ports ツリーのビルドを jail 環境で行い
pkgで利用できるパッケージリポジトリを
作ってくれる shell script です
● ports/ports-mgmt/poudriere から make install
● または pkg install poudriere で
インストールできます
Ports のビルドに必要なもの
1. どの Ports ツリーを使うのか?
2. どの jail 環境でビルドするのか?
3. どのオプションでビルドするのか?
4. どの make.conf を使うのか?
5. どの src.conf を使うのか?
6. どの port をビルドするのか?
1. Ports ツリーの取得
poudriere では次の方法でツリーを取得します。
A) portsnap
B) svn
C) git
取得したツリーそれぞれに名前をつけて管理しま
す。
$ poudriere ports -c -p <ツリー名> 
-m portsnap | svn | git
1. Ports ツリーの取得
svn, git リポジトリのデフォルトは
● svn://svn.freebsd.org/ports
● git://github.com/freebsd/freebsd-ports.git
変更するには poudriere.conf に
SVN_HOST に svn サーバのホスト名を
GIT_URL に git リポジトリのURLを書きます。
1. Ports ツリーの取得
ブランチのデフォルトは
● svn : head
● git : master
変更するには poudriere ports に -B <ブランチ名>
を渡します (svnでは branches/2017Q2など)
従って svn では必ず次のような URL になります
“svn://${SVN_HOST}/ports/<ブランチ名>”
1. Ports ツリーの一覧
● Poudriere で管理されている Ports ツリーの一覧
$ poudriere ports -l
● Poudriere で管理されている Ports ツリーの更新
$ poudriere ports -u -p <ports名>
● Poudriere で管理されている Ports ツリーの削除
$ poudriere ports -d -p <ports名>
2. jail 環境の作成
● jail 環境にもそれぞれ名前をつけて管理します
● jail を作成するには以下のコマンドを使います
$ poudriere jail -c -j <jail名> 
-v <バージョン: 11.0-RELEASE など> 
-a <アーキテクチャ: amd64 など>
2. jail 環境の取得先
● デフォルトでは ftp://ftp.freebsd.org からです
● poudriere.conf に
FREEBSD_HOST=ftp://ftp.jp.freebsd.org
とすると変えることができます。
2. jail 環境の一覧
● jail 環境の一覧を表示するには
$ poudriere jail -l
● jail 環境を更新 (freebsd-update) するには
$ poudriere jail -u -j <jail名>
● jail 環境を削除するには
$ poudriere jail -d -j <jail名>
3. オプションの設定
まず、 make config-recursive を実行する対象の
パッケージリストを作成します。
例)$ echo “editor/emacs” > pkglist
このリストを元にオプションを設定します。
オプションのまとまりを「セット」と呼び、名前
をつけて管理します。
3. オプションの設定
オプションは Ports ツリー、jail 環境に依存する
ため、それぞれを指定した上で設定します
$ poudriere options -p <ports名> 
-j <jail名> 
-z <セット名> 
-f <パッケージリストファイル>
poudriereが make config を実行し、対話的にオプ
ションを設定します。
3. オプションの設定
オプションの保存形式は既存の make config と全
く同じですので、/var/db/ports 以下を poudriere
の管理領域にコピーすることもできます。
例)
cp -r /var/db/ports 
/usr/local/etc/poudriere.d/<jail名>-<ports名>-<セット名
>-options
4. make.conf の設定
poudriere が使用する make.conf は次の順に読み込みます。
/usr/local/etc/poudriere.d/make.conf
/usr/local/etc/poudriere.d/<セット名>-make.conf
/usr/local/etc/poudriere.d/<ports名>-make.conf
/usr/local/etc/poudriere.d/<jail名>-make.conf
/usr/local/etc/poudriere.d/<jail名>-<ports名>-make.conf
/usr/local/etc/poudriere.d/<jail名>-<セット名>-make.conf
/usr/local/etc/poudriere.d/<jail名>-<ports名>-<セット名>-make.conf
6. src.conf の設定
poudriere が使用する src.conf は次の順に読み込
みます。
/usr/local/etc/poudriere.d/src.conf
/usr/local/etc/poudriere.d/<セット名>-src.conf
/usr/local/etc/poudriere.d/<jail名>-src.conf
パッケージビルド
poudriere が build するパッケージのリストを指定
して poudriere bulk を呼び出します。
$ poudriere bulk 
-p <ports名> -j <jail名> -z <セット名> 
-f <パッケージリストファイル>
パッケージビルド
出来上がったパッケージは
/usr/local/poudriere/data/packages/
<jail名>-<ports名>-<セット名>
に pkg repo した状態で書き込まれます。
→ここをhttpで公開します。
パッケージの署名
公開するに当たって署名したい場合には
まず、RSA鍵ペアを作成します。
例)
$ openssl genrsa -out repo.key
$ openssl rsa -in repo.key -pubout -out repo.pub
repo.key が秘密鍵で repo.pub が公開鍵です。
パッケージの署名
poudriere.conf に
PKG_REPO_SIGNING_KEY=/root/repo.key
と指定しておくとビルド時に署名してくれます
パッケージの署名検証
署名を検証する側にはRSA公開鍵をインストールし
ておき、次のような pkg.conf を作成します。
myrepo: {
url: "<公開URL>",
mirror_type: "http",
signature_type: "pubkey",
pubkey: "/root/repo.pub",
enabled: yes
}
パッケージの署名検証
poudriereは署名検証方式としてfingerprintはサ
ポートしていないようです。
FreeBSDのパッケージリポジトリと異なり
poudriereで作成したリポジトリのメタデータに
RSA 公開鍵が含まれないためです。
パッケージビルドの並列度
デフォルトではホストのCPUコア数分、jail環境
をコピーし依存関係のない Port が並列ビルドさ
れます。
一つ一つの jail では make -j 1 でビルドされま
す。
poudriere.conf の以下の設定で変えられます。
PARALLEL_JOBS=<jail数>
ALLOW_MAKE_JOBS= no | yes
ZFSを使う
zfs を使うと jail環境をコピーではなく clone して
くれるため、圧倒的に前処理が速くなります。
poudriere.conf に使いたいプール名とpoudriere用
のルートファイルシステムを指定します。
例)
ZPOOL=tank
ZROOTFS=/poudriere
おまけ
poudriereはportを作成している人にとっても複数
の環境でビルドをテストできとても魅力的です。
$ poudriere testport -j <jail名> -p <ports名> 
-z <セット名> -f <パッケージリストファイル>
で該当パッケージのビルドログを全て表示してく
れます。依存関係の不足なども表示されますの
で、ぜひご活用ください!

More Related Content

What's hot

データベースのお話
データベースのお話データベースのお話
データベースのお話Hidekazu Tanaka
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Takuto Matsuu
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなしTsuyoshi Yamada
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話Kouhei Maeda
 
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-monochrojazz
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo LinuxについてTakuto Matsuu
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presenKouhei Maeda
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプトbsdhack
 
Linuxの基礎勉強会
Linuxの基礎勉強会Linuxの基礎勉強会
Linuxの基礎勉強会優之 田中
 
ベンチマーク勉強会#03
ベンチマーク勉強会#03ベンチマーク勉強会#03
ベンチマーク勉強会#03milk hanakara
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール弘毅 露崎
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
RedisととあるシステムTakehiro Torigaki
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)Kenichiro MATOHARA
 

What's hot (20)

データベースのお話
データベースのお話データベースのお話
データベースのお話
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 
Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内Gentooサークル新歓コンパのご案内
Gentooサークル新歓コンパのご案内
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
 
U boot-for-zynqberry
U boot-for-zynqberryU boot-for-zynqberry
U boot-for-zynqberry
 
エンジニアのための痔の話
エンジニアのための痔の話エンジニアのための痔の話
エンジニアのための痔の話
 
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
gcoreでプロセスメモリダンプ -mysqlプロセスメモリを見てみる-
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
Gentoo Linuxの紹介
Gentoo Linuxの紹介Gentoo Linuxの紹介
Gentoo Linuxの紹介
 
Hostsの活用
Hostsの活用Hostsの活用
Hostsの活用
 
S2s websrv201011-presen
S2s websrv201011-presenS2s websrv201011-presen
S2s websrv201011-presen
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
Redis速習会@Wantedly
Redis速習会@WantedlyRedis速習会@Wantedly
Redis速習会@Wantedly
 
Linuxの基礎勉強会
Linuxの基礎勉強会Linuxの基礎勉強会
Linuxの基礎勉強会
 
3-1
3-13-1
3-1
 
ベンチマーク勉強会#03
ベンチマーク勉強会#03ベンチマーク勉強会#03
ベンチマーク勉強会#03
 
R以外の研究ツール
R以外の研究ツールR以外の研究ツール
R以外の研究ツール
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
Redisととあるシステム
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 

Similar to Custom Package Building with Poudriere

FreeBSDで行こう for small server
FreeBSDで行こう for small serverFreeBSDで行こう for small server
FreeBSDで行こう for small serverTatsumi Naganuma
 
「おれのクラウド」今日から始めるオブジェクトストレージ
「おれのクラウド」今日から始めるオブジェクトストレージ「おれのクラウド」今日から始めるオブジェクトストレージ
「おれのクラウド」今日から始めるオブジェクトストレージMasahito Zembutsu
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1Etsuji Nakai
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
AutoDock_Raccoon_japanese_ver.1.0
AutoDock_Raccoon_japanese_ver.1.0AutoDock_Raccoon_japanese_ver.1.0
AutoDock_Raccoon_japanese_ver.1.0Satoshi Kume
 
fdコマンドを使おう
fdコマンドを使おうfdコマンドを使おう
fdコマンドを使おうHideaki Miyake
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみようMasahiko Hashimoto
 
Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)Kimiyuki Yamauchi
 
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようAtsushi Odagiri
 
ベンチマーク勉強会#02
ベンチマーク勉強会#02ベンチマーク勉強会#02
ベンチマーク勉強会#02milk hanakara
 
Symfony2からdoctrine mongo db odmを使ってみる
Symfony2からdoctrine mongo db odmを使ってみるSymfony2からdoctrine mongo db odmを使ってみる
Symfony2からdoctrine mongo db odmを使ってみるKoji Iwazaki
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChefMasahiro NAKAYAMA
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0Satoshi Kume
 
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) VirtualTech Japan Inc.
 

Similar to Custom Package Building with Poudriere (20)

FreeBSDで行こう for small server
FreeBSDで行こう for small serverFreeBSDで行こう for small server
FreeBSDで行こう for small server
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
「おれのクラウド」今日から始めるオブジェクトストレージ
「おれのクラウド」今日から始めるオブジェクトストレージ「おれのクラウド」今日から始めるオブジェクトストレージ
「おれのクラウド」今日から始めるオブジェクトストレージ
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
AutoDock_Raccoon_japanese_ver.1.0
AutoDock_Raccoon_japanese_ver.1.0AutoDock_Raccoon_japanese_ver.1.0
AutoDock_Raccoon_japanese_ver.1.0
 
fdコマンドを使おう
fdコマンドを使おうfdコマンドを使おう
fdコマンドを使おう
 
自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう自分色のLinuxホームサーバーを作ってみよう
自分色のLinuxホームサーバーを作ってみよう
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Openstack+Ceph設定ガイド
Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
 
Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)
 
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
 
ベンチマーク勉強会#02
ベンチマーク勉強会#02ベンチマーク勉強会#02
ベンチマーク勉強会#02
 
Symfony2からdoctrine mongo db odmを使ってみる
Symfony2からdoctrine mongo db odmを使ってみるSymfony2からdoctrine mongo db odmを使ってみる
Symfony2からdoctrine mongo db odmを使ってみる
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
 
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
 

More from Yuichiro Naito (20)

Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSDReporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
Reporting AsiaBSDCon 2024 in Taipei for FreeBSD NetBSD
 
Bmd
BmdBmd
Bmd
 
WireGurad in the FreeBSD kernel
WireGurad in the FreeBSD kernelWireGurad in the FreeBSD kernel
WireGurad in the FreeBSD kernel
 
FreeBSD Capsicum
FreeBSD CapsicumFreeBSD Capsicum
FreeBSD Capsicum
 
Xrdp
XrdpXrdp
Xrdp
 
Bhyve debug-server
Bhyve debug-serverBhyve debug-server
Bhyve debug-server
 
Tramp mode
Tramp modeTramp mode
Tramp mode
 
HandBrake with QSV
HandBrake with QSVHandBrake with QSV
HandBrake with QSV
 
FreeBSD 12.1 RELESE
FreeBSD 12.1 RELESEFreeBSD 12.1 RELESE
FreeBSD 12.1 RELESE
 
Modern fonts
Modern fontsModern fonts
Modern fonts
 
FreeBSD 12.0 RELEASE!
FreeBSD 12.0 RELEASE!FreeBSD 12.0 RELEASE!
FreeBSD 12.0 RELEASE!
 
Psql & proctitle
Psql & proctitlePsql & proctitle
Psql & proctitle
 
Iocage
IocageIocage
Iocage
 
FreeBSD 11.2 RELEASE!
FreeBSD 11.2 RELEASE!FreeBSD 11.2 RELEASE!
FreeBSD 11.2 RELEASE!
 
How to use PTI & IBRS patch
How to use PTI & IBRS patchHow to use PTI & IBRS patch
How to use PTI & IBRS patch
 
FreeBSD Desktop
FreeBSD DesktopFreeBSD Desktop
FreeBSD Desktop
 
FreeBSD Ports Flavors
FreeBSD Ports Flavors FreeBSD Ports Flavors
FreeBSD Ports Flavors
 
Bsdtw repo
Bsdtw repoBsdtw repo
Bsdtw repo
 
How to use blacklistd
How to use blacklistdHow to use blacklistd
How to use blacklistd
 
Ruby build
Ruby buildRuby build
Ruby build
 

Custom Package Building with Poudriere