インストール - Podman

提供:MochiuWiki : SUSE, EC, PCB
2024年2月3日 (土) 05:51時点におけるWiki (トーク | 投稿記録)による版 (→‎Podmanのビルド)
ナビゲーションに移動 検索に移動

概要

コンテナとは、ソフトウェアプロセスやマイクロサービスをパッケージ化して、あらゆるコンピューティング環境で実行可能にするソフトウェアソリューションである。

コンテナに含まれるファイルには、アプリケーションコード、環境変数、設定コード、バイナリプログラム、ソフトウェアの依存関係、ライブラリ等がある。
これらのコンポーネントをバンドルするプロセスはコンテナ化と呼ばれ、最終的な製品はコンテナイメージとして知られている。

このイメージは、クラウド、オンプレミスのデータシステム、ローカルシステム等、あらゆるプラットフォームにデプロイされる。

Podman (Pod Manage) は、Open Container Initiatives (OCI) のコンテナイメージを開発、管理、本番環境で実行する時に使用するコンテナエンジンである。
OCIは、コンテナフォーマットとランタイムに関するOSレベルの仮想化ソフトウェアコンテナのオープンなガバナンス構造を実装するために設計された。

Podmanコンテナは、スーパユーザ / 非スーパーユーザのいずれでも実行可能である。


Podmanのインストール

パッケージ管理システムからインストール

# RHEL
sudo dnf install 

# SUSE
sudo zypper install podman


ソースコードからインストール

Goのバージョンが1.16未満の場合

もし、パッケージ管理システムのGoのバージョンが1.16未満の場合は、Goの公式Webサイトにアクセスして、Goをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf go<バージョン>.linux-<アーキテクチャ名>.tar.gz
mv go<バージョン>.linux-<アーキテクチャ名> Go


必要ならば、Goを任意のインストールディクトリに配置する。

mv Go <任意のインストールディレクトリ>


~/.profileファイル等に、環境変数PATHを追記する。

 export GOPATH=<Goのインストールディレクトリ>
 export PATH=/<Goのインストールディレクトリ>/bin:$PATH


最新のconmonが必要な場合

最新バージョンのconmonがシステムにインストールされていることが期待される。
conmonは、OCIランタイムをモニタリングするために使用される。

conmonのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf conmon-<バージョン>.tar.gz
cd conmon-<バージョン>


または、git cloneコマンドを実行して、ソースコードをダウンロードする。

git clone https://github.com/containers/conmon
cd conmon


conmonをビルドおよびインストールする。

export GOCACHE="$(mktemp -d)"

make -j $(nproc)
make podman


ユーザネームスペースの有効化

Linuxカーネルがユーザネームスペースをサポートしていることを確認する。

zgrep CONFIG_USER_NS /proc/config.gz

# 出力例:
CONFIG_USER_NS=y


もし、ユーザネームスペースが無効の場合は有効にする。

# ユーザネームスペースを一時的に有効にする
sudo sysctl kernel.unprivileged_userns_clone=1

# ユーザネームスペースを恒久的に有効にする
echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/userns.conf


Podmanのビルド

Podmanのビルドに必要なライブラリをインストールする。

# RHEL
sudo dnf install 'dnf-command(builddep)'
sudo dnf builddep rpm/podman.spec --enablerepo=codeready-builder-for-rhel-$(rpm --eval %{?rhel})-$(uname -m)-rpms

sudo dnf install conmon containers-common crun iptables netavark nftables slirp4netns

# SUSE
sudo zypper install libseccomp-devel libgpgme-devel

# Raspberry Pi
sudo apt install btrfs-progs git uidmap pkg-config crun golang-go go-md2man iptables libassuan-dev libbtrfs-dev libc6-dev libdevmapper-dev libglib2.0-dev \
                 libgpgme-dev libgpg-error-dev libprotobuf-dev libprotobuf-c-dev libseccomp-dev libselinux1-dev libsystemd-dev libapparmor-dev \
                 netavark  # 古いバージョンのRaspbian OSの場合、netavarkパッケージが利用できない場合がある
                           # その場合、containernetworking-pluginsパッケージをインストールする


PodmanのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf podman-<バージョン>.tar.gz
cd podman-<バージョン>


または、git cloneコマンドを実行して、Podmanのソースコードをダウンロードすることもできる。

git clone git clone https://github.com/containers/podman/
cd podman


Podmanをビルドおよびインストールする。

# SELinux, SECcomp (syscall filtering) を有効にする場合
make BUILDTAGS="selinux seccomp" PREFIX=<Podmanのインストールディレクトリ> -j $(nproc)

# AppArmor, SECcomp (syscall filtering) を有効にする場合
make BUILDTAGS="apparmor seccomp" PREFIX=<Podmanのインストールディレクトリ> -j $(nproc)

# SELinux, SECcomp (syscall filtering) を無効にする場合
make BUILDTAGS="" PREFIX=<Podmanのインストールディレクトリ> -j $(nproc)

make install PREFIX=<Podmanのインストールディレクトリ>