我在三星 chromebook(带 ARM 芯片)上使用。ports.ubuntu.com 对我来说是一个相当慢的镜像。还有其他镜像带有 ARM 软件包吗?
https://wiki.ubuntu.com/UbuntuDevelopment/PackageArchive#Ports似乎表明没有,或者至少很少——有吗?
答案1
是的。虽然不多。
我编写了以下脚本,它将解析来自启动板镜像列表/dists/$DIST/$REPO/binary-$ARCH/
并检查它们是否包含路径
$DIST
是您的 Ubuntu 发行版,例如precise
,,,,...saucy
trusty
$REPO
是您要查找的存储库,即main
、restricted
或。universe
multiverse
$ARCH
是您正在寻找的架构,例如armhf
。
为了举例,我假设您有 Ubuntu 13.10 (Saucy)。然后您可能想在镜像中搜索路径,/dists/saucy/main/binary-armhf/
以便发现提供main
该armhf
架构存储库的镜像。如果镜像包含此路径,则意味着它应该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
,如下例所示。
#!/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
、、和parallel
htmlq
httpie
语法如下:
./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`