A modern Python implementation of the tool for mirroring the Sisyphus repository.
Project description
English | Русский
A modern Python implementation of the tool for mirroring the Sisyphus repository.
The project is inspired by the original utility sisyphus-mirror.
Technical Requirements
GNU/Linux OS
Python 3.12+
RSync 3.2+
110+ GB of free disk space
Installation
# Create dedicated user and directories:
useradd -rMU -d /opt/sisyphus-mirror -s /usr/sbin/nologin sisyphus-mirror
mkdir -p /etc/sisyphus-mirror /opt/sisyphus-mirror /srv/mirrors/altlinux
chown sisyphus-mirror:sisyphus-mirror /opt/sisyphus-mirror
chown sisyphus-mirror:sisyphus-mirror /srv/mirrors/altlinux
# Create Python virtual environment and install the package:
sudo -u sisyphus-mirror python3 -m venv /opt/sisyphus-mirror/venv
sudo -u sisyphus-mirror /opt/sisyphus-mirror/venv/bin/pip install sisyphus-mirror
# Add command
ln -s /opt/sisyphus-mirror/venv/bin/sisyphus-mirror /usr/local/sbin/sisyphus-mirror
# Create TOML configuration file:
echo '[sisyphus-mirror]
dry_run = false
verbose = false
debug = false
# Explicitly defined repository branches.
branch_list = ["p11"]
# Repository source URL.
source_url = "rsync://ftp.altlinux.org/ALTLinux"
# Working directory for snapshots and temporary synchronization data.
working_dir = "/srv/mirrors/altlinux"
# Target CPU architectures.
arch_list = ["noarch", "x86_64", "x86_64-i586"]
# Additional paths for finding and creating hard links to unchanged files.
linkdest_list = []
# Additional file include patterns.
include_files = ["list/**", ".timestamp"]
# Additional file exclude patterns.
exclude_files = ["*debuginfo*", "SRPMS"]
# Maximum number of snapshots per branch.
snapshot_limit = 1
# Limiting network I/O bandwidth.
rate_limit = "5m"
# Connection timeout (seconds).
conn_timeout = 60
# I/O timeout (seconds).
io_timeout = 600' > /etc/sisyphus-mirror/default.toml
Modify configuration if needed:
nano /etc/sisyphus-mirror/default.toml
Test Run
Dry-run synchronization with detailed output:
sudo -u sisyphus-mirror sisyphus-mirror --dry-run --verbose
Ensure that the reported total size fits the available disk space.
Production Run
Actual synchronization:
sudo -u sisyphus-mirror sisyphus-mirror
Systemd Integration
# systemd service unit:
echo '[Unit]
Description=sisyphus-mirror service
Wants=sisyphus-mirror.timer
[Service]
Type=oneshot
User=sisyphus-mirror
Group=sisyphus-mirror
ExecStart=sisyphus-mirror
ProtectHome=true
ProtectSystem=true
SyslogIdentifier=sisyphus-mirror
[Install]
WantedBy=multi-user.target' > /etc/systemd/system/sisyphus-mirror.service
# Daily timer:
echo '[Unit]
Description=Periodic run of sisyphus-mirror
[Timer]
# Run at a random time between 00:15 and 07:45 local server time
OnCalendar=*-*-* 00:15:00
RandomizedDelaySec=7h 30min
Persistent=true
Unit=sisyphus-mirror.service
[Install]
WantedBy=timers.target' > /etc/systemd/system/sisyphus-mirror.timer
# Reloading systemd configuration and activating the timer:
systemctl daemon-reload
systemctl enable --now sisyphus-mirror.timer
Serving via rsyncd
Example for a previously unconfigured rsync installation:
echo 'port = 873
uid = 65534
gid = 65534
# Using chroot is required
use chroot = yes
max connections = 30
[altlinux]
path = /srv/mirrors/altlinux
read only = yes
list = yes' > /etc/rsyncd.conf
systemctl enable rsync
systemctl restart rsync
Serving via Nginx
Example for a previously unconfigured Nginx installation:
echo 'server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /altlinux/ {
alias /srv/mirrors/altlinux/;
index off;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
try_files $uri $uri/ =404;
}
}' > /etc/nginx/sites-available/altlinux
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/altlinux /etc/nginx/sites-enabled/altlinux
systemctl enable nginx
systemctl restart nginx
Project details
Release history Release notifications | RSS feed
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 sisyphus_mirror-1.2.0.tar.gz.
File metadata
- Download URL: sisyphus_mirror-1.2.0.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d9a85d0733f6b5e34ff7bfc69244f44ff8bb390a285bf2576e8fee9e2e9e43e
|
|
| MD5 |
5a5bb24052d9d6bcb82885ad7b9cc257
|
|
| BLAKE2b-256 |
2c2d0dc1d4996350073adc3e8c55695f686d14e7b980558d92f6a1c4ad8b6c68
|
File details
Details for the file sisyphus_mirror-1.2.0-py3-none-any.whl.
File metadata
- Download URL: sisyphus_mirror-1.2.0-py3-none-any.whl
- Upload date:
- Size: 13.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2920892578af4a967923adaf2cc26fdb7e2fb2a3ad2787c5b456c02d1e758d65
|
|
| MD5 |
66b6d47aba095ca0583407d477bcc422
|
|
| BLAKE2b-256 |
11296be98b5a08c76a08c3d99b4b871e5f3a6017391fd3c984afeaa4d4b17db0
|