File: rocm-podman-create

package info (click to toggle)
pkg-rocm-tools 0.9.6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 156 kB
  • sloc: sh: 1,432; makefile: 29
file content (139 lines) | stat: -rwxr-xr-x 4,019 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/bash
# Helper for creating a autopkgtest/ROCM-capable podman images
#
# Author: Christian Kastner <ckk@kvr.at>
# License: MIT
set -eu

# Option defaults
mirror="http://deb.debian.org/debian"
release="unstable"

function usage() {
    cat >&2 <<-EOF

	Create a container image suitable for running ROCm package autopkgtests.

	IMAGE, if not specified, defaults to rocm/debian:RELEASE.

	The container will have a regular (non-system) user 'user', who will be
	in all the necessary system groups.

	Synopsis:
	  $0 -h

	  $0 [-m MIRROR] [-r RELEASE] [-u USER] [IMAGE]

	Options:
	  -h          Show this help
	  -m MIRROR   Download packages from here. This will be also used within
	              the image. Ideally, this points to an APT cache on the host
	              machine, such as apt-cacher-ng or approx.
	  -r RELEASE  Release (default: '$release')
	              If RELEASE is 'experimental', APT sources for both 'unstable'
	              and 'experimental' will be added to the image.
                  If RELEASE contains a dash, APT sources for the "basename"
	              will be added, e.g.: 'bookworm-backports' will include
	              sources for 'bookworm' and 'bookworm-backports'.

	Examples:

	  # Configure the system for GPU-in-container use

	  \$ rocm-podman-setup -u <user>

	  # Creates rocm/debian:unstable

	  \$ $0

	  # Same image as above, but tagged rocm/othertag

	  \$ $0 rocm/othertag

	  # Creates rocm/debian:bookworm

	  \$ $0 -m http://10.1.2.3:9999/debian -r bookworm

	EOF
    exit 0
}

while getopts "hm:r:u:" OPTNAME; do
    case $OPTNAME in
    h) usage ;;
    m) mirror="$OPTARG" ;;
    r) release="$OPTARG" ;;
    ?) usage ;;
    esac
done
shift $((OPTIND - 1))

release_base=$(echo "$release" | sed -r 's/-.+$//')
[ "$release_base" != "experimental" ] || release_base="unstable"

script="/usr/share/debootstrap/scripts/$release_base"
if grep -q archive.ubuntu.com "$script"; then
    distro="ubuntu"
else
    distro="debian"
fi
imagename="${1:-rocm/$distro:$release}"

# /etc/apt/sources.list within the VM
if [ "$distro" = "ubuntu" ]; then
    AUTOPKGTEST_APT_SOURCES=$(
        cat <<-EOF
		deb     $mirror $release          main restricted universe multiverse
		deb-src $mirror $release          main restricted universe multiverse
		deb     $mirror $release-updates  main restricted universe multiverse
		deb-src $mirror $release-updates  main restricted universe multiverse
		deb     $mirror $release-security main restricted universe multiverse
		deb-src $mirror $release-security main restricted universe multiverse
EOF
    )
else
    if [ "$release" != "$release_base" ]; then
        AUTOPKGTEST_APT_SOURCES=$(
            cat <<-EOF
		deb     $mirror $release_base main contrib non-free-firmware
		deb-src $mirror $release_base main contrib non-free-firmware

	deb     $mirror $release main contrib non-free-firmware
	deb-src $mirror $release main contrib non-free-firmware
EOF
        )
    else
        AUTOPKGTEST_APT_SOURCES=$(
            cat <<-EOF
		deb     $mirror $release main contrib non-free-firmware
		deb-src $mirror $release main contrib non-free-firmware
EOF
        )
    fi
fi
export AUTOPKGTEST_APT_SOURCES

if [ ! -e /usr/bin/autopkgtest-build-podman ]; then
    echo "autopkgtest not installed on this system. Aborting." >&2
    exit 1
elif podman image exists "$imagename"; then
    echo "Image $imagename already exists, refusing to overwrite." >&2
    exit 1
fi

# Render group doesn't exist in base images
renderGID="$(getent group render | cut -d: -f3)"
postcmd="groupadd -g $renderGID render"
postcmd+="; useradd -m -G render,video rocm"
# This looks pointless, but is necessitated by how autopkgtest runs tests
# internally (through su, which behaves differently in containers)
postcmd+="; usermod -a -G render,video root"

# See https://bugs.debian.org/1032487
# This can be removed with autopkgtest >= 5.30
umask 0022

autopkgtest-build-podman \
    -t "$imagename" \
    -m "$mirror" \
    --post-command="$postcmd"