tteck 4 år sedan
förälder
incheckning
803a16d764
1 ändrade filer med 0 tillägg och 197 borttagningar
  1. 0 197
      ha.sh

+ 0 - 197
ha.sh

@@ -1,197 +0,0 @@
-#!/usr/bin/env bash
-
-# Setup script environment
-set -o errexit  #Exit immediately if a pipeline returns a non-zero status
-set -o errtrace #Trap ERR from shell functions, command substitutions, and commands from subshell
-set -o nounset  #Treat unset variables as an error
-set -o pipefail #Pipe will exit with last non-zero status if applicable
-shopt -s expand_aliases
-alias die='EXIT=$? LINE=$LINENO error_exit'
-trap die ERR
-trap cleanup EXIT
-
-function error_exit() {
-  trap - ERR
-  local DEFAULT='Unknown failure occured.'
-  local REASON="\e[97m${1:-$DEFAULT}\e[39m"
-  local FLAG="\e[91m[ERROR] \e[93m$EXIT@$LINE"
-  msg "$FLAG $REASON"
-  [ ! -z ${CTID-} ] && cleanup_ctid
-  exit $EXIT
-}
-function warn() {
-  local REASON="\e[97m$1\e[39m"
-  local FLAG="\e[93m[WARNING]\e[39m"
-  msg "$FLAG $REASON"
-}
-function info() {
-  local REASON="$1"
-  local FLAG="\e[36m[INFO]\e[39m"
-  msg "$FLAG $REASON"
-}
-function msg() {
-  local TEXT="$1"
-  echo -e "$TEXT"
-}
-function cleanup_ctid() {
-  if $(pct status $CTID &>/dev/null); then
-    if [ "$(pct status $CTID | awk '{print $2}')" == "running" ]; then
-      pct stop $CTID
-    fi
-    pct destroy $CTID
-  elif [ "$(pvesm list $STORAGE --vmid $CTID)" != "" ]; then
-    pvesm free $ROOTFS
-  fi
-}
-function cleanup() {
-  popd >/dev/null
-  rm -rf $TEMP_DIR
-}
-TEMP_DIR=$(mktemp -d)
-pushd $TEMP_DIR >/dev/null
-
-function load_module() {
-  if ! $(lsmod | grep -Fq $1); then
-    modprobe $1 &>/dev/null || \
-      die "Failed to load '$1' module."
-  fi
-  MODULES_PATH=/etc/modules
-  if ! $(grep -Fxq "$1" $MODULES_PATH); then
-    echo "$1" >> $MODULES_PATH || \
-      die "Failed to add '$1' module to load at boot."
-  fi
-}
-
-# Create LXC
-export CTID=$(pvesh get /cluster/nextid)
-export PCT_OSTYPE=debian
-export PCT_OSVERSION=11
-export PCT_DISK_SIZE=16
-export PCT_OPTIONS="
-  -cmode shell
-  -features nesting=1
-  -hostname homeassistant
-  -net0 name=eth0,bridge=vmbr0
-  -onboot 1
-  -tags homeassistant
-"
-bash -c "$(wget -qLO - https://raw.githubusercontent.com/tteck/Proxmox/main/lxc_create.sh)" || exit
-
-# Detect storage pool type
-STORAGE_TYPE=$(pvesm status -storage $(pct config $CTID | grep rootfs | awk -F ":" '{print $2}') | awk 'NR>1 {print $2}')
-if [ "$STORAGE_TYPE" == "zfspool" ]; then
-  warn "Some addons may not work due to ZFS not supporting 'fallocate'."
-fi
-
-# Modify LXC permissions to support Docker
-LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
-cat <<EOF >> $LXC_CONFIG
-lxc.cgroup2.devices.allow: a
-lxc.cap.drop:
-EOF
-
-load_module overlay
-
-# Set container timezone to match host
-cat << 'EOF' >> $LXC_CONFIG
-lxc.hook.mount: sh -c 'ln -fs $(readlink /etc/localtime) ${LXC_ROOTFS_MOUNT}/etc/localtime'
-EOF
-
-# Setup container for Home Assistant
-msg "Starting LXC container..."
-pct start $CTID
-
-### Begin LXC commands ###
-alias lxc-cmd="lxc-attach -n $CTID --"
-# Prepare container OS
-msg "Setting up container OS..."
-lxc-cmd dhclient -4
-lxc-cmd sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
-lxc-cmd locale-gen >/dev/null
-lxc-cmd apt-get -y purge openssh-{client,server} >/dev/null
-
-# Update container OS
-msg "Updating container OS..."
-lxc-cmd apt-get update >/dev/null
-lxc-cmd apt-get -qqy upgrade &>/dev/null
-
-# Install prerequisites
-msg "Installing prerequisites..."
-apt-get -qqy install \
-    curl &>/dev/null
-
-# Customize Docker configuration
-msg "Customizing Docker..."
-DOCKER_CONFIG_PATH='/etc/docker/daemon.json'
-mkdir -p $(dirname $DOCKER_CONFIG_PATH)
-cat >$DOCKER_CONFIG_PATH <<'EOF'
-{
-  "log-driver": "journald"
-}
-EOF
-
-# Install Docker
-msg "Installing Docker..."
-sh <(curl -sSL https://get.docker.com) &>/dev/null
-
-# Install Portainer
-msg "Installing Portainer..."
-docker volume create portainer_data >/dev/null
-docker run -d \
-  -p 8000:8000 \
-  -p 9000:9000 \
-  --name=portainer \
-  --restart=always \
-  -v /var/run/docker.sock:/var/run/docker.sock \
-  -v portainer_data:/data \
-  portainer/portainer-ce:latest &>/dev/null
-  
-# Install Home Assistant
-msg "Installing Home Assistant..."
-docker volume create hass_config >/dev/null
-docker run -d \
-  --name homeassistant \
-  --privileged \
-  --restart unless-stopped \
-  -v /var/run/docker.sock:/var/run/docker.sock \
-  -v /dev:/dev \
-  -v hass_config:/config \
-  -v /etc/localtime:/etc/localtime:ro \
-  --net=host \
-  homeassistant/home-assistant:stable &>/dev/null
-
-# Customize container
-msg "Customizing container..."
-rm /etc/motd # Remove message of the day after login
-rm /etc/update-motd.d/10-uname # Remove kernel information after login
-touch ~/.hushlogin # Remove 'Last login: ' and mail notification after login
-GETTY_OVERRIDE="/etc/systemd/system/container-getty@1.service.d/override.conf"
-mkdir -p $(dirname $GETTY_OVERRIDE)
-cat << EOF > $GETTY_OVERRIDE
-[Service]
-ExecStart=
-ExecStart=-/sbin/agetty --autologin root --noclear --keep-baud tty%I 115200,38400,9600 \$TERM
-EOF
-systemctl daemon-reload
-systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//')
-
-# Cleanup container
-msg "Cleanup..."
-lxc-cmd apt-get autoremove >/dev/null
-lxc-cmd apt-get autoclean >/dev/null
-lxc-cmd rm -rf /var/{cache,log}/* /var/lib/apt/lists/*
-### Finish LXC commands ###
-
-# Get network details
-IP=$(pct exec $CTID ip a s dev eth0 | sed -n '/inet / s/\// /p' | awk '{print $2}')
-
-# Show completion message
-info "Successfully created Home Assistant LXC to $CTID."
-msg "
-
-Home Assistant is reachable by going to the following URLs.
-
-      http://${IP}:8123
-      http://${HOSTNAME}.local:8123
-
-"