flatpak
, podman
, rpm-ostree
๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๋ช
๋ น์ ์ค์ ๋ก OCI ์ปจํ
์ด๋ ๋ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. podman
์ ๊ฐ์ ์ผ๋ถ๋ ์ฌ์ฉ์ด ์ ํ๋ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋๋ค์ ํธ์คํธ์์ ์ง์ ์คํํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
๋์์ ์ฐ๋ฆฌ๋ ๋ช
๋ น์ค ์ธํฐํ์ด์ค ์ฌ์ฉ์์ ์๋น ๋ถ๋ถ์ด ๋๊ตฌ ์์ ์ปจํ
์ด๋ ๋ด์์ ๋๋ถ๋ถ์ ์๊ฐ์ ๋ณด๋ผ ๊ฒ์ผ๋ก ์์ํ๋ฉฐ ๋๊ตฌ ์์ ํ๋ก์ ํธ์ ๋ชฉํ ์ค ํ๋๋ ์ ๊ธด ์ํ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ธ์ง ๋ถ๋ด์ ์ค์ด๋ ๊ฒ์
๋๋ค. Silverblue์ ๊ฐ์ ๋ค์ด ๋ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ํธ์คํธ OS. flatpak
๋ฐ rpm-ostree
์ ๊ฐ์ ๋ช
๋ น์ ์ด๋ฌํ OS์ ์ธํฐํ์ด์คํ๋ ๋ฐ ์ค์ํ ๋๊ตฌ์
๋๋ค.
๋ฐ๋ผ์ ํธ์คํธ์ ๋๊ตฌ ์์ ์
ธ ๊ฐ์ ์ ํํ๊ฑฐ๋ ๋ชจ๋ ๋ช
๋ น์ flatpak-spawn --host
์ ๊ฐ์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ์ผ ํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ์ฌ์ด ์ต์ ์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋๋ ์ ธ์ ๋ณ์นญ์ ์ค์นํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋งค๋ด์ผ ๋ฐ ์ ์์ฑ๊ณผ ๊ฐ์ ๊ฒ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์ต์
์ flatpak
, podman
, rpm-ostree
๋ฑ์ RPM์ fedora-toolbox
๊ธฐ๋ณธ ์ด๋ฏธ์ง์ ์ฌ์ ์ค์นํ์ง๋ง ๋ชจ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ๋จ๊ฒจ๋๋ ๊ฒ์
๋๋ค. ๋งค๋ด์ผ๊ณผ ์ ์์ฑ๋ง ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ toolbox
๋ช
๋ น์ ๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ํตํด ํด๋น shim์ ๋ฐฐ์นํ์ฌ ๋๊ตฌ ์์ ์ปจํ
์ด๋๋ฅผ ์์ํ ๋ ํธ์ถ์ ํธ์คํธ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด fedora-toolbox
์ด๋ฏธ์ง๊ฐ ์ธ๋ชจ์๋ Go ๋ฐ์ด๋๋ฆฌ๋ก ์ธํด ์ปค์ง์ง ์๊ณ ๋ํผ๊ฐ ํธ์คํธ์ toolbox
ํจํค์ง๋ฅผ ํตํด ์
๋ฐ์ดํธ๋ ์ํ๋ก ์ ์ง๋ ์ ์์ต๋๋ค. ๋ณ์นญ์ ๋ํด ๋ช
์์ shim์ ์ฌ์ฉํ๋ ๊ฒ์ ํ ๊ฐ์ง ์ด์ ์ ๋ช
๋ น ํธ์ถ์ ํธ์คํธ๋ก ์ ๋ฌํ ์ ์๋ ์ฝ๋ ์ผ์ด์ค๋ฅผ ๊ฐ๋ก์ฑ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ๊ณต์ ๋์ง ์๋ ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ช
ํํ ์ค๋ฅ ๋ฉ์์ง๋ก ์คํจํ๋ ๊ฒ์ด ๋ชจํธํ ์คํจ๋ ์ด์ํ ๋ถ์์ฉ๋ณด๋ค ๋ซ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ํจํค์ง ์ค ํ๋๊ฐ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ ๋ฐ์ดํธ๋๋ฉด ์ด๋ป๊ฒ ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฐ์ธ๋ ์ฅ์ฐฉ ์ฌ์ ๋ฐฉํดํฉ๋๊น? RPM์ ์ ๋ฐ์ดํธํ๋ ๋์์ด๋ ์ ๋ฐ์ดํธํ ํ์ ํด๋น ํจํค์ง์์ ์ธ๋ชจ์๋ ๋นํธ๋ฅผ ๋ค๋ฌ์ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
/usr/libexec/toolbox/bin
์ถ๊ฐํ๊ณ ์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๊ฒฝํ์ฌ $PATH
๋จผ์ ์ฝ์
ํ๋ฉด ํจ์ฌ ๊ฐ๋จํด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๊ตฌ ์์ ๋ด์์ podman์ ์คํํ๋ ๊ฒ์ ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์ ๋ ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ํธ์ถํ๋ ๋ง์ ํ๋ก์ ํธ์์ ์์ ํ๋ฉฐ ๋๊ตฌ ์์ ๋ด์์ ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๋ค๋ ๊ฒ์ด ์ ๋ง ์ ์ฉํ ์ ์์ต๋๋ค. ํด๋ฐ์ค๊ฐ ์๋ Silverblue ํธ์คํธ๋ฅผ ๋ฐ์ํ๋ ํ ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ๋ฐ์ธ๋ ๋ง์ดํธ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ํ๋ฆ์ ์ ์ฉํ ํญ๋ชฉ ๋ชฉ๋ก์ docker-compose
๋ฅผ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ๋ฐ์ดํฐ ์ ์ฅ์ ํ๋ ๊ฐ๋ฅผ ํ์๋ก ํ๋ ํญ๋ชฉ์ ๋ํ ์ง์
์ฅ๋ฒฝ์ด ์ ๋ง ๋ฎ๊ธฐ ๋๋ฌธ์ ์๋นํ ์์ ์น ์ฑ ์ ํ ํญ๋ชฉ์ด ์ฌ์ฉํฉ๋๋ค(์คํ ์์ค ์ฌ๋ถ).
ํ์ ๋๊ตฌ ์์ FROM registry.fedoraproject.org/f31/fedora-toolbox:31
๋ง๋ญ๋๋ค. ์ด ํ์ ๋๊ตฌ ์์์์ /usr/local/bin/host-runner
host-runner
์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
$ cat /usr/local/bin/host-runner
#!/bin/bash
executable=$(basename $0)
set -x
exec flatpak-spawn --host $executable "$@"
๊ทธ๋ฐ ๋ค์ ํธ์คํธ ์ปจํ
์คํธ์์ ์คํํ๋ ค๋ ๋ชจ๋ ํญ๋ชฉ์ ๋ํด host-runner
๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ญ๋๋ค.
$ ls -l /usr/local/bin/
total 4
lrwxrwxrwx. 1 root root 13 Jan 28 14:16 chromium-browser -> ./host-runner
-rwxr-xr-x. 1 root root 89 Jan 31 10:39 host-runner
lrwxrwxrwx. 1 root root 13 Jan 29 10:51 podman -> ./host-runner
lrwxrwxrwx. 1 root root 13 Jan 28 12:39 systemctl -> ./host-runner
lrwxrwxrwx. 1 root root 13 Jan 28 12:39 virsh -> ./host-runner
lrwxrwxrwx. 1 root root 13 Jan 28 12:39 virt-install -> ./host-runner
์ฐธ๊ณ : ์ฌ์ฉ์๊ฐ ํธ์คํธ์ ํ๋ก์ํ๊ธฐ๋ฅผ ์ํ๋ ๋ช ๋ น ๋ชฉ๋ก์ ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๊ตฌ์ฑํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ง๋ ๋ค์ ์ฌ์ฉ์๊ฐ ์ง์ ์ํํ๋๋ก ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๊ตฌ ์์ ๋ด์์ ์์ ์ ์คํํ์ง๋ง ํธ์คํธ๋ฅผ ํตํด ํ๋ก์๋ฉ๋๋ค. ์ ์ผํ ์ถ๊ฐ ๋นํธ๋ ์คํ๋๋ ์ค์ ๋ช ๋ น์ด ์คํ๋๊ธฐ ์ ์ stderr์ ์ธ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
$ virsh list --all
+ exec flatpak-spawn --host virsh list --all
Id Name State
----------------------------------
43 f31_vanilla-f31 running
47 tester running
- fcos shut off
์์ฑ๋ ๋๊ตฌ ์์ ์ปจํ ์ด๋์์ ์ด์ ๊ฐ์ ๊ฒ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋๋ ์์ง๋ ์ด๊ฒ์ ์กฐ๊ธ ์ฐ๋งํ๊ณ ์๋ค. ์์ง ์๋ํ์ง ์๋ ํ ๊ฐ์ง๋ ์ฌ์ฉ์๊ฐ ํธ์คํธ์์ sudo๋ก ๋ช ๋ น์ ์คํํ๋ ค๋ ๊ฒฝ์ฐ ์ํํด์ผ ํ ์์ ์ ๋๋ค.
๋ณต์ ๋ฅผ ์๋ํ์ง๋ง ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๋์ host-runner
๋ฅผ ~/.local/bin
. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ๊ฒ์ผ๋ฅธ ๊ฒฐ๊ณผ
[user<strong i="8">@toolbox</strong> ~] podman ps
+ exec flatpak-spawn --host podman ps
+ exec flatpak-spawn --host podman ps
/var/home/user/.local/bin/podman: line 4: exec: flatpak-spawn: not found
๋ฌผ๋ก ~/.local/bin
๊ฐ ํธ์คํธ ๋ฐ ์ปจํ
์ด๋์ PATH์ ์์ผ๋ฏ๋ก host-runner๋ ํธ์คํธ์์ host-runner๋ฅผ ์คํํ ~/.local/bin
..์์ podman ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์คํํ์ง๋ง flatpak-spawn์ ์คํ๋์ง ์์์ต๋๋ค. ๊ฑฐ๊ธฐ์ ์ค์น๋์ง ์์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ค์ฒฉ ์ฌ๊ท๊ฐ ๋ฐ์ํ์ ๊ฒ์ด๋ผ๊ณ ๊ฐํ ์๊ฐํ์ง ์์ต๋๋ค.wink:
์ด์จ๋ ๋ณ๊ฒฝํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
executable=$(basename $0)
์์ executable=/usr/bin/$(basename $0)
๊น์ง๋ ํ์ฌ๋ก์๋ ์ถฉ๋ถํฉ๋๋ค.
ํธ์ง : ์ด๊ฒ์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค. ์๋ฅผ ๋ค์ด ํธ์คํธ์์ ~/.local/bin/podman
๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ฉด ํธ์คํธ์ toolbox
๊ฐ ๋ ์ด์ ์๋ํ์ง ์์ต๋๋ค. ํ์ฌ ๋ด ์๋ฃจ์
์ ๋๊ตฌ ์์ ์ปจํ
์ด๋์ PATH์๋ง ์ถ๊ฐํ๋ ๋ณ๋์ bin ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ ๊ฒ์
๋๋ค.
flatpak-spawn --host
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฉ์ง ํธ๋ฆญ์
๋๋ค! ๋ค์์ ~/.local/bin
์์ ์๋ํ๊ณ ์ค์๋ก ๋ช
๋ น์ ์ง์ ์คํํ๋ ๊ฒฝ์ฐ ๋ฌดํ ๋ฃจํ๋ฅผ ๋ฐฉ์งํ๋ ์์ํ sh* ๋ฒ์ ์
๋๋ค.
#!/bin/sh
set -o errexit
set -o nounset
executable="$(basename "$0")"
if [ "$(basename "$(realpath "$0")")" = "${executable}" ]; then
echo "can't run ${executable} via ${executable}" >&2
exit 1
fi
# This seems like the best way to detect if we're inside a toolbox container.
if [ -n "${TOOLBOX_PATH:-}" ]; then
set -x
exec flatpak-spawn --host "${executable}" "$@"
fi
# Otherwise do a little dance to find the executable that would have run if not
# for $0 being on the path, and run that instead.
executable="$(
# Remove this script's directory from PATH; this assumes that you'll never want
# to run a sibling via this script.
dir="$(dirname "$0")"
PATH="$(echo "${PATH}" | sed "s+:${dir}:++")"
PATH="$(echo "${PATH}" | sed "s+${dir}:++")"
PATH="$(echo "${PATH}" | sed "s+:${dir}++")"
command -v "${executable}"
)"
exec "${executable}" "$@"
(์ด๊ฒ์ ์๋ํด์ผํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ด์ํ ์ค์ฒฉ ์คํ ์ฌ๋ก์์ ์ด๊ฒ์ ํ ์คํธํ์ง ์์์ต๋๋ค.)
* realpath
์ ์ฌ์ฉํ ์ ์๋ค๊ณ ๊ฐ์
๋ ๋ค๋ฅธ ์ต์
์ ์ปจํ
์ด๋ ๋ด์ podman์ด ํญ์ --remote
์
๋๋ค. API ์๋ฒ์ฉ ์์ผ์ ๋๊ตฌ ์์ ์ปจํ
์ด๋ ๋ด์์ ๋ณด์ด๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์ ๋๊ตฌ ์์
FROM registry.fedoraproject.org/f31/fedora-toolbox:31
๋ง๋ญ๋๋ค. ์ด ํ์ ๋๊ตฌ ์์์์/usr/local/bin/host-runner
host-runner
์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.๊ทธ๋ฐ ๋ค์ ํธ์คํธ ์ปจํ ์คํธ์์ ์คํํ๋ ค๋ ๋ชจ๋ ํญ๋ชฉ์ ๋ํด
host-runner
๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ญ๋๋ค.์ฐธ๊ณ : ์ฌ์ฉ์๊ฐ ํธ์คํธ์ ํ๋ก์ํ๊ธฐ๋ฅผ ์ํ๋ ๋ช ๋ น ๋ชฉ๋ก์ ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๊ตฌ์ฑํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ง๋ ๋ค์ ์ฌ์ฉ์๊ฐ ์ง์ ์ํํ๋๋ก ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๊ตฌ ์์ ๋ด์์ ์์ ์ ์คํํ์ง๋ง ํธ์คํธ๋ฅผ ํตํด ํ๋ก์๋ฉ๋๋ค. ์ ์ผํ ์ถ๊ฐ ๋นํธ๋ ์คํ๋๋ ์ค์ ๋ช ๋ น์ด ์คํ๋๊ธฐ ์ ์ stderr์ ์ธ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด:
์์ฑ๋ ๋๊ตฌ ์์ ์ปจํ ์ด๋์์ ์ด์ ๊ฐ์ ๊ฒ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋๋ ์์ง๋ ์ด๊ฒ์ ์กฐ๊ธ ์ฐ๋งํ๊ณ ์๋ค. ์์ง ์๋ํ์ง ์๋ ํ ๊ฐ์ง๋ ์ฌ์ฉ์๊ฐ ํธ์คํธ์์ sudo๋ก ๋ช ๋ น์ ์คํํ๋ ค๋ ๊ฒฝ์ฐ ์ํํด์ผ ํ ์์ ์ ๋๋ค.