包下载的缓存代理
package-cache的Python项目详细描述
包缓存是用于包下载的简单缓存代理。只是 配置上游源列表(使用--source选项) 并将客户端指向包缓存服务器。第一次 包被请求,我们从其中一个源下载该包 并在本地缓存它,同时将其流式传输到客户端。未来 对该包的请求直接从本地缓存流式传输。 这有助于减少网络和源服务器上的负载,如果 有多个本地客户端将重复请求相同的 文件(例如Gentoo’s distfiles)。
我们对Cache-Control headers没什么好感,因为 包源文件应在文件名中包含版本戳 本身(例如my-package-0.1.2.tar.gz)。文件缓存在 第一个请求,永远保存。这意味着每个包裹 如果你以后需要的话,你曾经要求过的会一直在那里。 这很好,但最终会消耗相当多的磁盘空间。 您可能希望定期筛选缓存,使用访问时间 看看你将来不太可能需要哪些文件。
包缓存是用python编写的,在外部没有依赖项 标准图书馆。
运行包缓存
默认情况下,我们将使用Python’s reference WSGI implementation运行 我们的应用程序:
$ package-cache --source http://distfiles.gentoo.org/
有关其他命令行选项,请参见:
$ package-cache --help
如果您需要性能更好的后端,可以尝试Gunicorn。
Gentoo
在contrib/openrc/init.d中有一个OpenRCinit脚本,并且 我的wtk overlay中的包缓存ebuild。将包缓存用作 缓存distfiles下载的代理,将wtk覆盖添加到 layman然后运行:
# emerge --ask --verbose net-proxy/package-cache # rc-update add default net-proxy/package-cache # rc-service package-cache start
可以通过在中设置变量来调整参数 /etc/conf.d/package-cache(PC_USER,PC_GROUP, CACHE_DIR,HOST,PORT,SOURCES,和PC_OPTS)。见 默认值的init脚本。
设置包缓存服务后,只需指向本地 包管理器到缓存服务器,而不是通常的镜像。为了 Portage,大概是这样的:
GENTOO_MIRRORS=”http://my-package-cache-server.net:4000/”
在你的/etc/portage/make.conf里。
如果你不想调整你的客户(也许有很多 它们,或者它们超出了您的直接控制),您可以添加一些 防火墙规则到路由器,以透明地代理特定的gentoo 镜子。具有内部eth1和上的内部代理 192.168.0.11,看起来像:
# CACHE_IP=192.168.0.11 # for SOURCE_IP in $(dig +short distfiles.gentoo.org); > do > iptables --table nat --append PREROUTING --protocol tcp \ > --in-interface eth1 ! --source "${CACHE_IP}" \ > --destination "${SOURCE_IP}" \ > --match tcp --destination-port 80 \ > --jump DNAT --to-destination "${CACHE_IP}:4000" ; > done
要稍后删除这些条目,请使用^{tt15}重复该命令$ 而不是--append。您可能需要列出SOURCE_IP值 如果DNS条目已更改,则显式显示。运行:
# iptables --table nat --list PREROUTING --numeric
列出条目。见iptables(8)和 iptables-extensions(8)了解更多详细信息。