diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 10f093d..d8dbf12 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,47 +1,34 @@ -FROM mcr.microsoft.com/vscode/devcontainers/base:debian-10 +FROM mcr.microsoft.com/vscode/devcontainers/base:debian WORKDIR /workspaces -# Default ENV -ENV LANG C.UTF-8 -ENV DEBIAN_FRONTEND noninteractive - -# Set shell SHELL ["/bin/bash", "-o", "pipefail", "-c"] -# Install docker -# https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ -RUN apt-get update && apt-get install -y --no-install-recommends \ - apt-transport-https \ - ca-certificates \ - curl \ - software-properties-common \ - gnupg \ - && curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \ - && add-apt-repository "deb https://download.docker.com/linux/debian $(lsb_release -cs) stable" \ - && apt-get update && apt-get install -y --no-install-recommends \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - && rm -rf /var/lib/apt/lists/* +# Set Docker daemon config +RUN \ + mkdir -p /etc/docker \ + && echo '{"storage-driver": "vfs"}' > /etc/docker/daemon.json -# Install tools -ARG SHELLCHECK_VERSION=0.7.0 -RUN apt-get update && apt-get install -y --no-install-recommends \ - jq \ +# Installa aditional tools +RUN \ + apt-get update \ + && apt-get install -y --no-install-recommends \ dbus \ network-manager \ libpulse0 \ - git \ - tar \ - xz-utils \ - && rm -rf /var/lib/apt/lists/* \ + xz-utils + +# Install docker +RUN curl -fsSL https://get.docker.com | sh - + +# Install shellcheck +RUN \ + curl -fLs \ + "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz" \ + | tar -xJ \ \ - && curl -SL "https://storage.googleapis.com/shellcheck/shellcheck-v${SHELLCHECK_VERSION}.linux.x86_64.tar.xz" | tar xJf - \ - && cp "shellcheck-v${SHELLCHECK_VERSION}/shellcheck" /usr/bin/ \ - && rm -rf shellcheck-v${SHELLCHECK_VERSION} + && mv -f "./shellcheck-stable/shellcheck" "/usr/bin/shellcheck" \ + && rm -rf "./shellcheck-stable" # Generate a machine-id for this container -RUN rm /etc/machine-id && dbus-uuidgen --ensure=/etc/machine-id - -ENV DEBIAN_FRONTEND=dialog \ No newline at end of file +RUN rm /etc/machine-id && dbus-uuidgen --ensure=/etc/machine-id \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 698c351..b1d80dd 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,19 +3,14 @@ "name": "Home Assistant Add-Ons", "context": "..", "dockerFile": "Dockerfile", - "appPort": "7123:8123", - "runArgs": [ - "-e", - "GIT_EDITOR=code --wait", - "--privileged" - ], + "appPort": ["7123:8123", "7357:4357"], + "postStartCommand": "service docker start", + "runArgs": ["-e", "GIT_EDITOR=code --wait", "--privileged"], "extensions": [ "timonwong.shellcheck", "esbenp.prettier-vscode" ], "settings": { "terminal.integrated.shell.linux": "/bin/bash" - }, - "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/test_hassio/addons/local,type=bind,consistency=delegated", - "workspaceFolder": "/workspaces/test_hassio/addons/local" + } } diff --git a/.devcontainer/start_supervisor.sh b/.devcontainer/supervisor.sh similarity index 65% rename from .devcontainer/start_supervisor.sh rename to .devcontainer/supervisor.sh index 29dac10..714acf4 100755 --- a/.devcontainer/start_supervisor.sh +++ b/.devcontainer/supervisor.sh @@ -55,58 +55,64 @@ function stop_docker() { } -function install() { - docker pull homeassistant/amd64-hassio-supervisor:dev -} - -function cleanup_hass_data() { - rm -rf /workspaces/test_hassio/{apparmor,backup,config.json,dns,dns.json,homeassistant,homeassistant.json,ingress.json,share,ssl,tmp,updater.json} - rm -rf /workspaces/test_hassio/addons/{core,data,git} -} - -function cleanup_docker() { - echo "Cleaning up stopped containers..." - docker rm "$(docker ps -a -q)" -} - function cleanup_lastboot() { - if [[ -f /workspaces/test_hassio/config.json ]]; then + if [[ -f /tmp/supervisor_data/config.json ]]; then echo "Cleaning up last boot" - cp /workspaces/test_hassio/config.json /tmp/config.json - jq -rM 'del(.last_boot)' /tmp/config.json > /workspaces/test_hassio/config.json + cp /tmp/supervisor_data/config.json /tmp/config.json + jq -rM 'del(.last_boot)' /tmp/config.json > /tmp/supervisor_data/config.json rm /tmp/config.json fi } + +function cleanup_docker() { + echo "Cleaning up stopped containers..." + docker rm "$(docker ps -a -q)" || true +} + function run_supervisor() { + mkdir -p /tmp/supervisor_data docker run --rm --privileged \ --name hassio_supervisor \ --security-opt seccomp=unconfined \ --security-opt apparmor:unconfined \ -v /run/docker.sock:/run/docker.sock \ -v /run/dbus:/run/dbus \ - -v "/workspaces/test_hassio":/data \ + -v /tmp/supervisor_data:/data \ + -v "/workspaces/addons":/data/addons/local \ -v /etc/machine-id:/etc/machine-id:ro \ - -e SUPERVISOR_SHARE="/workspaces/test_hassio" \ + -e SUPERVISOR_SHARE="/tmp/supervisor_data" \ -e SUPERVISOR_NAME=hassio_supervisor \ -e SUPERVISOR_DEV=1 \ -e SUPERVISOR_MACHINE="qemux86-64" \ homeassistant/amd64-hassio-supervisor:dev } -case "$1" in - "--cleanup") - echo "Cleaning up old environment" - cleanup_docker || true - cleanup_hass_data || true - exit 0;; - *) - echo "Creating development Supervisor environment" - start_docker - trap "stop_docker" ERR - cleanup_docker || true - cleanup_lastboot || true - install - run_supervisor - stop_docker;; -esac +function init_dbus() { + if pgrep dbus-daemon; then + echo "Dbus is running" + return 0 + fi + + echo "Startup dbus" + mkdir -p /var/lib/dbus + cp -f /etc/machine-id /var/lib/dbus/machine-id + + # cleanups + mkdir -p /run/dbus + rm -f /run/dbus/pid + + # run + dbus-daemon --system --print-address +} + +echo "Start Test-Env" + +start_docker +trap "stop_docker" ERR + +cleanup_lastboot +cleanup_docker +init_dbus +run_supervisor +stop_docker \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 362a34a..474c157 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -6,7 +6,7 @@ { "label": "Start Home Assistant", "type": "shell", - "command": "/workspaces/test_hassio/addons/local/.devcontainer/start_supervisor.sh", + "command": "/workspaces/addons/.devcontainer/supervisor.sh", "group": { "kind": "test", "isDefault": true, @@ -16,16 +16,6 @@ "panel": "new" }, "problemMatcher": [] - },{ - "label": "Cleanup stale Home Assistant environment", - "type": "shell", - "command": "/workspaces/test_hassio/addons/local/.devcontainer/start_supervisor.sh --cleanup", - "group": "test", - "presentation": { - "reveal": "always", - "panel": "new" - }, - "problemMatcher": [] },{ "label": "Run Home Assistant CLI", "type": "shell",