2
# Execute podman while capturing the API stream
4
# Script will run an instance of podman sand-boxed, the API stream will be captured and then formatted for readability.
6
if [[ $(id -u) != 0 ]]; then
7
echo >&2 "$0 must be run as root."
11
if ! command -v socat >/dev/null 2>&1; then
12
echo 1>&2 "socat not found on PATH"
15
PODMAN=${PODMAN:-podman}
16
if ! command -v "$PODMAN" >/dev/null 2>&1; then
17
echo 1>&2 "$PODMAN not found on PATH"
21
echo 1>&2 $0 '[-v] [-h]'
24
while getopts "vh" arg; do
28
export PODMAN_LOG_LEVEL=debug
47
sed -e 's/^> /\nClient Request> /' -e 's/^< /\nServer Response< /' -i /tmp/podman-socat.log
50
# Create temporary directory for storage
51
export TMPDIR=$(mktemp -d /tmp/podman.XXXXXXXXXX)
52
trap "cleanup $TMPDIR" EXIT
54
# Need locations to store stuff
55
mkdir -p "${TMPDIR}"/{podman,crio,crio-run,cni/net.d,ctnr,tunnel}
57
export CONTAINERS_REGISTRIES_CONF=${TMPDIR}/registry.conf
58
cat >"$CONTAINERS_REGISTRIES_CONF" <<-EOT
60
registries = ['docker.io']
67
export CNI_CONFIG_PATH=${TMPDIR}/cni/net.d
68
cat >"$CNI_CONFIG_PATH"/87-podman-bridge.conflist <<-EOT
70
"cniVersion": "0.3.0",
79
"subnet": "10.88.0.0/16",
95
PODMAN_ARGS="--storage-driver=vfs \
96
--root=${TMPDIR}/crio \
97
--runroot=${TMPDIR}/crio-run \
98
--network-config-dir=$CNI_CONFIG_PATH \
99
--cgroup-manager=systemd \
101
if [[ -n $VERBOSE ]]; then
102
PODMAN_ARGS="$PODMAN_ARGS --log-level=$PODMAN_LOG_LEVEL --syslog=true"
104
PODMAN="$PODMAN $PODMAN_ARGS"
106
PODMAN_HOST="${TMPDIR}/podman/podman-socat.sock"
107
SOCAT_HOST="${TMPDIR}/podman/podman.sock"
110
Podman service running at unix://$SOCAT_HOST
111
See /tmp/podman-socat.log for API stream capture
112
See /tmp/podman-service.log for service logging
114
usage: sudo bin/podman-remote --url unix://$SOCAT_HOST images
119
$PODMAN system service --timeout=0 "unix://$PODMAN_HOST" >/tmp/podman-service.log 2>&1 &
122
socat -v "UNIX-LISTEN:$SOCAT_HOST",fork,reuseaddr,unlink-early "UNIX-CONNECT:$PODMAN_HOST" >/tmp/podman-socat.log 2>&1