Skip to content

Commit

Permalink
Merge pull request #1187 from Saharel001/master
Browse files Browse the repository at this point in the history
Update samba Modul
  • Loading branch information
benderl authored Nov 7, 2023
2 parents 5a3a5a5 + 43f4b62 commit 9460d97
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 6 deletions.
1 change: 1 addition & 0 deletions docs/Cloud-Sicherung.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ _Einstellungen -> System -> System -> Sicherung/Wiederherstellung_
In den Sicherungseinstellungen kann ein Cloud-Dienst für automatische Sicherungen hinterlegt werden. Die Konfiguration des Cloud-Dienstes wird in diesem Wiki-Beitrag beschrieben. Folgende Anbieter werden unterstützt:

* [NextCloud](https://github.com/openWB/core/wiki/NextCloud-als-Sicherungs-Cloud-einrichten)
* [Samba](https://github.com/openWB/core/wiki/Samba-als-Sicherung-einrichten)
17 changes: 17 additions & 0 deletions docs/Samba als Sicherung einrichten.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Zunächst einen neuen Ordner erstellen/auswählen, in den die Sicherungen hochgeladen werden sollen.

Nachfolgende Schritte müssen auf dem Bereitstellenden system geamcht werden
1. SMB Freigabe erstellen (Auf NAS etc.)
2. User einrichten und berechtigen - R/W

Nachfolgende Schritte müssen in openwb gemachte werden.
1. IP Adresse oder Name (Am besten FQDN) im Feld Server hinterlegen
* IP: z.B 192.168.178.1
* Name z.B. mein-server
* FQDN z.B mein-server.fritz.box
2. Share angeben in dem das Backup gespeicher werden soll
3. Optional können ein bis n Unterordner angegeben werden. Diese müssen immer mit / getrennt werden und auch am Ende muss ein / stehen
* Beispiel: test/ oder aber test1/test2/test/
4. Benutzer und Passwort in die jeweilegen Felder eintragen

![Samba nutzen](Samba.png)
Binary file added docs/Samba.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/_Sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
* Konfiguration
* [Cloud-Sicherung](https://github.com/openWB/core/wiki/Cloud-Sicherung)
* [NextCloud](https://github.com/openWB/core/wiki/NextCloud-als-Sicherungs-Cloud-einrichten)
* [Samba](https://github.com/openWB/core/wiki/Samba-als-Sicherung-einrichten)
* [Hierarchie mit Hausverbrauchs-Zähler](https://github.com/openWB/core/wiki/Hausverbrauchs-Zähler)
47 changes: 41 additions & 6 deletions packages/modules/backup_clouds/samba/backup_cloud.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#!/usr/bin/env python3
import logging
import os
import io
import re
import socket
from smb.SMBConnection import SMBConnection

from modules.backup_clouds.samba.config import SambaBackupCloud, SambaBackupCloudConfiguration
Expand All @@ -9,14 +13,45 @@
log = logging.getLogger(__name__)


def upload_backup(config: SambaBackupCloudConfiguration, backup_filename: str, backup_file: bytes) -> None:
conn = SMBConnection(config.smb_user, config.smb_password, 'client', 'server', use_ntlm_v2=True)
conn.connect(config.smb_path, 445)
def is_port_open(host: str, port: int):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(3)
try:
s.connect(host, port)
s.shutdown(socket.SHUT_RDWR)
return True
except Exception:
return False
finally:
s.close()

with conn.openFile(backup_filename, 'w') as file:
file.write(backup_file)

conn.close()
def upload_backup(config: SambaBackupCloudConfiguration, backup_filename: str, backup_file: bytes) -> None:
conn = SMBConnection(config.smb_user, config.smb_password, os.uname()[1], config.smb_server, use_ntlm_v2=True)
found_invalid_chars = re.search(r'[\\\:\*\?\"\<\>\|]+', config.smb_path)
host_is_reachable = is_port_open(config.smb_server, 139)

if found_invalid_chars:
log.warn("Folgenden ungültige Zeichen im Pfad gefunden: {}".format(found_invalid_chars.group()))
log.warn("Sicherung nicht erfolgreich.")
send_file = False
else:
send_file = True

if host_is_reachable and conn.connect(config.smb_server, 139) and send_file:
log.info("SMB Verbindungsaufbau erfolgreich.")
full_file_path = config.smb_path + backup_filename if config.smb_path is not None else backup_filename
log.info("Backup nach //" + config.smb_server + '/' + config.smb_share + '/' + full_file_path)
try:
conn.storeFile(config.smb_share, full_file_path, io.BytesIO(backup_file))
except Exception as error:
log.error(error.__str__().split('\n')[0])
log.error("Möglicherweise ist die Freigabe oder ein Unterordner nicht vorhanden.")
conn.close()
elif send_file:
log.warn("SMB Verbindungsaufbau fehlgeschlagen.")
elif not host_is_reachable:
log.warn("Host {} und/oder Port 139 nicht zu erreichen.".format(config.smb_server))


def create_backup_cloud(config: SambaBackupCloud):
Expand Down
4 changes: 4 additions & 0 deletions packages/modules/backup_clouds/samba/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@

class SambaBackupCloudConfiguration:
def __init__(self, smb_path: Optional[str] = None,
smb_server: Optional[str] = None,
smb_share: Optional[str] = None,
smb_user: Optional[str] = None,
smb_password: Optional[str] = None):
self.smb_path = smb_path
self.smb_server = smb_server
self.smb_share = smb_share
self.smb_user = smb_user
self.smb_password = smb_password

Expand Down

0 comments on commit 9460d97

Please sign in to comment.