2021年8月

执行下列命令在Docker的命令行中即可完成安装。

RUN set -xe \
    && apk add --update \
        icu \
    && apk add --no-cache --virtual .php-deps \
        make \
    && apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        zlib-dev \
        icu-dev \
        g++ \
    && docker-php-ext-configure intl \
    && docker-php-ext-install \
        intl \
    && docker-php-ext-enable intl \
    && { find /usr/local/lib -type f -print0 | xargs -0r strip --strip-all -p 2>/dev/null || true; } \
    && apk del .build-deps \
    && rm -rf /tmp/* /usr/local/lib/php/doc/* /var/cache/apk/*

在窗口模式下调用子进程时需要定义 stdin 和 stderr。这是因为如果这些句柄未设置为 null,Windows 会尝试复制它们。

hsbs = \
            subprocess.check_output('cd %SystemRoot%\System32\Wbem\ && wmic csproduct get uuid', shell=True, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL).decode().split('\n')[
                1].strip()

去除 datas 表中 $leaf_cert.fingerprint 字段出现重复的文档记录, 并且开启了磁盘占用,避免遇到内存16MB限制

db.getCollection("datas").aggregate([
    {
        $group:{_id:{fingerprint:'$leaf_cert.fingerprint'},count:{$sum:1},dups:{$addToSet:'$_id'}}
    },
    {
        $match:{count:{$gt:1}}
    }
    ], { allowDiskUse: true }).forEach(function(it){
         it.dups.shift();
            db.getCollection("datas").remove({_id: {$in: it.dups}});
    })

经过接近半天的调试,都没找到 Client proxy链接的问题,包括怀疑了代理软件?本地网络?逻辑问题?

最后阅读了client.connect() 源代码,发现新大陆 python_socks,最后通过添加下面两个库解决问题

pip install python_socks
pip install async_timeout