Giter VIP home page Giter VIP logo

orbital-sync's Introduction

Website GitHub GitHub Stars

Installation | Configuration | Changelog

Logo

Orbital Sync

Tests Coverage Version

Orbital Sync synchronizes multiple Pi-hole instances for high availability (HA) using the built-in "teleporter". In other words, it performs a "backup" in the Pi-hole admin interface of your primary Pi-hole instance, and then "restores" that backup to any number of "secondary" Pi-holes also via their admin interface. As a result, it supports the synchronization of anything currently supported by Pi-hole's "teleporter". See "Configuration" for the defaults.

Alternatives

I love Gravity Sync and have used it for some time, but I personally find it to be difficult to set up in some contexts (Docker, Unraid, Synology, etc.). Orbital Sync's approach is designed to rely less on the servers running Pi-hole by instead acting on their admin interface just like you would.

Why would I want multiple Pi-holes?

Ever had the server running your Pi-hole go down? Or have you ever needed to perform maintenance on that server? This can obviously be extremely disruptive to anyone using your network. By running multiple Pi-hole instances (replicas) and giving your network clients secondary/tertiary/etc DNS servers, any outage involving one of your Pi-hole instances doesn't bring down your whole network.

Getting Started

Set up your secondary Pi-hole instance(s) just like you did your primary. Once that's done, choose one of the following:

Docker

Docker Pulls Docker Image Size

The following is an example Docker Compose file for running this project. See the configuration section for more environment variables.

version: '3'
services:
  orbital-sync:
    image: mattwebbio/orbital-sync:1
    environment:
      PRIMARY_HOST_BASE_URL: 'https://pihole1.example.com'
      PRIMARY_HOST_PASSWORD: 'your_password1'
      SECONDARY_HOSTS_1_BASE_URL: 'https://pihole2.example.com'
      SECONDARY_HOSTS_1_PASSWORD: 'your_password2'
      SECONDARY_HOSTS_2_BASE_URL: 'http://192.168.1.3'
      SECONDARY_HOSTS_2_PASSWORD: 'your_password3'
      SECONDARY_HOSTS_3_BASE_URL: 'http://server:8080'
      SECONDARY_HOSTS_3_PASSWORD: 'your_password4'
      SECONDARY_HOSTS_3_PATH: '/apps/pi-hole'
      INTERVAL_MINUTES: 60

The Orbital Sync Docker image is published to both DockerHub and the GitHub Package Repository:
mattwebbio/orbital-sync
ghcr.io/mattwebbio/orbital-sync

Distroless images

Distroless images are also available with *-distroless tags; for example, v1 is available as mattwebbio/orbital-sync:1-distroless. These images are slightly larger but are theoretically more secure than the default Alpine-based images, because they're supposed to contain only the Orbital Sync code and its direct dependencies. They do not include a shell, package manager, or other tools that are typically present in a Linux distribution.

Node

NPM Downloads

As with Docker, running with Node requires you export any required environment variables before running Orbital Sync. See the configuration section for more information.

npm install -g orbital-sync
orbital-sync

Requirements

The admin web interfaces of all Pi-holes must be accessible by the container/server running this service. In other words, they have to be on the same network.

It is recommended you run this service with Docker.

Star History

Star History Chart

Disclaimer

GitHub

This project is not associated with the official Pi-hole project and is a community maintained piece of software. See the license.

Pi-hole is a registered trademark of Pi-hole LLC.

orbital-sync's People

Contributors

alexsantos89 avatar cbundy avatar dependabot[bot] avatar github-actions[bot] avatar mattwebbio avatar tiltcamp-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

orbital-sync's Issues

Whitelists not syncing

What happened?

I am only passing primary/secondary and passwords along w/ an 8 hour sync interval, but the whitelists are supposed to sync by default but they're not - i can load exact whitelists on primary and see 40 and a lower number than that on the secondary, thus they must not be syncing?

Version

:latest

Log output

12/10/2023, 8:19:52 PM: ➡️ Signing in to http://10.0.0.20/admin...
12/10/2023, 8:19:53 PM: ✔️ Successfully signed in to http://10.0.0.20/admin!
12/10/2023, 8:19:53 PM: ➡️ Downloading backup from http://10.0.0.20/admin...
12/10/2023, 8:19:53 PM: ✔️ Backup from http://10.0.0.20/admin completed!
12/10/2023, 8:19:53 PM: ➡️ Signing in to http://10.0.0.21/admin...
12/10/2023, 8:19:53 PM: ✔️ Successfully signed in to http://10.0.0.21/admin!
12/10/2023, 8:19:53 PM: ➡️ Uploading backup to http://10.0.0.21/admin...
12/10/2023, 8:19:55 PM: ✔️ Backup uploaded to http://10.0.0.21/admin!
12/10/2023, 8:19:55 PM: ➡️ Updating gravity on http://10.0.0.21/admin...
12/10/2023, 8:21:03 PM: ✔️ Gravity updated on http://10.0.0.21/admin!
12/10/2023, 8:21:03 PM: ✔️ Success: 1/1 hosts synced.
12/10/2023, 8:21:03 PM: Waiting 480 minutes...

Implement Health Status

What feature would you like added?

Hey there, I would love to implement health status for this container. Is there any location, where you store the last state, i.e. success/failure of the sync? I'd gladly build something and open a pull request :)

Cheers, Lucas

Version

v1.5.2

Log output

No response

Group status set incorrectly on secondary (target) system after sync

What happened?

Groups that are set to a disabled state on the primary (to specifically not block any content for these clients) get synced but then set to "enabled" rather than "disabled". To workaround this issue for now, I've disabled group sync for now.

Version

Current version as of today

Log output

No response

Sync doesn't show any errors, but does not upload to second pi-hole

What happened?

Logs show it is successfully logging into first pihole, downloading backup, then successfully logging into second backup, but then it never uploads, and process repeats

No other errors in log

Version

Latest Container ID: 47373363f103 (unraid)

Log output

4/25/2024, 4:03:25 PM: ✔️ Successfully signed in to http://192.168.2.2/admin!
4/25/2024, 4:03:25 PM: ➡️ Downloading backup from http://192.168.2.2/admin...
4/25/2024, 4:03:25 PM: ✔️ Backup from http://192.168.2.2/admin completed!
4/25/2024, 4:03:25 PM: ➡️ Signing in to http://192.168.2.4/admin...
4/25/2024, 4:03:25 PM: Waiting 30 minutes...
4/25/2024, 4:33:25 PM: ➡️ Signing in to http://192.168.2.2/admin...
4/25/2024, 4:33:32 PM: ✔️ Successfully signed in to http://192.168.2.2/admin!
4/25/2024, 4:33:32 PM: ➡️ Downloading backup from http://192.168.2.2/admin...
4/25/2024, 4:33:32 PM: ✔️ Backup from http://192.168.2.2/admin completed!
4/25/2024, 4:33:32 PM: ➡️ Signing in to http://192.168.2.4/admin...
4/25/2024, 4:33:32 PM: Waiting 30 minutes...
4/25/2024, 5:03:32 PM: ➡️ Signing in to http://192.168.2.2/admin...
4/25/2024, 5:03:40 PM: ✔️ Successfully signed in to http://192.168.2.2/admin!
4/25/2024, 5:03:40 PM: ➡️ Downloading backup from http://192.168.2.2/admin...
4/25/2024, 5:03:40 PM: ✔️ Backup from http://192.168.2.2/admin completed!
4/25/2024, 5:03:40 PM: ➡️ Signing in to http://192.168.2.4/admin...
4/25/2024, 5:03:40 PM: Waiting 30 minutes...

Unable to sync third secondary pihole

What happened?

I have 4 piholes, 1 primary and 3 secondary piholes. Whenever I had docker env variables for a 3rd secondary host, it's ignored by orbital sync and only the primary and first 2 secondary piholes are synced.

The issue occurs when adding the env variables:

SECONDARY_HOST_3_BASE_URL
SECONDARY_HOST_3_PASSWORD

Version

1.5.2

Log output

No response

Container fails if target unavailable

What happened?

The orbital-sync container fails if it is unable to connect to the secondary or primary container.

Version

1.1.2

Log output

9/14/2022, 11:15:54 PM: ➡️ Signing in to https://pihole1.domain...
9/14/2022, 11:15:55 PM: ✔️ Successfully signed in to https://pihole1.domain!
9/14/2022, 11:15:55 PM: ➡️ Signing in to https://pihole2.domain...
file:///usr/src/app/dist/client.js:28
            throw new LoginError(host, {
                  ^
LoginError: Host: https://pihole2.domain
�
Status Code:
404
Response Body:
404 page not found
    at Client.create (file:///usr/src/app/dist/client.js:28:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Promise.all (index 0)
    at async file:///usr/src/app/dist/index.js:15:25
Node.js v18.9.0

Additional notification options

What feature would you like added?

I would like to be able to send sync notifications for success/failure of orbital-sync to either/or:
Telegram chat group
Gotify server

Version

1.1.1 (latest)

Log output

No response

MODULE_NOT_FOUND sync.js

What happened?

I installed Node.JS 18 and installed orbital-sync using the npm command. Upon trying to run it I get a module not found error..

Version

1.5.2

Log output

`node:internal/errors:496
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/usr/local/lib/node_modules/orbital-sync/dist/sync.js' imported from /usr/local/lib/node_modules/orbital-sync/dist/index.js
    at new NodeError (node:internal/errors:405:5)
    at finalizeResolution (node:internal/modules/esm/resolve:324:11)
    at moduleResolve (node:internal/modules/esm/resolve:943:10)
    at defaultResolve (node:internal/modules/esm/resolve:1129:11)
    at nextResolve (node:internal/modules/esm/loader:163:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:835:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40)
    at link (node:internal/modules/esm/module_job:76:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}`

Gravity update failure

What happened?

Most of the time, the Gravity update fails at the end of the sync process. When this happens, the DNS resolves ends up in a down state and the only way to get it working again seems to be to manually run the Gravity update on the target Pi-hole. I tried flipped the update gravity option to "false" which does of course prevent the error but this too seems to cause the DNS resolver to fail to start after the sync has completed.

Version

Latest as of today

Log output

2/1/2023, 10:08:39 PM: ➡️ Signing in to http://192.168.1.5:8080/admin...
stdout
17:08:39
2/1/2023, 10:08:39 PM: ✔️ Successfully signed in to http://192.168.1.5:8080/admin!
stdout
17:08:39
2/1/2023, 10:08:39 PM: ➡️ Downloading backup from http://192.168.1.5:8080/admin...
stdout
17:08:41
2/1/2023, 10:08:41 PM: ✔️ Backup from http://192.168.1.5:8080/admin completed!
stdout
17:08:41
2/1/2023, 10:08:41 PM: ➡️ Signing in to http://192.168.1.10/admin...
stdout
17:08:41
2/1/2023, 10:08:41 PM: ✔️ Successfully signed in to http://192.168.1.10/admin!
stdout
17:08:41
2/1/2023, 10:08:41 PM: ➡️ Uploading backup to http://192.168.1.10/admin...
stdout
17:08:44
2/1/2023, 10:08:44 PM: ✔️ Backup uploaded to http://192.168.1.10/admin!
stdout
17:08:44
2/1/2023, 10:08:44 PM: ➡️ Updating gravity on http://192.168.1.10/admin...
stdout
17:08:48
2/1/2023, 10:08:48 PM: ⚠ Error: Failed updating gravity on "http://192.168.1.10/admin".
stderr
17:08:48
2/1/2023, 10:08:48 PM: ⚠ Failure: 0/1 hosts synced.
stderr
17:08:48
2/1/2023, 10:08:48 PM: Waiting 30 minutes...

Provide TZ as environment variable

What feature would you like added?

It would be useful to be able to set the timezone so that log date time stamps align to the given region.
If this could be defined on the environment collection, that would be ideal.

Example

environment:
- TZ=Europe/London

Version

1.1.2

Log output

No response

Fetcherror

What happened?

With a fresh install for both pihole (docker tag 2023.03.1) and orbital sync I get the following error:

orbital-sync_1 | 5/6/2023, 8:15:48 AM: ➡️ Signing in to https://10.80.1.2:8053/admin...
orbital-sync_1 | 5/6/2023, 8:15:48 AM: ⚠ Failure: An unexpected error was thrown:
orbital-sync_1 | - FetchError: request to https://10.80.1.2:8053/admin/index.php?login failed, reason: write EPROTO 483905578B7F0000:error:0A00010B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:354:

I use the same docker-compose file as shown in the example with only one secondary server:

version: '3'
[services:
orbital-sync:
image: mattwebbio/orbital-sync:1
environment:
PRIMARY_HOST_BASE_URL: 'https://10.80.1.2:8053'
PRIMARY_HOST_PASSWORD: 'Secret'
SECONDARY_HOST_1_BASE_URL: 'https://10.80.1.3:8053'
SECONDARY_HOST_1_PASSWORD: 'Secret'
INTERVAL_MINUTES: 30

Both piholes can be accessed with a web browser.
What am I doing wrong?

Version

latest

Log output

No response

[Feature Request] Sync advanced DNS settings

What feature would you like added?

I would like to have orbital sync sync the Advanced DNS settings, specifically the following options:

Image

Version

latest (docker)

Log output

No response

Gravity Sync

What feature would you like added?

Based upon a fresh instance of pihole on both docker tenants.

Feature

Once the teleport completes successfully, then trigger gravity sync on the secondary pihole.

Observations

I noticed that after a successful sync between master and secondary pihole tenants, the adlists on the secondary did not appear to be downloaded.

https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

Health status of this list: List was not downloaded so far
This list was added to Pi-hole 2 hours ago (2022-09-14 19:34:54)
Database entry was last modified 8 minutes ago (2022-09-14 21:51:22)
The list contents were last updated N/A
Number of domains on this list: N/A
Number of invalid domains on this list: N/A
Database ID of this list: 1

Version

1.1.1 (latest)

Log output

No response

Support for Self-signed Certificates

What feature would you like added?

I'm running my internal services solely over https, and would like to be able to configure orbital-sync to ignore self-signed certificate errors.

Version

No response

Log output

1/28/2023, 11:46:34 AM: ➡️ Signing in to http://pi-hole/admin...
1/28/2023, 11:46:34 AM: ✔️ Successfully signed in to http://pi-hole/admin!
1/28/2023, 11:46:34 AM: ➡️ Downloading backup from http://pi-hole/admin...
1/28/2023, 11:46:35 AM: ✔️ Backup from http://pi-hole/admin completed!
1/28/2023, 11:46:35 AM: ➡️ Signing in to https://pi-hole.nas.local/admin...
1/28/2023, 11:46:35 AM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to https://pi-hole.nas.local/admin/index.php?login failed, reason: self-signed certificate in certificate chain
1/28/2023, 11:46:35 AM: ⚠ Failure: 0/1 hosts synced.

SMTP is misconfigured

What happened?

  Hi, great piece of software, works very well. 
  
  Im having an issue with notifications. Its telling me the SMTP is misconfigured. Not sure what am i missing.
  Thanks. 

  SMTP_HOST: 10.30.0.54
  SMTP_PORT: 32768
  SMTP_FROM: [email protected]
  SMTP_TO: [email protected]
  NOTIFY_ON_SUCCESS: true
  NOTIFY_ON_FAILURE: true
  NOTIFY_VIA_SMTP: true
  TZ: America/New_York

Version

latest

Log output

12/13/2023, 8:53:34 PM: ✔️ Success: 1/1 hosts synced.
12/13/2023, 8:53:34 PM: ⚠ Error: SMTP is misconfigured. Please check your configuration.
12/13/2023, 8:53:34 PM: Waiting 30 minutes...

Docker secrets

What feature would you like added?

When running orbital-sync on a docker swarm there is the option to use secrets in place of sensitive data for environment variables within the docker-compose.yml.
An example of such a file as follows

version: "3.9"

networks:
mynetwork:
external: true

services:
orbital-sync:
image: mattwebbio/orbital-sync:latest
networks:
- mynetwork
secrets:
- pihole1_password
- pihole2_password
environment:
- PRIMARY_HOST_BASE_URL=https://pihole1.mydomain.com
- PRIMARY_HOST_PASSWORD_FILE=/run/secrets/pihole1_password
- SECONDARY_HOST_1_BASE_URL=https://pihole2.mydomain.com
- SECONDARY_HOST_1_PASSWORD_FILE=/run/secrets/pihole2_password
- INTERVAL_MINUTES=30
deploy:
restart_policy:
condition: on-failure
mode: global
placement:
constraints: [node.role == manager]

secrets:
pihole1_password:
external: true
pihole2_password:
external: true

When not in a swarm (standalone) secrets can also be declared within the compose file as an alternative:

secrets:
pihole1_password:
file: $SECRETS_DIR/pihole1_password

These are saved to the file system as straight text files with no extension defined.

I would caveat this with the precedent that I run mine in a home lab with no external access. I am sure there are additional steps others may wish to take which would make this more secure, but given I would never expose my DSN resolvers to the world, then I feel my efforts are sufficient for the purpose.

Version

No response

Log output

No response

BUG: Domains do not get synchronized

What happened?

I removed and added some domains to the Domains (white/black list at https:///admin/groups-domains.php). Orbital-sync ran without issues, but on the secondary pihole, the Domains did not get updated.

Version

1.5.0

Log output

1/30/2023, 9:08:27 PM: ➡️ Signing in to https://primary/admin...
1/30/2023, 9:08:28 PM: ✔️ Successfully signed in to https://primary/admin!
1/30/2023, 9:08:28 PM: ➡️ Downloading backup from https://primary/admin...
1/30/2023, 9:08:28 PM: ✔️ Backup from https://primary/admin completed!
1/30/2023, 9:08:28 PM: ➡️ Signing in to https://secondary:5343/admin...
1/30/2023, 9:08:28 PM: ✔️ Successfully signed in to https://secondary:5343/admin!
1/30/2023, 9:08:28 PM: ➡️ Uploading backup to https://secondary:5343/admin...
1/30/2023, 9:08:30 PM: ✔️ Backup uploaded to https://secondary:5343/admin!
1/30/2023, 9:08:30 PM: Result:
Processed adlist (2 entries)<br>
Processed adlist group assignments (2 entries)<br>
Processed blacklist (exact) (0 entries)<br>
Processed blacklist (regex) (1 entry)<br>
Processed client (0 entries)<br>
Processed client group assignments (0 entries)<br>
Processed local DNS records (3 entries)<br>
Processed local CNAME records (7 entries)<br>
Processed black-/whitelist group assignments (0 entries)<br>
Processed group (1 entry)<br>
Processed whitelist (exact) (4 entries)<br>
Processed whitelist (regex) (0 entries)<br>
OK
1/30/2023, 9:08:30 PM: ➡️ Updating gravity on https://secondary:5343/admin...
1/30/2023, 9:08:38 PM: ✔️ Gravity updated on https://secondary:5343/admin!
1/30/2023, 9:08:38 PM: Result:
data:   [i] Neutrino emissions detected... 
 <------  [✓] Pulling blocklist source list into range 
  
   [i] Preparing new gravity database...
 <------  [✓] Preparing new gravity database 
   [i] Using libz compression  
   [i] Target: https://dbl.oisd.nl 
   [i] Status: Pending...
 <------  [✓] Status: No changes detected 
   [i] Analyzed 918976 domains 
  
   [i] Creating new gravity databases...
 <------  [✓] Creating new gravity databases 
   [i] Storing downloaded domains in new gravity database...
 <------  [✓] Storing downloaded domains in new gravity database 
   [i] Building tree...
 <------  [✓] Building tree 
   [i] Swapping databases...
 <------  [✓] Swapping databases 
   [✓] The old database remains available. 
   [i] Number of gravity domains: 918976 (918976 unique domains) 
   [i] Number of exact blacklisted domains: 1 
   [i] Number of regex blacklist filters: 0 
   [i] Number of exact whitelisted domains: 9 
   [i] Number of regex whitelist filters: 1 
   [i] Cleaning up stray matter...
 <------  [✓] Cleaning up stray matter 
  
   [✓] FTL is listening on port 53 
      [✓] UDP (IPv4) 
      [✓] TCP (IPv4) 
      [✓] UDP (IPv6) 
      [✓] TCP (IPv6) 
  
   [✓] Pi-hole blocking is enabled
1/30/2023, 9:08:38 PM: ✔️ Success: 1/1 hosts synced.
1/30/2023, 9:08:38 PM: Waiting 30 minutes...

Group management status not synchronized to second pi-hole

What happened?

In the list of groups there's one group defined (exclude_from_pihole) on the main pi-hole.

The group is nicely synchronized to the secondary pi-hole (pi-hole2). However when I disable that group on the main pi-hole, it does not get synchronized to the secondary pi-hole. The group stays enabled.

When I disable the group manually on the secondary pi-hole, it's automatically enabled again after synchronization (even though on the main pi-hole it's also disabled).

Version

orbital-sync:1 (18.15.0)

Log output

No response

Get password from setupVars.conf

What feature would you like added?

Getting the host password can be automated by looking at setupVars.conf.

This might be a good option if people wish to automate things further, by exposing setupVars.conf to the container and having it read the WEBPASSWORD value.

This would be low priority of course, as one can just give the same value to the PiHole container (WEBPASSWORD).

But just thought that it could be an option if one was open to it.

Version

No response

Log output

No response

Successfull sign in but failure at download backup

What happened?

Hi.

I experience having problem with syncing two PiHoles.
One runs as Virtual Machine on ESXi virtualized host (CentOS 9) -> this one is supposed to be the primary one where all changes are done. It is default CentOS installation with fresh pihole installation.
The standby one runs in docker container (pihole dockerfile).

Both pihole run on http port 80 (without certificates).

Orbital sync is also run from container. I run it as a stack with this docker compose file:

version: '3'

networks:
  macvlan1:
    external: true
    name: macvlan1
  common_network:
    external: true
    name: common_network

volumes:
  pihole_config:
    external: true
  pihole_dnsmasq:
    external: true


services:
  orbital-sync:
    container_name: orbital_sync
    image: mattwebbio/orbital-sync:1
    depends_on:
      - pihole
    links:
      - pihole
    environment:
      - PRIMARY_HOST_BASE_URL
      - PRIMARY_HOST_PASSWORD
      - SECONDARY_HOST_1_BASE_URL
      - SECONDARY_HOST_1_PASSWORD
      - INTERVAL_MINUTES
      - VERBOSE
      - TZ
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    volumes:
      - pihole_config:/etc/pihole
      - pihole_dnsmasq:/etc/dnsmasq.d
    networks:
      macvlan1:
        ipv4_address: ${SECONDARY_HOST_IPV4}
      common_network: {}
    environment:
      - TZ
      - WEBPASSWORD

I am able to manually log into the primary pihole from browser and download the file.

Whe I try to curl the the admin page I got 301 moved permanently -> this does not bother me so much, because I am able to interact with pihole via browser.

Meego@MEEGO-DESKTOP ~
$ curl -v netcontrol/admin
*   Trying 192.168.2.60:80...
* Connected to netcontrol (192.168.2.60) port 80 (#0)
> GET /admin HTTP/1.1
> Host: netcontrol
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: /admin/
< Content-Length: 0
< Date: Fri, 21 Apr 2023 23:48:52 GMT
< Server: lighttpd/1.4.67
<
* Connection #0 to host netcontrol left intact

I am confused with that Not Authorized response with response code 200 -> This might be problem on pihole side, because Not Authorized should return 401.

Thank you very much for your time and help.

Have a nice day.

Version

latest docker file

Log output

4/22/2023, 1:33:05 AM: Waiting 5 minutes...
4/22/2023, 1:38:05 AM: ➡️ Signing in to http://netcontrol.home.local/admin...
4/22/2023, 1:38:05 AM: ✔️ Successfully signed in to http://netcontrol.home.local/admin!
4/22/2023, 1:38:05 AM: ➡️ Downloading backup from http://netcontrol.home.local/admin...
4/22/2023, 1:38:05 AM: ⚠ Failure: Failed to download backup from "http://netcontrol.home.local/admin".
4/22/2023, 1:38:05 AM: {"host":"http://netcontrol.home.local","path":"/admin","status":200,"responseBody":"Not authorized"}

Local DNS records are synced when they shouldn't be

What happened?

I'm syncing two piholes (two docker containers), but do not want them to sync local DNS records, because of the different networks they operate in.

However, the SYNC_LOCALDNSRECORDS is being ignored. I've tried using
SYNC_LOCALDNSRECORDS: 'false' and SYNC_LOCALDNSRECORDS: 0, to no avail.

This is my config:

  orbital-sync-2:
    image: mattwebbio/orbital-sync:1
    container_name: pihole-sync-vpn
    environment:
      PRIMARY_HOST_BASE_URL: 'http://192.168.1.200'
      PRIMARY_HOST_PASSWORD: ''
      SECONDARY_HOST_1_BASE_URL: 'http://192.168.1.202'
      SECONDARY_HOST_1_PASSWORD: ''
      SYNC_LOCALDNSRECORDS: 'false' #different IPs
      UPDATE_GRAVITY: 'false'
      TZ: 'Europe/Amsterdam'
      INTERVAL_MINUTES: 1440

Version

latest

Log output

10-11-2022 10:59:55
11/10/2022, 10:59:55 AM: ➡️ Signing in to http://192.168.1.200/admin...
10-11-2022 10:59:55
11/10/2022, 10:59:55 AM: ✔️ Successfully signed in to http://192.168.1.200/admin!
10-11-2022 10:59:55
11/10/2022, 10:59:55 AM: ➡️ Downloading backup from http://192.168.1.200/admin...
10-11-2022 10:59:56
11/10/2022, 10:59:56 AM: ✔️ Backup from http://192.168.1.200/admin completed!
10-11-2022 10:59:56
11/10/2022, 10:59:56 AM: ➡️ Signing in to http://192.168.1.202/admin...
10-11-2022 10:59:56
11/10/2022, 10:59:56 AM: ✔️ Successfully signed in to http://192.168.1.202/admin!
10-11-2022 10:59:56
11/10/2022, 10:59:56 AM: ➡️ Uploading backup to http://192.168.1.202/admin...
10-11-2022 11:00:19
11/10/2022, 11:00:19 AM: ✔️ Backup uploaded to http://192.168.1.202/admin!
10-11-2022 11:00:19
11/10/2022, 11:00:19 AM: ✔️ Success: 1/1 hosts synced.
10-11-2022 11:00:19
11/10/2022, 11:00:19 AM: Waiting 1400 minutes...

Allow paths to pi-hole that don't contain /admin

What feature would you like added?

Hello,

My main pi-hole is reachable at something like https://mydomain.com/pihole. Because it's behind a reverse proxy, I ended up hiding the /admin part of the path.

I've built my own version now that has removed it, I can make a PR with a configuration option that allows more control over the URL if you think this would be a welcome addition.

Version

latest

Log output

No response

Ability to sync config to cloud for backup

What feature would you like added?

I would love for a way to backup my config from my primary pi to a cloud service such as Google Drive. Since the config files are already being downloaded, perhaps there is a variable to backup to cloud?

Version

No response

Log output

No response

Orbitalsync not synchronising two instances of Pi-Hole

What happened?

I have two instances of Pi-Hole.

  1. NUC (primary) - Pi-hole [v5.18.2] FTL [v5.25.1] Web Interface [v5.21]
  2. Truenas- docker (secondary) - Docker Tag [2024.03.2] Pi-hole [v5.18.2] FTL [v5.25.1]Web Interface [v5.21]

Oribital-sync is setup in Truenas as a docker.

I've got everything configured and I have confirmed each instance can ping each other.

however the sync operation fails @ "Error: Failed to upload backup to" on the secondary pi-hole. I thought it might have something to do with privileges but that doesn't seem to be the case.

Version

1.3.0

Log output

2024-04-28T08:51:52.287488903+10:00 4/28/2024, 8:51:52 AM: ⚠ Error: Failed to upload backup to "http://192.168.150.150".
2024-04-28T08:51:52.287550914+10:00 4/28/2024, 8:51:52 AM: {"host":"http://192.168.150.150","status":200,"responseBody":"Start importing...<br>\nProcessed adlist (1 entry)<br>\nProcessed adlist group assignments (1 entry)<br>\nProcessed blacklist (exact) (0 entries)<br>\nProcessed blacklist (regex) (0 entries)<br>\nProcessed client (1 entry)<br>\nProcessed client group assignments (1 entry)<br>\nProcessed local DNS records (1 entry)<br>\nProcessed local CNAME records (0 entries)<br>\nProcessed domain_audit (0 entries)<br>\nProcessed black-/whitelist group assignments (3 entries)<br>\nProcessed group (2 entries)<br>\nProcessed whitelist (exact) (3 entries)<br>\nProcessed whitelist (regex) (0 entries)<br>\nDone importing"}
2024-04-28T08:51:52.287629966+10:00 4/28/2024, 8:51:52 AM: ⚠ Failure: 0/1 hosts synced.
2024-04-28T08:51:52.287751263+10:00 4/28/2024, 8:51:52 AM: Waiting 10 minutes...

ERR_MODULE_NOT_FOUND. Sync.js not found

What happened?

I installed Orbital-Sync using node and when I try to run it I get an error that sync.js is not found.

Also, which file is the settings file? What should I name the config file, should I need to make one?

Version

1.5.2

Log output

node:internal/errors:496
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/usr/local/lib/node_modules/orbital-sync/dist/sync.js' imported from /usr/local/lib/node_modules/orbital-sync/dist/index.js
    at new NodeError (node:internal/errors:405:5)
    at finalizeResolution (node:internal/modules/esm/resolve:327:11)
    at moduleResolve (node:internal/modules/esm/resolve:980:10)
    at defaultResolve (node:internal/modules/esm/resolve:1193:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:403:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:372:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:39)
    at link (node:internal/modules/esm/module_job:75:36) {
  url: 'file:///usr/local/lib/node_modules/orbital-sync/dist/sync.js',
  code: 'ERR_MODULE_NOT_FOUND'
}

Node.js v18.19.0

new docker install 1.6 wont start

What happened?

hello
i started orbital sync for the first time today and it won't start.

config as follows

  orbital-sync:
    container_name: orbital-sync
    image: mattwebbio/orbital-sync:latest
    environment:
      PRIMARY_HOST_BASE_URL: http://ip:180
      PRIMARY_HOST_PASSWORD: xxxxxxx
      PRIMARY_HOST_PATH: /admin
      SECONDARY_HOSTS_BASE_URL_1: http://ip:180
      SECONDARY_HOSTS_PASSWORD_1: xxxxxxx
      SECONDARY_HOSTS_PATH_1: /admin
      INTERVAL_MINUTES: 1440
      VERBOSE: true

Version

1.6

Log output

file:///usr/src/app/dist/config/parse.js:67

                throw new MissingRequiredPropertiesError(path, missingRequired);

                      ^

MissingRequiredPropertiesError: Missing required properties for "secondaryHosts.1": baseUrl, password

    at parseSchema (file:///usr/src/app/dist/config/parse.js:67:23)

    at parseSchema (file:///usr/src/app/dist/config/parse.js:36:32)

    at file:///usr/src/app/dist/config/parse.js:60:17

    at Array.map (<anonymous>)

    at parseSchema (file:///usr/src/app/dist/config/parse.js:57:62)

    at Config (file:///usr/src/app/dist/config/index.js:5:12)

    at file:///usr/src/app/dist/index.js:7:16

    at ModuleJob.run (node:internal/modules/esm/module_job:195:25)

    at async ModuleLoader.import (node:internal/modules/esm/loader:336:24)

    at async loadESM (node:internal/process/esm_loader:34:7)

Node.js v18.19.1

Syncs are failing with the latest pihole update

What happened?

My pihole docker containers auto-upgraded to 2023.3.0 overnight and I noticed this morning that orbital syncs were failing to apply to other instances. It seems like the backup was fine, but the replication to other pihole instances was failing.

I reverted pihole to 2023.2.0 and it started working again.

Version

1.5.1-0

Log output

3/23/2023, 11:16:32 AM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 11:16:32 AM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 11:16:32 AM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 11:16:32 AM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 11:16:32 AM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 11:16:32 AM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 11:16:37 AM: ⚠ Error: Failed to upload backup to "http://192.168.1.112:90/admin".
3/23/2023, 11:16:40 AM: ⚠ Error: Failed to upload backup to "http://192.168.1.86:90/admin".
3/23/2023, 11:16:40 AM: ⚠ Failure: 0/2 hosts synced.
3/23/2023, 11:16:42 AM: Waiting 15 minutes...
3/23/2023, 11:31:42 AM: ➡️ Signing in to http://192.168.1.166/admin...
3/23/2023, 11:31:42 AM: ✔️ Successfully signed in to http://192.168.1.166/admin!
3/23/2023, 11:31:42 AM: ➡️ Downloading backup from http://192.168.1.166/admin...
3/23/2023, 11:31:42 AM: ✔️ Backup from http://192.168.1.166/admin completed!
3/23/2023, 11:31:42 AM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 11:31:42 AM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 11:31:42 AM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 11:31:42 AM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 11:31:42 AM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 11:31:42 AM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 11:31:47 AM: ⚠ Error: Failed to upload backup to "http://192.168.1.112:90/admin".
3/23/2023, 11:31:49 AM: ⚠ Error: Failed to upload backup to "http://192.168.1.86:90/admin".
3/23/2023, 11:31:49 AM: ⚠ Failure: 0/2 hosts synced.
3/23/2023, 11:31:50 AM: Waiting 15 minutes...
3/23/2023, 11:46:50 AM: ➡️ Signing in to http://192.168.1.166/admin...
3/23/2023, 11:46:50 AM: ✔️ Successfully signed in to http://192.168.1.166/admin!
3/23/2023, 11:46:50 AM: ➡️ Downloading backup from http://192.168.1.166/admin...
3/23/2023, 11:46:50 AM: ✔️ Backup from http://192.168.1.166/admin completed!
3/23/2023, 11:46:50 AM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 11:46:50 AM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 11:46:50 AM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 11:46:50 AM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 11:46:50 AM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 11:46:50 AM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 11:46:56 AM: ⚠ Error: Failed to upload backup to "http://192.168.1.112:90/admin".
3/23/2023, 11:46:57 AM: ⚠ Error: Failed to upload backup to "http://192.168.1.86:90/admin".
3/23/2023, 11:46:57 AM: ⚠ Failure: 0/2 hosts synced.
3/23/2023, 11:46:58 AM: Waiting 15 minutes...
3/23/2023, 12:01:58 PM: ➡️ Signing in to http://192.168.1.166/admin...
3/23/2023, 12:01:58 PM: ✔️ Successfully signed in to http://192.168.1.166/admin!
3/23/2023, 12:01:58 PM: ➡️ Downloading backup from http://192.168.1.166/admin...
3/23/2023, 12:01:58 PM: ✔️ Backup from http://192.168.1.166/admin completed!
3/23/2023, 12:01:58 PM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 12:01:58 PM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 12:01:58 PM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 12:01:58 PM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 12:01:58 PM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 12:01:58 PM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 12:02:04 PM: ⚠ Error: Failed to upload backup to "http://192.168.1.112:90/admin".
3/23/2023, 12:02:05 PM: ⚠ Error: Failed to upload backup to "http://192.168.1.86:90/admin".
3/23/2023, 12:02:05 PM: ⚠ Failure: 0/2 hosts synced.
3/23/2023, 12:02:06 PM: Waiting 15 minutes...
3/23/2023, 12:17:06 PM: ➡️ Signing in to http://192.168.1.166/admin...
3/23/2023, 12:17:06 PM: ✔️ Successfully signed in to http://192.168.1.166/admin!
3/23/2023, 12:17:06 PM: ➡️ Downloading backup from http://192.168.1.166/admin...
3/23/2023, 12:17:06 PM: ✔️ Backup from http://192.168.1.166/admin completed!
3/23/2023, 12:17:06 PM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 12:17:06 PM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 12:17:06 PM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 12:17:06 PM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 12:17:06 PM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 12:17:06 PM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 12:17:12 PM: ⚠ Error: Failed to upload backup to "http://192.168.1.112:90/admin".
3/23/2023, 12:17:13 PM: ⚠ Error: Failed to upload backup to "http://192.168.1.86:90/admin".
3/23/2023, 12:17:13 PM: ⚠ Failure: 0/2 hosts synced.
3/23/2023, 12:17:14 PM: Waiting 15 minutes...
3/23/2023, 12:32:15 PM: ➡️ Signing in to http://192.168.1.166/admin...
3/23/2023, 12:32:15 PM: ✔️ Successfully signed in to http://192.168.1.166/admin!
3/23/2023, 12:32:15 PM: ➡️ Downloading backup from http://192.168.1.166/admin...
3/23/2023, 12:32:15 PM: ✔️ Backup from http://192.168.1.166/admin completed!
3/23/2023, 12:32:15 PM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 12:32:15 PM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 12:32:15 PM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 12:32:15 PM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 12:32:15 PM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 12:32:15 PM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 12:32:20 PM: ✔️ Backup uploaded to http://192.168.1.112:90/admin!
3/23/2023, 12:32:20 PM: ➡️ Updating gravity on http://192.168.1.112:90/admin...
3/23/2023, 12:32:23 PM: ⚠ Error: Failed to upload backup to "http://192.168.1.86:90/admin".
3/23/2023, 12:32:27 PM: ✔️ Gravity updated on http://192.168.1.112:90/admin!
3/23/2023, 12:32:27 PM: ⚠ Failure: 1/2 hosts synced.
3/23/2023, 12:32:29 PM: Waiting 15 minutes...
3/23/2023, 12:47:29 PM: ➡️ Signing in to http://192.168.1.166/admin...
3/23/2023, 12:47:29 PM: ✔️ Successfully signed in to http://192.168.1.166/admin!
3/23/2023, 12:47:29 PM: ➡️ Downloading backup from http://192.168.1.166/admin...
3/23/2023, 12:47:30 PM: ✔️ Backup from http://192.168.1.166/admin completed!
3/23/2023, 12:47:30 PM: ➡️ Signing in to http://192.168.1.112:90/admin...
3/23/2023, 12:47:30 PM: ➡️ Signing in to http://192.168.1.86:90/admin...
3/23/2023, 12:47:30 PM: ✔️ Successfully signed in to http://192.168.1.112:90/admin!
3/23/2023, 12:47:30 PM: ➡️ Uploading backup to http://192.168.1.112:90/admin...
3/23/2023, 12:47:30 PM: ✔️ Successfully signed in to http://192.168.1.86:90/admin!
3/23/2023, 12:47:30 PM: ➡️ Uploading backup to http://192.168.1.86:90/admin...
3/23/2023, 12:47:35 PM: ✔️ Backup uploaded to http://192.168.1.112:90/admin!
3/23/2023, 12:47:35 PM: ➡️ Updating gravity on http://192.168.1.112:90/admin...
3/23/2023, 12:47:37 PM: ✔️ Backup uploaded to http://192.168.1.86:90/admin!
3/23/2023, 12:47:37 PM: ➡️ Updating gravity on http://192.168.1.86:90/admin...
3/23/2023, 12:47:42 PM: ✔️ Gravity updated on http://192.168.1.112:90/admin!
3/23/2023, 12:47:44 PM: ✔️ Gravity updated on http://192.168.1.86:90/admin!
3/23/2023, 12:47:44 PM: ✔️ Success: 2/2 hosts synced.
3/23/2023, 12:47:44 PM: Waiting 15 minutes...

[RFE] Notifications via apprise

What feature would you like added?

I would like to be able to send notifications using apprise. This is a great app, very flexible, that allows sending notifications via multiple channels.

Version

1.5.7

Log output

No response

Failure: No token could be found while logging in to "http://10.0.40.5/admin" - are you able to log in with the configured password?

What happened?

I have used the docker compose file from the examples - and I can confirm that the passwords work correctly when logging in through the browser. I get the same error every time I try to run - any ideas on what might be wrong?

version: '3'
services:
  orbital-sync:
    image: mattwebbio/orbital-sync:1
    environment:
      PRIMARY_HOST_BASE_URL: 'http://10.0.40.5'
      PRIMARY_HOST_PASSWORD: 'redacted'
      SECONDARY_HOST_1_BASE_URL: 'http://10.0.40.4'
      SECONDARY_HOST_1_PASSWORD: 'redacted'
      INTERVAL_MINUTES: 1440
      VERBOSE: true

Version

The latest

Log output

jake@rpi4  ~/orbital-sync  docker compose up
WARN[0000] The "f" variable is not set. Defaulting to a blank string.
WARN[0000] The "f" variable is not set. Defaulting to a blank string.
[+] Running 1/1
 ✔ Container orbital-sync-orbital-sync-1  Recreated                                                                                                                                                                                                                                                                    0.2s
Attaching to orbital-sync-orbital-sync-1
orbital-sync-orbital-sync-1  | 7/13/2023, 3:55:47 PM: ➡️ Signing in to http://10.0.40.5/admin...
orbital-sync-orbital-sync-1  | 7/13/2023, 3:55:48 PM: ⚠ Failure: No token could be found while logging in to "http://10.0.40.5/admin" - are you able to log in with the configured password?
orbital-sync-orbital-sync-1  | 7/13/2023, 3:55:48 PM: {"host":"http://10.0.40.5","path":"/admin","innerHtml":"<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \n    <meta http-equiv=\"x-dns-prefetch-control\" content=\"off\">\n    <meta http-equiv=\"cache-control\" content=\"max-age=60,private\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <title>Pi-hole - pihole</title>\n\n    <link rel=\"apple-touch-icon\" href=\"img/favicons/apple-touch-icon.png\" sizes=\"180x180\">\n    <link rel=\"icon\" href=\"img/favicons/favicon-32x32.png\" sizes=\"32x32\" type=\"image/png\">\n    <link rel=\"icon\" href=\"img/favicons/favicon-16x16.png\" sizes=\"16x16\" type=\"image/png\">\n    <link rel=\"manifest\" href=\"img/favicons/manifest.json\">\n    <link rel=\"mask-icon\" href=\"img/favicons/safari-pinned-tab.svg\" color=\"#272c30\">\n    <link rel=\"shortcut icon\" href=\"img/favicons/favicon.ico\">\n    <meta name=\"msapplication-TileColor\" content=\"#272c30\">\n    <meta name=\"msapplication-TileImage\" content=\"img/favicons/mstile-150x150.png\">\n\n    \n    <meta name=\"theme-color\" content=\"#272c30\">\n\n    <style>\n        html { background-color: #000; }\n    </style>\n\n    \n    <link rel=\"stylesheet\" href=\"style/vendor/SourceSansPro/SourceSansPro.css?v=1685460723\">\n\n    \n    <link rel=\"stylesheet\" href=\"style/vendor/bootstrap/css/bootstrap.min.css?v=1685460723\">\n    <link rel=\"stylesheet\" href=\"style/vendor/AdminLTE.min.css?v=1685460723\">\n    <link rel=\"stylesheet\" href=\"style/vendor/select2.min.css?v=1685460723\">\n\n\n    \n    <link rel=\"stylesheet\" href=\"style/pi-hole.css?v=1685460723\">\n    <link rel=\"stylesheet\" href=\"style/themes/default-dark.css?v=1685460723\">\n\n    <noscript><link rel=\"stylesheet\" href=\"style/vendor/js-warn.css?v=1685460723\"></noscript>\n\n    \n    <script src=\"scripts/vendor/jquery.min.js?v=1685460723\"></script>\n    <script src=\"style/vendor/bootstrap/js/bootstrap.min.js?v=1685460723\"></script>\n    <script src=\"scripts/vendor/adminlte.min.js?v=1685460723\"></script>\n    <script src=\"scripts/vendor/bootstrap-notify.min.js?v=1685460723\"></script>\n    <script src=\"style/vendor/font-awesome/js/all.min.js?v=1685460723\"></script>\n    <script src=\"scripts/pi-hole/js/utils.js?v=1685460723\"></script>\n</head>\n<body class=\"hold-transition layout-boxed login-page\">\n<div class=\"box login-box\">\n    <section style=\"padding: 15px;\">\n        <div class=\"login-logo\">\n            <div class=\"text-center\">\n                <img src=\"img/logo.svg\" alt=\"Pi-hole logo\" class=\"loginpage-logo\">\n            </div>\n            <div class=\"panel-title text-center\"><span class=\"logo-lg\" style=\"font-size: 25px;\">Pi-<b>hole</b></span></div>\n        </div>\n        \n\n        <div class=\"card\">\n            <div class=\"card-body login-card-body\">\n                <div id=\"cookieInfo\" class=\"panel-title text-center text-red\" style=\"font-size: 150%\" hidden>Verify that cookies are allowed for <code>10.0.40.5</code></div>\n                \n                <form action=\"\" id=\"loginform\" method=\"post\">\n                    <div class=\"form-group login-options has-feedback\">\n                        <div class=\"pwd-field\">\n                            \n                            <input type=\"text\" id=\"username\" value=\"pi.hole\" autocomplete=\"username\" hidden>\n                            <input type=\"password\" id=\"loginpw\" name=\"pw\" class=\"form-control\" placeholder=\"Password\" spellcheck=\"false\" autocomplete=\"current-password\" autofocus>\n                            <span class=\"fa fa-key form-control-feedback\"></span>\n                        </div>\n                        <div>\n                            <input type=\"checkbox\" id=\"logincookie\" name=\"persistentlogin\">\n                            <label for=\"logincookie\">Remember me for 7 days</label>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <button type=\"submit\" class=\"btn btn-primary form-control\"><i class=\"fas fa-sign-in-alt\"></i>&nbsp;&nbsp;&nbsp;Log in</button>\n                    </div>\n                </form>\n                <br>\n                <div class=\"row\">\n                    <div class=\"col-xs-12\">\n                        <div class=\"box box-info collapsed-box\">\n                            <div class=\"box-header with-border pointer no-user-select\" data-widget=\"collapse\">\n                                <h3 class=\"box-title\">Forgot password?</h3>\n                                <div class=\"box-tools pull-right\">\n                                    <button type=\"button\" class=\"btn btn-box-tool\">\n                                        <i class=\"fa fa-plus\"></i>\n                                    </button>\n                                </div>\n                            </div>\n                            <div class=\"box-body\">\n                                <p>After installing Pi-hole for the first time, a password is generated and displayed\n                                    to the user. The password cannot be retrieved later on, but it is possible to set\n                                    a new password (or explicitly disable the password by setting an empty password)\n                                    using the command\n                                </p>\n                                <pre>sudo pihole -a -p</pre>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"login-footer\" style=\"margin-top: 15px; display: flex; justify-content: space-between;\">\n                <a class=\"btn btn-default btn-sm\" role=\"button\" href=\"https://docs.pi-hole.net/\" target=\"_blank\"><i class=\"fas fa-question-circle\"></i> Documentation</a>\n                <a class=\"btn btn-default btn-sm\" role=\"button\" href=\"https://github.com/pi-hole/\" target=\"_blank\"><i class=\"fab fa-github\"></i> Github</a>\n                <a class=\"btn btn-default btn-sm\" role=\"button\" href=\"https://discourse.pi-hole.net/\" target=\"_blank\"><i class=\"fab fa-discourse\"></i> Pi-hole Discourse</a>\n            </div>\n        </div>\n    </section>\n</div>\n\n<div class=\"login-donate\">\n    <div class=\"text-center\" style=\"font-size:125%\">\n        <strong><a href=\"https://pi-hole.net/donate/\" rel=\"noopener\" target=\"_blank\"><i class=\"fa fa-heart text-red\"></i> Donate</a></strong> if you found this useful.\n    </div>\n</div>\n<script src=\"scripts/pi-hole/js/footer.js?v=1685460723\"></script>\n</body>\n</html>\n"}
orbital-sync-orbital-sync-1  | 7/13/2023, 3:55:48 PM: Waiting 1440 minutes...
^CGracefully stopping... (press Ctrl+C again to force)
Aborting on container exit...
[+] Stopping 1/1
 ✔ Container orbital-sync-orbital-sync-1  Stopped

Set TZ for correct show log time and format

What happened?

set TZ: "Europe/Moscow" in docker composer. Also LANG: "C.UTF-8", but log time is 4/11/2024, 8:51:04 AM: ➡️ Signing in to https://XXXX.XX
Can I get the date and time display according to the given environment variables?

Version

1.8.1

Log output

4/11/2024, 8:51:04 AM: ➡️ Signing in to XXX.
4/11/2024, 8:51:04 AM: ✔️ Successfully signed in to XXX
4/11/2024, 8:51:04 AM: ➡️ Downloading backup from XX

Unable to Connect to PI-Hole on same Docker Instance

What happened?

I am unable to connect to the PI Hole container on the same docker instance as orbital sync.
Pihole is set on the br0 so it has a static IP address but the orbital sync is unable to ping it.

I am sure it has something to do with the docker networks but I cant figure it out

Version

Latest

Log output

text  error  warn  system  array  login  

- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 12:54:18 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 12:59:21 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:04:24 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:09:27 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:14:31 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:19:34 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:24:37 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:29:40 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:34:43 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:39:46 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:44:50 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:49:53 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:54:56 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 1:59:59 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:05:02 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:10:05 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:15:09 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:20:12 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:25:15 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:30:18 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:35:21 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 2:40:24 PM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.1.5/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.1.5:80
5/15/2023, 12:49:15 PM: Waiting 5 minutes...
5/15/2023, 12:54:15 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 12:54:18 PM: Waiting 5 minutes...
5/15/2023, 12:59:18 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 12:59:21 PM: Waiting 5 minutes...
5/15/2023, 1:04:21 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:04:24 PM: Waiting 5 minutes...
5/15/2023, 1:09:24 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:09:27 PM: Waiting 5 minutes...
5/15/2023, 1:14:28 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:14:31 PM: Waiting 5 minutes...
5/15/2023, 1:19:31 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:19:34 PM: Waiting 5 minutes...
5/15/2023, 1:24:34 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:24:37 PM: Waiting 5 minutes...
5/15/2023, 1:29:37 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:29:40 PM: Waiting 5 minutes...
5/15/2023, 1:34:40 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:34:43 PM: Waiting 5 minutes...
5/15/2023, 1:39:43 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:39:46 PM: Waiting 5 minutes...
5/15/2023, 1:44:47 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:44:50 PM: Waiting 5 minutes...
5/15/2023, 1:49:50 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:49:53 PM: Waiting 5 minutes...
5/15/2023, 1:54:53 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:54:56 PM: Waiting 5 minutes...
5/15/2023, 1:59:56 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 1:59:59 PM: Waiting 5 minutes...
5/15/2023, 2:04:59 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:05:02 PM: Waiting 5 minutes...
5/15/2023, 2:10:02 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:10:05 PM: Waiting 5 minutes...
5/15/2023, 2:15:05 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:15:09 PM: Waiting 5 minutes...
5/15/2023, 2:20:09 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:20:12 PM: Waiting 5 minutes...
5/15/2023, 2:25:12 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:25:15 PM: Waiting 5 minutes...
5/15/2023, 2:30:15 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:30:18 PM: Waiting 5 minutes...
5/15/2023, 2:35:18 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:35:21 PM: Waiting 5 minutes...
5/15/2023, 2:40:21 PM: ➡️ Signing in to http://192.168.1.5/admin...
5/15/2023, 2:40:24 PM: Waiting 5 minutes...

Failing When SYNC_STATICDHCPLEASES: true

What happened?

I'd like to use orbital sync to keep static DHCP lease consistent. When I enable this with SYNC_STATICDHCPLEASES: true, the sync fails.

orbital-sync:
    image: mattwebbio/orbital-sync:latest
    container_name: orbital-sync
    environment:
      SYNC_STATICDHCPLEASES: true
      TZ: "America/New_York"
      PRIMARY_HOST_BASE_URL: 'http://192.168.86.101:8080'
      PRIMARY_HOST_PASSWORD: 'removed'
      SECONDARY_HOST_1_BASE_URL: 'http://192.168.86.102:8080'
      SECONDARY_HOST_1_PASSWORD: 'removed'

Version

latest docker container

Log output

1/22/2023, 3:43:05 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 3:43:05 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 3:43:05 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 3:43:13 AM: Waiting 30 minutes...
1/22/2023, 3:43:13 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 3:43:13 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 4:13:13 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 4:13:13 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 4:13:13 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 4:13:13 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 4:13:13 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 4:13:13 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 4:13:13 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 4:13:21 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 4:13:21 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 4:13:21 AM: Waiting 30 minutes...
1/22/2023, 4:43:21 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 4:43:21 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 4:43:21 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 4:43:21 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 4:43:21 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 4:43:21 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 4:43:21 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 4:43:27 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 4:43:27 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 4:43:27 AM: Waiting 30 minutes...
1/22/2023, 5:13:27 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 5:13:27 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 5:13:27 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 5:13:27 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 5:13:27 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 5:13:27 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 5:13:27 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 5:13:35 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 5:13:35 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 5:13:35 AM: Waiting 30 minutes...
1/22/2023, 5:43:35 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 5:43:35 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 5:43:35 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 5:43:35 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 5:43:35 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 5:43:35 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 5:43:35 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 5:43:41 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 5:43:41 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 5:43:41 AM: Waiting 30 minutes...
1/22/2023, 6:13:41 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 6:13:41 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 6:13:41 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 6:13:41 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 6:13:41 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 6:13:41 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 6:13:41 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 6:13:47 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 6:13:47 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 6:13:47 AM: Waiting 30 minutes...
1/22/2023, 6:43:47 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 6:43:47 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 6:43:47 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 6:43:47 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 6:43:47 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 6:43:47 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 6:43:47 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 6:43:53 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 6:43:53 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 6:43:53 AM: Waiting 30 minutes...
1/22/2023, 7:13:53 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 7:13:53 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 7:13:53 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 7:13:53 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 7:13:53 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 7:13:53 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 7:13:53 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 7:14:01 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 7:14:01 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 7:14:01 AM: Waiting 30 minutes...
1/22/2023, 7:44:01 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 7:44:01 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 7:44:01 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 7:44:01 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 7:44:01 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 7:44:01 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 7:44:01 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 7:44:09 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 7:44:09 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 7:44:09 AM: Waiting 30 minutes...
1/22/2023, 8:14:09 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 8:14:09 AM: ✔️ Successfully signed in to http://192.168.86.101:8080/admin!
1/22/2023, 8:14:09 AM: ➡️ Downloading backup from http://192.168.86.101:8080/admin...
1/22/2023, 8:14:09 AM: ✔️ Backup from http://192.168.86.101:8080/admin completed!
1/22/2023, 8:14:09 AM: ➡️ Signing in to http://192.168.86.102:8080/admin...
1/22/2023, 8:14:09 AM: ✔️ Successfully signed in to http://192.168.86.102:8080/admin!
1/22/2023, 8:14:09 AM: ➡️ Uploading backup to http://192.168.86.102:8080/admin...
1/22/2023, 8:14:15 AM: ⚠ Error: Failed to upload backup to "http://192.168.86.102:8080/admin".
1/22/2023, 8:14:15 AM: ⚠ Failure: 0/1 hosts synced.
1/22/2023, 8:14:15 AM: Waiting 30 minutes...
1/22/2023, 8:44:15 AM: ➡️ Signing in to http://192.168.86.101:8080/admin...
1/22/2023, 8:44:18 AM: ⚠ Failure: An unexpected error was thrown:
- FetchError: request to http://192.168.86.101:8080/admin/index.php?login failed, reason: connect EHOSTUNREACH 192.168.86.101:8080
1/22/2023, 8:44:18 AM: Waiting 30 minutes...

Run gravity update on the primary

What feature would you like added?

With the upcoming feature completion on issue #28 I noticed that while the targets received and successfully processed a gravity update, the primary did not. Would it be possible to run a gravity update on the primary as either a pre sync step or post sync completion?

Version

1.2.2-beta.0

Log output

No response

Initial delay variable

What feature would you like added?

Currently, if OS and Pihole start at the same time, due to the delay difference in waiting for Pihole to come up, a failure occurs:

Failure: The host "http://<ip>/admin" refused to connect. Is it down?

Requesting that a variable for delay in seconds be implemented so that on container start, OS will wait x period before doing the first operations.

Support passwordless pihole installations

What feature would you like added?

Would you consider supporting pihole installations that have no password set?

My pihole is running inside a docker container and outside access to its web UI is handled via a Traefik proxy which also handles authorization (i.e. there is no unauthorized access). To avoid unnecessary "double-authentication" I disabled the password in pihole itself.

This would also mean that orbital-sync running inside docker could directly access the web UI without a password (bypassing Traefik).

The secondary pihole(s) would then be running on another host, and would be using passwords (arbitrarily complex ones, since a real user would never need to enter them).

In theory one could also run the secondary ones passwordless and just never expose their web UI to a (non-docker-internal) network at all, in that case the primary one should be password protected. That's not my usecase, but that could also be enabled via this feature.

Unfortunately I didn't find a way to configure this and a quick peek at the code suggests that it's not intended (I did a few minor experiments to see if I could hack this together myself, but didn't get anywhere).

Version

No response

Log output

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.