Python GUI tool to generate NAS sync bash scripts
Project description
nas-sync-script-builder
Python GUI tool to generate a bash script for one-way, no-deletion NAS sync using rsync and lsyncd.
The script is idempotent and safe to re-run.
The script sets up a one way sync with no deletions, not a mirror.
Features:
- Automatic detection of eligible local partitions via UDisks2 (D-Bus)
- One-way sync only (local → NAS)
- No deletions on destination
- Initial sync using rsync --update
- Real-time sync via lsyncd
- Safe mount handling with systemd automounts
- Persistent credentials handling
- Configurable exclude patterns
Requirements
System (Linux)
- systemd
- udisks2
- CIFS/SMB-compatible NAS (e.g. Synology)
The generated script installs these automatically:
- lsyncd
- cifs-utils
Running the GUI
Install:
pip install nas-sync-script-builder
Run:
nas-sync-script-builder
This opens the GUI where you can:
- Review detected partitions
- Edit filesystem types if needed
- Configure NAS connection details
- Customize exclude patterns
- Adjust local → NAS directory mappings
Click Generate to:
- Save settings to
nas_sync_config.yaml - Generate the bash script
nas-sync.sh
Running the CLI
You can also use it without the GUI:
nas-sync-script-builder --cli --config path/to/config.yaml --output path/to/nas-sync.sh
--cli runs in headless mode
Optional:
--config specify the yaml config file (default: nas_sync_config.yaml)
--output specify the output bash file (default: nas-sync.sh)
If the config file exists, the bash script is generated.
If the config file doesn't exist, a default config file is generated.
Running the Generated Script
sudo ./nas-sync.sh
The script will:
- Install required system packages
- Prompt once for the NAS password and create
/etc/samba/credentials - Create mount points for local disks and NAS shares
- Configure mounts in
/etc/fstab - Perform an initial sync
- Configure lsyncd in
/etc/lsyncd/lsyncd.conf.lua - Configure lsyncd systemd dependencies in
/etc/systemd/system/lsyncd.service.d/override.conf - Configure lsyncd log rotation in
/etc/logrotate.d/lsyncd - Increase inotify max_user_watches in
/etc/sysctl.d/99-inotify.conf - Enable and start lsyncd
Development
Use a virtual environment:
python3 -m venv venv
source venv/bin/activate
Install Python dependencies:
pip install PySide6 Jinja2 PyYAML pydbus
System Dependencies for D-Bus (pydbus / PyGObject):
Required by PyGObject:
sudo apt install libgirepository-2.0-dev libcairo2-dev pkg-config
Required by pydbus:
pip install PyGObject
Editable install:
pip install -e .
Install the build tools:
pip install build twine
Create the distribution files:
python -m build
Check the distribution files:
twine check dist/*
Upload to TestPyPI:
twine upload --repository testpypi dist/*
https://test.pypi.org/project/nas-sync-script-builder/
Install from TestPyPI:
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ nas-sync-script-builder
Upload to PyPI:
twine upload dist/*
https://pypi.org/project/nas-sync-script-builder/
Install from PyPI:
pip install nas-sync-script-builder
Check version:
pip show nas-sync-script-builder
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nas_sync_script_builder-0.2.0.tar.gz.
File metadata
- Download URL: nas_sync_script_builder-0.2.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8de158fd6b257570ea5d38890ce3ad0874763c2c233bc6b81a4351523e38e7f2
|
|
| MD5 |
a50ea0f4a04ce1f9f3fc3483c55038e4
|
|
| BLAKE2b-256 |
416fd5bfa235a93841ca2a0f660a31923c4cd30b21dd94e613b2f7139545d1e7
|
File details
Details for the file nas_sync_script_builder-0.2.0-py3-none-any.whl.
File metadata
- Download URL: nas_sync_script_builder-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f80680374fc7063489d45e884f5928603a841a399a35c49f141ee724118f7675
|
|
| MD5 |
ff8f29dae488feef8cb1c496d51381ce
|
|
| BLAKE2b-256 |
0face63bd72212cc8c7a4903618c59a10db94d0552afc739bcfc23a57e85456c
|