From b9ce90ee747bd8f19b946bbf53dece9f0b811f39 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Thu, 12 Jan 2023 10:31:21 +0100 Subject: [PATCH] Immich addition --- immich/CHANGELOG.md | 1 + immich/Dockerfile | 117 ++++++++++++++++++++ immich/README.md | 64 +++++++++++ immich/apparmor.txt | 65 +++++++++++ immich/build.json | 9 ++ immich/config.json | 99 +++++++++++++++++ immich/icon.png | Bin 0 -> 20111 bytes immich/logo.png | Bin 0 -> 20111 bytes immich/rootfs/entrypoint.sh | 16 +++ immich/rootfs/etc/cont-init.d/20-folders.sh | 21 ++++ immich/rootfs/etc/cont-init.d/99-run.sh | 111 +++++++++++++++++++ immich/updater.json | 9 ++ 12 files changed, 512 insertions(+) create mode 100644 immich/CHANGELOG.md create mode 100644 immich/Dockerfile create mode 100644 immich/README.md create mode 100644 immich/apparmor.txt create mode 100644 immich/build.json create mode 100644 immich/config.json create mode 100644 immich/icon.png create mode 100644 immich/logo.png create mode 100644 immich/rootfs/entrypoint.sh create mode 100644 immich/rootfs/etc/cont-init.d/20-folders.sh create mode 100644 immich/rootfs/etc/cont-init.d/99-run.sh create mode 100644 immich/updater.json diff --git a/immich/CHANGELOG.md b/immich/CHANGELOG.md new file mode 100644 index 000000000..87593ada8 --- /dev/null +++ b/immich/CHANGELOG.md @@ -0,0 +1 @@ +- Initial version diff --git a/immich/Dockerfile b/immich/Dockerfile new file mode 100644 index 000000000..0cb4e95b5 --- /dev/null +++ b/immich/Dockerfile @@ -0,0 +1,117 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# '---` .-'""` +# /` +#=== Home Assistant Addon ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_VERSION +ARG BUILD_FROM +ARG BUILD_UPSTREAM="1.0" +FROM ${BUILD_FROM} + +################## +# 2 Modify Image # +################## + +# Set S6 wait time +ENV S6_CMD_WAIT_FOR_SERVICES=1 \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ + S6_SERVICES_GRACETIME=0 + +USER root + +# Install PostgreSQL +ENV DEBIAN_FRONTEND=noninteractive + +RUN \ + apt-get update && \ + apt-get install -y gnupg gnupg2 gnupg1 wget lsb-core && \ + sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \ + wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \ + printf '#!/bin/sh\nexit 0' > /usr/sbin/policy-rc.d && \ + apt-get update -y && \ + apt-get install postgresql-14 libpq-dev postgresql-common -y && \ + for file in $(grep -sril '/var/lib/postgresql/14/main' /etc); do sed -i "s=/var/lib/postgresql/14/main=/data/postgresql=g" "$file"; done + +################## +# 3 Install apps # +################## + +# Add rootfs +COPY rootfs/ / + +# Corrects permissions for s6 v3 +RUN if [ -d /etc/cont-init.d ]; then chmod -R 755 /etc/cont-init.d; fi && \ + if [ -d /etc/services.d ]; then chmod -R 755 /etc/services.d; fi && \ + if [ -f /entrypoint.sh ]; then chmod 755 /entrypoint.sh; fi + +# Modules +ARG MODULES="00-banner.sh 01-custom_script.sh 92-local_mounts.sh 92-smb_mounts.sh" + +# Automatic modules download +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && apt-get update && apt-get install -yqq --no-install-recommends ca-certificates || apk add --no-cache ca-certificates >/dev/null || true \ + && mkdir -p /etc/cont-init.d \ + && for scripts in $MODULES; do echo "$scripts" && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" && [ "$(sed -n '/\/bin/p;q' /etc/cont-init.d/"$scripts")" != "" ] || (echo "script failed to install $scripts" && exit 1); done \ + && chmod -R 755 /etc/cont-init.d + +# Manual apps +ENV PACKAGES="sudo redis-server yamllint pip libxml2-dev libxslt-dev libjpeg-dev zlib1g-dev build-essential" + +# Automatic apps & bashio +# hadolint ignore=SC2015 +RUN if ! command -v bash >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi \ + && if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi \ + && curl -f -L -s -S "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/automatic_packages.sh" --output /automatic_packages.sh \ + && chmod 777 /automatic_packages.sh \ + && eval /./automatic_packages.sh "${PACKAGES:-}" \ + && rm /automatic_packages.sh + +################ +# 4 Entrypoint # +################ + +RUN chmod 777 /entrypoint.sh +ENTRYPOINT [ "/usr/bin/env" ] +CMD [ "/entrypoint.sh" ] + +############ +# 5 Labels # +############ + +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION +LABEL \ + io.hass.name="${BUILD_NAME}" \ + io.hass.description="${BUILD_DESCRIPTION}" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.title="${BUILD_NAME}" \ + org.opencontainers.image.description="${BUILD_DESCRIPTION}" \ + org.opencontainers.image.vendor="Home Assistant Add-ons" \ + org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.url="https://github.com/alexbelgium" \ + org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \ + org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \ + org.opencontainers.image.created=${BUILD_DATE} \ + org.opencontainers.image.revision=${BUILD_REF} \ + org.opencontainers.image.version=${BUILD_VERSION} diff --git a/immich/README.md b/immich/README.md new file mode 100644 index 000000000..6328e3c59 --- /dev/null +++ b/immich/README.md @@ -0,0 +1,64 @@ +# Home assistant add-on: immich + +[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium) + +![Version](https://img.shields.io/badge/dynamic/json?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fimmich%2Fconfig.json) +![Ingress](https://img.shields.io/badge/dynamic/json?label=Ingress&query=%24.ingress&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fimmich%2Fconfig.json) +![Arch](https://img.shields.io/badge/dynamic/json?color=success&label=Arch&query=%24.arch&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Fimmich%2Fconfig.json) + +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9c6cf10bdbba45ecb202d7f579b5be0e)](https://www.codacy.com/gh/alexbelgium/hassio-addons/dashboard?utm_source=github.com&utm_medium=referral&utm_content=alexbelgium/hassio-addons&utm_campaign=Badge_Grade) +[![GitHub Super-Linter](https://github.com/alexbelgium/hassio-addons/workflows/Lint%20Code%20Base/badge.svg)](https://github.com/marketplace/actions/super-linter) +[![Builder](https://github.com/alexbelgium/hassio-addons/workflows/Builder/badge.svg)](https://github.com/alexbelgium/hassio-addons/actions/workflows/builder.yaml) + +[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white + +_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_ + +[![Stargazers repo roster for @alexbelgium/hassio-addons](https://git-lister.onrender.com/api/stars/alexbelgium/hassio-addons?limit=30)](https://github.com/alexbelgium/hassio-addons/stargazers) + +## About + +Web based files browser. +This addon is based on the [docker image](https://hub.docker.com/r/hurlenko/immich) from hurlenko. + +## Configuration + +Postgresql can be either internal or external + +```yaml + "PGID": "int", + "PUID": "int", + "TZ": "str?", + "cifspassword": "str?", + "cifsusername": "str?", + "data_location": "str", + "localdisks": "str?", + "networkdisks": "str?", + "DB_HOSTNAME": "str?", + "DB_USERNAME": "str?", + "DB_PORT": "int?", + "DB_PASSWORD": "str?", + "DB_DATABASE_NAME": "str?", + "JWT_SECRET": "str?" +``` + +## Installation + +The installation of this add-on is pretty straightforward and not different in +comparison to installing any other Hass.io add-on. + +1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance. +1. Install this add-on. +1. Click the `Save` button to store your configuration. +1. Start the add-on. +1. Check the logs of the add-on to see if everything went well. +1. Carefully configure the add-on to your preferences, see the official documentation for for that. + +## Support + +Create an issue on github, or ask on the [home assistant thread](https://community.home-assistant.io/t/home-assistant-addon-immich/282108/3) + +[repository]: https://github.com/alexbelgium/hassio-addons +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg diff --git a/immich/apparmor.txt b/immich/apparmor.txt new file mode 100644 index 000000000..ad2c9285c --- /dev/null +++ b/immich/apparmor.txt @@ -0,0 +1,65 @@ +#include + +profile db21ed7f_qbittorrent flags=(attach_disconnected,mediate_deleted) { + #include + + capability, + file, + signal, + mount, + umount, + remount, + network udp, + network tcp, + network dgram, + network stream, + network inet, + network inet6, + network netlink raw, + network unix dgram, + + capability setgid, + capability setuid, + capability sys_admin, + capability dac_read_search, + # capability dac_override, + # capability sys_rawio, + +# S6-Overlay + /init ix, + /run/{s6,s6-rc*,service}/** ix, + /package/** ix, + /command/** ix, + /run/{,**} rwk, + /dev/tty rw, + /bin/** ix, + /usr/bin/** ix, + /usr/lib/bashio/** ix, + /etc/s6/** rix, + /run/s6/** rix, + /etc/services.d/** rwix, + /etc/cont-init.d/** rwix, + /etc/cont-finish.d/** rwix, + /init rix, + /var/run/** mrwkl, + /var/run/ mrwkl, + /dev/i2c-1 mrwkl, + # Files required + /dev/sda1 mrwkl, + /dev/sdb1 mrwkl, + /dev/nvme0 mrwkl, + /dev/nvme1 mrwkl, + /dev/mmcblk0p1 mrwkl, + /dev/* mrwkl, + /tmp/** mrkwl, + + # Data access + /data/** rw, + + # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container + ptrace (trace,read) peer=docker-default, + + # docker daemon confinement requires explict allow rule for signal + signal (receive) set=(kill,term) peer=/usr/bin/docker, + +} diff --git a/immich/build.json b/immich/build.json new file mode 100644 index 000000000..370843a81 --- /dev/null +++ b/immich/build.json @@ -0,0 +1,9 @@ +{ + "build_from": { + "aarch64": "martabal/immich:latest", + "amd64": "martabal/immich:latest" + }, + "codenotary": { + "signer": "alexandrep.github@gmail.com" + } +} \ No newline at end of file diff --git a/immich/config.json b/immich/config.json new file mode 100644 index 000000000..2e9e144a6 --- /dev/null +++ b/immich/config.json @@ -0,0 +1,99 @@ +{ + "arch": [ + "aarch64", + "amd64", + "armv7" + ], + "codenotary": "alexandrep.github@gmail.com", + "description": "Self-hosted photo and video backup solution directly from your mobile phone", + "devices": [ + "/dev/sda", + "/dev/sdb", + "/dev/sdc", + "/dev/sdd", + "/dev/sde", + "/dev/sdf", + "/dev/sdg", + "/dev/nvme", + "/dev/nvme0n1p1", + "/dev/nvme0n1p2", + "/dev/mmcblk", + "/dev/sda1", + "/dev/sdb1", + "/dev/sdc1", + "/dev/sdd1", + "/dev/sde1", + "/dev/sdf1", + "/dev/sdg1", + "/dev/sda2", + "/dev/sdb2", + "/dev/sdc2", + "/dev/sdd2", + "/dev/sde2", + "/dev/sdf2", + "/dev/sdg2", + "/dev/sda3", + "/dev/sdb3", + "/dev/sda4", + "/dev/sdb4", + "/dev/nvme0", + "/dev/nvme1", + "/dev/nvme2" + ], + "environment": { + "REDIS_HOSTNAME": "localhost", + "REDIS_PORT": "6379" + }, + "image": "ghcr.io/alexbelgium/immich-{arch}", + "map": [ + "media:rw", + "config:rw", + "addons:rw", + "backup:rw", + "share:rw", + "ssl:rw" + ], + "name": "Immich", + "options": { + "PGID": 1000, + "PUID": 1000, + "JWT_SECRET": "jt+OVWY6WqKJXw3xF5qOxN5L5/f4u2jlIlCQgWS3E4w=", + "TZ": "Europe/Paris", + "data_location": "/share/immich" + }, + "panel_icon": "mdi:file-search", + "ports": { + "8080/tcp": 8181 + }, + "ports_description": { + "8080/tcp": "Web UI port" + }, + "privileged": [ + "SYS_ADMIN", + "DAC_READ_SEARCH" + ], + "services": [ + "mysql:want" + ], + "schema": { + "PGID": "int", + "PUID": "int", + "TZ": "str?", + "cifspassword": "str?", + "cifsusername": "str?", + "database": "list(internal|external_postgresql)?", + "data_location": "str", + "localdisks": "str?", + "networkdisks": "str?", + "DB_HOSTNAME": "str?", + "DB_USERNAME": "str?", + "DB_PORT": "int?", + "DB_PASSWORD": "str?", + "DB_DATABASE_NAME": "str?", + "JWT_SECRET": "str" + }, + "slug": "immich", + "url": "https://github.com/alexbelgium/hassio-addons", + "version": "1.0", + "webui": "http://[HOST]:[PORT:8080]" +} diff --git a/immich/icon.png b/immich/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..05cd46e86aca6f1bc0424481b197792a2d776991 GIT binary patch literal 20111 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 setup_postgres.sql + chown postgres setup_postgres.sql + sudo -iu postgres psql < setup_postgres.sql + rm setup_postgres.sql + + # Settings parameters + export DB_USERNAME=immich + export DB_HOSTNAME=localhost + export DB_PASSWORD=immich + export DB_DATABASE_NAME=immich + export DB_PORT=5432 + export JWT_SECRET=$(bashio::config 'JWT_SECRET') + ;; + +esac + +################## +# Starting redis # +################## +exec redis-server & bashio::log.info "Starting redis" + +################ +# Starting app # +################ +bashio::log.info "Starting app" +/./usr/bin/supervisord diff --git a/immich/updater.json b/immich/updater.json new file mode 100644 index 000000000..78ac67585 --- /dev/null +++ b/immich/updater.json @@ -0,0 +1,9 @@ +{ + "github_beta": "true", + "last_update": "08-11-2022", + "repository": "alexbelgium/hassio-addons", + "slug": "immich", + "source": "github", + "upstream_repo": "immich-app/immich", + "upstream_version": "1.0" +}