buildah-unshare에서 buildah 스크립트가 실행 중인지 테스트하는 방법은 무엇입니까?

buildah-unshare에서 buildah 스크립트가 실행 중인지 테스트하는 방법은 무엇입니까?

용도가 있는 경우 buildah mount문서에 지정된 것과 동일한 방식을 사용합니다.

mnt=$(buildah mount $ctr)

내 스크립트를 호출 sh ./build.sh하면

루트 없는 모드에서는 드라이버 오버레이를 사용한 설치를 수행할 수 없습니다. buildah unshare세션에서 실행 해야 합니다.

문제는 여기서 오류가 발생하면 스크립트가 종료되지 않는다는 것입니다. 테스트로 확인할 수 있지만 불필요하게 뭔가를 하고 있다는 사전 판단이 if [-z $mnt]; then echo "Run with buildah-unshare; exit; fi여전히 있기 때문에 이상적이지는 않습니다 .buildah from

루트 없는 buildah를 지원하려는 경우 에서 buildah를 실행하고 있는지 확인할 수 있는 방법이 있습니까 buildah unshare?

답변1

한 가지 방법은 루트 사용자가 사용자에 매핑되었는지 확인하는 것입니다. 기본 사용자 이름 공간에서 실행 하면 cat /proc/self/uid_mapuid=0이 0으로 매핑되는 것을 볼 수 있습니다. 이는 모든 사용자의 길이를 나타냅니다 4294967295. 이는 가상 매핑입니다( man namespaces자세한 내용은 참고자료 참조).

$ cat /proc/self/uid_map
0          0 4294967295

가상 지도의 경우아니요이 파일에서는 하위 사용자 네임스페이스에 있습니다.

# If we find the dummy line, error and exit
grep -lE '^\s+0\s+0' /proc/self/uid_map       \
  && echo "Please run under buildah unshare"  \
  && exit

답변2

현재 버전의 buildah에서는 buildah mount사용자 네임스페이스 없이 실행하면 충돌이 발생합니다.

$ buildah mount
cannot mount using driver overlay in rootless mode. You need to run it in a `buildah unshare` session
$ echo $?
125
$ buildah -v
buildah version 1.17.0-dev (image-spec 1.0.1-dev, runtime-spec 1.0.2-dev)

관련 정보