visync 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of visync might be problematic. Click here for more details.
- visync/__init__.py +3 -0
- visync/config.toml +259 -0
- visync/download.py +1505 -0
- visync/finder.py +699 -0
- visync/main.py +1172 -0
- visync/net.py +84 -0
- visync/output.py +126 -0
- visync/pm.py +133 -0
- visync/verify.py +703 -0
- visync-1.0.0.dist-info/METADATA +204 -0
- visync-1.0.0.dist-info/RECORD +14 -0
- visync-1.0.0.dist-info/WHEEL +4 -0
- visync-1.0.0.dist-info/entry_points.txt +2 -0
- visync-1.0.0.dist-info/licenses/LICENSE +21 -0
visync/__init__.py
ADDED
visync/config.toml
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
#!/visync/config.toml
|
|
2
|
+
[iso]
|
|
3
|
+
download_dir = ""
|
|
4
|
+
# ^ We don't download straight to the ventoy drive as its faster to verify and acts as a buffer. --no-buffer flag can override this, but verify will still happen, just on the drive.
|
|
5
|
+
|
|
6
|
+
[checksums]
|
|
7
|
+
enabled = true
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
###################################
|
|
12
|
+
####### DISTRO RECOGNITION ########
|
|
13
|
+
###################################
|
|
14
|
+
[base_distros]
|
|
15
|
+
# Strict internal volume ID matches
|
|
16
|
+
arch = "Arch Linux"
|
|
17
|
+
fedora = "Fedora"
|
|
18
|
+
ubuntu = "Ubuntu"
|
|
19
|
+
debian = "Debian"
|
|
20
|
+
|
|
21
|
+
[fork_overrides]
|
|
22
|
+
# Key format: "parent_distro.keyword_in_filename" = "Clean Name"
|
|
23
|
+
"arch.manjaro" = "Manjaro"
|
|
24
|
+
"ubuntu.pop-os" = "Pop!_OS"
|
|
25
|
+
"ubuntu.pop_os" = "Pop!_OS"
|
|
26
|
+
"ubuntu.mint" = "Linux Mint"
|
|
27
|
+
"debian.kali" = "Kali Linux"
|
|
28
|
+
"debian.parrot" = "Parrot Security"
|
|
29
|
+
# Fedora's aarch64 images carry "Fedora" in the volume ID, so without this they
|
|
30
|
+
# are indistinguishable from x86_64 and install/remove cannot target one.
|
|
31
|
+
"fedora.aarch64" = "Fedora ARM"
|
|
32
|
+
|
|
33
|
+
[standalone_matches]
|
|
34
|
+
# Text matching targets for standalone distros, flavors, and tools
|
|
35
|
+
gparted = "GParted Live"
|
|
36
|
+
hbcd = "Hiren's BootCD"
|
|
37
|
+
hiren = "Hiren's BootCD"
|
|
38
|
+
kodachi = "Linux Kodachi"
|
|
39
|
+
nixos-minimal = "NixOS Minimal"
|
|
40
|
+
nixos-graphical = "NixOS Graphical"
|
|
41
|
+
nixos = "NixOS Minimal"
|
|
42
|
+
parrot = "Parrot Security"
|
|
43
|
+
pond = "Pond"
|
|
44
|
+
pop = "Pop!_OS"
|
|
45
|
+
systemrescue = "SystemRescue"
|
|
46
|
+
rescuezilla = "Rescuezilla"
|
|
47
|
+
tails = "Tails"
|
|
48
|
+
tiny11 = "Tiny11"
|
|
49
|
+
|
|
50
|
+
# Specific desktop flavor/version overrides so regex doesn't grab them poorly.
|
|
51
|
+
# These must mirror the [distros.*] clean_name exactly: install/remove match an
|
|
52
|
+
# identified distro against clean_name, so a missing entry here makes a
|
|
53
|
+
# configured distro impossible to remove (test_verify_consistency_enforces this).
|
|
54
|
+
fedora-kde = "Fedora KDE"
|
|
55
|
+
fedora-arm = "Fedora ARM"
|
|
56
|
+
ubuntu-desktop = "Ubuntu Desktop"
|
|
57
|
+
ubuntu-server = "Ubuntu Server"
|
|
58
|
+
|
|
59
|
+
###################################
|
|
60
|
+
######## DYNAMIC SCRAPERS #########
|
|
61
|
+
###################################
|
|
62
|
+
#
|
|
63
|
+
[distros.Fedora]
|
|
64
|
+
clean_name = "Fedora"
|
|
65
|
+
keyword = "fedora"
|
|
66
|
+
strategy = "fedora_nested"
|
|
67
|
+
# dl.fedoraproject.org serves an Anubis bot challenge to scrapers; kernel.org
|
|
68
|
+
# mirrors the same tree bot-free. Integrity is pinned via signing_key_fingerprint.
|
|
69
|
+
base_url = "https://mirrors.kernel.org/fedora/releases/"
|
|
70
|
+
version_regex = 'href="([0-9]+)\s*/"'
|
|
71
|
+
iso_regex = 'href="(Fedora-Workstation-Live-(?:x86_64-[0-9][0-9.\-]*\.iso|[0-9][0-9.\-]*\.x86_64\.iso))"'
|
|
72
|
+
checksum_url = "{base_url}{version}/{variant_dir}/{arch}/iso/{checksum_stem}-CHECKSUM"
|
|
73
|
+
checksum_format = "gpg_checksum"
|
|
74
|
+
signing_key_url = "https://fedoraproject.org/fedora.gpg"
|
|
75
|
+
# Release-signing keys from https://fedoraproject.org/fedora.gpg (refresh when
|
|
76
|
+
# Fedora publishes new keys). Matches VALIDSIG fingerprints via --status-fd.
|
|
77
|
+
signing_key_fingerprint = [
|
|
78
|
+
"C6E7F081CF80E13146676E88829B606631645531",
|
|
79
|
+
"36F612DCF27F7D1A48A835E4DBFCF71C6D9F90A6",
|
|
80
|
+
"4F50A6114CD5C6976A7F1179655A4B02F577861E",
|
|
81
|
+
"D924B10D3E810DABDD8B56B596E7E91491211FCE",
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
[distros.ArchLinux]
|
|
85
|
+
clean_name = "Arch Linux"
|
|
86
|
+
keyword = "archlinux"
|
|
87
|
+
strategy = "direct_match"
|
|
88
|
+
base_url = "https://geo.mirror.pkgbuild.com/iso/latest/"
|
|
89
|
+
iso_regex = 'href="(archlinux-[0-9\.]+-x86_64\.iso)"'
|
|
90
|
+
checksum_url = "{base_url}sha256sums.txt"
|
|
91
|
+
checksum_format = "sha256sums"
|
|
92
|
+
checksum_algo = "sha256"
|
|
93
|
+
|
|
94
|
+
[distros.UbuntuServer]
|
|
95
|
+
clean_name = "Ubuntu Server"
|
|
96
|
+
keyword = "live-server"
|
|
97
|
+
strategy = "ubuntu_nested"
|
|
98
|
+
base_url = "https://releases.ubuntu.com/"
|
|
99
|
+
version_regex = 'href="([0-9\.]+)/"'
|
|
100
|
+
# Current Ubuntu LTS only — see UbuntuDesktop for the rationale.
|
|
101
|
+
version_filter = '\d*[02468]\.04(\.\d+)*'
|
|
102
|
+
iso_regex = 'href="(ubuntu-[0-9\.-]+live-server-amd64\.iso)"'
|
|
103
|
+
checksum_url = "{base_url}{version}/SHA256SUMS"
|
|
104
|
+
checksum_format = "sha256sums"
|
|
105
|
+
checksum_algo = "sha256"
|
|
106
|
+
|
|
107
|
+
################
|
|
108
|
+
##### ARM ######
|
|
109
|
+
################
|
|
110
|
+
|
|
111
|
+
[distros.FedoraARM]
|
|
112
|
+
clean_name = "Fedora ARM"
|
|
113
|
+
keyword = "fedora-arm"
|
|
114
|
+
strategy = "fedora_nested"
|
|
115
|
+
# dl.fedoraproject.org serves an Anubis bot challenge to scrapers; kernel.org
|
|
116
|
+
# mirrors the same tree bot-free. Integrity is pinned via signing_key_fingerprint.
|
|
117
|
+
base_url = "https://mirrors.kernel.org/fedora/releases/"
|
|
118
|
+
variant_path = "Workstation/aarch64/iso"
|
|
119
|
+
version_regex = 'href="([0-9]+\s*/)"'
|
|
120
|
+
# Fedora ships Workstation aarch64 lives under the standard variant subtree
|
|
121
|
+
iso_regex = 'href="(Fedora-Workstation-Live-(?:aarch64-[0-9][0-9.\-]*\.iso|[0-9][0-9.\-]*\.aarch64\.iso))"'
|
|
122
|
+
checksum_url = "{base_url}{version}/{variant_dir}/{arch}/iso/{checksum_stem}-CHECKSUM"
|
|
123
|
+
checksum_format = "gpg_checksum"
|
|
124
|
+
signing_key_url = "https://fedoraproject.org/fedora.gpg"
|
|
125
|
+
signing_key_fingerprint = [
|
|
126
|
+
"C6E7F081CF80E13146676E88829B606631645531",
|
|
127
|
+
"36F612DCF27F7D1A48A835E4DBFCF71C6D9F90A6",
|
|
128
|
+
"4F50A6114CD5C6976A7F1179655A4B02F577861E",
|
|
129
|
+
"D924B10D3E810DABDD8B56B596E7E91491211FCE",
|
|
130
|
+
]
|
|
131
|
+
|
|
132
|
+
# NOTE: Arch Linux ARM was removed. os.archlinuxarm.org serves a TLS
|
|
133
|
+
# certificate that does not match its hostname (scraping fails closed), and
|
|
134
|
+
# its artifacts are per-device .tar.gz rootfs archives — not .iso/.img files
|
|
135
|
+
# Ventoy can boot or visync can track. Re-add here if upstream publishes a
|
|
136
|
+
# bootable image over a valid certificate.
|
|
137
|
+
|
|
138
|
+
#############################
|
|
139
|
+
###### ADDITIONAL DT #######
|
|
140
|
+
#############################
|
|
141
|
+
|
|
142
|
+
[distros.FedoraKDE]
|
|
143
|
+
clean_name = "Fedora KDE"
|
|
144
|
+
keyword = "fedora-kde"
|
|
145
|
+
strategy = "fedora_nested"
|
|
146
|
+
variant_path = "KDE/x86_64/iso"
|
|
147
|
+
# dl.fedoraproject.org serves an Anubis bot challenge to scrapers; kernel.org
|
|
148
|
+
# mirrors the same tree bot-free. Integrity is pinned via signing_key_fingerprint.
|
|
149
|
+
base_url = "https://mirrors.kernel.org/fedora/releases/"
|
|
150
|
+
version_regex = 'href="([0-9]+\s*/)"'
|
|
151
|
+
iso_regex = 'href="(Fedora-KDE-Desktop-Live-(?:x86_64-[0-9][0-9.\-]*\.iso|[0-9][0-9.\-]*\.x86_64\.iso))"'
|
|
152
|
+
checksum_url = "{base_url}{version}/{variant_dir}/{arch}/iso/{checksum_stem}-CHECKSUM"
|
|
153
|
+
checksum_format = "gpg_checksum"
|
|
154
|
+
signing_key_url = "https://fedoraproject.org/fedora.gpg"
|
|
155
|
+
signing_key_fingerprint = [
|
|
156
|
+
"C6E7F081CF80E13146676E88829B606631645531",
|
|
157
|
+
"36F612DCF27F7D1A48A835E4DBFCF71C6D9F90A6",
|
|
158
|
+
"4F50A6114CD5C6976A7F1179655A4B02F577861E",
|
|
159
|
+
"D924B10D3E810DABDD8B56B596E7E91491211FCE",
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
[distros.UbuntuDesktop]
|
|
163
|
+
clean_name = "Ubuntu Desktop"
|
|
164
|
+
keyword = "desktop"
|
|
165
|
+
strategy = "ubuntu_nested"
|
|
166
|
+
base_url = "https://releases.ubuntu.com/"
|
|
167
|
+
version_regex = 'href="([0-9\.]+)/"'
|
|
168
|
+
# Track the current Ubuntu LTS rather than the newest release of any kind.
|
|
169
|
+
# LTS is an even-numbered year with a .04 month; interim releases (26.10,
|
|
170
|
+
# 25.10, ...) are excluded. Point releases like 26.04.1 also match, which is
|
|
171
|
+
# what we want — those are the same LTS series.
|
|
172
|
+
version_filter = '\d*[02468]\.04(\.\d+)*'
|
|
173
|
+
iso_regex = 'href="(ubuntu-[0-9\.-]+desktop-amd64\.iso)"'
|
|
174
|
+
checksum_url = "{base_url}{version}/SHA256SUMS"
|
|
175
|
+
checksum_format = "sha256sums"
|
|
176
|
+
checksum_algo = "sha256"
|
|
177
|
+
|
|
178
|
+
[distros.ParrotSecurity]
|
|
179
|
+
clean_name = "Parrot Security"
|
|
180
|
+
keyword = "parrot"
|
|
181
|
+
strategy = "ubuntu_nested"
|
|
182
|
+
base_url = "https://deb.parrotsec.org/parrot/iso/"
|
|
183
|
+
version_regex = 'href="([0-9\.]+(?:-[0-9]+)?)/"'
|
|
184
|
+
iso_regex = 'href="(Parrot-security-[0-9\.]+_amd64\.iso)"'
|
|
185
|
+
# signed-hashes.txt is one clearsigned file listing md5, sha256 and sha512
|
|
186
|
+
# sections for every image. The parser selects the sha256 section by header
|
|
187
|
+
# and digest length — taking the first match would compare an md5 against a
|
|
188
|
+
# sha256 and delete a good download as "corrupt".
|
|
189
|
+
checksum_url = "{base_url}{version}/signed-hashes.txt"
|
|
190
|
+
checksum_format = "sha256sums"
|
|
191
|
+
checksum_algo = "sha256"
|
|
192
|
+
# Signing key published by Parrot and referenced from inside the signed
|
|
193
|
+
# content itself. Fingerprint confirmed via gpg --verify (VALIDSIG) against
|
|
194
|
+
# the untouched file, and matches the fingerprint in Parrot's own
|
|
195
|
+
# hash-and-key-verification documentation.
|
|
196
|
+
signing_key_url = "https://deb.parrot.sh/parrot/misc/archive.gpg"
|
|
197
|
+
signing_key_fingerprint = [
|
|
198
|
+
"B711822346552E4D92DA02DF7A8286AF0E81EE4A",
|
|
199
|
+
]
|
|
200
|
+
|
|
201
|
+
[distros.NixOS]
|
|
202
|
+
clean_name = "NixOS Minimal"
|
|
203
|
+
keyword = "nixos-minimal"
|
|
204
|
+
strategy = "nixos_channel"
|
|
205
|
+
# base_url is a prefix: the current stable channel (e.g. 26.05) is appended,
|
|
206
|
+
# giving https://channels.nixos.org/nixos-26.05, which redirects to the exact
|
|
207
|
+
# releases.nixos.org directory. NixOS publishes no nixos-stable alias, so the
|
|
208
|
+
# channel is resolved from the release bucket at scrape time — see
|
|
209
|
+
# nixos_channel in src/download.py.
|
|
210
|
+
base_url = "https://channels.nixos.org/nixos"
|
|
211
|
+
# Optional pin. If set and still a real channel it wins; otherwise the newest
|
|
212
|
+
# stable channel from the bucket is used. Omit to always track latest stable.
|
|
213
|
+
# channel = "26.05"
|
|
214
|
+
variant = "minimal"
|
|
215
|
+
# ISOs and .sha256 sidecars live under releases.nixos.org, NOT the channel host
|
|
216
|
+
# (channels.nixos.org serves no .sha256, which made `visync verify` fail with
|
|
217
|
+
# "source unreachable" for every NixOS ISO).
|
|
218
|
+
releases_base_url = "https://releases.nixos.org"
|
|
219
|
+
# Sidecars sit at /nixos/<channel>/nixos-<full release>/<iso>.sha256
|
|
220
|
+
checksum_url = "{release_base_url}/nixos/{version}/nixos-{release}/{iso_name}.sha256"
|
|
221
|
+
checksum_format = "sha256sums"
|
|
222
|
+
checksum_algo = "sha256"
|
|
223
|
+
|
|
224
|
+
[distros.NixOSGraphical]
|
|
225
|
+
clean_name = "NixOS Graphical"
|
|
226
|
+
keyword = "nixos-graphical"
|
|
227
|
+
strategy = "nixos_channel"
|
|
228
|
+
base_url = "https://channels.nixos.org/nixos"
|
|
229
|
+
variant = "graphical"
|
|
230
|
+
releases_base_url = "https://releases.nixos.org"
|
|
231
|
+
checksum_url = "{release_base_url}/nixos/{version}/nixos-{release}/{iso_name}.sha256"
|
|
232
|
+
checksum_format = "sha256sums"
|
|
233
|
+
checksum_algo = "sha256"
|
|
234
|
+
|
|
235
|
+
[distros.PopOS]
|
|
236
|
+
clean_name = "Pop!_OS"
|
|
237
|
+
keyword = "pop"
|
|
238
|
+
strategy = "popos_api"
|
|
239
|
+
api_url = "https://api.pop-os.org/builds"
|
|
240
|
+
variant = "generic"
|
|
241
|
+
release = "24.04"
|
|
242
|
+
checksum_format = "sha256sums"
|
|
243
|
+
checksum_algo = "sha256"
|
|
244
|
+
|
|
245
|
+
[distros.Tails]
|
|
246
|
+
clean_name = "Tails"
|
|
247
|
+
keyword = "tails"
|
|
248
|
+
strategy = "tails_api"
|
|
249
|
+
api_url = "https://tails.net/install/v2/Tails/amd64/stable/latest.json"
|
|
250
|
+
file_type = "img"
|
|
251
|
+
checksum_format = "sha256sums"
|
|
252
|
+
checksum_algo = "sha256"
|
|
253
|
+
|
|
254
|
+
[distros.Pond]
|
|
255
|
+
clean_name = "Pond"
|
|
256
|
+
keyword = "pond"
|
|
257
|
+
strategy = "content_disposition"
|
|
258
|
+
base_url = "https://releases.butterfly.so/iso/"
|
|
259
|
+
iso_regex = '^pond-installer-([0-9]+\.[0-9]+\.[0-9]+)-x86_64\.iso$'
|