mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-10-27 23:30:40 +01:00
54c8b2393e
* install: answer every prompt from the environment, survive a closed stdin Every interactive prompt takes a var_<app>_<name> override and treats a closed stdin like Enter (`|| true`), so an install keeps going after the console that started it is gone. Values the script cannot do without end with exit 64 and name the variable to set. Validation loops stop asking when nobody can answer instead of spinning on an empty read. * mongodb, paperless-gpt: accept yes as well as y
146 lines
4.0 KiB
Bash
146 lines
4.0 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) 2021-2026 tteck
|
|
# Author: tteck (tteckster)
|
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
# Source: https://www.home-assistant.io/
|
|
|
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
color
|
|
verb_ip6
|
|
catch_errors
|
|
setting_up_container
|
|
network_check
|
|
update_os
|
|
|
|
if is_debian && [[ "$(get_os_version_major)" -lt 13 ]]; then
|
|
msg_error "Podman Home Assistant needs Debian 13: its Quadlet units require Podman 4.4 or newer."
|
|
exit 238
|
|
fi
|
|
|
|
PORTAINER_LATEST_VERSION=$(get_latest_github_release "portainer/portainer")
|
|
PORTAINER_AGENT_LATEST_VERSION=$(get_latest_github_release "portainer/agent")
|
|
|
|
if $STD mount | grep 'on / type zfs' >/dev/null && echo "ZFS"; then
|
|
msg_info "Enabling ZFS support."
|
|
mkdir -p /etc/containers
|
|
cat <<'EOF' >/usr/local/bin/overlayzfsmount
|
|
#!/bin/sh
|
|
exec /bin/mount -t overlay overlay "$@"
|
|
EOF
|
|
chmod +x /usr/local/bin/overlayzfsmount
|
|
cat <<'EOF' >/etc/containers/storage.conf
|
|
[storage]
|
|
driver = "overlay"
|
|
runroot = "/run/containers/storage"
|
|
graphroot = "/var/lib/containers/storage"
|
|
|
|
[storage.options]
|
|
pull_options = {enable_partial_images = "false", use_hard_links = "false", ostree_repos=""}
|
|
mount_program = "/usr/local/bin/overlayzfsmount"
|
|
|
|
[storage.options.overlay]
|
|
mountopt = "nodev"
|
|
EOF
|
|
msg_ok "Enabled ZFS support"
|
|
fi
|
|
|
|
msg_info "Installing Podman"
|
|
$STD apt install -y podman
|
|
systemctl enable -q --now podman.socket
|
|
echo -e 'unqualified-search-registries=["docker.io"]' >>/etc/containers/registries.conf
|
|
msg_ok "Installed Podman"
|
|
|
|
mkdir -p /etc/containers/systemd
|
|
|
|
prompt="${var_podman_homeassistant_portainer:-}"
|
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt || true
|
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
|
|
podman volume create portainer_data >/dev/null
|
|
cat <<EOF >/etc/containers/systemd/portainer.container
|
|
[Unit]
|
|
Description=Portainer Container
|
|
After=network-online.target
|
|
|
|
[Container]
|
|
Image=docker.io/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
|
|
$STD systemctl start portainer
|
|
msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
|
|
else
|
|
prompt="${var_podman_homeassistant_portainer_agent:-}"
|
|
[[ -n "$prompt" ]] || read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt || true
|
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|
msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
|
|
cat <<EOF >/etc/containers/systemd/portainer-agent.container
|
|
[Unit]
|
|
Description=Portainer Agent Container
|
|
After=network-online.target
|
|
|
|
[Container]
|
|
Image=docker.io/portainer/agent:latest
|
|
ContainerName=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
|
|
$STD systemctl start portainer-agent
|
|
msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
|
|
fi
|
|
fi
|
|
|
|
msg_info "Pulling Home Assistant Image"
|
|
$STD podman pull docker.io/homeassistant/home-assistant:stable
|
|
msg_ok "Pulled Home Assistant Image"
|
|
|
|
msg_info "Installing Home Assistant"
|
|
$STD podman volume create hass_config
|
|
cat <<EOF >/etc/containers/systemd/homeassistant.container
|
|
[Unit]
|
|
Description=Home Assistant Container
|
|
After=network-online.target
|
|
|
|
[Container]
|
|
Image=docker.io/homeassistant/home-assistant:stable
|
|
ContainerName=homeassistant
|
|
Volume=/dev:/dev
|
|
Volume=hass_config:/config
|
|
Volume=/etc/localtime:/etc/localtime:ro
|
|
Volume=/etc/timezone:/etc/timezone:ro
|
|
Network=host
|
|
|
|
[Service]
|
|
Restart=always
|
|
TimeoutStartSec=300
|
|
|
|
[Install]
|
|
WantedBy=default.target multi-user.target
|
|
EOF
|
|
systemctl daemon-reload
|
|
$STD systemctl start homeassistant
|
|
msg_ok "Installed Home Assistant"
|
|
|
|
motd_ssh
|
|
customize
|
|
cleanup_lxc
|