0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

podman on FreeBSD (at 2025/02)

Last updated at Posted at 2025-02-23

どこでも動くコンテナはないものか - podman -

  • podman を ubuntu で動かすのは簡単です。 そもそも linux だからですね。
  • Windows で podman を動かすのは可能ですが、どこか使いにくいトコロが出てきます。 wsl/hyper-vを経由するからですね。
  • じゃあ、FreeBSDならどうでしょうか? 今日はこれを試してみます。
  • 読んでおくものは以下の通り:

FreeBSD の podman 実装

  • goの環境で OS依存性の低いところは取り敢えず動きます。
  • podmanは ocijail https://github.com/dfr/ocijail に依存します。
  • ocijail on FreeBSD:
Experimental, proof-of-concept OCI-compatible runtime for jails

というところで、PoCレベルで以下の機能がないことが分かります。


$ podman ps
Error: Rootless mode is not supported on FreeBSD - run podman as root

現状は、rootless mode がないのです。ちょっと動かすのはまだまだ先だということですね。 FreeBSDに Linux/cgroup V2 実装レベルのモノを持ってくることが出来るかどうかになります。

  • FreeBSD/jail ”だけで” rootless コンテナは、おそらく「可能」ではあっても PoCレベルです。

動かしてみる

  • FreeBSD "latest" repo から入るのは version 5.3.2 と ubuntu24.04 よりも進んだバージョンになっていました。
The FreeBSD port of the Podman container engine is experimental and should be
used for evaluation and testing purposes only.

$ sudo podman run --rm docker.io/dougrabson/hello

Podman can restart containers after a host is rebooted. To enable this, use:

$ sudo sysrc podman_enable=YES

and start the container with a restart policy:

$ sudo podman run -d --restart=always myimage

It is possible to run many Linux container images using FreeBSD's Linux emulation:

$ sudo sysrc linux_enable=YES
$ sudo service linux start
$ sudo podman run --rm --os=linux alpine cat /etc/os-release | head -1
NAME="Alpine Linux"
  • 実際に動かします。

$ sudo podman run --rm docker.io/dougrabson/hello

Trying to pull docker.io/dougrabson/hello:latest...
Getting image source signatures
Copying blob b13a5ec7f3d2 skipped: already exists  
Copying config f81c971736 done   | 
Writing manifest to image destination
!... Hello Podman World ...!

         .--"--.           
       / -     - \         
      / (O)   (O) \        
   ~~~| -=(,Y,)=- |         
    .---. /`  \   |~~      
 ~/  o  o \~~~~.----. ~~   
  | =(X)= |~  / (O (O) \   
   ~~~~~~~  ~| =(Y_)=-  |   
  ~~~~    ~~~|   U      |~~ 

Project:   https://github.com/containers/podman
Website:   https://podman.io
Documents: https://docs.podman.io
Twitter:   @Podman_io

FreeBSD14.2-small をうごかす。

  • pullしておきます。 あまりに重いので何度かリトライした結果・・・

$ sudo podman pull docker.io/dougrabson/freebsd14-small 
Trying to pull docker.io/dougrabson/freebsd14-small:latest...
Getting image source signatures
Copying blob 15578af53d27 done   | 
Copying blob 9d2fd27acba5 skipped: already exists  
Copying blob f71862837cd2 skipped: already exists  
Copying blob 214ced2b7f04 skipped: already exists  
Copying blob ffe2c6cc85f4 skipped: already exists  
Copying config c198ae7740 done   | 
Writing manifest to image destination
c198ae7740c28a0e6021cd4629737c4ed78ce4914fd795967e2194fd9d61d48a
  • コンテナを開いてみます。最小限で動くコンテナです。

$ sudo podman run -it docker.io/dougrabson/freebsd14-small /bin/sh

渋いので、様子を見に行きました。原因はzpool のクローニング・・・


68711 10  Ss        0:00.00 sudo podman run -it docker.io/dougrabson/freebsd14-small /bin/sh
68910 10  S+        0:00.06 podman run -it docker.io/dougrabson/freebsd14-small /bin/sh
70503 10  D+        0:00.01 zfs clone -p -o mountpoint=legacy zroot/ROOT/default/a480e6db4206ae867168980b3cd09c6d9b41b8c9b69f7ea64a85bf5a97f9d02c@959793645 zroot/ROOT/default/468660990be34c85e04aaf3274e85a86a8a5e786605b0d382debd2ac29e2642a

# uname -a
FreeBSD 87228bab36b4 14.2-RELEASE FreeBSD 14.2-RELEASE releng/14.2-n269506-c8918d6c7412 GENERIC amd64
# freebsd-version 
14.1-STABLE
# cd /
# du -d1 -h
6.5M	./lib
512B	./rescue
2.2M	./sbin
512B	./net
1.3M	./etc
 57M	./usr
624K	./bin
 82K	./libexec
 10K	./root
512B	./proc
1.0K	./dev
1.1M	./var
 15K	./boot
512B	./mnt
512B	./tmp
512B	./media
 69M	.
 # arp -a
host.containers.internal (10.88.0.1) at 58:9c:fc:10:ff:ae on eth0 expires in 1180 seconds [ethernet]
87228bab36b4 (10.88.0.4) at 02:59:d9:e0:96:0b on eth0 permanent [ethernet]
 
  • podman(ocijail) は VNETでネットワークを分離しています。デフォルトがこんな感じになっていました・・・

cni-podman0: flags=1008843 metric 0 mtu 1500
	options=0
	ether 58:9c:fc:10:ff:ae
	inet 10.88.0.1 netmask 0xffff0000 broadcast 10.88.255.255
	id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
	maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
	root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
	member: vnet2a9ebcc3 flags=143
	        ifmaxaddr 0 port 65 priority 128 path cost 2000
	groups: bridge
	nd6 options=9
vnet2a9ebcc3: flags=1008943 metric 0 mtu 1500
	description: associated with jail: 87228bab36b44f559bd6d4b3e7e531d20adf3518c2c8ebbe43716675c1c189f8 as nic: eth0
	options=8
	ether 02:59:d9:e0:96:0a
	groups: epair
	media: Ethernet 10Gbase-T (10Gbase-T )
	status: active
	nd6 options=29
  • pfで設定をしないとコンテナは外界と通信できないので ホスト側の /etc/pf.conf を編集します・・・

podman_net=10.88.0.0/16"

# podman
nat from $podman_net to any -> $ext_net static-port
  • コンテナ内は vi すらないので・・・vim を入れるところまでやってみます・・

# echo nameserver 8.8.8.8 >>/etc/resolv.conf
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=58 time=5.295 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=3.767 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 3.767/4.531/5.295/0.764 ms
# pkg bootstrap -f
pkg(8) is already installed. Forcing reinstallation through pkg(7).
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+https://pkg.freebsd.org/FreeBSD:14:amd64/base_latest, please wait...
pkg: Error fetching https://pkg.freebsd.org/FreeBSD:14:amd64/base_latest/Latest/pkg.txz: Not Found
A pre-built version of pkg could not be found for your system.
Consider changing PACKAGESITE or installing it from ports: 'ports-mgmt/pkg'.
# pkg-static install -f pkg
Updating FreeBSD repository catalogue...
[87228bab36b4] Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
[87228bab36b4] Fetching data.pkg: 100%   10 MiB  10.5MB/s    00:01    
Processing entries: 100%
FreeBSD repository update completed. 35884 packages processed.
Updating FreeBSD-base repository catalogue...
[87228bab36b4] Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
[87228bab36b4] Fetching data.pkg: 100%   46 KiB  46.8kB/s    00:01    
Processing entries:   0%
Newer FreeBSD version for package FreeBSD-yp-man:
To ignore this error set IGNORE_OSVERSION=yes
- package: 1402501
- running kernel: 1401502
Ignore the mismatch and continue? [y/N]: y
Processing entries: 100%
FreeBSD-base repository update completed. 525 packages processed.
All repositories are up to date.
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
	pkg: 1.21.3 -> 2.0.6 [FreeBSD]

Number of packages to be upgraded: 1

12 MiB to be downloaded.

Proceed with this action? [y/N]: y
[87228bab36b4] [1/1] Fetching pkg-2.0.6.pkg: 100%   12 MiB  12.5MB/s    00:01    
Checking integrity... done (0 conflicting)
[87228bab36b4] [1/1] Upgrading pkg from 1.21.3 to 2.0.6...
[87228bab36b4] [1/1] Extracting pkg-2.0.6: 100%
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
All repositories are up to date.
Checking integrity... done (0 conflicting)
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be REINSTALLED:
	pkg-2.0.6 [FreeBSD]

Number of packages to be reinstalled: 1

Proceed with this action? [y/N]: y
[87228bab36b4] [1/1] Reinstalling pkg-2.0.6...
[87228bab36b4] [1/1] Extracting pkg-2.0.6: 100%

# pkg install editors/vim
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
All repositories are up to date.
The following 109 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	FreeBSD-devmatch: 14.snap20250222025446 [FreeBSD-base]
	adwaita-icon-theme: 42.0 [FreeBSD]
	at-spi2-core: 2.54.1 [FreeBSD]
	avahi-app: 0.8_2 [FreeBSD]
	brotli: 1.1.0,1 [FreeBSD]
	cairo: 1.18.2,3 [FreeBSD]
	colord: 1.4.7_2 [FreeBSD]
	cups: 2.4.11 [FreeBSD]
	dbus: 1.14.10_5,1 [FreeBSD]
	dbus-glib: 0.112_1 [FreeBSD]
	desktop-file-utils: 0.28 [FreeBSD]
	duktape-lib: 2.7.0 [FreeBSD]
	expat: 2.6.4 [FreeBSD]
	fontconfig: 2.15.0_3,1 [FreeBSD]
	freetype2: 2.13.3 [FreeBSD]
	fribidi: 1.0.16 [FreeBSD]
	gdbm: 1.24 [FreeBSD]
	gdk-pixbuf2: 2.42.10_3 [FreeBSD]
	gettext-runtime: 0.23.1 [FreeBSD]
	glib: 2.80.5_1,2 [FreeBSD]
	gmp: 6.3.0 [FreeBSD]
	gnome_subr: 1.0 [FreeBSD]
	gnutls: 3.8.9 [FreeBSD]
	gobject-introspection: 1.78.1_2,1 [FreeBSD]
	graphite2: 1.3.14 [FreeBSD]
	gsettings-desktop-schemas: 42.0 [FreeBSD]
	gtk-update-icon-cache: 3.24.31_1 [FreeBSD]
	gtk2: 2.24.33_1 [FreeBSD]
	gtk3: 3.24.43 [FreeBSD]
	harfbuzz: 10.2.0 [FreeBSD]
	hicolor-icon-theme: 0.18 [FreeBSD]
	hwdata: 0.392,1 [FreeBSD]
	indexinfo: 0.3.1 [FreeBSD]
	jbigkit: 2.1_3 [FreeBSD]
	jpeg-turbo: 3.1.0 [FreeBSD]
	json-glib: 1.10.6 [FreeBSD]
	lcms2: 2.17 [FreeBSD]
	lerc: 4.0.0 [FreeBSD]
	libICE: 1.1.1,1 [FreeBSD]
	libSM: 1.2.4,1 [FreeBSD]
	libX11: 1.8.9,1 [FreeBSD]
	libXau: 1.0.11 [FreeBSD]
	libXaw: 1.0.16,2 [FreeBSD]
	libXcomposite: 0.4.6_1,1 [FreeBSD]
	libXcursor: 1.2.2 [FreeBSD]
	libXdamage: 1.1.6 [FreeBSD]
	libXdmcp: 1.1.5 [FreeBSD]
	libXext: 1.3.6,1 [FreeBSD]
	libXfixes: 6.0.1 [FreeBSD]
	libXft: 2.3.8 [FreeBSD]
	libXi: 1.8.1,1 [FreeBSD]
	libXinerama: 1.1.5,1 [FreeBSD]
	libXmu: 1.1.4,1 [FreeBSD]
	libXpm: 3.5.17_1 [FreeBSD]
	libXrandr: 1.5.4 [FreeBSD]
	libXrender: 0.9.11 [FreeBSD]
	libXt: 1.3.0,1 [FreeBSD]
	libXtst: 1.2.4 [FreeBSD]
	libdaemon: 0.14_1 [FreeBSD]
	libdatrie: 0.2.13_2 [FreeBSD]
	libdeflate: 1.22 [FreeBSD]
	libedit: 3.1.20240808,1 [FreeBSD]
	libepoll-shim: 0.0.20240608 [FreeBSD]
	libepoxy: 1.5.10 [FreeBSD]
	libevent: 2.1.12 [FreeBSD]
	libffi: 3.4.6 [FreeBSD]
	libglvnd: 1.7.0 [FreeBSD]
	libgudev: 237 [FreeBSD]
	libgusb: 0.4.9_1 [FreeBSD]
	libiconv: 1.17_1 [FreeBSD]
	libidn2: 2.3.7 [FreeBSD]
	liblz4: 1.10.0,1 [FreeBSD]
	libpaper: 1.1.28_1 [FreeBSD]
	librsvg2-rust: 2.58.5_4 [FreeBSD]
	libtasn1: 4.20.0_1 [FreeBSD]
	libthai: 0.1.29_1 [FreeBSD]
	libudev-devd: 0.6.0 [FreeBSD]
	libunistring: 1.3 [FreeBSD]
	libxcb: 1.17.0 [FreeBSD]
	libxkbcommon: 1.7.0_1 [FreeBSD]
	libxml2: 2.11.9 [FreeBSD]
	lzo2: 2.10_1 [FreeBSD]
	mpdecimal: 4.0.0 [FreeBSD]
	nettle: 3.10.1 [FreeBSD]
	open-motif: 2.3.8_8 [FreeBSD]
	p11-kit: 0.25.5 [FreeBSD]
	pango: 1.56.1 [FreeBSD]
	pcre2: 10.45 [FreeBSD]
	pixman: 0.44.2 [FreeBSD]
	png: 1.6.45 [FreeBSD]
	polkit: 125 [FreeBSD]
	py311-packaging: 24.2 [FreeBSD]
	python311: 3.11.11 [FreeBSD]
	readline: 8.2.13_2 [FreeBSD]
	shared-mime-info: 2.4_1 [FreeBSD]
	sqlite3: 3.46.1_1,1 [FreeBSD]
	tiff: 4.7.0 [FreeBSD]
	vim: 9.1.1117 [FreeBSD]
	vim-gtk2: 9.1.1117 [FreeBSD]
	vim-gtk3: 9.1.1117 [FreeBSD]
	vim-motif: 9.1.1117 [FreeBSD]
	vim-tiny: 9.1.1117 [FreeBSD]
	vim-x11: 9.1.1117 [FreeBSD]
	wayland: 1.23.1 [FreeBSD]
	xbitmaps: 1.1.2 [FreeBSD]
	xkeyboard-config: 2.41_4 [FreeBSD]
	xorgproto: 2024.1 [FreeBSD]
	xxd: 9.1.1117 [FreeBSD]
	zstd: 1.5.6 [FreeBSD]

Number of packages to be installed: 109

The process will require 812 MiB more space.
150 MiB to be downloaded.

Proceed with this action? [y/N]: 
-- snip --

87228bab36b4] [1/2] Fetching FreeBSD-runtime-14.snap20250222025446.pkg: 100%    2 MiB   2.6MB/s    00:01    
[87228bab36b4] [2/2] Fetching FreeBSD-clibs-14.snap20250222025446.pkg: 100%    2 MiB   1.6MB/s    00:01    
Checking integrity... done (0 conflicting)
[87228bab36b4] [1/106] Upgrading FreeBSD-clibs from 14.snap20240925214047 to 14.snap20250222025446...
[87228bab36b4] [1/106] Extracting FreeBSD-clibs-14.snap20250222025446: 100%
[87228bab36b4] [2/106] Installing FreeBSD-devmatch-14.snap20250222025446...
[87228bab36b4] [2/106] Extracting FreeBSD-devmatch-14.snap20250222025446: 100%
[87228bab36b4] [3/106] Upgrading FreeBSD-runtime from 14.snap20240925214047 to 14.snap20250222025446...
[87228bab36b4] [3/106] Extracting FreeBSD-runtime-14.snap20250222025446: 100%
pkg: Fail to rename /etc/.pkgtemp.hosts.RV8xIkCu9D1e -> /etc/hosts:Cross-device link
  • 結論: 普通のOSコンテナのようには出来てないため、コンテナ内からpkgで追加するのは難しいようです・・・

今日のところはココまで

  • すでに podman-compose も port されてるので、近いうち postgresql-server が動くくらいのイメージを作れるところまで試します・・・
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?