Freenet 安装与管理
Freenet 可能是目前最令人兴奋的文件共享技术,但不幸的是,它有点难以安装和管理。当笔者在 2000 年 9 月首次接触到它时,为了弄清楚它,他几乎熬夜了一个周末(浓茶和死亡金属能创造奇迹)。幸运的是,从那时起,Freenet 的易用性已经有了很大的进步。只要花一两个小时的工作,任何精通 Linux 系统管理的的人都应该能够启动并运行自己的 Freenet 节点。
Java 运行时的安装不在本文的讨论范围之内。但是,在“资源”部分可以找到推荐的 JDK(Java 开发工具包)列表以及关于它们的一些警告。
如果您想运行一个全职的、有贡献的节点,您需要 100MHz 486 或更高级别的处理器,以及至少 32MB 的 RAM。对于硬盘空间没有最低要求(除了实际软件大约 1MB),但在这个 20GB 硬盘的时代,如果您为 Freenet 数据留出几个 GB 的空间,那就太好了。对于您的互联网连接,需要静态 IP 地址或动态 DNS。任何比拨号上网更快的连接都可以。至于正常运行时间,如果您的节点 24/7 运行,您可以做出贡献(停机时间最多一小时左右是可以的,但尽量避免超过这个时间)。如果运行时间少于此,您的节点仍然可以正常工作,但您不会为网络做出任何贡献。
对于兼职的、非贡献节点,类似的系统和内存要求适用,但您可以使用任何您喜欢的互联网连接。
首先,您需要实际下载 Freenet。这里您有两个主要选择。您可以下载二进制文件或选择源代码包。如果您运行 Debian,Mr. Bad 创建了一个 Debian 包(参见“资源”)。由于 Freenet 是用 Java 编写的,您不必担心二进制兼容性,因此最简单的方法是直接下载二进制包。之后的问题是您想要哪个版本。发布版(当前版本为 0.3.5)还是 CVS 副本?您可能首先想要使用发布版。请务必下载 Linux tarball,而不是 Windows 可执行文件。
Linux 版本的 Freenet 没有任何安装脚本。相反,您只需将 tarball 解压缩到您选择的目录中。我个人建议创建一个特殊的 Freenet 用户,并将 Freenet 软件和数据存储放在 Freenet 用户的主目录中。
接下来,您需要使您的节点在启动时自动启动。不幸的是,并非所有发行版都以完全相同的方式处理启动脚本。如果您想使用 dæmontools,请按照 freenet.netunify.com/25 的说明进行操作。否则,使用类似下面的内容:
su - -c "cd ~/freenet ; rm freenet.log nohup.out ; nohup ./freenet_server & >/dev/null" freenet
这会将用户更改为 Freenet 用户。“-” 将环境设置为登录 shell 的环境,以便像从普通 shell 运行时一样设置环境。最后,命令 -c 将目录更改为 Freenet 目录,删除旧的日志文件,并在 nohup 模式下运行 Freenet 服务器,将任何非错误信息重定向到 /dev/null。您需要确保 Java 程序本身在您的路径中。尝试从房间 shell 运行 Java 来测试这一点。
Freenet 节点软件使用两个配置文件:.freenetrc,节点的配置;以及 .fproxyrc,fproxy 模块的配置。在这两个文件中,.freenetrc 包含除一个选项之外的所有选项;.fproxyrc 只是告诉 fproxy 它应该连接到哪个 Freenet 节点。
您首先要设置的是 .freenetrc 文件顶部的 transient 选项。默认值 “no” 意味着您的节点会将它的存在告知其他节点。如果您计划运行一个 24/7 节点,具有良好的互联网连接和静态 IP 地址或动态 DNS 服务,这可能是您想要的。如果您将 transient 设置为 “yes”,您的节点将不会将它的存在告知其他节点。如果您有不稳定的正常运行时间、缓慢的互联网连接或没有动态 DNS 的动态 IP 地址,请将 transient 设置为 “yes”。
您需要将 Freenet 使用的端口更改为 5,000 到 65,535 之间的随机端口。如果每个人都在同一个端口上运行他们的节点,Freenet 将更容易被过滤掉,这不是一件好事。要做到这一点,请更改 .freenetrc 中的 listenPort 值和 .fproxyrc 中的 serverAddress 以反映新的端口。此外,请记住在使用命令行客户端时使用 -serverAddress 选项,或者将 FREENET 环境变量设置为您的节点的地址。
如果您有动态 IP 地址但使用动态 DNS,您仍然可以通过将 nodeAddress 设置为您的动态 DNS 名称来为 Freenet 做出贡献。它不会告诉其他 Freenet 节点您机器的 IP 地址,而是会告诉它们 nodeAddress 设置中的地址。
默认情况下,Freenet 将在数据存储中最多存储 1,000 个项目,并最多使用 500MB 的硬盘空间。diskCache 和 dataStoreSize 选项控制这一点。请注意,由于 bug,实际使用的空间很容易超过这个值。通常,数据存储中的文件会简单地丢失,并且在应该删除时不会被删除。定期(每天或每周)重启节点将清理掉那些丢失的文件。其次,在传输大型文件时,即使这样做会使节点超出大小限制,节点也会在传输过程中存储整个文件。希望当您阅读本文时,这些 bug 已经被修复,尽管第二个问题由于各种原因很难修复。
之后,我们有 dataPath 和 dataPropertiesPath,它们控制数据存储的位置(默认值是您安装 Freenet 的 .freenet 目录)。两者之间的区别在于 dataPath 是实际数据放置的位置,而 dataPropertiesPath 控制放置描述存储数据的 .inf 文件。在所有但非常规的情况下,这两个值将是相同的。您可能希望将此路径设置为另一个分区,该分区具有比默认分区更多的可用空间。任何支持长文件名的文件系统都可以。请注意,您不能同时使用多个分区,您必须在不同的端口上运行多个节点才能实现这一点。
还有一个选项可以限制使用的带宽,bandwidthLimit。此限制仅适用于传出数据。传入数据不受限制(参见 maximumConnectionThreads)。对于大多数人来说,50K/秒的限制可能就足够了,但如果可以,请将 bandwidthLimit 提高或禁用到您传出带宽的三分之一到一半左右,对于您的普通电缆或 DSL 线路,大约为 50K/秒到 300K/秒。请注意,带宽限制不适用于来自同一台机器的请求。
传入带宽可以在一定程度上受到限制,通过 maximumConnectionThreads 选项。此选项限制来自其他节点的传入连接的最大数量。更改此选项会更改使用的带宽和内存量。大多数人可能可以将它保持在默认的 50K/秒,但如果您有内存限制(或过剩),您可以减少或增加它。
请注意,目前没有办法限制给定时间段内的总数据传输量。因此,到目前为止,还没有办法只允许每月传输 1GB 的数据。
在配置文件末尾是控制日志记录的选项。默认情况下,使用单个日志文件 freenet.log(由 logFile 控制)。logging 选项控制记录事件的阈值。默认值 “normal” 不会记录您的节点发送和接收数据的任何琐碎细节。“minor” 设置通常可以提供有用的调试信息,但是调试是多余的。将日志记录设置为 minor 可能是您最好的选择。
最后,还有一个不在默认配置文件中的选项,informDelay。在将节点的地址写入 informURL 之前,节点将等待默认的 24 小时,以确保您的节点是稳定的。您的节点必须连续运行 24 小时,informURL 才会收到通知。最初,informURL 系统的一个大问题是,人们会尝试 Freenet 几分钟,然后认为它不值得,并删除 Freenet 软件。与此同时,他们无法正常运行的节点的地址被发送到 informURL。当节点尝试获取工作地址时,informURL 中的几乎每个地址都无法正常运行。情况变得如此糟糕,以至于启动并运行节点的最大问题之一是找到另一个节点!
如果您计划每天重启节点一次,您必须将 informDelay 更改为其他值。通过在配置文件中添加行 informDelay = 0 将其设置为 0 将禁用该功能,这正是您想要的。否则,请不要碰 informDelay!
现在您已经启动并运行了您的节点,您想看看它是否工作,对吗?首先尝试运行
freenet_request test-key
如果它工作,您将在控制台上看到消息:恭喜!您已经获取了一个 Freenet 密钥,在一些调试信息之后。如果它在两分钟左右或更长时间内没有任何反应,则它不工作。
接下来,尝试在您喜欢的 Web 浏览器中访问 URL https://:8081/KSK@Aardvark,看看 fproxy 是否工作。如果它工作,您将看到 Aardvark 的 Freenet 索引页面出现。
实际上让您的节点在网络中建立起来可能有点棘手。它应该并且通常会这样做,但通常有助于稍微推动这个过程以加快速度。这是一个 可选的 过程。这主要分为两个部分:查找其他节点和被其他节点所知。请注意,如果您正在运行瞬态节点,则第二部分并不重要。
第一部分很简单,使用 Freenet。只需查看一些内容,例如上面提到的 Aardvark 的 Freenet 索引 (KSK@Aardvark) 和 gj 的网页 (KSK@webpages/gj_jump0)。
第二部分有点困难。您可以使用以下命令将随机数据块 (1K) 插入 Freenet:
dd if=/dev/urandom bs=1024 count=1 | freenet_insert -length 1024 CHK@
当您的节点插入该数据时,其他节点将从数据包上的 SourceAddress 中了解您的节点。
在任何情况下,请记住,您的节点需要几天时间才能被其他节点所知,并且其他节点才会开始向您请求数据。因此,如果看起来没什么事情发生——不要惊慌!
正确设置后,Freenet 节点应该不需要任何持续的管理。但是,有一些可以自动化的任务需要完成。首先,需要轮换日志文件。其次,您需要定期重启 Freenet 软件。目前,除非您定期重启节点,否则 Freenet 的磁盘(我相信还有内存)使用量往往会膨胀。轮换日志文件(无论如何都需要重启节点)和重启节点都可以很容易地使用 restart_script 脚本(如列表 1 所示)完成。对于您的普通节点,每周重启一次应该就足够了。
IBM 的 JDK 可能是最容易安装的 JDK。它是预编译的并且可以工作,而且它是目前速度最快的 JDK 之一。缺点是它是专有的,需要注册才能下载。tarball 和 Red Hat RPM 都可以在以下网址找到:www.ibm.com/java/jdk/linux130/index.html。
Kaffe,开源 JDK,是另一种更困难的选择。您将必须编译 gmp 支持,这是大多数发行版在其 Kaffe 包中没有做的。Mr. Bad 的网站上提供了带有 gmp 支持的 Kaffe 的 Debian 包,如上所述。否则,从匿名 CVS 或源代码包编译,您可以在其中应用 Freenet README 中找到的补丁。当您运行 ./configure 时,请确保使用 --enable-gmp 选项启用 gmp 支持。
