= Torrent Releases Infrastructure SOP


http://torrent.fedoraproject.org/ is our master torrent server for
Fedora distribution. It runs out of ibiblio.


== Contact Information

Owner::
  Fedora Infrastructure Team
Contact::
  #fedora-admin, sysadmin-torrent group
Location::
  ibiblio
Servers::
  torrent.fedoraproject.org
Purpose::
  Provides the torrent master server for Fedora distribution

== Torrent Release

When you want to add a new torrent to the tracker at
http://torrent.fedoraproject.org you need to take the following
steps to have it listed correctly:

[arabic]
. login to _torrent01.fedoraproject.org_. If you are unable to do so please
contact the fedora infrastructure group about access. This procedure
requires membership in the torrentadmin group.
. Change the group ID to torrentadmin
+
....
newgrp torrentadmin
....
. Remove everything from the working directory `/srv/torrent/new/fedora/`
+
....
rm -r /srv/torrent/new/fedora/*
....
. rsync all the iso's from ibiblio
+
....
rsync -avhHP4 rsync://download-ib01.fedoraproject.org/fedora-buffet0/fedora/linux/releases/test/<Version>_<Release>/*/*/iso/ /srv/torrent/new/fedora/
....
. cd into `/srv/torrent/new/fedora/` to change the directory structure
+
....
cd /srv/torrent/new/fedora/
....
. Directories should be created by removing Label in the iso's name
+
....
for iso in $(ls *iso); do dest=$(echo $iso|sed -e 's|-<Label>.iso||g' ); mkdir $dest; mv $iso $dest; done
....
. Verify that the checksums files are all signed.
+
....
cat *CHECKSUM*
....
. Copy the checksum's into the associated directories
+
....
for checksum in $(ls *CHECKSUM); do for file in $(cat $checksum | grep "SHA256 (" | awk '{print $2}' | sed -e 's/(\|)//g' | awk -F'-<Label>' '{print $1}'); do cp $checksum $file ; done; done
....
. Verify if all the checksums are copied into the right locations
+
....
ls */
....
. Remove the manifest files and checksums for netinst (since we dont
mirror netinst images) and other files (This includes currently the workstation osbuild iso)
+
....
rm -rf *manifest *netinst* *CHECKSUM
....
. Run the maketorrent script from `/srv/torrent/new/fedora/`
+
....
../maketorrent *
....
+
____
[NOTE]
====
Next steps should be run 12 hours before the release time which is
generally 14:00 UTC on Tuesday.
====
____

. Grab `fedora-torrent-init.py` from releng scripts and change it to
executable
+
....
cd ~
wget https://pagure.io/releng/raw/main/f/scripts/fedora-torrent-ini.py
chmod 755 ~/fedora-torrent-ini.py
....
. Run the following command from `/srv/torrent/new/fedora/`
+
....
~/fedora-torrent-ini.py <Version>_<Release> <Current_Date> > <Version>_<Release>.ini
....
. Copy all the torrents to `/srv/web/torrents/`
+
....
cp *torrent /srv/web/torrents/
....
. Copy everything in `/srv/torrent/new/fedora/` to `/srv/torrent/btholding/`
+
....
cp -rl * /srv/torrent/btholding/
....
. Copy the .ini file created in step 12 to `/srv/torrent/torrent-generator/`
+
....
sudo cp <Version>_<Release>.ini /srv/torrent/torrent-generator/
....
. Restart rtorrent and opentracker services
+
....
systemctl restart opentracker-ipv4 opentracker-ipv6
sudo -i
tmux (or tmux attach if the session is already running, generally named att)
control-q if rtorrent is already running.
cd /srv/torrent/btholding
rtorrent *.torrent
control-b d (disconnect from tmux)
....

[NOTE]
====
Release is empty for Final release
====

[NOTE]
====
For final release, remove all the alpha and beta directories and torrent
files corresponding to the release in `/srv/torrent/btholding/` directory.
====

[NOTE]
====
At EOL of a release, remove all the directories and torrent files
corresponding to the release in `/srv/torrent/btholding/` directory.
====

[NOTE]
====
If `Failure reason "Requested download is not authorized for use with this tracker."`
issue is thrown by rtorrent, then restart the opentracker-ipv4 and opentracker-ipv6 services
====
