Posted:
| Tags:
distcc,
gentoo,
pxe,
systemd
PXE Gentooのdistccdログとsystemd sandboxを切り分ける
目的
PXE boot した Gentoo client で distccd を systemd 管理するとき、root filesystem の overlay 状態と systemd sandbox の制限を分けて考える。
/var/log が overlayfs 上で書き込み可能でも、unit に ProtectSystem=strict があると、service process からは明示許可した path にしか書けない。
症状
distccd は起動しているが、journal に次のような log open failure が出る。
distccd: failed to open /var/log/distccd.log: Read-only file system
このとき、host 側で見ると / と /var/log は overlayfs 上にある。
/ overlayfs
/var/log overlayfs
したがって、すぐに「root overlay が read-only」と判断しない。
原因層
systemd unit が次のような sandbox を持つ場合がある。
Read more...Posted:
| Categories:
Gentoo
| Tags:
distcc,
docker,
Gentoo
背景
Gentoo の Docker イメージが作りたい。が、
- オフィシャルの gentoo/stage3-amd64 の更新頻度が低い( 2021/08/08 時点で以前のアップデートが 1 年前だった )
- portage 用のイメージ gentoo/portageがあり、こちらは毎日更新されている。
- コマンドや glibc などが置かれているビルド済みの領域は gentoo/stage3-amd64 に置かれているため、実際に使うときには emerge –update –deep –newuse @world とリビルドが必要
- リビルドするとイメージのサイズがかなり増える
が、できればコンパクトなイメージにしたい。
結論(2021/08/17 時点)
docker-slimを使ってイメージをコンパクトにする方法が一番コンパクトになった。
| 手法 | サイズ | 備考 |
|---|
| ダウンサイジング前 | 3.04GB | |
| 不要なディレクトリの削除 | 1.8GB | emerge が一時的に使うファイル郡 |
| (上記ディレクトリ削除に加えて)不要なパッケージの削除 | 983MB | パッケージ一覧を見ながら不要そうなパッケージを削除 |
| docker-slim | 39MB | |
Dockerfile サンプル
ここに公開した
手法の比較
不要なディレクトリ削除は emerge が一時的に使うファイル郡を削除するだけなので安全に使える。
不要なパッケージの削除だが、これはパッケージ名の変更やパッケージ同士の依存関係の変更があると
必須ではないが、都度 Dockerfile の修正が必要になり長期間の運用を考えると、運用コストが上がる。
docker-slim を使った方法が一番コンパクトになった。ただ docker-slim は必要なファイルを動的に解析して必要なファイルのみを残すので、解析できるように準備する必要がある。
RUN emerge –sync でも同様な事はできるので… と思ったが、毎回 emerge –sync に時間が取られるのは無駄。
もし「Docker のキャッシュで古い状態でビルドされるのが嫌だ」という場合でも、キャッシュを使わないオプションで docker build すれば最新の状態でビルドできる。
Read more...Posted:
| Categories:
Gentoo
| Tags:
distcc,
Gentoo
distcc サーバーを建てる
概要
ラズパイ Gentoo GenPi64 でのコンパイルに時間がかかるので、
amd64 のマシンの docker 上にクロスコンパイル環境を構築、
distcc デーモンを立てて、ラズパイがクライアント、amd64 が distcc サーバの構成でコンパイルを早くした。
手順
distcc が起動する docker コンテナを作る
distcc への接続確認
telnet コマンドでポート 3632 に接続。
切断は Ctrl + ] を押してから Ctrl + d
$ telnet localhost 3632
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.
GenPi64 distcc クライアント側の設定
GenPi64 は distcc はインストール済みなので emerge は不要。ただし
- gcc のプロファイルを揃える
- distcc サーバーの IP アドレスの追加
は必要。
gcc のプロファイルを確認
Read more...