From 62a7e8e3a458cc2addd4e89b387e1f86b5dfaf04 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Sun, 8 Mar 2026 07:39:51 +0100 Subject: [PATCH] clean --- tor/CHANGELOG.md | 52 ---- tor/README.md | 139 ---------- tor/build.json | 6 - tor/config.yaml | 45 ---- tor/icon.png | Bin 2133 -> 0 bytes tor/logo.png | Bin 11764 -> 0 bytes .../etc/s6-overlay/s6-rc.d/init-tor/run | 237 ------------------ tor/rootfs/etc/s6-overlay/s6-rc.d/tor/run | 10 - tor/stats.png | Bin 2784 -> 0 bytes 9 files changed, 489 deletions(-) delete mode 100644 tor/CHANGELOG.md delete mode 100644 tor/README.md delete mode 100644 tor/build.json delete mode 100644 tor/config.yaml delete mode 100644 tor/icon.png delete mode 100644 tor/logo.png delete mode 100755 tor/rootfs/etc/s6-overlay/s6-rc.d/init-tor/run delete mode 100755 tor/rootfs/etc/s6-overlay/s6-rc.d/tor/run delete mode 100644 tor/stats.png diff --git a/tor/CHANGELOG.md b/tor/CHANGELOG.md deleted file mode 100644 index 1ef382d84..000000000 --- a/tor/CHANGELOG.md +++ /dev/null @@ -1,52 +0,0 @@ -- The Home Assistant project has deprecated support for the armv7, armhf and i386 architectures. Support wil be fully dropped in the upcoming Home Assistant 2025.12 release - -- Added support for configuring extra environment variables via the `env_vars` add-on option alongside config.yaml. See https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-your-Addon-2 for details. - -## 5.0.1-1 (2024-08-13) - -- Update apparmomr profile to fix start up - -## 5.0.1-2 (2024-08-13) - -- Align version - -## 5.0.1-3 (2024-08-13) - -- Add read permission for /etc/s6-overlay/ in apparmor - -## 5.0.1-4 (2024-08-14) - -- Add execution permission for permission for /etc/s6-overlay/s6-overlay/s6-rc.d/init-tor/run file - -## 5.0.2-1 (2025-02-13) - -- HTTP tunneling - -## 5.0.2-2 (2025-02-13) - -- Fix snowflake build -- Lint issues - -## 5.0.2-3 (2025-02-13) - -- Fix network for http tunel - -## 5.0.2-4 (2025-02-13) - -- Init build procedure - -## 5.0.2-5 (2025-02-13) - -- Init build procedure - -## 5.0.2-6 (2025-02-13) - -- Remove excess depents - -## 5.0.3-1 (2025-02-14) - -- hassio-addons/base 17.1.5 - -## 5.0.3-2 (2025-02-16) - -- hassio-addons/base 17.2.0 diff --git a/tor/README.md b/tor/README.md deleted file mode 100644 index 75e15981e..000000000 --- a/tor/README.md +++ /dev/null @@ -1,139 +0,0 @@ -## ⚠ Open Request : [✨ [REQUEST] Tandoor - Connectors (opened 2025-10-08)](https://github.com/alexbelgium/hassio-addons/issues/2135) by [@blowk](https://github.com/blowk) -## ⚠ Open Issue : [🐛 [LINKWARDEN] Never use STORAGE_FOLDER (opened 2025-10-11)](https://github.com/alexbelgium/hassio-addons/issues/2137) by [@guimex22](https://github.com/guimex22) -# Hass.io Add-ons: Tor with bridges - - -I maintain this and other Home Assistant add-ons in my free time: keeping up with upstream changes, HA changes, and testing on real hardware takes a lot of time (and some money). I use around 5-10 of my >110 addons so regularly I install test machines (and purchase some test services such as vpn) that I don't use myself to troubleshoot and improve the addons - -If this add-on saves you time or makes your setup easier, I would be very grateful for your support! - -[![Buy me a coffee][donation-badge]](https://www.buymeacoffee.com/alexbelgium) -[![Donate via PayPal][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA) - -## Addon informations - -![Version](https://img.shields.io/badge/dynamic/yaml?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ftor%2Fconfig.yaml) -![Ingress](https://img.shields.io/badge/dynamic/yaml?label=Ingress&query=%24.ingress&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ftor%2Fconfig.yaml) -![Arch](https://img.shields.io/badge/dynamic/yaml?color=success&label=Arch&query=%24.arch&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2Ftor%2Fconfig.yaml) - -[![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://img.shields.io/github/actions/workflow/status/alexbelgium/hassio-addons/weekly-supelinter.yaml?label=Lint%20code%20base)](https://github.com/alexbelgium/hassio-addons/actions/workflows/weekly-supelinter.yaml) -[![Builder](https://img.shields.io/github/actions/workflow/status/alexbelgium/hassio-addons/onpush_builder.yaml?label=Builder)](https://github.com/alexbelgium/hassio-addons/actions/workflows/onpush_builder.yaml) - -[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white -[paypal-badge]: https://img.shields.io/badge/Donate%20via%20PayPal-0070BA?logo=paypal&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://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.github/stars2.svg)](https://github.com/alexbelgium/hassio-addons/stargazers) - -![downloads evolution](https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/tor/stats.png) - -## About - -Extended version of the [Tor addon from Home Assistant Community repository](https://github.com/hassio-addons/addon-tor) by supporting multiples bridges protocols WebTunnel, Snowflake and OBFS. - -## Installation - -The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on. - -1. Add my add-ons repository to your home assistant instance (in supervisor addons store at top right, or click button below if you have configured my HA) - [![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons) -1. Install this add-on. -1. Click the `Save` button to store your configuration. -1. Set the add-on options to your preferences -1. Start the add-on. -1. Check the logs of the add-on to see if everything went well. -1. Open the webUI and adapt the software options - -## Configuration - -Use the add-on `env_vars` option to pass extra environment variables (uppercase or lowercase names). See https://github.com/alexbelgium/hassio-addons/wiki/Add-Environment-variables-to-your-Addon-2 for details. - -Configurations can be done through the app webUI, except for the following options. - -### Options - -| Option | Type | Default | Description | -|--------|------|---------|-------------| -| `hidden_services` | bool | `true` | Enable Tor hidden services | -| `http_tunnel` | bool | `false` | Enable HTTP tunnel on port 9080 | -| `socks` | bool | `false` | Enable SOCKS proxy | -| `stealth` | bool | `false` | Enable stealth mode | -| `bridges` | list | `[]` | List of bridge configurations | -| `client_names` | list | `[]` | Client names for stealth authentication | -| `ports` | list | `["8123", "8123:80"]` | Ports to expose via Tor | -| `log_level` | list | | Log level (trace/debug/info/notice/warning/error/fatal) | - -You should follow the initial guide for configuring base addon options. Here are the extra options specific to this extended version: - -### Option: `http_tunnel` - -Setting this option to true opens port 9080 to listen for connections from HTTP-speaking applications. Enabling this feature allows you to use other applications on your network to use the Tor network via http proxy. - -### Option: `bridges` - -> Ensure the option value is clear to avoid unintended use of transport plugins and bridges. - -Bridges are Tor relays that help you circumvent censorship. -Access to bridges is provided by supported transport plugins: - -#### OBFS - -Because bridge addresses are not public, you will need to request them yourself. You have a few options: - -- Visit [Tor][tor-bridges-obfs4] project and follow the instructions, or -- Email `bridges@torproject.org` from a Gmail, or Riseup email address -- Send a message to @GetBridgesBot on Telegram. Tap on 'Start' or write /start or /bridges in the chat. - -For example: - -```yaml -bridges: - - >- - obfs4 123.45.67.89:443 EFC6A00EE6272355C023862378AC77F935F091E4 - cert=KkdWiWlfetJG9SFrzX8g1teBbgxtsc0zPiN5VLxqNNH+iudVW48CoH/XVXPQntbivXIqZA - iat-mode=0 -``` - -#### Webtunnel - -Visit [Tor][tor-bridges-webtunnel] project and follow the instructions - -For example: - -```yaml -bridges: - - >- - webtunnel 192.0.2.3:1 - DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF - url=https://akbwadp9lc5fyyz0cj4d76z643pxgbfh6oyc-167-71-71-157.sslip.io/5m9yq0j4ghkz0fz7qmuw58cvbjon0ebnrsp0 - ver=0.0.1 -``` - -#### Snowflake - -What is [snowflake][what-is-snowflake], example: - -```yaml -bridges: - - >- - snowflake 192.0.2.3:80 2B280B23E1107BB62ABFC40DDCC8824814F80A72 - fingerprint=2B280B23E1107BB62ABFC40DDCC8824814F80A72 - url=https://snowflake-broker.torproject.net/ - ampcache=https://cdn.ampproject.org/ - front=www.google.com - ice=stun:stun.l.google.com:19302,stun:stun.antisip.com:3478,stun:stun.bluesip.net:3478,stun:stun.dus.net:3478,stun:stun.epygi.com:3478,stun:stun.sonetel.com:3478,stun:stun.uls.co.za:3478,stun:stun.voipgate.com:3478,stun:stun.voys.nl:3478 - utls-imitate=hellorandomizedalpn -``` - -## Support - -If you have in issue with your installation, please be sure to checkout github. - -[tor-hidden-service]: https://www.torproject.org/docs/hidden-services.html.en -[tor-bridges-obfs4]: https://bridges.torproject.org/bridges/?transport=obfs4 -[tor-bridges-webtunnel]: https://bridges.torproject.org/bridges/?transport=webtunnel -[what-is-snowflake]: https://support.torproject.org/censorship/what-is-snowflake/ - - diff --git a/tor/build.json b/tor/build.json deleted file mode 100644 index b9f7a012e..000000000 --- a/tor/build.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "build_from": { - "aarch64": "ghcr.io/hassio-addons/base:17.2.0", - "amd64": "ghcr.io/hassio-addons/base:17.2.0" - } -} diff --git a/tor/config.yaml b/tor/config.yaml deleted file mode 100644 index 44a44afd8..000000000 --- a/tor/config.yaml +++ /dev/null @@ -1,45 +0,0 @@ -arch: - - aarch64 - - amd64 -description: Protect your privacy and access Home Assistant via Tor -image: ghcr.io/alexbelgium/tor-{arch} -init: false -map: - - ssl:rw -name: Tor with bridges -options: - env_vars: [] - bridges: [] - client_names: [] - hidden_services: true - http_tunnel: false - ports: - - "8123" - - 8123:80 - socks: false - stealth: false -ports: - 9050/tcp: 9050 - 9080/tcp: 9080 -ports_description: - 9050/tcp: Tor SOCKS proxy port - 9080/tcp: Tor HTTP tunnel port -schema: - env_vars: - - name: match(^[A-Za-z0-9_]+$) - value: str? - bridges: - - str - client_names: - - match(^[A-Za-z0-9+-_]{1,16}$) - hidden_services: bool - http_tunnel: bool - log_level: list(trace|debug|info|notice|warning|error|fatal)? - ports: - - match(^(.*:)?(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])?$) - socks: bool - stealth: bool -slug: tor -startup: services -url: https://github.com/alexbelgium/hassio-addons -version: 5.0.3-2 diff --git a/tor/icon.png b/tor/icon.png deleted file mode 100644 index 0574e582b86848b4edc43704bd2506d78f2904d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2133 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