Skip to content

Commit b8ee228

Browse files
committed
podman-compose installation added in script
1 parent 69f198d commit b8ee228

2 files changed

Lines changed: 73 additions & 8 deletions

File tree

‎ai-studio-cli/internal/provision/assets/driversInstallation.sh‎

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,35 @@ setup_container_runtime() {
205205
if ! command -v podman &>/dev/null; then
206206
echo "Installing Podman..."
207207
sudo -E apt-get install -y podman
208-
# podman-compose is optional (universe); don't fail the run if absent.
209-
sudo -E apt-get install -y podman-compose \
210-
|| echo " Note: podman-compose unavailable via apt — install with 'pip install podman-compose' if needed."
211208
else
212209
echo "Podman already installed: $(podman --version)"
213210
fi
214211

212+
# CDI GPU passthrough needs Podman >= 4.1; Ubuntu 20.04 ships 3.4.x.
213+
PODMAN_VER=$(podman --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
214+
PODMAN_MAJOR=$(echo "$PODMAN_VER" | cut -d. -f1)
215+
if [ -n "$PODMAN_MAJOR" ] && [ "$PODMAN_MAJOR" -lt 4 ]; then
216+
echo "WARNING: Podman $PODMAN_VER is too old for CDI GPU passthrough (needs >= 4.1)."
217+
echo " 'podman run --device nvidia.com/gpu=all' will not work — upgrade Podman or use Docker."
218+
fi
219+
220+
# podman-compose honours CDI devices ('podman compose' drops them). It
221+
# is not packaged on older Ubuntu, so fall back to pip3 when needed.
222+
if ! command -v podman-compose &>/dev/null; then
223+
echo "Installing podman-compose..."
224+
if sudo -E apt-get install -y podman-compose 2>/dev/null; then
225+
echo "podman-compose installed via apt."
226+
else
227+
if ! command -v pip3 &>/dev/null; then
228+
sudo -E apt-get install -y python3-pip
229+
fi
230+
# PEP 668 (Ubuntu 23.04+): retry with --break-system-packages.
231+
sudo -E pip3 install podman-compose 2>/dev/null \
232+
|| sudo -E pip3 install --break-system-packages podman-compose \
233+
|| echo " Note: could not install podman-compose; install manually: sudo pip3 install --break-system-packages podman-compose"
234+
fi
235+
fi
236+
215237
# Podman accesses GPUs through a CDI spec, not the Docker runtime hook.
216238
sudo mkdir -p /etc/cdi
217239
if sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml; then

‎ai-studio-cli/internal/provision/assets/installVllmDeps.sh‎

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ fi
3333
HAS_GPU=false
3434
if lspci 2>/dev/null | grep -qi nvidia; then
3535
HAS_GPU=true
36+
elif command -v lshw > /dev/null 2>&1 && lshw -C display 2>/dev/null | grep -qi nvidia; then
37+
HAS_GPU=true
38+
elif command -v nvidia-smi > /dev/null 2>&1 && nvidia-smi -L > /dev/null 2>&1; then
39+
HAS_GPU=true
3640
fi
3741

3842
# Install the NVIDIA Container Toolkit. Shared by Docker and Podman — the
@@ -139,12 +143,51 @@ setup_podman() {
139143
podman --version
140144
fi
141145

142-
# podman-compose is what honours CDI devices; 'podman compose' (the
143-
# docker-compose shim) silently drops them. Install best-effort.
144-
if ! command -v podman-compose > /dev/null 2>&1; then
146+
# CDI GPU passthrough (podman run --device nvidia.com/gpu=all) needs
147+
# Podman >= 4.1. Ubuntu 20.04 ships 3.4.x, which cannot do CDI at all.
148+
local pv pmajor pminor
149+
pv=$(podman version --format '{{.Client.Version}}' 2>/dev/null || true)
150+
if [ -z "$pv" ]; then
151+
pv=$(podman --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
152+
fi
153+
pmajor=$(echo "$pv" | cut -d. -f1)
154+
pminor=$(echo "$pv" | cut -d. -f2)
155+
[ -z "$pminor" ] && pminor=0
156+
if [ -n "$pmajor" ] && { [ "$pmajor" -lt 4 ] || { [ "$pmajor" -eq 4 ] && [ "$pminor" -lt 1 ]; }; }; then
157+
echo ""
158+
echo "WARNING: Podman $pv is too old for CDI GPU passthrough (requires >= 4.1)."
159+
echo " 'podman run --device nvidia.com/gpu=all' will NOT work on this version."
160+
echo " Ubuntu 20.04 ships Podman 3.4.x. Options:"
161+
echo " - Use Docker instead: ai-studio-cli setup vllm --runtime docker"
162+
echo " - Upgrade Podman to >= 4.1 (newer Ubuntu, or a backports/Kubic repo)."
163+
echo ""
164+
fi
165+
166+
# podman-compose honours CDI devices; 'podman compose' (the docker-compose
167+
# shim) silently drops them. It is not packaged on older Ubuntu, so fall
168+
# back to pip3 when apt cannot provide it.
169+
if command -v podman-compose > /dev/null 2>&1; then
170+
echo "podman-compose already installed: $(podman-compose --version 2>/dev/null | head -1)"
171+
else
145172
echo "Installing podman-compose..."
146-
sudo -E apt-get install -y podman-compose \
147-
|| echo " Note: podman-compose unavailable via apt — install with 'pip install podman-compose'."
173+
if sudo -E apt-get install -y podman-compose 2>/dev/null; then
174+
echo "podman-compose installed via apt."
175+
else
176+
echo "podman-compose not in apt repos — installing via pip3..."
177+
if ! command -v pip3 > /dev/null 2>&1; then
178+
sudo -E apt-get install -y python3-pip
179+
fi
180+
# PEP 668 (Ubuntu 23.04+) marks the system Python as externally
181+
# managed, so a plain 'pip3 install' is rejected — retry with
182+
# --break-system-packages for those releases.
183+
if sudo -E pip3 install podman-compose 2>/dev/null \
184+
|| sudo -E pip3 install --break-system-packages podman-compose; then
185+
echo "podman-compose installed via pip3."
186+
else
187+
echo "Warning: failed to install podman-compose. Install it manually:"
188+
echo " sudo pip3 install --break-system-packages podman-compose"
189+
fi
190+
fi
148191
fi
149192

150193
if [ "$HAS_GPU" = "true" ]; then

0 commit comments

Comments
 (0)