Files
zzzot-tracker-hack/index.html
2024-10-05 20:01:05 -04:00

131 lines
20 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<h1 id="how-to-self-host-your-torrents-en-masse-with-zzzot">How to
self-host your torrents en-masse with zzzot</h1>
<p>I2P is a great network for distributing information using Bittorrent.
However, its not always easy to make your torrents discoverable to
others. Uploading files via a WebUI can be time-consuming when you wish
to share hundreds of files. Its easy to run an open tracker using
zzzot, but open trackers dont maintain a searchable index of the files
people are sharing. This is a trick that will allow you to treat zzzot
as both an open tracker <strong>and</strong> a searchable indexing
tracker of files that you want to share.</p>
<ul>
<li><code>setup.sh</code> will do all this automatically on linux.</li>
</ul>
<h2 id="step-zero-install-zzzot-and-script-dependencies">Step Zero:
Install zzzot and script dependencies</h2>
<p>You need zzzot to make this work. You can install zzzot by pasting
this link <code>http://stats.i2p/i2p/plugins/zzzot.su3</code> into
“Install from URL” on the <a
href="http://localhost:7657/configplugins">Plugin Config page</a>. You
can also obtain zzzot from zzzs plugins page <a
href="http://stats.i2p/i2p/plugins/">inside of I2P</a>.</p>
<p>Make a note of the zzzot tracker base32 address at <a
href="http://127.0.0.1:7662"><code>http://127.0.0.1:7662</code></a>.
Enter it into the environment variable <code>zzzot_announce</code> like
so:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="bu">export</span> <span class="va">zzzot_announce</span><span class="op">=</span><span class="st">&quot;thisisanexampleofafiftytwocharacterlongbasethirtytwo.b32.i2p&quot;</span></span></code></pre></div>
<p>Youll also need: <code>sed</code> <code>sort</code>
<code>uniq</code> and <code>transmission-edit</code>.</p>
<h2
id="step-one-symlink-your-i2psnark-downloads-directory-to-zzzots-docroot">Step
One: Symlink your i2psnark downloads directory to zzzots docroot</h2>
<p>After you install zzzot, symlink directory where I2PSnark stores its
downloads to a sub-directory of zzzots document root. If youre on
Linux and used a <code>.jar</code> installer, this command will
work:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">ln</span> <span class="at">-sf</span> ~/.i2p/i2psnark ~/.i2p/plugins/zzzot/eepsite/docroot/i2psnark</span></code></pre></div>
<p>Or, if you used a Debian package:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> <span class="at">-u</span> i2psvc ln <span class="at">-sf</span> /var/lib/i2p/i2p-config/i2psnark /var/lib/i2p/i2p-config/plugins/zzzot/eepsite/docroot/i2psnark</span></code></pre></div>
<h2 id="step-two-generate-a-new-zzzot-homepage">Step Two: Generate a new
zzzot homepage</h2>
<p>When you visit the zzzot plugins homepage via a web browser, either
locally or via I2P, it simply serves up the files found in the
<code>eepsite/docroot</code>. This allows you to customize the zzzot
homepage in order to show whatever you want. Were going to take
advantage of this to generate an index of the torrents were sharing
along with some details about them. To do this well use a shell script
to generate the page.</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="co">#! /usr/bin/env sh</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a><span class="fu">tagList()</span> <span class="kw">{</span></span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> torrent <span class="kw">in</span> i2psnark/<span class="pp">*</span>.torrent<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> <span class="va">filename</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$torrent</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|.torrent||g&#39;</span><span class="va">)</span></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a> <span class="va">title</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$filename</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|-| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|i2psnark/||g&#39;</span><span class="va">)</span></span>
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a> <span class="va">tags</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$title</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|\.| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|@| |g&#39;</span><span class="va">)</span></span>
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a class=</span><span class="dt">\&quot;</span><span class="va">$tag</span><span class="st"> lvix1</span><span class="dt">\&quot;</span><span class="st"> href=</span><span class="dt">\&quot;</span><span class="st">#</span><span class="va">$tag</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$tag</span><span class="st">&lt;/a&gt;&quot;</span></span>
<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb4-12"><a href="#cb4-12" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb4-13"><a href="#cb4-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb4-14"><a href="#cb4-14" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb4-15"><a href="#cb4-15" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-16"><a href="#cb4-16" aria-hidden="true" tabindex="-1"></a><span class="fu">generatePage()</span> <span class="kw">{</span></span>
<span id="cb4-17"><a href="#cb4-17" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;!doctype html&gt;&quot;</span></span>
<span id="cb4-18"><a href="#cb4-18" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;html lang=en&gt;&quot;</span></span>
<span id="cb4-19"><a href="#cb4-19" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;head&gt;&quot;</span></span>
<span id="cb4-20"><a href="#cb4-20" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;meta charset=utf-8&gt;&quot;</span></span>
<span id="cb4-21"><a href="#cb4-21" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;title&gt;Torrent Index&lt;/title&gt;&quot;</span></span>
<span id="cb4-22"><a href="#cb4-22" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;script src=</span><span class="dt">\&quot;</span><span class="st">script.js</span><span class="dt">\&quot;</span><span class="st">&gt;&lt;/script&gt;&quot;</span></span>
<span id="cb4-23"><a href="#cb4-23" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;style&gt;&quot;</span></span>
<span id="cb4-24"><a href="#cb4-24" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;div {&quot;</span></span>
<span id="cb4-25"><a href="#cb4-25" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; display: </span><span class="dt">\&quot;</span><span class="st">inline</span><span class="dt">\&quot;</span><span class="st">;&quot;</span></span>
<span id="cb4-26"><a href="#cb4-26" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;}&quot;</span></span>
<span id="cb4-27"><a href="#cb4-27" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/style&gt;&quot;</span></span>
<span id="cb4-28"><a href="#cb4-28" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/head&gt;&quot;</span></span>
<span id="cb4-29"><a href="#cb4-29" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;body&gt;&quot;</span></span>
<span id="cb4-30"><a href="#cb4-30" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$SHARE</span><span class="st">&quot;</span></span>
<span id="cb4-31"><a href="#cb4-31" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div class=</span><span class="dt">\&quot;</span><span class="st">tags</span><span class="dt">\&quot;</span><span class="st">&gt;Tags:&quot;</span></span>
<span id="cb4-32"><a href="#cb4-32" aria-hidden="true" tabindex="-1"></a> <span class="ex">tagList</span> <span class="kw">|</span> <span class="fu">sort</span> <span class="at">-u</span></span>
<span id="cb4-33"><a href="#cb4-33" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb4-34"><a href="#cb4-34" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> torrent <span class="kw">in</span> i2psnark/<span class="pp">*</span>.torrent<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb4-35"><a href="#cb4-35" aria-hidden="true" tabindex="-1"></a> <span class="ex">transmission-edit</span> <span class="at">-a</span> <span class="st">&quot;http://</span><span class="va">$zzzot_announce</span><span class="st">/a&quot;</span> <span class="st">&quot;</span><span class="va">$torrent</span><span class="st">&quot;</span> <span class="dv">2</span><span class="op">&gt;</span> <span class="st">&quot;</span><span class="va">$BACK</span><span class="st">/err&quot;</span> <span class="dv">1</span><span class="op">&gt;</span> <span class="st">&quot;</span><span class="va">$BACK</span><span class="st">/log&quot;</span></span>
<span id="cb4-36"><a href="#cb4-36" aria-hidden="true" tabindex="-1"></a> <span class="va">filename</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$torrent</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|.torrent||g&#39;</span><span class="va">)</span></span>
<span id="cb4-37"><a href="#cb4-37" aria-hidden="true" tabindex="-1"></a> <span class="va">title</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$filename</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|-| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|i2psnark/||g&#39;</span><span class="va">)</span></span>
<span id="cb4-38"><a href="#cb4-38" aria-hidden="true" tabindex="-1"></a> <span class="va">tags</span><span class="op">=</span><span class="va">$(</span><span class="bu">echo</span> <span class="va">$title</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|\.| |g&#39;</span> <span class="kw">|</span> <span class="fu">sed</span> <span class="st">&#39;s|@| |g&#39;</span><span class="va">)</span></span>
<span id="cb4-39"><a href="#cb4-39" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div id=&quot;</span><span class="va">$filename</span><span class="st">&quot; class=</span><span class="dt">\&quot;</span><span class="st">lvix2 </span><span class="va">$tags</span><span class="dt">\&quot;</span><span class="st">&gt;&quot;</span></span>
<span id="cb4-40"><a href="#cb4-40" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a href=</span><span class="dt">\&quot;</span><span class="va">$torrent</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$title</span><span class="st">&lt;/a&gt;&lt;/br&gt;&quot;</span></span>
<span id="cb4-41"><a href="#cb4-41" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;div class=</span><span class="dt">\&quot;</span><span class="st">tags</span><span class="dt">\&quot;</span><span class="st">&gt;Tags:&quot;</span></span>
<span id="cb4-42"><a href="#cb4-42" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> tag <span class="kw">in</span> <span class="va">$tags</span><span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb4-43"><a href="#cb4-43" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;a class=</span><span class="dt">\&quot;</span><span class="va">$tag</span><span class="st"> lvix1</span><span class="dt">\&quot;</span><span class="st"> href=</span><span class="dt">\&quot;</span><span class="st">#</span><span class="va">$tag</span><span class="dt">\&quot;</span><span class="st">&gt;</span><span class="va">$tag</span><span class="st">&lt;/a&gt;&quot;</span></span>
<span id="cb4-44"><a href="#cb4-44" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb4-45"><a href="#cb4-45" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb4-46"><a href="#cb4-46" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot; &lt;/div&gt;&quot;</span></span>
<span id="cb4-47"><a href="#cb4-47" aria-hidden="true" tabindex="-1"></a> <span class="cf">done</span></span>
<span id="cb4-48"><a href="#cb4-48" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="va">$BACK</span></span>
<span id="cb4-49"><a href="#cb4-49" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/body&gt;&quot;</span></span>
<span id="cb4-50"><a href="#cb4-50" aria-hidden="true" tabindex="-1"></a> <span class="bu">echo</span> <span class="st">&quot;&lt;/html&gt;&quot;</span></span>
<span id="cb4-51"><a href="#cb4-51" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span>
<span id="cb4-52"><a href="#cb4-52" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-53"><a href="#cb4-53" aria-hidden="true" tabindex="-1"></a><span class="ex">generatePage</span></span></code></pre></div>
<h2
id="step-threeoptional-add-the-ability-to-filter-torrents-with-javascript">Step
Three(Optional): Add the ability to filter torrents with Javascript</h2>
<p>If youre indexing hundreds of torrents, it will help to have the
ability to filter the torrents based on their contents. Our script from
step two converts the titles of the torrents into a list of tags, which
can then be filtered. This provides us with a way of searching the
available torrents efficiently.</p>
<div class="sourceCode" id="cb5"><pre
class="sourceCode javascript"><code class="sourceCode javascript"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="bu">window</span><span class="op">.</span><span class="fu">addEventListener</span>(<span class="st">&quot;load&quot;</span><span class="op">,</span> <span class="kw">function</span> () {</span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">setupTags</span>()<span class="op">;</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">setupTags</span>() {</span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> els <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix1&quot;</span>)<span class="op">;</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> el <span class="kw">of</span> els)</span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a> el<span class="op">.</span><span class="fu">addEventListener</span>(<span class="st">&quot;click&quot;</span><span class="op">,</span> <span class="kw">function</span> () {</span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> divset <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix2&quot;</span>)<span class="op">;</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> div <span class="kw">of</span> divset) div<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="st">&quot;none&quot;</span><span class="op">;</span></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> cl <span class="op">=</span> el<span class="op">.</span><span class="at">classList</span>[<span class="dv">0</span>]<span class="op">;</span></span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> divs <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.&quot;</span> <span class="op">+</span> cl)<span class="op">;</span></span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> div <span class="kw">of</span> divs) div<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="st">&quot;inline&quot;</span><span class="op">;</span></span>
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">showTags</span>()<span class="op">;</span></span>
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a> })<span class="op">;</span></span>
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a> <span class="kw">function</span> <span class="fu">showTags</span>() {</span>
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a> <span class="kw">let</span> els <span class="op">=</span> <span class="bu">document</span><span class="op">.</span><span class="fu">querySelectorAll</span>(<span class="st">&quot;.lvix1&quot;</span>)<span class="op">;</span></span>
<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> (<span class="kw">let</span> el <span class="kw">of</span> els) {</span>
<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a> el<span class="op">.</span><span class="at">style</span><span class="op">.</span><span class="at">display</span> <span class="op">=</span> <span class="st">&quot;inline&quot;</span><span class="op">;</span></span>
<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a> }</span>
<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a>})<span class="op">;</span></span></code></pre></div>