From 8a64748b87645d21115c974e17c328fe8d00db8c Mon Sep 17 00:00:00 2001 From: Alexandre Date: Tue, 15 Jul 2025 20:54:07 +0200 Subject: [PATCH] build ente --- ente/CHANGELOG.md | 1 + ente/Dockerfile | 108 ++++++++++++++++++++++++++ ente/README.md | 1 + ente/apparmor.txt | 66 ++++++++++++++++ ente/build.json | 9 +++ ente/config.json | 76 ++++++++++++++++++ ente/icon.png | Bin 0 -> 16711 bytes ente/logo.png | Bin 0 -> 6866 bytes ente/rootfs/etc/cont-init.d/99-run.sh | 13 ++++ ente/stats.png | Bin 0 -> 2244 bytes ente/updater.json | 9 +++ 11 files changed, 283 insertions(+) create mode 100644 ente/CHANGELOG.md create mode 100644 ente/Dockerfile create mode 100644 ente/README.md create mode 100644 ente/apparmor.txt create mode 100644 ente/build.json create mode 100644 ente/config.json create mode 100644 ente/icon.png create mode 100644 ente/logo.png create mode 100644 ente/rootfs/etc/cont-init.d/99-run.sh create mode 100644 ente/stats.png create mode 100644 ente/updater.json diff --git a/ente/CHANGELOG.md b/ente/CHANGELOG.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/ente/CHANGELOG.md @@ -0,0 +1 @@ + diff --git a/ente/Dockerfile b/ente/Dockerfile new file mode 100644 index 000000000..0c4d9a56c --- /dev/null +++ b/ente/Dockerfile @@ -0,0 +1,108 @@ +#============================# +# ALEXBELGIUM'S DOCKERFILE # +#============================# +# _.------. +# _.-` ('>.-`"""-. +# '.--'` _'` _ .--.) +# -' '-.-';` ` +# ' - _.' ``'--. +# d '---` .-'""` +# /` +#=== Home Assistant Add‑on – ENTE ===# + +################# +# 1 Build Image # +################# + +ARG BUILD_VERSION +FROM ghcr.io/ente-io/server:latest + +################## +# 2 Modify Image # +################## + +# S6 settings +ENV S6_CMD_WAIT_FOR_SERVICES=1 \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ + S6_SERVICES_GRACETIME=0 + +USER root + +# LSIO helpers (same repo you already use) +ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_lsio.sh" "/ha_lsio.sh" +ARG CONFIGLOCATION="/config" +RUN chmod 744 /ha_lsio.sh && \ + if grep -qr "lsio" /etc; then /ha_lsio.sh "$CONFIGLOCATION"; fi && \ + rm /ha_lsio.sh + +# ---------- MinIO & tools (needed by Ente) ---------- +# – server binary + client (`mc`) +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends curl ca-certificates wget jq tini postgresql-client-15; \ + curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio -o /usr/local/bin/minio; \ + curl -fsSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc; \ + chmod +x /usr/local/bin/minio /usr/local/bin/mc; \ + apt-get clean; rm -rf /var/lib/apt/lists/* + +################## +# 3 Install apps # +################## + +COPY rootfs/ / + +# bind‑compat for some addons +RUN ln -sf /usr/bin/bash /bin/bash || true && \ + ln -sf /usr/bin/sh /bin/sh || true + +# Optional modules (same pattern as ente) +ARG MODULES="00-banner.sh 01-custom_script.sh 00-global_var.sh 00-local_mounts.sh 00-smb_mounts.sh" +ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_automodules.sh" "/ha_automodules.sh" +RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_automodules.sh + +# Optional extra packages +ENV PACKAGES="sudo jq yamllint" +ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_autoapps.sh" "/ha_autoapps.sh" +RUN chmod 744 /ha_autoapps.sh && /ha_autoapps.sh "$PACKAGES" && rm /ha_autoapps.sh + +################ +# 4 Entrypoint # +################ + +ENV S6_STAGE2_HOOK=/ha_entrypoint.sh +ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_entrypoint.sh" "/ha_entrypoint.sh" +ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_entrypoint_modif.sh" "/ha_entrypoint_modif.sh" +RUN chmod 777 /ha_entrypoint.sh /ha_entrypoint_modif.sh && \ + /ha_entrypoint_modif.sh && rm /ha_entrypoint_modif.sh + +# ---------- Healthcheck ---------- +ENV HEALTH_PORT="8080" \ + HEALTH_URL="/ping" +HEALTHCHECK --interval=10s --retries=5 --timeout=20s CMD \ + curl -A "HealthCheck: Docker/1.0" -fs "http://127.0.0.1:${HEALTH_PORT}${HEALTH_URL}" || exit 1 + +############ +# 5 Labels # +############ +ARG BUILD_ARCH BUILD_DATE BUILD_NAME BUILD_DESCRIPTION BUILD_REF BUILD_REPOSITORY +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.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} + +################# +# 6 Finish line # +################# +# S6 will pick up run scripts from /etc/services.d supplied in rootfs +# and launch: › minio › museum API › (optional) web‑UI diff --git a/ente/README.md b/ente/README.md new file mode 100644 index 000000000..a69364c97 --- /dev/null +++ b/ente/README.md @@ -0,0 +1 @@ +Draft diff --git a/ente/apparmor.txt b/ente/apparmor.txt new file mode 100644 index 000000000..98e97c11d --- /dev/null +++ b/ente/apparmor.txt @@ -0,0 +1,66 @@ +#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/fuse mrwkl, + /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/ente/build.json b/ente/build.json new file mode 100644 index 000000000..3618edb54 --- /dev/null +++ b/ente/build.json @@ -0,0 +1,9 @@ +{ + "build_from": { + "aarch64": "ghcr.io/imagegenius/ente:server-latest", + "amd64": "ghcr.io/imagegenius/ente:server-latest" + }, + "codenotary": { + "signer": "alexandrep.github@gmail.com" + } +} diff --git a/ente/config.json b/ente/config.json new file mode 100644 index 000000000..909730899 --- /dev/null +++ b/ente/config.json @@ -0,0 +1,76 @@ +{ + "name": "Ente", + "slug": "ente", + "version": "1.0.0", + "description": "Self‑hosted, end‑to‑end‑encrypted photo & video storage (Ente server + MinIO).", + "url": "https://github.com/alexbelgium/hassio-addons", + "arch": ["aarch64", "amd64"], + "image": "ghcr.io/alexbelgium/ente-{arch}", + "init": false, + "startup": "services", + "ports": { + "8080/tcp": 8280, + "3000/tcp": 8300, + "3200/tcp": 8320 + }, + "ports_description": { + "8080/tcp": "Ente API (museum)", + "3000/tcp": "Ente web UI", + "3200/tcp": "MinIO S3 endpoint" + }, + "map": [ + "addon_config:rw", + "media:rw", + "share:rw", + "ssl:rw" + ], + "devices": [ + "/dev/dri", "/dev/dri/renderD128", + "/dev/vchiq", "/dev/video10", "/dev/video11", "/dev/video12" + ], + "environment": { + "PGID": "0", + "PUID": "0", + "DB_HOSTNAME": "homeassistant.local", + "DB_PORT": "5432", + "DB_USERNAME": "pguser", + "DB_PASSWORD": "ente", + "DB_DATABASE_NAME": "ente_db", + "MINIO_ROOT_USER": "minioadmin", + "MINIO_ROOT_PASSWORD": "minioadmin", + "S3_ENDPOINT": "http://localhost:3200", + "S3_BUCKET": "ente-media", + "ENTE_API_ORIGIN": "http://[HOST]:[PORT:8080]", + "TZ": "Europe/Paris" + }, + "options": { + "DB_DATABASE_NAME": "ente_db", + "DB_HOSTNAME": "homeassistant.local", + "DB_PASSWORD": "ente", + "DB_PORT": 5432, + "DB_USERNAME": "pguser", + "MINIO_ROOT_USER": "minioadmin", + "MINIO_ROOT_PASSWORD": "minioadmin", + "S3_BUCKET": "ente-media", + "TZ": "Europe/Paris", + "DISABLE_WEB_UI": false + }, + "schema": { + "DB_DATABASE_NAME": "str", + "DB_HOSTNAME": "str", + "DB_PASSWORD": "str", + "DB_PORT": "int", + "DB_USERNAME": "str", + "MINIO_ROOT_USER": "str", + "MINIO_ROOT_PASSWORD": "str", + "S3_BUCKET": "str", + "TZ": "str?", + "DISABLE_WEB_UI": "bool?" + }, + "privileged": ["SYS_ADMIN", "DAC_READ_SEARCH"], + "hassio_api": true, + "udev": true, + "video": true, + "panel_icon": "mdi:image-multiple", + "webui": "http://[HOST]:[PORT:3000]" +} diff --git a/ente/icon.png b/ente/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4d13669bcba135fca9ff1c4838412b648a57db GIT binary patch literal 16711 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 HGY|X^Xtc}t literal 0 HcmV?d00001 diff --git a/ente/rootfs/etc/cont-init.d/99-run.sh b/ente/rootfs/etc/cont-init.d/99-run.sh new file mode 100644 index 000000000..9b524ad5c --- /dev/null +++ b/ente/rootfs/etc/cont-init.d/99-run.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bashio +# shellcheck shell=bash +# shellcheck disable=SC2155,SC2016 +set -e + +bashio::log.info "Starting ente..." +exec /usr/bin/museum & + +bashio::log.info "Starting minio..." +exec /usr/local/bin/minio server /data --address ":3200" & + +bashio::log.info "Starting ente-web..." +[ -n "$DISABLE_WEB_UI" ] || exec /usr/bin/ente-web \ No newline at end of file diff --git a/ente/stats.png b/ente/stats.png new file mode 100644 index 0000000000000000000000000000000000000000..03eb3d7888179e5835fd1aa8747d2f9ee2048dc3 GIT binary patch literal 2244 zcmXw53sjQX7XFQj#0g7pSJP0_CdGIZ)rS@C;S1915X_l|) zg;_q*?3S91rlMTbQhXssIr-`b3{Z1aEFWQjIe&BSth3J9dwpx~b@th3?{DpE0e;?V zF-8~w0M`2Y>^TGgTJwm0XUz)ae7rop3lZAqd_vCy0JiP>*1BztH3on+3BG$g0xu3v zi?}hH_5v-RY5Et@?&Mj$-vdS+eoga{VGi9hKfT@DDf;1sYb)1So2Bb`6N@@CRtkvW zU<2GCruX#p_I{&R=jfZ(*NYb!vLVh;5Q-ch+_VaiVwr4|nF2^BA?n}qFG#4$rq>!V zWE5zH6uZIAlgaj+-B!i<@3+JyiNHNZbaAOeV7$*oish|s4C`)+&leS|iks2k_m$>z zQu2U)`ir2&o^&2hTRs7L!&>VgpbZCr=)WcTF9DSrhc*RuIhsVdYi&5jX_c=a2*|DUZjfiZsEOEsVGM(h!VsZT`+E$H?dl zCN<`#VwrZKteMna9hsE)5h!+@($=6;FkzrXIH%o+Cr;IDNQZU)s88rTAB@Y)a zwty@HwXAN?95`q*g%m6Fy=yJMZ4BX4R}L2XN zK%K>e>Vo)YdM>{IH|3LuqXm^1?H>MDE`Q+h!1+uX++k0T@Bz`7-08rmr@6FSd3lt9 zQ+iO*IVb-|Wf|(lQlkdc?XF8!4iT_-utN;IfMW%Z9e#2k<9dACA5Zk3k{yVJKOG>( z;WOE&oBTv8hiI64P1|fyas32C_2u=(j-*;oB%3-&6ony6!PC$d1#okJ=bkKDUK@_p z9jK3_DyKU|pLkjpb9D8QYHiDZn|Fw`gP36w##~1qo>6Y8@KOLTZ*pSA1(HBLCGi?5 zXGneG8-0FAcdk-mwa{9v0SMlBlVh&UjG!>Mq^Du#TXS&g$}#DiardU>uT>bCc+b(< zfy;`Psbg-OONrwLw6jZvKQi8*`ImzHj~NP`&Arh+)WvIkS1!o@bQcvI&QQI3Khyk; z`-<&ocSloOK+0*HC>9lu6i?JoepV#7XihFhEq<&$IwQx&nijfQ1}1-<$e&v1YZZFbd|rE|ptC zx?)K{D>9qt)_T}gJ>M5fV zbbbDq9XhZr*6?sF7Xarh5*^?&eqN7fsK3(h&HEvxI9JXh6k#XsD4!iY+g<`|UbW#sTWS+&o zPU3|YzH?C(ix86?`3a=*YY2vlZy=5{b>b5m!luiH*#<`rfmMT?yQaM}$FmBB=azQ1 zacvckxJkaS^%tazrsU>{DgKF$W*tbFvnY--{A+UR`}>C4s4s-GO4sE5VD`H{(TNom zn1&;h4F>ua1Q0&#vI{(6b{-!9BR)Jq7J{R2@Qt29O83?Kr#&p%2yNVQAr~2O2chgUWZePsdkn zpmHiG#-pCXh)@u3TehlQ^e9uyLiv+4Mi0eW>U8bCteDGGi*-(8oC)e&+QDqMu$&#ToVX@nF0of`0RcpwYrjL_cjkZF=GuSE4d7+Mj@Ir8s6uhq8#S!@ zgK0c2k+L!qE}3LDy-BAzFVa_=3V#UORP!bsZNFTQb?H+pmRew&HAJmI-HZ0;`0;Px z)%_mP&C8;E+>+N6eTEndYGSao6x7bfh5ZD2$(82FE4tLHwpkLvHuMX=SBa@GODDN> zQCo0{td6l)_*37ah9l)B(*`LI(4x=CmF*~n{G;72)u-8+Q%dy^jj!-`PrDkPr%SD} zZFeqmf@;)W`Z!^ef22&8s+8!3TAgY_T<5~8)g0=h%e2B^RaBL& zUv)lr=didt!WcJ)Gfp7WqV4*%1a$~_Ps&tjSIR8sePD~;2FU5f`a;57EGYNlxa4I^ zs1@MLVn)R!EVWLO(SFvxTTAezoK-07rti-7=eHTv%(#7+S1E^=G_A!0UrR}X!C9{l zTFs0{Vyc=D@yRPq^qPel-a-->f{rDdge9AOK=M*bugcPXvJ=PDynXf%O9sIKi1}0+ zn@}Ca}ySE40B4Y{QyVq~ev)$pp F{0Y(9diwwX literal 0 HcmV?d00001 diff --git a/ente/updater.json b/ente/updater.json new file mode 100644 index 000000000..4a01fe3cf --- /dev/null +++ b/ente/updater.json @@ -0,0 +1,9 @@ +{ + "github_beta": "false", + "last_update": "21-06-2025", + "repository": "alexbelgium/hassio-addons", + "slug": "ente", + "source": "github", + "upstream_repo": "ente-io/ente", + "upstream_version": "1.1.57" +}