--- title: Making FreeBSD magnet links description: > Making FreeBSD magnet links created: !!timestamp '2018-07-03' time: 4:49 PM tags: - FreeBSD - magnet ---
⚠️ This post is old, the most up to date one is here.For the last few years, I've been producing torrents and publishing magnet links, but there is some special work that I do to make these. The first few releases, I inserted a bogus tracker into the torrent, because despite there being plenty of tools out there for producing trackerless (DHT) torrents, they were all GUI and I never found any that were command line based. The other was there was/is no tool for extracting the info hash and building the magnet link. There may be tools now, but I couldn't find any when I started 3 years ago. The following steps are based upon the recent release of FreeBSD 11.2‑R, adjust as necessary.
CHECKSUM.SHA256
, CHECKSUM.SHA512
and index.html*
files.
$ wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/
$ wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/aarch64/Latest/
$ wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/amd64/Latest/
$ wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/i386/Latest/
$ wget https://www.freebsd.org/releases/11.2R/CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-{amd64,i386,powerpc,powerpc-powerpc64,sparc64,arm64-aarch64}.asc
$ wget https://www.freebsd.org/releases/11.2R/CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-{amd64,i386,arm64-aarch64}-vm.asc
$ wget https://www.freebsd.org/releases/11.2R/CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-arm-armv6-{BANANAPI,BEAGLEBONE,CUBIEBOARD,CUBIEBOARD2,CUBBOX-HUMMINGBOARD,GUMSTIX,PANDABOARD,RPI-B,RPI2,WANDBOARD}.asc
$ for i in *.asc; do gpg --verify $i; done
You should see a bunch of lines like:
Warning: using insecure memory!
gpg: Signature made Fri Jun 22 09:33:50 2018 PDT
gpg: using RSA key 0x031458A5478FE293
gpg: Good signature from "Glen Barber <gjb@FreeBSD.org>" [full]
gpg: aka "Glen Barber <glen.j.barber@gmail.com>" [full]
gpg: aka "Glen Barber <gjb@glenbarber.us>" [full]
gpg: aka "Glen Barber <gjb@keybase.io>" [unknown]
gpg: WARNING: not a detached signature; file 'CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-amd64-vm' was NOT verified!
The last line can be ignored. The non-.asc
files were d/l'd and will
not be used. Make sure that all of the files report Good signature
.
btmakemetafile.py
to btmaketrackerless.py
and applied the following
patch:
$ diff -u btmakemetafile.py btmaketrackerless.py
--- btmakemetafile.py 2004-05-24 12:54:52.000000000 -0700
+++ btmaketrackerless.py 2016-10-10 17:13:32.742081000 -0700
@@ -23,9 +23,9 @@
def prog(amount):
print '%.1f%% complete\r' % (amount * 100),
-if len(argv) < 3:
+if len(argv) < 2:
a,b = split(argv[0])
- print 'Usage: ' + b + ' <trackerurl> <file> [file...] [params...]'
+ print 'Usage: ' + b + ' <file> [file...] [params...]'
print
print formatDefinitions(defaults, 80)
print_announcelist_details()
@@ -33,9 +33,9 @@
exit(2)
try:
- config, args = parseargs(argv[1:], defaults, 2, None)
- for file in args[1:]:
- make_meta_file(file, args[0], config, progress = prog)
+ config, args = parseargs(argv[1:], defaults, 1, None)
+ for file in args[0:]:
+ make_meta_file(file, None, config, progress = prog)
except ValueError, e:
print 'error: ' + str(e)
print 'run with no args for parameter explanations'
If you notice, the only thing that is done is to drop the first argument,
and instead of passing it into make_meta_file
, a None
is passed
instead. This will simply not add trackers to the torrent file.
$ cat cmp.sh
#!/bin/sh -
# wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/
# wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/aarch64/Latest/
# wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/amd64/Latest/
# wget -c -r -l 1 -nd --limit-rate=800k https://download.freebsd.org/ftp/releases/VM-IMAGES/11.2-RELEASE/i386/Latest/
# wget https://www.freebsd.org/releases/11.2R/CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-{amd64,i386,powerpc,powerpc-powerpc64,sparc64,arm64-aarch64}.asc
# wget https://www.freebsd.org/releases/11.2R/CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-{amd64,i386,arm64-aarch64}-vm.asc
# wget https://www.freebsd.org/releases/11.2R/CHECKSUM.SHA512-FreeBSD-11.2-RELEASE-arm-armv6-{BANANAPI,BEAGLEBONE,CUBIEBOARD,CUBIEBOARD2,CUBBOX-HUMMINGBOARD,GUMSTIX,PANDABOARD,RPI-B,RPI2,WANDBOARD}.asc
grep -h '^SHA512' CHECK*.asc | sed -e 's/SHA512 (\(.*\)) = \(.*\)/\2 \1/' | sort -k 2 > sha512.from.asc
while read hash fname; do
if [ -e "$fname" ]; then
sigfile=`grep -l -- "$fname" *.asc | head -n 1`
echo checking "$fname", sig in: "$sigfile"
#res=`sha512 -q "$fname"`
res=`shasum -a 512 "$fname" | awk '{ print $1 }'`
echo "File is: $res"
if [ x"$res" != x"$hash" ]; then
echo missmatch! "$fname"
exit 1
fi
if ! [ -e "$fname".torrent ]; then
btmaketrackerless.py "$fname"
fi
else
echo missing "$fname"
exit 1
fi
done < sha512.from.asc
$ cat btmakemagnet.sh
#!/bin/sh -
# metainfo file.: FreeBSD-10.3-RELEASE-sparc64-bootonly.iso.torrent
# info hash.....: 06091dabce1296d11d1758ffd071e7109a92934f
# file name.....: FreeBSD-10.3-RELEASE-sparc64-bootonly.iso
# file size.....: 203161600 (775 * 262144 + 0)
# announce url..: udp://tracker.openbittorrent.com:80
# btshowmetainfo 20030621 - decode BitTorrent metainfo files
for i in *.torrent; do
btshowmetainfo.py "$i" | awk '
$0 ~ "^info hash" { info = $3 }
$0 ~ "^file name" { name = $3 }
END {
print "magnet:?xt=urn:btih:" info "&dn=" name
}'
done