Tag: Buildkit

k3sでコンテナをビルドする

背景

ラズパイ上にGenPi64をインストールし、k3sでkubernetes環境を構築した。 このラズパイでdockerイメージをビルドしたい。

私の環境でのnerdctlはbuildkitが必要だった。

buildkitのインストールとbuildkitd(デーモン)の起動

インストール

buildkitはGo言語で書かれており多数のプラットフォーム向けにパッケージが提供されている。

buildkitのプロジェクトページ( moby/buildkit: concurrent, cache-efficient, and Dockerfilcnie-agnostic builder toolkit )の「Releases」に移動し「Assets」から各プラットフォームのtarアーカイブをダウンロードする。 私のラズパイ環境の場合、buildkit-v0.12.4.linux-arm64.tar.gz を用いた。

展開するとbinディレクトリができるので中身を全て/usr/local/bin配下にコピーした。cni

buildkitd(デーモン)の起動

systemdのユニットとして起動させたいが手軽に試す場合は下記で起動する。 これでビルドが開始できる。

sudo /usr/local/bin/buildkitd &
INFO[2024-01-17T23:05:15+09:00] auto snapshotter: using overlayfs
WARN[2024-01-17T23:05:15+09:00] using host network as the default
INFO[2024-01-17T23:05:15+09:00] found worker "icepdj7khuiltkpxu75ft0k9w", labels=map[org.mobyproject.buildkit.worker.executor:oci org.mobyproject.buildkit.worker.hostname:k3s-prd-agent-a org.mobyproject.buildkit.worker.network:host org.mobyproject.buildkit.worker.oci.process-mode:sandbox org.mobyproject.buildkit.worker.selinux.enabled:false org.mobyproject.buildkit.worker.snapshotter:overlayfs], platforms=[linux/arm64 linux/arm/v7 linux/arm/v6]
WARN[2024-01-17T23:05:15+09:00] skipping containerd worker, as "/run/containerd/containerd.sock" does not exist
INFO[2024-01-17T23:05:15+09:00] found 1 workers, default="icepdj7khuiltkpxu75ft0k9w"
WARN[2024-01-17T23:05:15+09:00] currently, only the default worker can be used.
INFO[2024-01-17T23:05:15+09:00] running server on /run/buildkit/buildkitd.sock

buildkitd起動後、Dockerfileが存在するディレクトリに移動して下記のようにビルドできる。

Read more...

UbuntuでのAppArmorのメモ

背景

containerdをrootlessで動かそうとしたところAppArmorに引っかかってしまった

(私の場合、/mnt配下の追加ディスク上にコンテナイメージを置きたい、という背景があったため引っかかったと思われる)

標準的なディレクトリ以外で動作させようとした場合に問題になりそう。

下記のエラーが出た

Mar  6 00:39:00 marie-ms7817 systemd[1055]: Started libcontainer container d1b514a134af96a15f5062afe042fd8654d91b2be4bef27f9af5865e29d2cad7.
Mar  6 00:40:30 marie-ms7817 kernel: [ 7375.140738] audit: type=1400 audit(1709653230.078:103): apparmor="DENIED" operation="change_onexec" class="file" info="label not found" error=-2 profile="unconfined" name="nerdctl-default" pid=54813 comm="aa-exec"

apparmor=“DENIED operation=“change_onexec” このメッセージは、AppArmor(Linuxのセキュリティモジュールの一つ)が、実行時の権限変更を拒否したことを示している。 特に、name=“nerdctl-default"に関連する操作が拒否されており、これはコンテナのセキュリティポリシーに関連する問題を示唆している。 label not foundという部分から、特定のセキュリティラベルが見つからない、または適切に設定されていない可能性がある。

既存の設定前の確認

nerdctl-defaultに関連する設定があるか確認。 下記コマンドで現在のAppArmorの設定のリストを出力し設定があるか確認(無かった)

sudo aa-status

ポリシーファイルの作成

/etc/apparmor.d ディレクトリに nerdctl-default という名前の新しい AppArmor ポリシーファイルを作成する。

/etc/apparmor.d/nerdctl-default とした。

#include <tunables/global>

profile nerdctl-default flags=(attach_disconnected,mediate_deleted) {
    / r,
    /dev/tty rw,
    /dev/pts/** w,
    /dev/null rw,
    /etc/.ro*/ld.so.cache r,
    /etc/ld.so.cache r,
    /etc/locale.alias r,
    /etc/nsswitch.conf r,
    /etc/passwd r,
    /mnt/append-disk/containerd/** rwk,
    /proc/ r,
    /proc/** r,
    /sys/devices/system/** r,
    /sys/kernel/mm/transparent_hugepage/hpage_pmd_size r,
    /usr/bin/** rix,
    /usr/lib/locale/locale-archive r,
    /usr/lib/x86_64-linux-gnu/** rm,
    /usr/lib/locale/** r,
    /usr/share/terminfo/** r,
    /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/** rwk,
    /var/lib/containerd/** rwk,
    owner /** rwix,
    network,
    ptrace (read, readby) peer=nerdctl-default,
    signal (receive) peer=nerdctl-default,
    signal (receive) peer=unconfined,
    signal (send) peer=nerdctl-default,
    signal (send) set=kill peer=unconfined,
}

それぞれの意味。

Read more...