dockerfiles
dockerfiles copied to clipboard
v4 v6同时绑定时好像不会主动发起v6连接?
unraid:6.11.5 docker镜像:4.4.5(天雪禁了qb每个版本的前两个小版本比如4.5.0和4.5.1这种) host网络类型,qb只开tcp,www.port.tools/port-checker-ipv6测试v4 v6端口全通。rarbg选了4个热门种+pt一个种测试90分钟。
qb选绑定“所有地址”,有上下行的v4 peer一切正常,flag参数里有 I(传入连接)和没 I 的peer都有,而v6 peer一方面数量远小于v4,另一方面有上下行的v6 peer的flag里全都有 I 。90分钟测试我全在手动ban掉v4 peer和flag有 I 的v6,但从没刷出过flag不带 I 的v6 peer。
qb选绑定“所有ipv6地址”,现在v6 peer一切正常,flag参数里有 I(传入连接)和没 I 的peer全都有了。直接切回绑定“所有地址”,暂停并重开任务,又变回老样子
这个很难讲,因素太多了。比如:仅ipv6时,tracker服务器主动向你广播了其他ipv6 peer,而ipv4+ipv6时,只给你广播了ipv4 peer;又或者同时存在ipv4+ipv6时,client会优先连接ipv4 peer,当已经满足了你所设置的条件时就不再联系ipv6 peer;又或者是一些tracker服务器对双ip支持不够,导致peer和peer间存在问题:或者是与tracker通信时间不一,双ip时,你的client在同tracker服务器通信时刚好没能拿到ipv6 peer,而服务器拿到你的peer时又刚好广播给其他peer了;又或者是90分钟这个时长太短,不足以支持你的观点;又或者是连接双方都是ipv4+ipv 6时,你的client仅主动建立ipv4连接不主动建立ipv6连接;又或者是版本太老,等等之类的。
此issue与本镜像倒是关系不大,如有疑惑请向官方提吧。
不好意思,主要手头几个社区几乎没深入关注qb这类工具的,只有不通时才有讨论,另外qb docker host网络类型和unraid有玄学兼容问题,以及qb自己也有bug,所以想了想还是发这讨论讨论。
我倒是知道当tracker有v4v6双栈时,qb如果向tracker ipv6地址汇报,可能只汇报自己v4或v6 ip,但是向tracker v4地址汇报时就能稳定提供自己v4+v6 ip。其他客户端不知道是否也有这bug? 来自天雪的一个旧问题:如何让 Qbittorrent 一个种子同时汇报 ipv4+ipv6
与unraid的玄学兼容坑了我十几小时:用host网络类型时qb几乎不会监听ipv4端口(v6一直正常),甚至局域网另一设备tcping qb的ipv4端口都死活不通,但其它不变只换成bridge或macvlan就恢复正常。三种网络类型的netstat -anp
没区别。unraid版本试过6.10和6.11,docker镜像全新安装过三个版本 linuxserver / 80x86 / hotio ,重启几十次+来回切换“只绑定v4/v6”时有三两次莫名其妙tcping ipv4通了,但放着不动几十分钟或者立刻切回绑定所有地址又不通了。
最后受 https://github.com/qbittorrent/qBittorrent/issues/13052#issuecomment-698318218 这条issue的20年的回复的启发(虽然我没像回复里那位用dmz),host网络类型时打开qb“使用我的路由的upnp/nat-pmp转发端口”,v4端口就这么通了😅,目前开着几十小时都通着。在线测端口网页我都没敢关,时不时测一测。还故意试过网关防火墙不回应qb发的upnp/nat-pmp开放端口请求,重启qb还是一切正常。
找到解决方法后才切到你这版qb,host类型 全新安装 一切重新配置,qb默认开着upnp选项,试过关闭这项并多次重启qb,v4端口都正常监听。莫名其妙修好了。
用macvlan时如果想用v6 SLACC而关闭unraid自动配置macvlan网络,由于qb启动后绑定地址快于虚拟网卡拿到ipv6全局唯一地址,于是此时qb无法监听ipv6,需要打开qb设置再点一次“应用”才能监听v6。这问题我还没找到修复/自动化解决方法。 bridge多一层nat,难受。
还试过关了qb直接同样host类型 同一端口,transmission docker开着一个月都没这问题,但tr太简洁连分类都没,任务多了再加上辅种找起来头大。
另外老哥有空的话能否加个“qb web查看日志”功能?(如下图80x86的) 因为iyuu要先过6个pt站验证才让用(hdai还润了),几个站我都没有,目前只能靠ptpp浏览器扩展手动辅种凑合,浏览器发送任务后qb时常没收到,不得不经常检查qb日志看看是ptpp发错下载链接还是pt站抽风qb下载种子超时。qb web能看日志的话排查ip监听问题也方便些。
需要打开qb设置再点一次“应用”才能监听v6。这问题我还没找到修复/自动化解决方法。
参考官方WIKI:https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-(qBittorrent-4.1)#set-application-preferences
通过qB的API(/api/v2/app/setPreferences
)向其POST一个JSON:json={"current_interface_address":"想要绑定的 IP地址,如果为空就是全部地址"}
。
另外老哥有空的话能否加个“qb web查看日志”功能?
本镜像未对官方代码作任何修改,对官方客户端作修改,万一出啥问题了得怪在这个镜像头上。官方已经合并代码了,在4.6.0版本中会具备此功能,如果你实在想提前用上的话,Backport一下,对我原本的Dockerfile增加三行内容即可以在低版本中构建出具备webui查看日志的功能,我已经验证是可行的。
在这两行中间:
https://github.com/devome/dockerfiles/blob/d2a596de3e526e9c74e20051f2cb8fc9e635c02a/qbittorrent/Dockerfile#L13-L14
增加一行变为:
samurai \
patch \
&& rm -rf /tmp/* /var/cache/apk/*
在这两行中间:
https://github.com/devome/dockerfiles/blob/d2a596de3e526e9c74e20051f2cb8fc9e635c02a/qbittorrent/Dockerfile#L19-L20
增加两行变为:
&& curl -sSL https://github.com/qbittorrent/qBittorrent/archive/refs/tags/release-${QBITTORRENT_VERSION}.tar.gz | tar xz --strip-components 1 \
&& wget https://patch-diff.githubusercontent.com/raw/qbittorrent/qBittorrent/pull/18290.patch \
&& patch -p1 < 18290.patch \
&& cmake \
Backport后Dockerfile如下:
ARG LIBTORRENT_VERSION=2
FROM nevinee/libtorrent-rasterbar:${LIBTORRENT_VERSION} AS builder
RUN apk upgrade \
&& apk add --no-cache \
boost-dev \
openssl-dev \
qt6-qtbase-dev \
qt6-qttools-dev \
g++ \
cmake \
curl \
tar \
samurai \
patch \
&& rm -rf /tmp/* /var/cache/apk/*
ARG QBITTORRENT_VERSION
ARG JNPROC=1
RUN mkdir -p /tmp/qbittorrent \
&& cd /tmp/qbittorrent \
&& curl -sSL https://github.com/qbittorrent/qBittorrent/archive/refs/tags/release-${QBITTORRENT_VERSION}.tar.gz | tar xz --strip-components 1 \
&& wget https://patch-diff.githubusercontent.com/raw/qbittorrent/qBittorrent/pull/18290.patch \
&& patch -p1 < 18290.patch \
&& cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DCMAKE_CXX_STANDARD=17 \
-DWEBUI=ON \
-DVERBOSE_CONFIGURE=OFF \
-DSTACKTRACE=OFF \
-DDBUS=OFF \
-DGUI=OFF \
-DQT6=ON \
-Brelease \
-GNinja \
&& cd release \
&& ninja -j${JNPROC} \
&& ninja install \
&& ls -al /usr/local/bin/ \
&& qbittorrent-nox --help
RUN echo "Copy to /out" \
&& strip /usr/local/lib/libtorrent-rasterbar.so.* \
&& strip /usr/local/bin/qbittorrent-nox \
&& mkdir -p /out/usr/lib /out/usr/bin \
&& cp -d /usr/local/lib/libtorrent-rasterbar.so* /out/usr/lib \
&& cp /usr/local/bin/qbittorrent-nox /out/usr/bin
FROM alpine:latest
ENV S6_SERVICES_GRACETIME=30000 \
S6_KILL_GRACETIME=60000 \
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \
S6_SYNC_DISKS=1 \
QBITTORRENT_HOME=/home/qbittorrent \
TZ=Asia/Shanghai \
PUID=1000 \
PGID=100 \
WEBUI_PORT=8080 \
BT_PORT=34567 \
LANG=zh_CN.UTF-8 \
SHELL=/bin/bash \
PS1="\u@\h:\w \$ "
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.bfsu.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache \
bash \
curl \
jq \
openssl \
qt6-qtbase \
qt6-qtbase-sqlite \
s6-overlay \
shadow \
tzdata \
&& rm -rf /tmp/* /var/cache/apk/* \
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo "${TZ}" > /etc/timezone \
&& useradd qbittorrent -u ${PUID} -U -m -d ${QBITTORRENT_HOME} -s /sbin/nologin
COPY --from=builder /out /
COPY s6-overlay /
WORKDIR /data
VOLUME ["/data"]
ENTRYPOINT ["/init"]
好的好的,非常感谢老哥!
前两天回复完没多久qb崩了 连着一起崩了unraid的web服务,疑似libtorrent 2.0.8和透明大页不兼容:
CRASHES SINCE UPDATING TO V6.11.X FOR QBITTORRENT AND DELUGE USERS
不过看回复关了透明大页并不是对所有人都有效。
切回4.3.9折腾半天,请问libtorrent 1.2.18 当磁盘缓存: -1
时,是不是统计页面的总缓冲大小
最大只能到 850M ?开了操作系统缓存,32G内存。
我目的是尽量减少磁盘io次数,手动设置磁盘缓存
到 2G / 4G
效果会更好吗?可惜unraid不像群晖还是哪家的平台能看近期磁头读写频率还是啥
当前设置:
在Linux机器上,缓存这项特性多数时候受内核控制更多一些,libtorrent-rasterbar更多的也是利用内核的缓存特性。既然你已经设置为-1
了,那么就放心大胆的交给内核和libtorrent-rasterbar吧,可以说内核在这方面有世界上那么多牛逼的程序员为其站台,技术已经非常可靠了。至于到底缓存多少合适,你觉得我们能比内核更懂?我有个西数绿盘用了9年7x24小时也没跑坏。
另外,个人觉得libtorrent-rasterbar 2.x肯定有比1.x更好的地方,要不然作者为啥升级呢?2.x不能设置缓存我觉得就挺好,用户又不懂其中的技术,不如放心大胆的交给内核来处理,你内存大,那高缓存不是更好么,减少了磁盘io,搞不懂为啥许多人看着qb占用内存多就叫嚷嚷的。