From d99bb17f2d9bfaa2a424d9af8304eebaccc72e4f Mon Sep 17 00:00:00 2001 From: "Community Hass.io Add-ons Bot" Date: Thu, 19 Aug 2021 21:19:41 +0000 Subject: [PATCH] :tada: Release of add-on Tailscale 0.1.0 --- README.md | 23 +++++++++ tailscale/CHANGELOG.md | 8 +++ tailscale/DOCS.md | 114 +++++++++++++++++++++++++++++++++++++++++ tailscale/README.md | 33 ++++++++++++ tailscale/config.json | 29 +++++++++++ tailscale/icon.png | Bin 0 -> 10076 bytes tailscale/logo.png | Bin 0 -> 3368 bytes 7 files changed, 207 insertions(+) create mode 100644 tailscale/CHANGELOG.md create mode 100644 tailscale/DOCS.md create mode 100644 tailscale/README.md create mode 100644 tailscale/config.json create mode 100644 tailscale/icon.png create mode 100644 tailscale/logo.png diff --git a/README.md b/README.md index e9010c35..fd9393ad 100644 --- a/README.md +++ b/README.md @@ -360,6 +360,19 @@ Play Spotify music on your Home Assistant device [:books: Spotify Connect add-on documentation][addon-doc-spotify] +### ✓ [Tailscale][addon-tailscale] + +![Latest Version][tailscale-version-shield] +![Supports armhf Architecture][tailscale-armhf-shield] +![Supports armv7 Architecture][tailscale-armv7-shield] +![Supports aarch64 Architecture][tailscale-aarch64-shield] +![Supports amd64 Architecture][tailscale-amd64-shield] +![Supports i386 Architecture][tailscale-i386-shield] + +Zero config VPN for building secure networks + +[:books: Tailscale add-on documentation][addon-doc-tailscale] + ### ✓ [TasmoAdmin][addon-tasmoadmin] ![Latest Version][tasmoadmin-version-shield] @@ -592,6 +605,7 @@ on the correct GitHub repository matching the add-on. - [Open an issue for the add-on: SQLite Web][sqlite-web-issue] - [Open an issue for the add-on: SSH & Web Terminal][ssh-issue] - [Open an issue for the add-on: Spotify Connect][spotify-issue] +- [Open an issue for the add-on: Tailscale][tailscale-issue] - [Open an issue for the add-on: TasmoAdmin][tasmoadmin-issue] - [Open an issue for the add-on: Tautulli][tautulli-issue] - [Open an issue for the add-on: The Lounge][thelounge-issue] @@ -878,6 +892,15 @@ SOFTWARE. [spotify-armhf-shield]: https://img.shields.io/badge/armhf-no-red.svg [spotify-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg [spotify-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg +[addon-tailscale]: https://github.com/hassio-addons/addon-tailscale/tree/v0.1.0 +[addon-doc-tailscale]: https://github.com/hassio-addons/addon-tailscale/blob/v0.1.0/README.md +[tailscale-issue]: https://github.com/hassio-addons/addon-tailscale/issues +[tailscale-version-shield]: https://img.shields.io/badge/version-v0.1.0-blue.svg +[tailscale-aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[tailscale-amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[tailscale-armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[tailscale-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[tailscale-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg [addon-tasmoadmin]: https://github.com/hassio-addons/addon-tasmoadmin/tree/v0.15.0 [addon-doc-tasmoadmin]: https://github.com/hassio-addons/addon-tasmoadmin/blob/v0.15.0/README.md [tasmoadmin-issue]: https://github.com/hassio-addons/addon-tasmoadmin/issues diff --git a/tailscale/CHANGELOG.md b/tailscale/CHANGELOG.md new file mode 100644 index 00000000..fd01c2df --- /dev/null +++ b/tailscale/CHANGELOG.md @@ -0,0 +1,8 @@ +## What’s changed + +First release! 🎉 + +Tailscale is a zero config VPN, which installs on any device in minutes on +any device, including your Home Assistant instance. + +ℹ️ Please note, this add-on is currently in an experimental state. \ No newline at end of file diff --git a/tailscale/DOCS.md b/tailscale/DOCS.md new file mode 100644 index 00000000..050e917c --- /dev/null +++ b/tailscale/DOCS.md @@ -0,0 +1,114 @@ +# Home Assistant Community Add-on: Tailscale + +Tailscale is a zero config VPN, which installs on any device in minutes on +any device, including your Home Assistant instance. + +Create a secure network between your servers, computers, and cloud instances. +Even when separated by firewalls or subnets, Tailscale just works. Tailscale +manages firewall rules for you, and works from anywhere you are. + +## Prerequisites + +In order to use this add-on, you'll need a Tailscale account. + +It is free to use for personal & hobby projects, up to 20 clients/devices on a +single user account. Sign up using your Google, Microsoft or GitHub account at +the following URL: + + + +You can also create an account during the add-on installation processes, +however, it is nice to know where you need to go later on. + +## Installation + +1. Search for the "Tailscale" add-on in the Supervisor add-on store and + install it. +1. Start the "Tailscale" add-on. +1. Check the logs of the "Tailscale" add-on to see if everything went well. +1. Open the Web UI of the "Tailscale" add-on to complete authentication and + couple your Home Assistant instance with your Tailscale account. +1. Done! + +## Configuration + +This add-on has no additional configuration options for the add-on itself. + +However, when logging in to Tailscale, you can configure your Tailscale +network right from their interface. + + + +The add-on exposes "Exit Node" capabilities that you can enable from your +Tailscale account. Additionally, if the Supervisor managed your network ( +which is the default), the add-on will also advertise routes to your +subnet to Tailscale. + +## Changelog & Releases + +This repository keeps a change log using [GitHub's releases][releases] +functionality. + +Releases are based on [Semantic Versioning][semver], and use the format +of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented +based on the following: + +- `MAJOR`: Incompatible or major changes. +- `MINOR`: Backwards-compatible new features and enhancements. +- `PATCH`: Backwards-compatible bugfixes and package updates. + +## Support + +Got questions? + +You have several options to get them answered: + +- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on + support and feature requests. +- The [Home Assistant Discord chat server][discord-ha] for general Home + Assistant discussions and questions. +- The Home Assistant [Community Forum][forum]. +- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] + +You could also [open an issue here][issue] GitHub. + +## Authors & contributors + +The original setup of this repository is by [Franck Nijhof][frenck]. + +For a full list of all authors and contributors, +check [the contributor's page][contributors]. + +## License + +MIT License + +Copyright (c) 2021 Franck Nijhof + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +[contributors]: https://github.com/hassio-addons/addon-tailscale/graphs/contributors +[discord-ha]: https://discord.gg/c5DvZ4e +[discord]: https://discord.me/hassioaddons +[forum]: https://community.home-assistant.io/?u=frenck +[frenck]: https://github.com/frenck +[issue]: https://github.com/hassio-addons/addon-tailscale/issues +[reddit]: https://reddit.com/r/homeassistant +[releases]: https://github.com/hassio-addons/addon-tailscale/releases +[semver]: http://semver.org/spec/v2.0.0.htm diff --git a/tailscale/README.md b/tailscale/README.md new file mode 100644 index 00000000..7f895b02 --- /dev/null +++ b/tailscale/README.md @@ -0,0 +1,33 @@ +# Home Assistant Community Add-on: Tailscale + +[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield] + +[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum] + +[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors] + +[![Support Frenck on Patreon][patreon-shield]][patreon] + +Zero config VPN for building secure networks. + +## About + +Tailscale is a zero config VPN, which installs on any device in minutes on +any device, including your Home Assistant instance. + +Create a secure network between your servers, computers, and cloud instances. +Even when separated by firewalls or subnets, Tailscale just works. Tailscale +manages firewall rules for you, and works from anywhere you are. + +[discord-shield]: https://img.shields.io/discord/478094546522079232.svg +[discord]: https://discord.me/hassioaddons +[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg +[forum]: https://community.home-assistant.io/?u=frenck +[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png +[github-sponsors]: https://github.com/sponsors/frenck +[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg +[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png +[patreon]: https://www.patreon.com/frenck +[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg +[release-shield]: https://img.shields.io/badge/version-v0.1.0-blue.svg +[release]: https://github.com/hassio-addons/addon-tailscale/tree/v0.1.0 \ No newline at end of file diff --git a/tailscale/config.json b/tailscale/config.json new file mode 100644 index 00000000..93fc687a --- /dev/null +++ b/tailscale/config.json @@ -0,0 +1,29 @@ +{ + "name": "Tailscale", + "version": "0.1.0", + "slug": "tailscale", + "description": "Zero config VPN for building secure networks", + "url": "https://github.com/hassio-addons/addon-tailscale", + "ingress": true, + "ingress_port": 0, + "ingress_stream": true, + "startup": "services", + "panel_icon": "mdi:docker", + "arch": [ + "aarch64", + "amd64", + "armhf", + "armv7", + "i386" + ], + "init": false, + "hassio_api": true, + "privileged": [ + "NET_ADMIN" + ], + "devices": [ + "/dev/net/tun" + ], + "host_network": true, + "image": "ghcr.io/hassio-addons/tailscale/{arch}" +} \ No newline at end of file diff --git a/tailscale/icon.png b/tailscale/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e723cdb7ca235a0476a0b3db4986c070e0d7ddc7 GIT binary patch literal 10076 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 literal 0 HcmV?d00001