1
0
mirror of https://github.com/EV21/dynb.git synced 2025-12-26 16:39:32 +01:00

36 Commits

Author SHA1 Message Date
fcdddde456 📝 change default dns server setting 2021-09-13 16:06:06 +02:00
e2ddda5ba7 🎨 add shfmt params to pre-commit check 2021-09-13 15:58:31 +02:00
24aa20be3b 🎨 fix shell style 2021-09-13 15:58:29 +02:00
d92cdb2652 🔧 handle dns server selection 2021-09-13 15:58:29 +02:00
4643331534 ♻️ seperate parsing logic 2021-09-13 15:58:29 +02:00
fa15700e5d change git hooks and add shfmt 2021-09-13 15:58:29 +02:00
43b09d7145 📝 update CHANGELOG 2021-09-13 15:58:29 +02:00
3b543754b3 ♻️ normalizing pre-commit configuration to a top-level map 2021-09-13 15:58:28 +02:00
040aec7472 ♻️ refactorings 2021-09-13 15:58:28 +02:00
eda5a69da2 add pre-commit git hook for shellcheck 2021-09-13 15:58:21 +02:00
01eaa30523 refactor: ♻️ remove unused help message 2021-09-12 22:00:46 +02:00
30c5373705 📝 update README.md 2021-04-23 22:16:59 +02:00
4e26ff135d 📝 document environment variables 2021-04-23 18:08:44 +02:00
be2f4f3862 ♻️ refactor: method extractions and other beautifications 2021-04-23 18:02:16 +02:00
93c1ed18d0 🐛 fix loop and error handling in case of connection issues 2021-04-23 12:00:35 +02:00
2c23b1de6e 📝 document example of an docker-compose.yml file 2021-04-22 22:30:08 +02:00
f9507929da add Dockerfile 2021-04-22 22:17:49 +02:00
30e77c9722 📝 document loop mode and dig as requirement 2021-04-22 22:10:11 +02:00
bb1d514b50 add loop mode 2021-04-22 21:55:25 +02:00
c02dc68f17 📝 update example of .env in README.md 2021-04-21 13:45:45 +02:00
dcf9f1e7a2 ♻️ refactor: rename environment variables 2021-04-21 13:04:59 +02:00
4d28f55ce9 add support for Duck DNS as DynDNS2 provider 2021-04-04 16:31:42 +02:00
b8565eb38f add support for deSEC as DynDNS2 provider 2021-04-04 11:24:13 +02:00
ab330e9731 add completion
 add man page
2021-04-03 17:35:26 +02:00
262f7c3709 replace getopt with argbash 2021-04-03 14:06:03 +02:00
5210c35400 ♻️ refactor, fix and debug error handling 2021-01-27 17:52:15 +01:00
522a0f99bb ♻️ refactor main code 2021-01-26 22:23:03 +01:00
3bf6b69ae8 add interpretaton of status codes and act accordingly 2021-01-26 21:43:07 +01:00
d139022295 make network interface configurable 2021-01-26 21:43:07 +01:00
8997835903 🐛 fix sourcing of config file
♻️ do some shellcheck fixes
2021-01-26 21:43:07 +01:00
d6dc223794 add DynDNS2 support for dynv6.com 2021-01-26 21:43:07 +01:00
dc12f71d00 📝 add CHANGELOG.md 2021-01-26 21:43:07 +01:00
5ba730cff1 add .gitchangelog.rc 2021-01-26 21:43:07 +01:00
1104cf8505 📝 add example.env 2021-01-26 21:43:07 +01:00
99a446f4c7 📝 write README.md 2021-01-26 21:42:21 +01:00
f056e96e25 add dynb.sh 2021-01-26 21:24:33 +01:00
4 changed files with 40 additions and 112 deletions

View File

@@ -8,10 +8,4 @@ repos:
- "-l" # list files whose formatting differs from shfmt's - "-l" # list files whose formatting differs from shfmt's
- "-i 2" # indent: 0 for tabs (default), >0 for number of spaces - "-i 2" # indent: 0 for tabs (default), >0 for number of spaces
- "-ci" # switch cases will be indented - "-ci" # switch cases will be indented
- "-w" # write result to file instead of stdout - "-w" # write result to file instead of stdout
- repo: https://github.com/executablebooks/mdformat
rev: 0.7.9
hooks:
- id: mdformat
additional_dependencies:
- mdformat-gfm # GitHub Flavored Markdown support

View File

@@ -1,50 +1,20 @@
# Changelog # Changelog
## 0.2.0 (2021-09-24) ## (unreleased)
### New
* :sparkles: enable parameter extensions for `docker run --interactive` [Eduard Veit]
* :sparkles: add pre-commit hooks for markdown. [Eduard Veit]
* :sparkles: change git hooks and add shfmt. [Eduard Veit]
* :sparkles: add pre-commit git hook for shellcheck. [Eduard Veit]
### Changes
* :wrench: remove md-toc from pre-commit. [Eduard Veit]
* :wrench: handle dns server selection. [Eduard Veit]
### Documentation ### Documentation
* :memo: update CHANGELOG.md. [Eduard Veit]
* :memo: document docker parameters. [Eduard Veit]
* :memo: change default dns server setting. [Eduard Veit]
* :memo: update CHANGELOG. [Eduard Veit]
* :memo: update README.md. [Eduard Veit] * :memo: update README.md. [Eduard Veit]
### Other ### Other
* :art: lint README.md. [Eduard Veit]
* :art: add shfmt params to pre-commit check. [Eduard Veit]
* :art: fix shell style. [Eduard Veit]
* :recycle: seperate parsing logic. [Eduard Veit]
* :recycle: normalizing pre-commit configuration to a top-level map. [Eduard Veit] * :recycle: normalizing pre-commit configuration to a top-level map. [Eduard Veit]
* :recycle: refactorings. [Eduard Veit] * :recycle: refactorings. [Eduard Veit]
* Feature: :sparkles: add pre-commit git hook for shellcheck. [Eduard Veit]
* Refactor: :recycle: remove unused help message. [Eduard Veit] * Refactor: :recycle: remove unused help message. [Eduard Veit]

View File

@@ -1,12 +1,5 @@
FROM alpine:latest FROM alpine:latest
RUN \ RUN apk update && apk add bash curl jq bind-tools
apk update \
&& \
apk add \
bash \
curl \
jq \
bind-tools
WORKDIR /usr/src/app WORKDIR /usr/src/app
COPY . . COPY . .
ENTRYPOINT ["/bin/bash", "/usr/src/app/dynb.sh"] CMD /bin/bash /usr/src/app/dynb.sh

View File

@@ -1,65 +1,55 @@
# 🔃 DynB # 🔃 DynB
DynB - dynamic DNS update script, written in bash DynB - dynamic DNS update script, written in bash
IPv4 (A) and IPv6 (AAAA) record updates are supported. IPv4 (A) and IPv6 (AAAA) record updates are supported.
<!-- TOC --> <!-- TOC -->
- [✨ Update Methods](#-update-methods) - [✨ Update Methods](#-update-methods)
- [APIs](#apis) - [APIs](#apis)
- [DynDNS2](#dyndns2) - [DynDNS2](#dyndns2)
- [📦 Requirements](#-requirements) - [📦 Requirements](#-requirements)
- [🚀 Installation](#-installation) - [🚀 Installation](#-installation)
- [⚙ Configuration](#-configuration) - [⚙ Configuration](#-configuration)
- [🏃 Run](#-run) - [🏃 Run](#-run)
- [⏰ Cron](#-cron) - [⏰ Cron](#-cron)
- [loop mode](#loop-mode)
- [crontab](#crontab)
- [🐟 docker](#-docker) - [🐟 docker](#-docker)
- [environment variables](#environment-variables)
<!-- /TOC --> <!-- /TOC -->
## ✨ Update Methods ## ✨ Update Methods
The following update methods are currently implemented: The following update methods are currently implemented:
### APIs ### APIs
- INWX.com Domrobot JSON-RPC-API\ * INWX.com Domrobot JSON-RPC-API
Limitations: Limitations:
- minimum TTL is 300 (5 minutes) - minimum TTL is 300 (5 minutes)
### DynDNS2 ### DynDNS2
- INWX.com * INWX.com
- deSEC.io (dedyn.io) * deSEC.io (dedyn.io)
- DuckDNS.org * DuckDNS.org
- dynv6.com * dynv6.com
## 📦 Requirements ## 📦 Requirements
- `curl` - The minimum requirement for all API requests. * `curl` - The minimum requirement for all API requests.
- `dig` - You can get it by installing `dnsutils` (debian/ubuntu/ArchLinux), `bind-utils` (CentOS/RHEL), `bind-tools` (Alpine) * `dig` - You can get it by installing `dnsutils` (debian/ubuntu/ArchLinux), `bind-utils` (CentOS/RHEL), `bind-tools` (Alpine)
also essential if you are using other APIs: also essential if you are using other APIs:
- `jq` - Command-line JSON processor * `jq` - Command-line JSON processor
## 🚀 Installation ## 🚀 Installation
Download the latest release Download the latest release
or simply clone this repo or simply clone this repo
```
```shell
git clone https://github.com/EV21/dynb.git git clone https://github.com/EV21/dynb.git
``` ```
If you want to add the script to you PATH, run :point_down: If you want to add the script to you PATH, run :point_down:
```
```shell
bash dynb.sh --link bash dynb.sh --link
``` ```
@@ -69,8 +59,7 @@ You can use a config in form of an `.env` file.
Or you can just use CLI parameters. Or you can just use CLI parameters.
Create `.env` in the app root directory or at `~/.local/share/dynb/.env`. Create `.env` in the app root directory or at `~/.local/share/dynb/.env`.
```
```bash
DYNB_DYN_DOMAIN=dyndns.example.com DYNB_DYN_DOMAIN=dyndns.example.com
## service provider could be deSEC, duckdns, dynv6, inwx ## service provider could be deSEC, duckdns, dynv6, inwx
@@ -93,23 +82,18 @@ DYNB_TOKEN=
## 🏃 Run ## 🏃 Run
If you have a config file just run :point_down: If you have a config file just run :point_down:
```
```bash
dynb dynb
``` ```
Alternatively you can use parameters if your system meets the relevant requirements. This example shows the long form parameter, there are also short ones.
Alternatively you can use parameters if your system meets the relevant requirements. This example shows the long form parameter, there are also short ones.\
Call the help function :point_down: Call the help function :point_down:
```
```bash
dynb --help dynb --help
``` ```
```
```bash
dynb --ip-mode dualstack --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword dynb --ip-mode dualstack --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword
``` ```
```
```bash
dynb --ip-mode dualstack --update-method dyndns --provider inwx --domain dyndns.example.com --username user42 --password SuperSecretPassword dynb --ip-mode dualstack --update-method dyndns --provider inwx --domain dyndns.example.com --username user42 --password SuperSecretPassword
``` ```
@@ -124,29 +108,18 @@ Just use the parameter `--interval 60` or the environment variable `DYNB_INTERVA
### crontab ### crontab
execute :point_down: execute :point_down:
```
```bash
crontab -e crontab -e
``` ```
then enter :point_down: to run dynb every five minutes. then enter :point_down: to run dynb every five minutes.
```
```bash
*/5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log */5 * * * * $HOME/.local/bin/dynb >> $HOME/.local/share/dynb/dynb-cron.log
``` ```
alternative with docker and parameters::
```bash
*/5 * * * * docker run --interactive --tty --rm --network host ev21/dynb:latest --ip-mode 64 --update-method domrobot --domain dyndns.example.com --username user42 --password SuperSecretPassword
```
Note, cron typically does not use the users PATH variable. Note, cron typically does not use the users PATH variable.
## 🐟 docker ## 🐟 docker
This is an example of a `docker-compose.yml` file. If you are using IPv6 make sure the routing works properly with your docker container. Note: [IPv6 networking](https://docs.docker.com/config/daemon/ipv6/) is only supported on Docker daemons running on Linux hosts. This is an example of a `docker-compose.yml` file. If you are using IPv6 make sure the routing works properly with your docker container.
```yaml ```yaml
version: '3.4' version: '3.4'
@@ -167,20 +140,18 @@ services:
- DYNB_PASSWORD=SuperSecretPassword - DYNB_PASSWORD=SuperSecretPassword
- DYNB_INTERVAL=60 - DYNB_INTERVAL=60
``` ```
## environment variables ## environment variables
| variable | default value | description |
| variable | default value | description | | --------------------- | --------------- | --------------------------------------------- |
| --------------------- | --------------- | -------------------------------------------------------------------------------------------------------------- | | DYNB_DYN_DOMAIN | undefined | required; `dyndns.example.com` |
| DYNB_DYN_DOMAIN | undefined | required; `dyndns.example.com` | | DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx` |
| DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx` | | DYNB_UPDATE_METHOD | undefined | required; `dyndns` or `domrobot` (with inwx) |
| DYNB_UPDATE_METHOD | undefined | required; `dyndns` or `domrobot` (with inwx) | | DYNB_IP_MODE | undefined | required; `4`, `6` or `64` for both |
| DYNB_IP_MODE | undefined | required; `4`, `6` or `64` for both | | DYNB_USERNAME | undefined | the requirement depends on your provider and the update method |
| DYNB_USERNAME | undefined | the requirement depends on your provider and the update method | | DYNB_PASSWORD | undefined | the requirement depends on your provider and the update method |
| DYNB_PASSWORD | undefined | the requirement depends on your provider and the update method | | DYNB_TOKEN | undefined | the requirement depends on your provider and the update method |
| DYNB_TOKEN | undefined | the requirement depends on your provider and the update method | | DYNB_INTERVAL | undefined | without this setting the script/docker container will run one time and exits |
| DYNB_INTERVAL | undefined | without this setting the script/docker container will run one time and exits | | DYNB_DEBUG | undefined | more console outputs |
| DYNB_DEBUG | undefined | more console outputs | | DYNB_IPv4_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP |
| DYNB_IPv4_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP | | DYNB_IPv6_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP |
| DYNB_IPv6_CHECK_SITE | api64.ipify.org | You need a website or Web-API that outputs your remote IP |
| DYNB_DNS_CHECK_SERVER | undefined | If you are using a local DNS Resolver/Server make sure it answers with the public answer or set another server | | DYNB_DNS_CHECK_SERVER | undefined | If you are using a local DNS Resolver/Server make sure it answers with the public answer or set another server |