[译]如何成为“海盗”存档者?

发布于 2022-11-17  1772 次阅读


原文:How to become a pirate archivist – Anna’s Blog by annas-blog.org, 2022-10-17
翻译已得到作者允许。

提示:本文“海盗pirate”一词与“盗版”同义:

pirate: a person who sails in a ship and attacks other ships in order to steal from them

提示:本文“收藏collect(~ion)”“存档archive”“镜像mirror”含义相似,且均可作动词和名词。
注:「Pirate Library Mirror」 是一个匿名盗版图书馆镜像项目,声称致力于人类知识的保存和解放,即长期保存。该项目镜像的第一个图书馆是 Z-library,2022年7月1日首次发布 7T 的电子书资源,9月25日再次发布 24TB 数据,总计 31TB 电子书。镜像包含元数据和种子文件,需通过 Tor 网络访问。——芸窗


在我们深入研究之前,Pirate Library Mirror 有两个更新:

  1. 我们得到了一些极其慷慨的捐赠。第一笔是来自匿名人士的1万美元,他也一直在支持“bookwarrior”,即 Library Genesis 的原始创始人。特别感谢 bookwarrior 促成这次捐款。第二笔是来自一位匿名捐赠者的1万美元,他在我们上次发布后与我们取得了联系,并得到了帮助。我们也有一些较小的捐赠。非常感谢你们的慷慨捐赠。我们有一些令人兴奋的新项目正在进行中,这些捐款将会有所助益,请继续关注。
  2. 我们之前在第二个版本的大小上遇到了一些技术难题。现在,我们的种子已经开始做种了。我们还收到了一位匿名人士的慷慨提议,可以在他们的超高速服务器上给我们的收藏做种,所以我们正在向他们的机器做特别的上传,之后其他下载收藏集的人应该能看到速度有很大的提高。

我们可以写出一整本为什么要做数字保存digital preservation的长篇大论,特别是关于盗版存档,但让我们为那些不太熟悉的人提供一个快速入门。世界正在产生比以往更多的知识和文化,但也有更多的知识和文化正在逝去。人类在很大程度上将这些遗产委托给了学术出版商、流媒体服务和社交媒体公司等企业,而他们往往不是好管家。去看看纪录片《Digital Amnesia》,或者 Jason Scott 的演讲吧。

译注:

是有些机构在尽可能多地做好存档工作,但他们受法律约束。作为“海盗”,我们处于独一无二的位置,可以去存档那些由于版权执法或其他限制,他们无法触及的收藏。我们还可以在世界各地多次镜像我们的收藏,增加妥善保存的机会。

咱先抛开诸如“知识产权的利弊、搞违法活动的道德问题、对审查制度的沉思、知识获取和文化”这类议题。直接从“How”开始——我们将分享我们的团队是如何成为海盗档案管理员的,以及在这个过程中学到的经验教训。踏上这段旅程总会遭遇很多挑战,希望我们能帮助你度过其中的一些难关。

[译]如何成为“海盗”存档者?
译注:LTO 磁带是种冷存储大量文件的很经济的方案(就是用于写入/读取磁带的磁带机比较贵),LTO-9 是第9代,能提供单盘 18 TB 的容量。感兴趣可以看看:金枪鱼之夜:LTO 磁带存储入门初探 | 清华大学 TUNA 协会(2021)、金枪鱼之夜:空运磁带的 PB 级实验数据传输 | 清华大学 TUNA 协会(2022)

社区

第一个挑战说出来你可能不信,它既不是技术问题,也不是法律问题,而是一个心理问题:在暗处中做这项工作可能会非常孤独——取决于你打算做什么,以及你的威胁模式,你可能必须非常小心。一方面,我们有像 Sci-Hub 的创始人 Alexandra Elbakyan* 这样的人,她对自己的活动非常开放。 但如果她此时访问西方国家,她很有可能被捕且面临数十年的监禁。你愿意冒这个险吗?所以我们处于另一个极端——非常小心,不留下任何痕迹,并有很强的操作安全性operational security

* 正如“ynno”在 HN 上提到的,Alexandra 最初不想被人知道:“她的服务器被设置为从 PHP 发出详细的错误消息,包括错误源文件的完整路径,位于目录 /home/ringo-ring,可以溯源到她在一个不相关网站上的用户名,和她的真名相连。在那次曝光之前,她是匿名的。”所以,在你用于这些东西的计算机上使用随机用户名,以防配置错误。

然而,这种保密性伴随着心理成本。多数人都享受自己做的工作得到他人认可的感觉,但你却不能,你在现实生活中无法借此获得任何荣誉。即使是简单的事情也可能变得棘手,比如朋友问你最近在做什么(某些时候,回答“鼓捣我的 NAS / homelab”有些过时)。

所以,去加入一些社区吧,这对降低心理成本很重要:您可以那些朋友倾诉来放弃一些操作安全性,因为你可以深深地信任这些朋友。即使这样,也要注意不要把什么都记录下来,以防他们必须将通讯记录交给当局,或者他们的设备被没收。

更好的是找到一些海盗同伴。如果您的亲密朋友有兴趣加入您,那太好了!否则,您也可以在网上找到其他人。可悲的是,这仍然是一个小众社区。到目前为止,我们只发现了少数几个活跃在这个领域的人。好的起点似乎是 Library Genesis 论坛和 r/DataHoarder。Archive Team 里也有志同道合的人,尽管他们在法律范围内运作(即使在法律的某些灰色地带)。传统的“warez指破解软件的制作者”和盗版领域也有类似想法的人。

我们对如何培养社区和探索想法持开放态度。欢迎随时在 Twitter 或 Reddit 上给我们留言。也许我们可以举办某种论坛或聊天组。一个挑战是,使用通用平台很容易受到审查,因此我们必须自己托管它。在将这些讨论完全公开(更多潜在的参与)与将其私有化(不让潜在的“目标”知道我们将要抓取它们)之间也有一个权衡。我们将不得不考虑这一点。如果您对此感兴趣,请告诉我们!

项目

当我们做一个项目时,它有几个阶段:

  1. 领域选择/理念:大致想专注于哪里,为什么?你有哪些独特的激情、技能和情况,可以为你所用?
  2. 目标选择:你将镜像哪个具体的收藏?
  3. 元数据抓取:编目文件的信息,而不实际下载(通常大得多的)文件本身。
  4. 数据选择。根据元数据,缩小选择范围以便存档最相关的数据。可能全部的数据都需要存,但往往会有合理的方法来节省空间和带宽。
  5. 数据抓取:实际获取数据。
  6. 分发:将其打包成种子,在某处发布,让人们传播。

这些步骤不是完全独立的,通常来自后续的见解会让您回到早期阶段。例如,在元数据抓取期间,您可能会意识到您选择的目标具有超出您技能水平的防御机制(如 IP 封禁),您无功而返,只好去找其他目标。

1. 领域选择/理念

世上需要被拯救的知识和文化遗产不计其数,可能令人不知所措。时常花点时间思考一下吧,思考你能为此作何贡献。

不妨问问自己以下这些问题:

  • 你为什么对这个感兴趣?你对什么充满热情?如果我们能找到一群人,他们都将他们特别关心的东西归档,那将涵盖很多! 你会比一般人更了解你的热情,比如要保存哪些重要数据,最好的收藏和在线社区是什么等等。
  • 你具备的哪些技能可以为你所用?例如,如果您是在线安全专家,您可以找到击败特定目标的 IP 封禁的方法。如果您擅长组织社区,那么也许您可以围绕一个目标团结一些人。当然,如果只是为了在整个过程中保持良好的操作安全性,了解一些编程是很有用的。
  • 你有多少时间来做这件事?我们的建议是在你掌握了窍门后从小做起,做更大的项目,但它可能会耗费大量精力。
  • 什么是值得关注的高杠杆领域? 如果您要在盗版存档上花费 X 小时,那么您如何才能获得最大的“物有所值”呢?
  • 你有哪些独特的思考方式? 您可能有一些其他人可能错过的有趣想法或方法。

这些问题只是引子,每人对此有不同的思维。

在我们的案例中,我们特别关心科学资料的长期保存。我们知道 Library Genesis,以及它是如何通过使用 BT 种子来到达完整镜像多次的。我们喜欢这个主意。然后有一天,我们中的一个人试图在 Library Genesis 上找一些科学教科书,结果没找到,这让人怀疑它到底有多完整。然后我们在网上搜索了这些教科书,并在其他地方找到了它们,这为我们的项目埋下了种子。甚至在我们知道 Z-Library 之前,我们就有了不尝试手动收集所有这些书籍,而是专注于镜像现有的馆藏,并将它们回馈给 Library Genesis 的想法。

2.目标选择

那么,有了大致的目标领域后,我们该具体镜像些什么(目标)?好的目标一般有以下特征:

  • 独特性:尚未被其他项目很好地覆盖。
  • 可访问性:不使用大量保护措施来防止您抓取他们的元数据和数据。
  • 特别洞察:你有一些关于这个目标的特殊信息,比如你以某种方式对这个目标有特殊的访问权限,或者你想出了如何击败他们的防御。这不是必需的(我们即将进行的项目就没有做任何特别的事情),但它肯定会有所帮助!

当我们在 Library Genesis 以外的网站上找到我们的科学教科书时,我们试图弄清楚它们是如何进入互联网的。然后,我们找到了 Z-Library,并意识到虽然大多数书籍并不是首先出现在那里,但它们最终会出现在那里。我们了解了它与 Library Genesis 的关系,以及(财务)激励结构和卓越的用户界面,这两者都使它成为一个更加完整的收藏。然后,我们进行了一些初步的元数据和数据抓取,并意识到我们可以利用我们的成员对大量代理服务器的特殊访问权限来绕过他们的 IP 下载限制。

当您在寻觅不同的目标时,使用 VPN 和一次性 Email 地址隐藏您的踪迹很重要,我们稍后会详细讨论。

3.元数据抓取

让我们开始聊技术

为了从网站上抓取元数据,我们让事情保持简单。我们使用 Python 脚本,有时使用 curl 和 MySQL 数据库来存储结果。我们没有使用任何可以测绘(map)复杂网站的花哨的抓取软件,因为到目前为止,我们只需要通过枚举 id 和解析 HTML 来抓取一两种类型的页面。如果没有容易枚举的页面,那么您可能需要一个合适的爬虫来尝试查找所有页面。

在开始抓取整个网站之前,请尝试手动操作一下。手动浏览几十页,了解它是如何工作的。有时您会以这种方式遇到 IP 封禁或其他有趣的行为。数据抓取也是如此:在深入了解此目标之前,请确保您可以有效地下载其数据。

为了绕过限制,您可以尝试一些事情。是否有任何其他 IP 或服务器托管相同的数据但没有相同的限制?是否有任何 API 端点没有限制,而其他端点有?您的 IP 以什么下载速率被封禁,以及多长时间?或者你没有被封禁而是被限制了?如果您创建一个用户,那么情况会如何变化?您可以使用 HTTP/2 来保持连接打开(HTTP Keep-Alive),这会提高您请求页面的速度吗?是否有页面同时列出多个文件,那里列出的信息是否完整?

您可能想要保存的内容包括:

  • 标题
  • 文件名/位置
  • ID:可以是一些内部 ID,但 ISBN 或 DOI 等 ID 也很有用。
  • 大小:计算您需要多少磁盘空间。
  • Hash(md5,sha1):确认您正确下载了文件。
  • 添加/修改日期:以便您可以稍后再回来下载以前未下载的文件(通常也可以用 ID 或 Hash)。
  • 描述、类别、标签、作者、语言等。

我们通常分两个阶段执行此操作。首先,我们下载原始 HTML 文件,通常直接下载到 MySQL 中(以避免大量小文件,我们将在下面详细讨论)。然后,在一个单独的步骤中,我们遍历这些 HTML 文件并将它们解析为实际的 MySQL 表。这样,如果您在解析代码中发现错误,就不必从头重新下载所有内容,因为您可以使用新代码重新处理 HTML 文件。并行化处理步骤通常也更容易,从而节省一些时间(您可以在抓取运行时编写处理代码,而不必一次编写两个步骤)。

最后,请注意,对于某些目标,抓元数据就是抓一切。有一些大量的元数据集合没有得到妥善保存。

4. 数据选择

通常,您可以使用元数据找出要下载的合理数据子集。即使您最终想要下载所有数据,也可以先确定最重要的项目的优先级,以防您被站方检测到并促使他们改进了防抓取措施;或者因为您需要购买更多磁盘;或者仅仅是因为在你开始下载前,你的生活中出了其他的问题。

例如,一个收藏可能具有相同基础资源(如一本书或一部电影)的多个版本,其中一个被标记为最佳质量。优先保存最优版本会很有意义。您最终可能希望保存所有版本,因为在某些情况下元数据可能被错误地标记,或者版本之间可能存在未知的权衡取舍(例如,“最佳版本”在大多数方面可能是最好的,但在其他方面则更糟,例如分辨率更高但缺少字幕的电影)。

您还可以搜索您的元数据数据库以查找有趣的内容。托管的最大文件是什么,为什么这么大?最小的文件是什么?当涉及到某些类别、语言等时,是否存在有趣或意想不到的规律?是否有重复或非常相似的标题?数据的时间是否有规律,比如有一天同时添加了许多文件?横看成岭侧成峰,以不同角度视察你的数据集,您可从中受益良多。

在我们的案例中,我们用 Library Genesis 中的 MD5 Hash 对 Z-Library 的图书做去重,从而节省了大量下载时间和磁盘空间。这是一个相当独特的案例。多数情况下,没有全面的数据库来说明哪些文件已经被海盗同行们妥善保存了。这本身就是个机会,如果能有一个定期更新的概述,比如已经在BT网站上广泛传播的音乐和电影,并因此在盗版镜像中纳入较低的优先级,那就太好了。

5.数据抓取

现在您已准备好实际批量下载数据。如前所述,此时您应该已经手动下载了一堆文件,以便更好地了解目标的行为和限制。但是,一旦您真正开始一次下载大量文件,您仍然会有惊喜。

我们在这里的建议主要是保持简单。从下载一堆文件开始。你可以使用 Python,然后扩展到多线程。但有时更简单的是直接从数据库中生成 Bash 脚本(译注:这句话没看懂),然后在多个终端窗口中运行多个脚本来扩大规模。

诀窍:可以在 MySQL 中使用 OUTFILE。如果你在 mysqld.cnf 中禁用 “secure_file_priv”,你就可以把任何地方的文件写进数据库或反之(如是 Linux,请确保禁用/覆盖 AppArmor)。

我们将数据存储在硬盘上。你应从手头已有的存储空间开始,慢慢扩容。要想出个存储数百TB的数据的可行方案确实很困难。如果你面临的就是这种情况,就先拿出一个好的子集,并在你的公告中寻求志愿者的帮助,以便存储剩余部分。

如果你确实想自己买更多硬盘,那么 r/DataHoarder 上有些很好的购盘指南。

不要对花哨的文件系统担心太多。像设置 ZFS 之类的东西,很容易踩坑。注意,许多文件系统不能很好地处理大量文件。我们发现一个简单的解决方法是创建多个目录,例如针对不同的 ID 范围或 Hash 前缀。

译注:我们 STWP 则偏好使用 Btrfs 文件系统,它不像 ZFS 那样必须使用 ECC 的内存,对设备的要求不高,资源占用小。而且同样支持 动态 Innode(可以存无限数量的文件)、SSD和HDD优化、快照、文件系统级的透明压缩(推荐用 zstd)。

下载数据后,请务必使用元数据中的 Hash 检查文件的完整性(如果有)。

6.分发

一旦你抓取好了你的目标的数据,您很可能就成了其第一个海盗镜像的拥有者。此时,最困难的部分已经结束,但最危险的部分仍在前方。毕竟,到目前为止,您一直是隐身的。但要在光天化日之下搞事情,您需要全过程使用一个好的 VPN(不会以任何形式收集您的个人详细信息(这不废话)),并且尽量使用单独的浏览器会话(甚至是不同的电脑)。

现在您必须分发数据。在我们的案例中,我们首先想将书籍贡献回 Library Genesis,但很快就发现了其中的困难(小说与非小说的分类问题)。所以我们决定使用 Library Genesis 风格的种子自己分发。如果您有机会去贡献现有的项目,那么这可以为您节省大量时间。然而,目前没有多少组织良好的盗版镜像项目。

因此,假设您决定自己分发种子。尽量保持这些文件很小,以便它们很容易在其他网站上镜像。然后,您必须自己做种,同时仍然保持匿名。你可以使用 VPN(带或不带端口转发均可),或者用混币器*来支付。如果您不知道其中一些术语的含义,那么您需要阅读大量内容,因为了解此处的风险权衡非常重要。

*译注:「混币器」透过将可能被识别的加密货币资金与其他货币混合以掩饰资金的流向,令人难以追溯资金的源头。混币器旨于提高加密货币的匿名性。——加密货币混币器 – 维基百科

您可以在现有的 torrent 网站上自行托管 torrent 文件。在我们的案例中,我们选择实际托管一个网站,因为我们还想以清晰的途径传播我们的理念。如果你也想这样做,你可以用类似的方式(我们将 Njalla* 用于我们的域和托管,使用比特币混币支付),也可以随时联系我们让我们托管您的种子。我们正在寻求建立一个全面的 pirate mirrors 索引,如果这个想法得到认可的话(译注:这里也许是指他们想做一个同类盗版存档项目 awesome-list )。

*译注:Njalla 是一个匿名的域名、网站托管和VPN服务提供商。

至于怎么挑 VPN,网上写这个的文章已经多到爆了,所以我们只重复通常的建议——看“信誉”。我们认为,那些经过法庭的“实战测试”、无日志、且运营时间长的提供商是风险最低的选择。请注意,即使您啥步骤都做对了,也永远无法达到零风险。例如,在做种时,好巧不巧,一个动机强烈的民族国家代行人民族国家代行人nation-state actor会查看 VPN 服务器的网络流量,并推断出你是谁。或者你只是简单地搞砸了一些事情。至于我们嘛……我们可能已经搞砸过了,未来可能还会搞砸。幸运的是,民族国家对盗版并不那么关心。

每个项目都要决定是否使用用以前的身份发布它。如果您继续用同一个名字,那么早期项目在操作安全方面的失误可能会让你阴沟里翻船。但改头换面意味着您不会建立更持久的声誉。我们从一开始就选择了强大的操作安全性,这样我们就可以继续用相同的身份,但如果真翻车了或情况需要,我们会毫不犹豫地改头换面。

做项目宣传可能会很棘手。正如我们所说,这仍然是一个小众社区。我们最初在 Reddit 上做推广,但在 Hacker News 上得到了真正的支持。目前,我们的建议是在多个平台发文,看看会发生什么。另外,敬请联系我们。我们很愿意传播更多盗版存档工作的信息。

结论

希望以上内容对“海盗新人”会有所帮助。我们很高兴欢迎您来到这个世界,所以不要犹豫,请联系我们。让我们尽可能多地保存世界上的知识和文化,并将其远播吧。

– Anna 与 Pirate Library Mirror 团队 (TwitterReddit


原文:How to become a pirate archivist – Anna’s Blog by annas-blog.org, 2022-10-17
翻译已得到作者允许。


人生有無數種可能,人生有無限的精彩,人生沒有盡頭。一個人只要足夠的愛自己,尊重自己內心的聲音,就算是真正的活著。