Compare commits

...

1 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
5d03d8c622 refactor(podman): replace deprecated commands with Quadlets
- Replace podman run --restart + podman generate systemd with
  systemd Quadlet .container unit files in /etc/containers/systemd/
- Affects: Home Assistant, Portainer, Portainer Agent
- Remove workaround temp-volume create/remove for Portainer Agent
- Update install check in ct/podman-homeassistant.sh to reference
  the Quadlet file instead of the old generated .service file

podman generate systemd is deprecated since Podman 4.4 in favor of
Quadlets (podman-systemd.unit(5)). Quadlets are natively integrated
into systemd and do not require a running container to generate the
unit file.
2026-03-18 15:31:32 +01:00
3 changed files with 109 additions and 47 deletions

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/systemd/system/homeassistant.service ]]; then if [[ ! -f /etc/containers/systemd/homeassistant.container ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi

View File

@@ -45,32 +45,58 @@ systemctl enable -q --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman" msg_ok "Installed Podman"
mkdir -p /etc/containers/systemd
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
podman volume create portainer_data >/dev/null podman volume create portainer_data >/dev/null
$STD podman run -d \ cat <<EOF >/etc/containers/systemd/portainer.container
-p 8000:8000 \ [Unit]
-p 9443:9443 \ Description=Portainer Container
--name=portainer \ After=network-online.target
--restart=always \
-v /run/podman/podman.sock:/var/run/docker.sock \ [Container]
-v portainer_data:/data \ Image=docker.io/portainer/portainer-ce:latest
portainer/portainer-ce:latest ContainerName=portainer
PublishPort=8000:8000
PublishPort=9443:9443
Volume=/run/podman/podman.sock:/var/run/docker.sock
Volume=portainer_data:/data
[Service]
Restart=always
[Install]
WantedBy=default.target multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now portainer
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
podman volume create temp >/dev/null cat <<EOF >/etc/containers/systemd/portainer-agent.container
podman volume remove temp >/dev/null [Unit]
$STD podman run -d \ Description=Portainer Agent Container
-p 9001:9001 \ After=network-online.target
--name portainer_agent \
--restart=always \ [Container]
-v /run/podman/podman.sock:/var/run/docker.sock \ Image=docker.io/portainer/agent:latest
-v /var/lib/containers/storage/volumes:/var/lib/docker/volumes \ ContainerName=portainer_agent
portainer/agent PublishPort=9001:9001
Volume=/run/podman/podman.sock:/var/run/docker.sock
Volume=/var/lib/containers/storage/volumes:/var/lib/docker/volumes
[Service]
Restart=always
[Install]
WantedBy=default.target multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now portainer-agent
msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
fi fi
fi fi
@@ -81,18 +107,28 @@ msg_ok "Pulled Home Assistant Image"
msg_info "Installing Home Assistant" msg_info "Installing Home Assistant"
$STD podman volume create hass_config $STD podman volume create hass_config
$STD podman run -d \ cat <<EOF >/etc/containers/systemd/homeassistant.container
--name homeassistant \ [Unit]
--restart unless-stopped \ Description=Home Assistant Container
-v /dev:/dev \ After=network-online.target
-v hass_config:/config \
-v /etc/localtime:/etc/localtime:ro \ [Container]
-v /etc/timezone:/etc/timezone:ro \ Image=docker.io/homeassistant/home-assistant:stable
--net=host \ ContainerName=homeassistant
homeassistant/home-assistant:stable Volume=/dev:/dev
podman generate systemd \ Volume=hass_config:/config
--new --name homeassistant \ Volume=/etc/localtime:/etc/localtime:ro
>/etc/systemd/system/homeassistant.service Volume=/etc/timezone:/etc/timezone:ro
Network=host
[Service]
Restart=always
TimeoutStartSec=300
[Install]
WantedBy=default.target multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now homeassistant systemctl enable -q --now homeassistant
msg_ok "Installed Home Assistant" msg_ok "Installed Home Assistant"

View File

@@ -45,32 +45,58 @@ systemctl enable -q --now podman.socket
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
msg_ok "Installed Podman" msg_ok "Installed Podman"
mkdir -p /etc/containers/systemd
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION" msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
podman volume create portainer_data >/dev/null podman volume create portainer_data >/dev/null
$STD podman run -d \ cat <<EOF >/etc/containers/systemd/portainer.container
-p 8000:8000 \ [Unit]
-p 9443:9443 \ Description=Portainer Container
--name=portainer \ After=network-online.target
--restart=always \
-v /run/podman/podman.sock:/var/run/docker.sock \ [Container]
-v portainer_data:/data \ Image=docker.io/portainer/portainer-ce:latest
portainer/portainer-ce:latest ContainerName=portainer
PublishPort=8000:8000
PublishPort=9443:9443
Volume=/run/podman/podman.sock:/var/run/docker.sock
Volume=portainer_data:/data
[Service]
Restart=always
[Install]
WantedBy=default.target multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now portainer
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION" msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
else else
read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION" msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
podman volume create temp >/dev/null cat <<EOF >/etc/containers/systemd/portainer-agent.container
podman volume remove temp >/dev/null [Unit]
$STD podman run -d \ Description=Portainer Agent Container
-p 9001:9001 \ After=network-online.target
--name portainer_agent \
--restart=always \ [Container]
-v /run/podman/podman.sock:/var/run/docker.sock \ Image=docker.io/portainer/agent:latest
-v /var/lib/containers/storage/volumes:/var/lib/docker/volumes \ ContainerName=portainer_agent
portainer/agent PublishPort=9001:9001
Volume=/run/podman/podman.sock:/var/run/docker.sock
Volume=/var/lib/containers/storage/volumes:/var/lib/docker/volumes
[Service]
Restart=always
[Install]
WantedBy=default.target multi-user.target
EOF
systemctl daemon-reload
systemctl enable -q --now portainer-agent
msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION" msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
fi fi
fi fi