github.com/kata-containers/tests@v0.0.0-20240307153542-772105b56064/functional/rootless/rootless_test.sh (about) 1 #!/bin/bash 2 # 3 # Copyright (c) 2021 Intel Corporation 4 # 5 # SPDX-License-Identifier: Apache-2.0 6 # 7 8 set -o errexit 9 set -o nounset 10 set -o pipefail 11 set -o errtrace 12 13 dir_path=$(dirname "$0") 14 source "${dir_path}/../../lib/common.bash" 15 source "${dir_path}/../../.ci/lib.sh" 16 source /etc/os-release || source /usr/lib/os-release 17 pod_id="" 18 19 setup() { 20 extract_kata_env 21 getent group kvm &>/dev/null || sudo groupadd --system kvm 22 sudo chown root:kvm /dev/kvm 23 sudo chmod g+rw /dev/kvm 24 sudo systemctl start crio 25 sudo sed -i -e 's/^# *\(rootless\).*=.*$/\1 = true/g' /opt/kata/share/defaults/kata-containers/configuration.toml 26 sudo rm -rf /run/kata-containers/ /run/vc/ 27 } 28 29 cleanup() { 30 sudo sed -i -e 's/^.*\(rootless\)/# \1/g' /opt/kata/share/defaults/kata-containers/configuration.toml 31 sudo crictl stopp "$pod_id" &>/dev/null || true 32 sudo crictl rmp "$pod_id" &>/dev/null || true 33 } 34 35 run() { 36 pod_id="$(sudo crictl runp -r kata "${dir_path}/rootless-pod.json")" 37 waitForProcess 15 3 "sudo crictl inspectp "$pod_id" | jq '.status.state' | grep 'SANDBOX_READY'" 38 39 # There must be created one and only one temporary user. 40 local grep_uid="grep -e '^kata-[0-9]\+' /etc/passwd" 41 waitForProcess 5 1 "$grep_uid >/dev/null" 42 [ "$(eval $grep_uid | wc -l)" -eq 1 ] || \ 43 die "Unexpected more than one kata temporary UID" 44 local kata_uid="$(eval $grep_uid | cut -d: -f3)" 45 local kata_gid="$(eval $grep_uid | cut -d: -f4)" 46 [[ -n "$kata_uid" && -n "$kata_gid" ]] || \ 47 die "Unable to find the kata temporary UID" 48 49 # Assert the QEMU process is owned by that user. 50 waitForProcess 10 1 "ps -u "$kata_uid" -o cmd --no-header | \ 51 grep -q "^${HYPERVISOR_PATH:-qemu}"" || \ 52 die "Expects the QEMU process be owned by a non-root user" 53 54 # Assert the QEMU files are owned by that user too. 55 local pod_dir="/run/user/${kata_uid}/run/vc/vm/${pod_id}" 56 [ -d "$pod_dir" ] || \ 57 die "Unable to find the pod directory: $pod_dir" 58 local pod_files=(console.sock qmp.sock pid vhost-fs.sock) 59 for file_name in ${pod_files[@]}; do 60 local file="${pod_dir}/${file_name}" 61 waitForProcess 10 1 "test -e "$file"" || \ 62 die "File didn't show up: $file" 63 [ "$(sudo stat -c %u-%g $file)" == "${kata_uid}-${kata_gid}" ] 64 done 65 } 66 67 main() { 68 trap cleanup EXIT QUIT KILL 69 setup 70 run 71 echo "rootless test: PASSED" 72 } 73 74 main