包下载的缓存代理

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-cachePC_USERPC_GROUPCACHE_DIRHOSTPORTSOURCES,和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)了解更多详细信息。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring引导WorkManagerTaskExecutor   如何在Java 8中根据对象的属性求和   java Hibernate正在外键字段中插入空值   java JDBC视频教程   java Spring启动应用程序在尝试从端点返回JSON响应时,会因UnknownContentTypeException而停止   JavaSpringWar在本地工作,但不在服务器tomcat中工作(请求的bean当前正在创建中:是否存在无法解析的循环引用?)   java在spring MVC应用程序中防止XSS攻击   java无法解析主机名意味着如何在安卓 studio的异步任务中解析主机名   安卓如何在java中按给定的天数排列数据以数组形式显示?   Maven Junit测试用例在java中崩溃。lang.NoClassDefFoundError:org/slf4j/LoggerFactory   java如何在父布局中多次添加片段?   MapApp中的java Android Dex BufferOverflowException   java在本例中如何抑制打印对话框?   java SAX在最大深度查找节点   java如何从Json响应中获取嵌套属性和图像   java如何在MDB中获得最大重试次数?   java Include FXML从引发异常。罐子   java Flexjson如何序列化包含映射的复杂层次结构   安卓 Java在自定义适配器中创建对两个模型的引用