Anna’s Blog
Updates over Anna’s Archief, de grootste echt open bibliotheek in de menselijke geschiedenis.

Hoe u een piratenarchivaris wordt

annas-archive.gl/blog, 2022-10-17 (translations: 中文 [zh])

De eerste uitdaging is misschien een verrassende. Het is geen technisch probleem, en ook geen juridisch probleem. Het is een psychologisch probleem.

Voordat we erin duiken, twee updates over de Pirate Library Mirror (BEWERKING: verplaatst naar Anna’s Archief):

  1. We hebben enkele bijzonder gulle donaties ontvangen. De eerste was $10k van een anoniem persoon die ook “bookwarrior” ondersteunt, de oorspronkelijke oprichter van Library Genesis. Speciale dank aan bookwarrior voor het mogelijk maken van deze donatie. De tweede was nog eens $10k van een anonieme donor, die na onze laatste release contact opnam en geïnspireerd was om te helpen. We hadden ook een aantal kleinere donaties. Hartelijk dank voor al uw gulle steun. We hebben enkele spannende nieuwe projecten in de pijplijn die hierdoor ondersteund zullen worden, dus blijf op de hoogte.
  2. We hadden wat technische problemen met de omvang van onze tweede release, maar onze torrents staan nu online en worden nu ook gezaaid. We kregen bovendien een genereus aanbod van een anonieme persoon om onze collectie te seeden op hun supersnelle servers, dus we doen een speciale upload naar hun machines. Daarna zou iedereen die de collectie downloadt een flinke snelheidsverbetering moeten zien.

Er kunnen complete boeken worden geschreven over het waarom van digitale preservatie in het algemeen, en piraten-archivering in het bijzonder, maar laten we een korte inleiding geven voor wie hier niet zo bekend mee is. De wereld produceert meer kennis en cultuur dan ooit tevoren, maar er gaat ook meer verloren dan ooit tevoren. De mensheid vertrouwt dit erfgoed grotendeels toe aan bedrijven zoals academische uitgevers, streamingdiensten en socialemediabedrijven, en zij hebben zich vaak niet bewezen als goede beheerders. Bekijk de documentaire Digital Amnesia, of eigenlijk eender welke lezing van Jason Scott.

Er zijn instellingen die goed werk leveren door zoveel mogelijk te archiveren, maar zij zijn gebonden aan de wet. Als piraten bevinden wij ons in een unieke positie om collecties te archiveren waar zij niet aan kunnen komen, vanwege auteursrechtelijke handhaving of andere beperkingen. We kunnen collecties ook vele keren spiegelen, wereldwijd, en zo de kans op goede preservatie vergroten.

Voor nu gaan we niet in op discussies over de voor- en nadelen van intellectueel eigendom, de moraliteit van het overtreden van de wet, mijmeringen over censuur, of de kwestie van toegang tot kennis en cultuur. Met dat alles uit de weg: laten we duiken in het hoe. We delen hoe ons team piraten-archivarissen werd, en de lessen die we onderweg leerden. Er zijn veel uitdagingen wanneer je aan deze reis begint, en hopelijk kunnen we je door een aantal daarvan heen helpen.

Community

De eerste uitdaging is misschien een verrassende. Het is geen technisch probleem, en ook geen juridisch probleem. Het is een psychologisch probleem: dit werk in de schaduw doen kan ongelooflijk eenzaam zijn. Afhankelijk van wat je van plan bent en je dreigingsmodel, moet je mogelijk heel voorzichtig zijn. Aan het ene uiterste van het spectrum hebben we mensen zoals Alexandra Elbakyan*, de oprichter van Sci-Hub, die heel open is over haar activiteiten. Maar zij loopt op dit moment een groot risico om gearresteerd te worden als ze een westers land zou bezoeken, en zou tientallen jaren gevangenisstraf kunnen krijgen. Is dat een risico dat jij bereid zou zijn te nemen? Wij zitten aan het andere uiteinde van het spectrum: zeer voorzichtig om geen enkel spoor achter te laten, en met sterke operationele beveiliging.

* Zoals op HN vermeld door ‘ynno’: Alexandra wilde aanvankelijk niet bekend zijn: “Her servers were set up to emit detailed error messages from PHP, including full path of faulting source file, which was under directory /home/ringo-ring, which could be traced to a username she had online on an unrelated site, attached to her real name. Before this revelation, she was anonymous.” Gebruik dus willekeurige gebruikersnamen op de computers die je hiervoor gebruikt, voor het geval je iets verkeerd configureert.

Die geheimhouding heeft echter een psychologische prijs. De meeste mensen vinden het fijn om erkenning te krijgen voor het werk dat ze doen, en toch kun je hiervoor in het echte leven geen eer opstrijken. Zelfs eenvoudige dingen kunnen lastig zijn, zoals vrienden die vragen waar je mee bezig bent geweest (op een gegeven moment raakt “rommelen met mijn NAS / homelab” wel uitgewerkt).

Daarom is het zo belangrijk om een community te vinden. Je kunt wat operationele beveiliging opofferen door het aan een paar heel goede vrienden toe te vertrouwen, van wie je weet dat je ze diep kunt vertrouwen. Wees zelfs dan voorzichtig om niets op papier te zetten, voor het geval zij hun e-mails aan de autoriteiten moeten overhandigen, of als hun apparaten op een andere manier gecompromitteerd raken.

Nog beter is het om andere mede-piraten te vinden. Als je goede vrienden interesse hebben om mee te doen: top! Anders kun je mogelijk online anderen vinden. Helaas is dit nog steeds een niche-community. Tot nu toe hebben we slechts een handvol anderen gevonden die actief zijn in deze wereld. Goede startpunten lijken de forums van Library Genesis en r/DataHoarder te zijn. The Archive Team heeft ook gelijkgestemden, al opereren zij binnen de wet (ook al soms in grijze gebieden van de wet). De traditionele ‘warez’- en piraterijscenes hebben ook mensen die op vergelijkbare manieren denken.

We staan open voor ideeën over hoe we een community kunnen opbouwen en ideeën kunnen verkennen. Stuur ons gerust een bericht op Twitter of Reddit. Misschien kunnen we een forum of chatgroep hosten. Een uitdaging is dat dit bij gebruik van gangbare platforms makkelijk gecensureerd kan worden, dus zouden we het zelf moeten hosten. Er is ook een afweging tussen deze discussies volledig publiek voeren (meer potentiële betrokkenheid) versus privé maken (mogelijke “doelen” niet laten weten dat we ze binnenkort gaan scrapen). Daar moeten we over nadenken. Laat het ons weten als je hierin geïnteresseerd bent!

Projecten

Wanneer we een project doen, heeft dat een aantal fases:

  1. Domeinkeuze / filosofie: Waar wil je je grofweg op richten, en waarom? Welke unieke passies, vaardigheden en omstandigheden heb je die je in je voordeel kunt gebruiken?
  2. Doelselectie: Welke specifieke collectie ga je spiegelen?
  3. Metadata scrapen: Catalogusinformatie over de bestanden verzamelen, zonder de (vaak veel grotere) bestanden zelf daadwerkelijk te downloaden.
  4. Dataselectie: Op basis van de metadata bepalen welke data op dit moment het meest relevant is om te archiveren. Het kan alles zijn, maar vaak is er een redelijke manier om schijfruimte en bandbreedte te besparen.
  5. Data scrapen: De data daadwerkelijk binnenhalen.
  6. Distributie: Het verpakken in torrents, ergens aankondigen, en mensen het laten verspreiden.

Dit zijn geen volledig onafhankelijke fases, en inzichten uit een latere fase sturen je vaak terug naar een eerdere fase. Bijvoorbeeld: tijdens het scrapen van metadata kun je beseffen dat het doel dat je hebt gekozen verdedigingsmechanismen heeft die buiten je vaardigheidsniveau liggen (zoals IP-blokkades), waarna je teruggaat en een ander doel kiest.

1. Domeinselectie / filosofie

Er is geen gebrek aan kennis en cultureel erfgoed dat behouden moet worden, wat overweldigend kan zijn. Daarom is het vaak nuttig om even stil te staan en na te denken over wat uw bijdrage kan zijn.

Iedereen denkt hier anders over, maar hier zijn enkele vragen die u zichzelf kunt stellen:

In ons geval gaven we vooral om het behoud van wetenschap op de lange termijn. We kenden Library Genesis en wisten dat het volledig vele malen werd gespiegeld via torrents. Dat idee vonden we geweldig. Toen probeerde één van ons op een dag enkele wetenschappelijke studieboeken op Library Genesis te vinden, maar kon ze niet vinden, wat twijfel opriep over hoe volledig het eigenlijk was. Daarna zochten we die studieboeken online en vonden we ze op andere plekken, wat het zaadje voor ons project plantte. Nog vóór we van Z-Library hadden gehoord, hadden we al het idee om niet te proberen al die boeken handmatig te verzamelen, maar om ons te richten op het spiegelen van bestaande collecties en die weer terug bij te dragen aan Library Genesis.

2. Doelselectie

Goed, we hebben ons aandachtsgebied; maar welke specifieke collectie spiegelen we? Er zijn een paar dingen die een doelwit geschikt maken:

Toen we onze wetenschappelijke studieboeken op andere websites dan Library Genesis vonden, probeerden we te achterhalen hoe ze op het internet terecht waren gekomen. Daarna vonden we Z-Library en realiseerden we ons dat, hoewel de meeste boeken daar niet als eerste verschijnen, ze er uiteindelijk wel belanden. We leerden over de relatie met Library Genesis, en over de (financiële) prikkelstructuur en de betere gebruikersinterface, die er samen voor zorgden dat het een veel completere collectie was. Vervolgens deden we wat eerste metadata- en datascraping en ontdekten we dat we hun IP-downloadlimieten konden omzeilen, gebruikmakend van de speciale toegang van één van onze leden tot veel proxyservers.

Terwijl u verschillende doelwitten verkent, is het al belangrijk om uw sporen uit te wissen door VPN’s en wegwerp-e-mailadressen te gebruiken; daar komen we later uitgebreider op terug.

3. Metadata scrapen

Laten we het wat technischer maken. Voor het daadwerkelijk scrapen van metadata van websites hebben we het vrij simpel gehouden. We gebruiken Python-scripts, soms curl, en een MySQL-database om de resultaten in op te slaan. We hebben geen geavanceerde scrapingsoftware gebruikt die complexe websites kan ‘mappen’, omdat we tot nu toe slechts één of twee soorten pagina’s hoefden te scrapen door simpelweg id’s te enumereren en de HTML te parsen. Als er geen pagina’s zijn die eenvoudig te enumereren zijn, dan hebt u mogelijk een echte crawler nodig die probeert alle pagina’s te vinden.

Voordat u begint met het scrapen van een hele website, probeer het eerst een tijdje handmatig. Ga zelf door enkele tientallen pagina’s om een gevoel te krijgen voor hoe het werkt. Soms loopt u op die manier al tegen IP-blokkades of ander interessant gedrag aan. Hetzelfde geldt voor datascraping: voordat u te diep in dit doelwit duikt, moet u ervoor zorgen dat u de data daadwerkelijk effectief kunt downloaden.

Om beperkingen te omzeilen, zijn er een paar dingen die u kunt proberen. Zijn er andere IP-adressen of servers die dezelfde data hosten maar niet dezelfde beperkingen hebben? Zijn er API-endpoints zonder beperkingen, terwijl andere die wel hebben? Bij welke downloadsnelheid wordt uw IP geblokkeerd, en voor hoelang? Of wordt u niet geblokkeerd maar wel afgeknepen (throttling)? Wat als u een gebruikersaccount aanmaakt; hoe verandert dat dan? Kunt u HTTP/2 gebruiken om verbindingen open te houden, en verhoogt dat de snelheid waarmee u pagina’s kunt opvragen? Zijn er pagina’s die meerdere bestanden tegelijk opsommen, en is de informatie die daar staat voldoende?

Dingen die u waarschijnlijk wilt opslaan zijn onder meer:

Meestal doen we dit in twee stappen. Eerst downloaden we de ruwe HTML-bestanden, meestal rechtstreeks naar MySQL (om veel kleine bestanden te vermijden, waar we hieronder meer over vertellen). Vervolgens gaan we in een aparte stap door die HTML-bestanden heen en parsen we ze naar echte MySQL-tabellen. Zo hoeft u niet alles opnieuw vanaf nul te downloaden als u een fout ontdekt in uw parseercode, omdat u de HTML-bestanden gewoon opnieuw kunt verwerken met de nieuwe code. Het is ook vaak makkelijker om de verwerkingsstap te paralleliseren, waardoor u tijd bespaart (en u kunt de verwerkingscode schrijven terwijl het scrapen draait, in plaats van beide stappen tegelijk te moeten schrijven).

Tot slot: voor sommige doelen is metadata scrapen het enige dat er is. Er bestaan enorme metadatacollecties die niet goed bewaard zijn gebleven.

4. Dataselectie

Vaak kunt u met de metadata een redelijke subset van data bepalen om te downloaden. Zelfs als u uiteindelijk alle data wilt downloaden, kan het nuttig zijn om de belangrijkste items eerst te prioriteren, voor het geval u wordt gedetecteerd en de verdediging wordt verbeterd, of omdat u extra schijven zou moeten kopen, of simpelweg omdat er iets anders in uw leven tussendoor komt voordat u alles kunt downloaden.

Een collectie kan bijvoorbeeld meerdere edities van dezelfde onderliggende bron hebben (zoals een boek of film), waarbij één editie als de beste kwaliteit is gemarkeerd. Dan is het heel logisch om die edities eerst op te slaan. Uiteindelijk wilt u misschien alle edities bewaren, aangezien de metadata soms verkeerd getagd kan zijn, of er onbekende afwegingen tussen edities kunnen bestaan (bijvoorbeeld: de ‘beste editie’ is in de meeste opzichten het beste, maar in andere opzichten slechter, zoals een film met een hogere resolutie maar zonder ondertitels).

U kunt ook uw metadatadatabase doorzoeken om interessante zaken te vinden. Wat is het grootste bestand dat gehost wordt, en waarom is het zo groot? Wat is het kleinste bestand? Zijn er interessante of onverwachte patronen bij bepaalde categorieën, talen, enzovoort? Zijn er dubbele of zeer vergelijkbare titels? Ziet u patronen in wanneer data is toegevoegd, bijvoorbeeld één dag waarop veel bestanden tegelijk zijn toegevoegd? U kunt vaak veel leren door op verschillende manieren naar de dataset te kijken.

In ons geval hebben we Z-Library-boeken gededupliceerd op basis van de md5-hashes in Library Genesis, waardoor we veel downloadtijd en schijfruimte bespaarden. Dit is echter een vrij unieke situatie. In de meeste gevallen bestaan er geen uitgebreide databases van welke bestanden al goed bewaard zijn door mede-piraten. Dat is op zichzelf al een enorme kans voor iemand. Het zou geweldig zijn om een regelmatig geüpdatet overzicht te hebben van bijvoorbeeld muziek en films die al breed worden geseed op torrentwebsites, en daarom een lagere prioriteit hebben om op te nemen in piratenmirrors.

5. Data scrapen

Nu bent u klaar om de data daadwerkelijk in bulk te downloaden. Zoals eerder genoemd, zou u op dit punt al handmatig een aantal bestanden moeten hebben gedownload, om het gedrag en de beperkingen van het doel beter te begrijpen. Toch staan u nog steeds verrassingen te wachten zodra u echt veel bestanden tegelijk gaat downloaden.

Ons advies hier is vooral: houd het simpel. Begin met gewoon een stapel bestanden te downloaden. U kunt Python gebruiken en daarna uitbreiden naar meerdere threads. Maar soms is het nóg eenvoudiger om Bash-bestanden direct vanuit de database te genereren en er vervolgens meerdere in verschillende terminalvensters te draaien om op te schalen. Een snelle technische truc die het vermelden waard is: OUTFILE gebruiken in MySQL; daarmee kunt u overal schrijven als u “secure_file_priv” in mysqld.cnf uitschakelt (en zorg er ook voor dat u AppArmor uitschakelt/overschrijft als u op Linux zit).

We slaan de data op op eenvoudige harde schijven. Begin met wat u al hebt en breid langzaam uit. Het kan overweldigend zijn om aan het opslaan van honderden TB aan data te denken. Als dat de situatie is waar u mee te maken hebt, zet dan eerst een goede subset online, en vraag in uw aankondiging om hulp bij het opslaan van de rest. Als u zelf meer harde schijven wilt aanschaffen, dan heeft r/DataHoarder goede bronnen om goede deals te vinden.

Probeer u niet te veel zorgen te maken over ingewikkelde bestandssystemen. Het is gemakkelijk om in het konijnenhol te belanden van het opzetten van zaken zoals ZFS. Eén technisch detail om wel rekening mee te houden, is dat veel bestandssystemen slecht omgaan met heel veel bestanden. We hebben gemerkt dat een eenvoudige oplossing is om meerdere mappen aan te maken, bijvoorbeeld voor verschillende ID-bereiken of hash-prefixen.

Controleer na het downloaden van de data zeker de integriteit van de bestanden met behulp van hashes in de metadata, indien beschikbaar.

6. Distributie

U hebt de data, waarmee u (hoogstwaarschijnlijk) de eerste piraten-mirror ter wereld van uw doelwit in bezit hebt. In veel opzichten is het moeilijkste deel voorbij, maar het riskantste deel ligt nog voor u. U bent immers tot nu toe onopvallend geweest; onder de radar gevlogen. Het enige wat u hoefde te doen was voortdurend een goede VPN te gebruiken, uw persoonlijke gegevens nergens in te vullen (duh), en misschien een speciale browsersessie te gebruiken (of zelfs een andere computer).

Nu moet u de data distribueren. In ons geval wilden we de boeken eerst terug bijdragen aan Library Genesis, maar we ontdekten al snel de moeilijkheden daarbij (fictie vs non-fictie sorteren). Daarom kozen we voor distributie via torrents in de stijl van Library Genesis. Als u de mogelijkheid hebt om bij te dragen aan een bestaand project, kan dat u veel tijd besparen. Er zijn echter momenteel niet veel goed georganiseerde piraten-mirrors.

Stel dat u besluit de torrents zelf te distribueren. Probeer die bestanden klein te houden, zodat ze gemakkelijk te mirrorreren zijn op andere websites. Vervolgens zult u de torrents zelf moeten seeden, terwijl u anoniem blijft. U kunt een VPN gebruiken (met of zonder port forwarding), of met ‘getumbl’de Bitcoins betalen voor een seedbox. Als u niet weet wat sommige van die termen betekenen, zult u flink moeten lezen, want het is belangrijk dat u de afwegingen qua risico’s hier begrijpt.

U kunt de torrentbestanden zelf hosten op bestaande torrentwebsites. In ons geval kozen we ervoor om daadwerkelijk een website te hosten, omdat we onze filosofie ook op een duidelijke manier wilden uitdragen. U kunt dit zelf op vergelijkbare wijze doen (wij gebruiken Njalla voor onze domeinen en hosting, betaald met ‘getumbl’de Bitcoins), maar neem ook gerust contact met ons op zodat wij uw torrents kunnen hosten. We willen in de loop van de tijd een uitgebreide index van piraten-mirrors opbouwen, als dit idee aanslaat.

Wat betreft de keuze van een VPN: hierover is al veel geschreven, dus we herhalen alleen het algemene advies om op reputatie te kiezen. Echte, door rechtbanken getoetste no-log-beleidslijnen met een lange staat van dienst in het beschermen van privacy zijn naar onze mening de optie met het laagste risico. Let erop dat u, zelfs als u alles goed doet, nooit tot nul risico komt. Bijvoorbeeld: wanneer u uw torrents seedt, kan een zeer gemotiveerde actor van een natiestaat waarschijnlijk naar inkomende en uitgaande datastromen bij VPN-servers kijken en afleiden wie u bent. Of u maakt simpelweg ergens een fout. Dat hebben wij waarschijnlijk al gedaan, en dat zullen we opnieuw doen. Gelukkig geven natiestaten daar niet zo veel om als het om piraterij gaat.

Een beslissing die u per project moet nemen, is of u het publiceert onder dezelfde identiteit als voorheen, of niet. Als u dezelfde naam blijft gebruiken, kunnen fouten in operationele beveiliging uit eerdere projecten u later duur komen te staan. Maar publiceren onder verschillende namen betekent dat u geen duurzame reputatie opbouwt. Wij kozen ervoor om vanaf het begin sterke operationele beveiliging te hanteren, zodat we dezelfde identiteit kunnen blijven gebruiken, maar we zullen niet aarzelen om onder een andere naam te publiceren als we een fout maken of als de omstandigheden daarom vragen.

Bekendheid geven kan lastig zijn. Zoals we zeiden, is dit nog steeds een nichecommunity. We postten oorspronkelijk op Reddit, maar kregen pas echt tractie op Hacker News. Voor nu raden we aan het op een paar plekken te posten en te kijken wat er gebeurt. En nogmaals: neem contact met ons op. We helpen graag om het woord te verspreiden over meer piraten-archiveringsinspanningen.

Conclusie

Hopelijk is dit nuttig voor beginnende piraten-archivarissen. We heten u graag welkom in deze wereld, dus aarzel niet om contact op te nemen. Laten we zo veel mogelijk van ’s werelds kennis en cultuur bewaren, en het overal en wijd verspreid mirrorreren.

- Anna en het team (Reddit)