Я пытаюсь сохранить офлайновую машину (16,04 amd64 ноутбуков) актуальный путем зеркального отражения репозиториев программного обеспечения Ubuntu. К сожалению, у меня есть много ограничений вне моего управления:
apt-mirror
, debmirror
, или права администратора. Я действительно имею wget
, rsync
, и я скомпилировал lftp
Хотя я действительно имею rsync
, rsyncd.service
не работает.
$ systemctl list-unit-files | grep rsync
...
rsyncd.service disabled
...
Таким образом, я не уверен, что могу даже использовать rsync использование инструкций в документации Rsyncmirror согласно этому ответу.
Что я попробовал:
rsync -a --bwlimit=128 rsync://archive.ubuntu.com/ubuntu /media/mirror/ubuntu
Это перестало работать с теми же ошибками как показано в показанном в этом ответе. Я не могу запустить rsynd.service
без администратора, таким образом, я думаю, что это не, идут.wget --recursive http://se.archive.ubuntu.com/ubuntu/
. Это втягивает слишком много материала и довольно медленно. Не уверенный в любом способе отфильтровать файлы я не нуждаюсь или делаю любую параллельную загрузку.lftp
. Я думаю, что это показывает большую часть обещания в данный момент. Например:
$ lftp http://mirror.math.princeton.edu/pub/ubuntu/
cd ok, cwd=/pub/ubuntu
lftp mirror.math.princeton.edu:/pub/ubuntu> mirror -n -parallel=10
работает отлично, но конечно также просто собирается вытянуть во всем. Я могу исключить то, с чем я хочу --exclude-glob
s (например. --exclude-glob "*trusty*/" --exclude-glob "*artful*/" --exclude-glob "*bionic*/" --exclude-glob "*precise*/" --exclude-glob "*.tar.gz"
), но что должно я исключать для обрезки размера, все еще заставляя содержание создать рабочий репозиторий.
Я знаю что после того, как я сделан, получив все пакеты, при помощи которых я оказываюсь перед необходимостью на самом деле делать это работой repo dpkg-scanpackages
или что-то подобное. Я могу сделать это от офлайнового ноутбука с помощью инструментов Ubuntu/Debian, так, чтобы не касался меня так же. Я действительно просто хочу надеть некоторый совет, как только загрузить пакеты, которые важны для моей машины.
Я понял, что могло бы иметь больше смысла идти с аддитивным подходом, а не субтрактивным; то есть, получите список всех файлов/пакетов, я нуждаюсь и затем загружаю только те (вместо того, чтобы пытаться отфильтровать всех тех, я не хочу).
Списки пакетов хранятся в Packages.gz
, таким образом, я записал сценарий для загрузки всех сжатых списков пакетов, я хочу, извлекаю имена пакета из списков, составляю этот список в lftp
сценарий, и затем запускается lftp
.
Я думаю, что это было бы достаточно как минимум, но я также синхронизирую несколько других папок с некоторыми метаданными, которые кажутся важными.
#!/bin/sh
remote="http://mirror.math.princeton.edu"
dists=( xenial xenial-security xenial-updates)
repos=( main restricted universe multiverse)
package_lists=()
printf "open %s \ncd /pub/ubuntu/\n" "$remote" > sync-mirror.lftp
echo "mirror -n -v -O ubuntu/indices -f indices/md5sums.gz" >> sync-mirror.lftp
for dist in "${dists[@]}"; do
for repo in "${repos[@]}"; do
pkg_lists+=("$remote/pub/ubuntu/dists/$dist/$repo")
echo "mirror -n -v --parallel=10 -O ubuntu/indices -f indices/override.$dist.$repo" >> sync-mirror.lftp
echo "mirror -n -v --parallel=10 -O ubuntu/dists/$dist/$repo -F dists/$dist/$repo/binary-amd64" >> sync-mirror.lftp
echo "mirror -n -v --parallel=10 -O ubuntu/dists/$dist/$repo -F dists/$dist/$repo/dep11" >> sync-mirror.lftp
echo "mirror -n -v --parallel=10 -O ubuntu/dists/$dist/$repo -F dists/$dist/$repo/i18n" >> sync-mirror.lftp
done
done
for pkg_list in "${pkg_lists[@]}"; do
curl "$pkg_list/binary-amd64/Packages.gz" | \
gunzip | \
grep Filename | \
sed 's|Filename: \(.*\)|mirror -n -v --parallel=10 -O ubuntu/\1 -f \1 |g' >> sync-mirror.lftp
done
printf "\n exit\n" >> sync-mirror.lftp
lftp -f sync-mirror.lftp
Я хотел бы просто питаться mirror
список файлов и говорит этому загружать параллельно, но я не нашел способ сделать это. Я думаю, что существующий метод занимает больше времени, чем он должен из-за всех отдельных вызовов к mirror
. Кроме того, я не уверен --parallel
флаг делает что-либо в сочетании с -f
так как это только получает единственный файл.
Запущение скрипта за выходные и протестирует, когда я возвращусь. Обновит ответ с результатами.