ARM 是否有可替代 ports.ubuntu.com 的存储库?

ARM 是否有可替代 ports.ubuntu.com 的存储库?

我在三星 chromebook(带 ARM 芯片)上使用。ports.ubuntu.com 对我来说是一个相当慢的镜像。还有其他镜像带有 ARM 软件包吗?

https://wiki.ubuntu.com/UbuntuDevelopment/PackageArchive#Ports似乎表明没有,或者至少很少——有吗?

答案1

是的。虽然不多。

我编写了以下脚本,它将解析来自启动板镜像列表/dists/$DIST/$REPO/binary-$ARCH/并检查它们是否包含路径

  • $DIST是您的 Ubuntu 发行版,例如precise,,,,...saucytrusty
  • $REPO是您要查找的存储库,即mainrestricted或。universemultiverse
  • $ARCH是您正在寻找的架构,例如armhf

为了举例,我假设您有 Ubuntu 13.10 (Saucy)。然后您可能想在镜像中搜索路径,/dists/saucy/main/binary-armhf/以便发现提供mainarmhf架构存储库的镜像。如果镜像包含此路径,则意味着它应该armhf拥有 Saucy Salamander 存储库架构的二进制包main,并且脚本将FOUND:与镜像的 URL 一起输出。

请注意:镜像上存在此路径实际上并不能保证,而仅表明它包含所需的软件包;但是,如果镜像包含该路径但不包含软件包,至少我们可以说该镜像有问题。

另请注意,该脚本需要curl。如果您没有,请安装(sudo apt-get install curl)。

因此,使用此脚本,您可以快速找出 Launchpad 镜像列表中的哪些镜像提供您所需的内容。请注意,由于脚本会联系该列表上的每台服务器,因此它可能会运行相当长的时间。这些服务器分布在全球各地,其中一些服务器可能运行缓慢或无法访问(例如,curl可能会停滞直到连接尝试超时)。可以很容易地改进它以仅扫描某些镜像(例如,仅在您的国家/地区),但这是一个很好的起点。

编辑:已更新并行处理,现在大约需要一分钟。

#!/bin/bash

# URL of the Launchpad mirror list
MIRROR_LIST=https://launchpad.net/ubuntu/+archivemirrors

# Set to the architecture you're looking for (e.g., amd64, i386, arm64, armhf, armel, powerpc, ...).
# See https://wiki.ubuntu.com/UbuntuDevelopment/PackageArchive#Architectures
ARCH=$1
# Set to the Ubuntu distribution you need (e.g., precise, saucy, trusty, ...)
# See https://wiki.ubuntu.com/DevelopmentCodeNames
DIST=$2
# Set to the repository you're looking for (main, restricted, universe, multiverse)
# See https://help.ubuntu.com/community/Repositories/Ubuntu
REPO=$3

mirrorList=()
# First, we retrieve the Launchpad mirror list, and massage it to obtain a newline-separated list of HTTP mirrors
for url in $(curl -s $MIRROR_LIST | grep -Po 'http://.*(?=">http</a>)'); do
  mirrorList+=( "$url" )
done

for url in "${mirrorList[@]}"; do
  (
    # If you like some output while the script is running (feel free to comment out the following line)
    echo "Processing $url..."
    # retrieve the header for the URL $url/dists/$DIST/$REPO/binary-$ARCH/; check if status code is of the form 2.. or 3..
    if curl --connect-timeout 1 -m 1 -s --head "$url/dists/$DIST/$REPO/binary-$ARCH/" | head -n 1 | grep -q "HTTP/1.[01] [23]..";
    then
        echo "FOUND: $url"
    fi
  ) &
done

wait

echo "All done!"

我将脚本保存为find_mirrors,使其可执行(chmod 755 find_mirrors),然后按如下方式执行它:

$ ./find_mirrors armhf saucy main | grep FOUND
FOUND: http://ftp.tu-chemnitz.de/pub/linux/ubuntu-ports/

我花了大约 10-15 分钟。我很惊讶地发现armhf在 Launchpad 镜像列表中只有一个针对 Saucy 架构的镜像,即开姆尼茨工业大学(这是基于德国;对你来说可能还是比端口.ubuntu.com该公司似乎位于英国。)因此,对你的问题的回答似乎更像是“是的,为您提供替代镜像...” ;-)

好消息是,我确实手动检查了这个镜像,它确实是端口.ubuntu.com,包含所有当前 Ubuntu 版本的所有软件包。所以,请尝试一下!

还请注意,您可能对 Saucy 以外的其他版本更满意。

替代方案(不推荐)

我提到这一点是为了完整性,但我不建议这样做。与其看启动板镜像列表,你当然也可以简单地用谷歌搜索镜子。

一种方法是简单地在 Google 上搜索字符串*/dists/saucy/main/binary-armhf/*(像以前一样,根据您的需要调整发行版、存储库和架构)。这样会找到许多替代镜像,但大多数镜像都没有在 Launchpad 上正式注册。因此,Ubuntu 镜像团队没有进行质量检查;它们可能很慢、不定期更新,或者只包含完整 Ubuntu 系统所需的软件包的子集,甚至一些经过修改的软件包。想想看,如果有人想让他们的镜像公开,他们可能会在 Launchpad 上注册它,然后上面的脚本就会找到它。所以在 Google 上搜索镜像需要您自担风险。如果你问我,不要这么做。

答案2

上述脚本由Malte Skoruppa 和 Can Özokur运行良好,但是在运行它时它将创建 566 多个新的 Bash 进程,同时还会建立 566 多个同时的网络连接,这会使低功率的机器和较差的连接不堪重负。

您可以使用 GNU 对并发作业和网络连接的数量进行限制parallel,如下例所示。

这是一个检查 Ubuntu 存储库并实施速率限制的脚本

#!/usr/bin/env bash
# Requires: Bash, GNU grep and parallel, htmlq, and httpie or xh.
# Usage: 
#        ./find-mirrors.sh ARCH DISTRO REPOSITORY PROTOCOL JOBS
# Example: 
#        ./find-mirrors.sh armhf focal main https 6
#
# Copyright 2022 Alex DeLorenzo. Licensed under the GPLv3.
#
export ARCH="${1:-amd64}"
export DISTRO="${2:-focal}"
export REPOSITORY="${3:-main}"
export PROTOCOL="${4:-http}"
export JOBS="${5:-4}"

export URL_PATH="dists/$DISTRO/$REPOSITORY/binary-$ARCH/"
export LIST_URL="https://launchpad.net/ubuntu/+archivemirrors/"
export SELECTOR="#mirrors_list > tbody > tr > td:nth-child(2) > a"
export TIMEOUT=10

export RC_MISSING_DEPS=1
export NO_PARALLEL="GNU parallel is missing, installing with apt...\n"
export NO_HTMLQ="You need to install htmlq: https://github.com/mgdm/htmlq\n"


quiet() {
  $@ &> /dev/null
}
export -f quiet


exists() {
  quiet which $@
}


getDependencies() {
  exists parallel || {
    printf "%s" "$NO_PARALLEL"
    sudo apt install parallel
  }

  exists xh || exists http ||
    python3 -m pip install --upgrade httpie &&
    export http=http ||
      return $RC_MISSING_DEPS

  exists xh &&
    export http=xh

  exists htmlq || {
    printf "%s" "$NO_HTMLQ"
    return $RC_MISSING_DEPS
  }
}


getMirrors() {
  $http --body --follow "$LIST_URL" \
    | htmlq "$SELECTOR" --attribute href \
    | grep -i "$PROTOCOL:"
}


checkRepo() {
  local url="$1"

  quiet $http "$url" \
    --quiet --quiet \
    --timeout $TIMEOUT \
    --verify=no \
    --ignore-stdin \
    --follow \
    --headers \
    --check-status
}
export -f checkRepo


testMirror() {
  local url="$1"
  local repoUrl="$url/$URL_PATH"

  checkRepo "$repoUrl" &&
    printf "Valid: %s\n" "$url"
}
export -f testMirror


testMirrors() {
  parallel --will-cite --jobs "$JOBS" testMirror
}


main() {
  getDependencies &&
    getMirrors | testMirrors
}


main

看:https://gist.github.com/alexdelorenzo/8cdb21718c2d2d3f5f8beaad0bf6c843

它需要以下软件包:bash、、和parallelhtmlqhttpie

语法如下:

./find-mirrors.sh ARCH DISTRO REPOSITORY PROTO JOBS

如果你想寻找armhf架构的替代方案,你可以这样做:

./find-mirrors.sh armhf jammy main http 6

答案3

使用另一个答案中的脚本来查找与 Ubuntu Touch(xenial armhf)一起使用的镜像,以下是我的发现:

phablet@ubuntu-phablet:~$ ./find_mirrors.sh armhf xenial main | grep FOUND
FOUND: http://mirror.kumi.systems/ubuntu-ports/
FOUND: http://mirror.exid.us/ubuntu-archive/
FOUND: http://mirror.telcotech.com.kh/Linux/ubuntu-releases/
FOUND: http://mirrors.layeronline.com/ubuntu/
FOUND: http://mirror.rcg.sfu.ca/mirror/ubuntu/
FOUND: http://linux.xjtuns.cn/ubuntu/
FOUND: http://klid.dk/ftp/ubuntu/
FOUND: http://ftp.tu-chemnitz.de/pub/linux/ubuntu-ports/
FOUND: http://www.ubuntu.org.tw/
FOUND: http://kebo.vlsm.org/ubuntu/
FOUND: http://mirror.unej.ac.id/ubuntu/
FOUND: http://ir.ubuntu.sindad.cloud/ubuntu/
FOUND: http://twitchdarkbot.com/ubuntu-ports/
FOUND: http://ftp.daum.net/ubuntu/
FOUND: http://ntc.net.np/ubuntu/
FOUND: http://mirror.chmuri.net/ubuntu/
FOUND: http://cesium.di.uminho.pt/pub/ubuntu-archive/
FOUND: http://ubuntu.mirror.ac.za/ubuntu-archive/
FOUND: http://dafi.inf.um.es/ubuntu/
FOUND: http://mirrors.c0urier.net/linux/ubuntu/
FOUND: http://ubuntu.vargonen.com/ubuntu/
FOUND: http://mirrors.coreix.net/ubuntu/
FOUND: http://mirrors.us.kernel.org/ubuntu/
FOUND: http://lug.mtu.edu/ubuntu/
FOUND: http://mirrors.avalonhosting.services/ubuntu-archive/
FOUND: http://mirror.vcu.edu/pub/gnu+linux/ubuntu/

phablet@ubuntu-phablet:~$ ./find_mirrors.sh armhf xenial universe | grep FOUND
FOUND: http://mirror.kumi.systems/ubuntu-ports/
FOUND: http://mirror.exid.us/ubuntu-archive/
FOUND: http://mirror.telcotech.com.kh/Linux/ubuntu-releases/
FOUND: http://mirrors.layeronline.com/ubuntu/
FOUND: http://mirror.rcg.sfu.ca/mirror/ubuntu/
FOUND: http://klid.dk/ftp/ubuntu/
FOUND: http://ftp.tu-chemnitz.de/pub/linux/ubuntu-ports/
FOUND: http://www.ubuntu.org.tw/
FOUND: http://kebo.vlsm.org/ubuntu/
FOUND: http://mirror.unej.ac.id/ubuntu/
FOUND: http://ir.ubuntu.sindad.cloud/ubuntu/
FOUND: http://twitchdarkbot.com/ubuntu-ports/
FOUND: http://ftp.daum.net/ubuntu/
FOUND: http://ntc.net.np/ubuntu/
FOUND: http://mirror.chmuri.net/ubuntu/
FOUND: http://cesium.di.uminho.pt/pub/ubuntu-archive/
FOUND: http://ubuntu.mirror.ac.za/ubuntu-archive/
FOUND: http://dafi.inf.um.es/ubuntu/
FOUND: http://mirrors.c0urier.net/linux/ubuntu/
FOUND: http://mirrors.coreix.net/ubuntu/
FOUND: http://mirrors.us.kernel.org/ubuntu/
FOUND: http://lug.mtu.edu/ubuntu/
FOUND: http://mirrors.avalonhosting.services/ubuntu-archive/
FOUND: http://mirror.vcu.edu/pub/gnu+linux/ubuntu/

phablet@ubuntu-phablet:~$ ./find_mirrors.sh armhf xenial multiverse | grep FOUND
FOUND: http://mirror.kumi.systems/ubuntu-ports/
FOUND: http://mirror.exid.us/ubuntu-archive/
FOUND: http://mirror.telcotech.com.kh/Linux/ubuntu-releases/
FOUND: http://mirrors.layeronline.com/ubuntu/
FOUND: http://mirror.rcg.sfu.ca/mirror/ubuntu/
FOUND: http://klid.dk/ftp/ubuntu/
FOUND: http://ftp.tu-chemnitz.de/pub/linux/ubuntu-ports/
FOUND: http://kebo.vlsm.org/ubuntu/
FOUND: http://mirror.unej.ac.id/ubuntu/
FOUND: http://ir.ubuntu.sindad.cloud/ubuntu/
FOUND: http://twitchdarkbot.com/ubuntu-ports/
FOUND: http://ftp.daum.net/ubuntu/
FOUND: http://ntc.net.np/ubuntu/
FOUND: http://mirror.chmuri.net/ubuntu/
FOUND: http://cesium.di.uminho.pt/pub/ubuntu-archive/
FOUND: http://ubuntu.mirror.ac.za/ubuntu-archive/
FOUND: http://dafi.inf.um.es/ubuntu/
FOUND: http://mirrors.c0urier.net/linux/ubuntu/
FOUND: http://mirrors.coreix.net/ubuntu/
FOUND: http://mirrors.us.kernel.org/ubuntu/
FOUND: http://lug.mtu.edu/ubuntu/
FOUND: http://mirrors.avalonhosting.services/ubuntu-archive/
FOUND: http://mirror.vcu.edu/pub/gnu+linux/ubuntu/

答案4

关于上述答案。如果您还想 ping 延迟,请按照以下方法提取此信息。您必须将其写入脚本中。

它会 ping 4 次并计算每次的平均值。

host=`echo "$url" | awk -F/ '{print $3}'`
latency=`ping -c 4 "$host" | tail -1 | awk '{print $4}' | cut -d '/' -f 2`

相关内容