@@ -124,11 +124,24 @@ load helpers
124
124
cp -v ${TEST_SOURCES} /containers.conf ${TEST_SCRATCH_DIR} /containers.conf
125
125
chmod ugo+r ${TEST_SCRATCH_DIR} /containers.conf
126
126
mkdir -p ${TEST_SCRATCH_DIR} /chroot
127
+ ${COPY_BINARY} containers-storage:[${STORAGE_DRIVER} @${TEST_SCRATCH_DIR} /root+${TEST_SCRATCH_DIR} /runroot]docker.io/library/busybox:latest dir:${TEST_SCRATCH_DIR} /base-image
127
128
chown -R 1:1 ${TEST_SCRATCH_DIR} /root ${TEST_SCRATCH_DIR} /runroot ${TEST_SCRATCH_DIR} /chroot
129
+ if test ${STORAGE_DRIVER} = overlay ; then
130
+ if test -x /usr/bin/fuse-overlayfs ; then
131
+ local storage_opts=" overlay.mount_program=/usr/bin/fuse-overlayfs"
132
+ else
133
+ skip trying to use overlay on top of overlay, but fuse-overlayfs is not present
134
+ fi
135
+ fi
136
+ # a script that runs inside of a new mount namespace and mounts the current
137
+ # rootfs as the "lower" for an overlay, then pivots into it
128
138
cat > ${TEST_SCRATCH_DIR} /script1 << - EOF
129
139
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${PATH: +: $PATH }
130
140
set -e
131
141
set -x
142
+ if test \$ (stat -f -c %T "${TEST_SCRATCH_DIR} /chroot") = overlayfs ; then
143
+ mount -t tmpfs -o size=16M none ${TEST_SCRATCH_DIR} /chroot
144
+ fi
132
145
mkdir -p ${TEST_SCRATCH_DIR} /chroot/workdir
133
146
mkdir -p ${TEST_SCRATCH_DIR} /chroot/upperdir
134
147
mkdir -p ${TEST_SCRATCH_DIR} /chroot/merged
@@ -152,21 +165,34 @@ load helpers
152
165
if test -d /var/tmp; then
153
166
mount --bind /var/tmp ${TEST_SCRATCH_DIR} /chroot/merged/var/tmp
154
167
fi
168
+ mkdir -p ${TEST_SCRATCH_DIR} /chroot/merged/run
169
+ mount -t tmpfs -o size=1024k none ${TEST_SCRATCH_DIR} /chroot/merged/run
170
+ chmod 755 ${TEST_SCRATCH_DIR} /chroot/merged/run
171
+ mkdir -p ${TEST_SCRATCH_DIR} /chroot/merged/run/containers/storage
172
+ chmod 755 ${TEST_SCRATCH_DIR} /chroot/merged/run/containers/storage
173
+ mkdir -p ${TEST_SCRATCH_DIR} /chroot/merged/var/lib/containers/storage
174
+ chmod 755 ${TEST_SCRATCH_DIR} /chroot/merged/var/lib/containers/storage
175
+ chown -R 1:1 ${TEST_SCRATCH_DIR} /chroot/merged/run ${TEST_SCRATCH_DIR} /chroot/merged/var/lib/containers
155
176
mount --bind ${TEST_SCRATCH_DIR} ${TEST_SCRATCH_DIR} /chroot/merged/${TEST_SCRATCH_DIR}
156
177
mkdir -p ${TEST_SCRATCH_DIR} /chroot/merged/usr/local/bin
178
+ chmod 755 ${TEST_SCRATCH_DIR} /chroot/merged/usr/local/bin
157
179
touch ${TEST_SCRATCH_DIR} /chroot/merged/usr/local/bin/buildah
158
180
mount --bind ${BUILDAH_BINARY:- $TEST_SOURCES / ../ bin/ buildah} ${TEST_SCRATCH_DIR} /chroot/merged/usr/local/bin/buildah
159
181
cd ${TEST_SCRATCH_DIR} /chroot/merged
182
+ ${COPY_BINARY} --root ${TEST_SCRATCH_DIR} /root --runroot ${TEST_SCRATCH_DIR} /runroot --storage-driver ${STORAGE_DRIVER} ${storage_opts: +--storage-opt ${storage_opts} } dir:${TEST_SCRATCH_DIR} /base-image dir:${TEST_SCRATCH_DIR} /chroot/merged/base-image
160
183
pivot_root . tmp
161
184
mount --make-rslave tmp
162
185
umount -f -l tmp
163
- mount -o remount,ro --make-rshared /
186
+ mount -o remount --make-rshared /
164
187
grep ' / / ' /proc/self/mountinfo
165
188
# unshare from util-linux 2.39 also accepts INNER:OUTER:SIZE for --map-users
166
189
# and --map-groups, but fedora 37's is too old, so the older OUTER,INNER,SIZE
167
190
# (using commas instead of colons as field separators) will have to do
168
- unshare --setuid 0 --setgid 0 --map-users=1,0,1024 --map-groups=1,0,1024 -UinCfpm bash ${TEST_SCRATCH_DIR} /script2
191
+ unshare --setuid 0 --setgid 0 --map-users=1,0,1024 --map-users=1025,65534,2 --map- groups=1,0,1024 --map-groups=1025,65534,2 -UinCfpm bash ${TEST_SCRATCH_DIR} /script2
169
192
EOF
193
+ # a script that runs inside of a new user namespace with an unprivileged ID
194
+ # mapped to root, which is expected to be able to run, with the proper
195
+ # configuration options, on top of that overlay filesystem
170
196
cat > ${TEST_SCRATCH_DIR} /script2 << - EOF
171
197
set -e
172
198
set -x
175
201
cat /proc/self/uid_map
176
202
cat /proc/self/gid_map
177
203
mount --make-shared /
178
- /usr/local/bin/buildah ${BUILDAH_REGISTRY_OPTS} ${ROOTDIR_OPTS} from --name ctrid --pull=never --quiet docker.io/library/busybox
179
- /usr/local/bin/buildah ${BUILDAH_REGISTRY_OPTS} ${ROOTDIR_OPTS} run --isolation=chroot ctrid pwd
204
+ /usr/local/bin/buildah ${BUILDAH_REGISTRY_OPTS} --root /var/lib/containers/storage --runroot /run/containers/storage --storage-driver ${STORAGE_DRIVER} ${storage_opts: +--storage-opt ${storage_opts} } pull dir:/base-image
205
+ baseID=\$ (jq -r .config.digest /base-image/manifest.json)
206
+ /usr/local/bin/buildah ${BUILDAH_REGISTRY_OPTS} --root /var/lib/containers/storage --runroot /run/containers/storage --storage-driver ${STORAGE_DRIVER} ${storage_opts: +--storage-opt ${storage_opts} } tag \$ {baseID} docker.io/library/busybox
207
+ /usr/local/bin/buildah ${BUILDAH_REGISTRY_OPTS} --root /var/lib/containers/storage --runroot /run/containers/storage --storage-driver ${STORAGE_DRIVER} ${storage_opts: +--storage-opt ${storage_opts} } from --name ctrid --pull=never --quiet docker.io/library/busybox
208
+ /usr/local/bin/buildah ${BUILDAH_REGISTRY_OPTS} --root /var/lib/containers/storage --runroot /run/containers/storage --storage-driver ${STORAGE_DRIVER} ${storage_opts: +--storage-opt ${storage_opts} } run --isolation=chroot ctrid pwd
180
209
EOF
181
210
chmod +x ${TEST_SCRATCH_DIR}
182
211
chmod +rx ${TEST_SCRATCH_DIR} /script1 ${TEST_SCRATCH_DIR} /script2
0 commit comments