Hallo in die Runde,
es hat ein bisschen länger gedauert, aber es funktioniert jetzt mit dem offline-Repository und da möchte ich Euch natürlich informieren, wie das geklappt hat
Der erste Probelauf ging leider schief - ich habe für den Download einen 64GB-Manjaro-Bootstick genutzt und da war neben dem System leider nicht mehr genug Speicher frei (das hätte ich nicht gedacht, aber so ist es).
Deswegen greife ich jetzt mal mit meinem fertigen Repository etwas vor: Ihr braucht für ein komplettes Repository (Stand 2019/01) ca. 37GB:
Code: Alles auswählen
[hans@meinpc ~]$ du -hd1 /run/media/hans/Manjaro-Mirror/mirror/files/stable/ | sort -hr
37G /run/media/hans/Manjaro-Mirror/mirror/files/stable/
28G /run/media/hans/Manjaro-Mirror/mirror/files/stable/community
7,8G /run/media/hans/Manjaro-Mirror/mirror/files/stable/extra
1,1G /run/media/hans/Manjaro-Mirror/mirror/files/stable/core
588M /run/media/hans/Manjaro-Mirror/mirror/files/stable/multilib
OK, also habe ich mir einen extra 64GB-Stick her geholt, diesen natürlich ext4-formatiert (ich will ja schließlich nur noch mit Linux arbeiten
), mit "Manjaro-Mirror" benannt, gemountet und dann das Script entsprechend angepasst:
Code: Alles auswählen
#!/bin/bash
#
# The script to sync a local mirror of the Arch Linux repositories and ISOs
#
# Copyright (C) 2007 Woody Gilk <woody@archlinux.org>
# Modifications by Dale Blount <dale@archlinux.org>
# and Roman Kyrylych <roman@archlinux.org>
# Comments translated to German by Dirk Sohler <dirk@0x7be.de>
# Licensed under the GNU GPL (version 2)
# Speicherorte für den Synchronisationsvorgang
# SYNC_HOME="/home/hans/mirror"
SYNC_HOME="/run/media/hans/Manjaro-Mirror/mirror"
# [ -d $SYNC_HOME ] || mkdir $SYNC_HOME
SYNC_LOGS="$SYNC_HOME/logs"
[ -d $SYNC_LOGS ] || mkdir $SYNC_LOGS
SYNC_FILES="$SYNC_HOME/files"
SYNC_LOCK="$SYNC_HOME/mirrorsync.lck"
SYNC_OPT="-rptl --verbose --progress --delete-after --safe-links --max-delete=1000 --copy-links --delay-updates --exclude=i686"
# Auswahl der zu synchronisierenden Repositorys
# Gültige Optionen sind: core, extra, testing, community, iso
# Leer lassen, um den gesammten Mirror zu synchronisieren
# SYNC_REPO=(core extra testing community iso)
SYNC_REPO=()
# Server, von dem synchronisiert werden soll
# Nur offizielle, öffentliche Mirrors dürfen rsync.archlinux.org verwenden
SYNC_SERVER=rsync://ftp.halifax.rwth-aachen.de/manjaro/stable
# An dieser Stelle weicht die Lokalisierte Version des Scripts von der
# Originalversion ab, da der Mirror in der Originalversion seit einigen
# Tagen nicht mehr synchronisiert wurde, und daher nur alte Pakete
# bereit stellte. Selfnet hat eine Quota von 50 GB fullspeed am Tag, und
# wird danach auf 16 KByte/s runtergestuft.
# Format des Logfile-Namens
# Das beispiel gibt etwas wie „sync_20091019-3.log“ aus
LOG_FILE="pkgsync_$(date +%Y%m%d-%H).log"
# Logfile anlegen und Timestamp einfügen
touch "$SYNC_LOGS/$LOG_FILE"
echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE"
echo ">> Starting sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE"
echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE"
if [ -z $SYNC_REPO ]; then
# Sync a complete mirror
rsync $SYNC_OPT $SYNC_SERVER "$SYNC_FILES" \
>> "$SYNC_LOGS/$LOG_FILE"
else
# Alle Repositorys synchronisieren, die in $SYNC_REPO angegeben wurden
for repo in ${SYNC_REPO[@]}; do
repo=$(echo $repo | tr [:upper:] [:lower:])
echo ">> Syncing $repo to $SYNC_FILES/$repo" >> "$SYNC_LOGS/$LOG_FILE"
rsync $SYNC_OPT $SYNC_SERVER/$repo "$SYNC_FILES" \
>> "$SYNC_LOGS/$LOG_FILE"
# Erstellt eine Datei „$repo.lastsync“, die den Timestamp der synchronisation
# beinhaltet (z. B. „2009-10-19 03:14:28+02:00“). Dies kann nützlich sein,
# um einen Hinweis darauf zu haben, wann der eigene Mirror zuletzt mit
# dem angegebenen Mirror abgeglichen wurde. Zum Verwenden einkommentieren.
# date --rfc-3339=seconds > "$SYNC_FILES/$repo.lastsync"
# Nach jedem Repository fünf Sekunden warten, um zu viele gleichzeitige
# Verbindungen zum rsync-Server zu verhindern, fall die Verbindung nach
# dem synchronisieren des vorherigen Repositorys vom Server nicht
# zeitig geschlossen wurde
sleep 5
done
fi
# Weiteren Timestamp ins Logfile schreiben, und es schließen
echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE"
echo ">> Finished sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE"
echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE"
echo "" >> "$SYNC_LOGS/$LOG_FILE"
# Die lock-Datei zum Sperren des Script-Durchlaufs löschen und das
# Script beenden
rm -f "$SYNC_LOCK"
exit 0
Das Script muss natürlich ausführbar gemacht werden.
Dann habe ich das Script gestartet und gewartet. Das Script arbeitet seeeehr langsam. Hier bei mir bei der Arbeit mit einer fetten Internet-Leitung kam ich auf eine maximale Download-Rate von ca. 800MB/Stunde. Woran das liegt, weiß ich nicht, vielleicht am rsync-Protokoll? Downloads per FTP von dem gleichen Server laufen auf jeden Fall deutlich schneller, das habe ich mal zwischendurch getestet.
Das Script gibt keinerlei Rückmeldung, solange alles fehlerfrei läuft. Man guckt also zur Überprüfung (oder wenn man nervös wird, so wie ich...
) vielleicht ab und zu im Dateisystem, ob die Download-Verzeichnisse wachsen.
Wenn das Script erfolgreich durch läuft, quittiert es auch ohne weitere Rückmeldung. Aber es schreibt natürlich fleißig in die Log-Dateien, da kann man auch nachsehen.
Zu Hause habe ich dann noch die /etc/pacman.conf angepasst. Ich habe hier für jedes Repository einen "harten" Link auf das entsprechende Verzeichnis eingefügt. Das lässt sich bestimmt geschickter lösen, aber so weit bin ich noch nicht mit dem Thema "scripten unter Linux":
Code: Alles auswählen
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc manjaro-system
# If upgrades are available for these packages they will be asked for first
SyncFirst = manjaro-system archlinux-keyring manjaro-keyring
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#Color
#TotalDownload
# We cannot check disk space from within a chroot environment
CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Manjaro Linux
# packagers with `pacman-key --populate archlinux manjaro`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
[core]
SigLevel = PackageRequired
# Neuer Eintrag für lokalen Mirror auf USB-Stick
Server = file:///run/media/hans/Manjaro-Mirror/mirror/files/stable/core/x86_64/
#
Include = /etc/pacman.d/mirrorlist
[extra]
SigLevel = PackageRequired
# Neuer Eintrag für lokalen Mirror auf USB-Stick
Server = file:///run/media/hans/Manjaro-Mirror/mirror/files/stable/extra/x86_64/
#
Include = /etc/pacman.d/mirrorlist
[community]
SigLevel = PackageRequired
# Neuer Eintrag für lokalen Mirror auf USB-Stick
Server = file:///run/media/hans/Manjaro-Mirror/mirror/files/stable/community/x86_64/
#
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
[multilib]
SigLevel = PackageRequired
# Neuer Eintrag für lokalen Mirror auf USB-Stick
Server = file:///run/media/hans/Manjaro-Mirror/mirror/files/stable/multilib/x86_64/
#
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
Danach habe ich mittels "pacman -Sy" die lokale Datenbank aktualisiert. Es wurden mir 250 zu aktualisierende Pakete mit einem Download-Volumen von ca. 850MB angezeigt.
Ich habe sicherheitshalber mal den Netzwerkstecker gezogen und dann die System-Aktualisierung mittels "pacman -Syu" angestoßen. Das lief dann sauber und sehr schnell durch - innerhalb von ca. 1,5 Minuten war mein System aktualisiert.
Damit habe ich jetzt eine Lösung, wie ich mit meiner doch recht schmalen Internet-Leitung zu Hause Manjaro regelmäßig updaten kann. Das ist echt super. Ich schätze mal, dass ich das später im laufenden Betrieb vielleicht ein Mal im Monat oder ein Mal in zwei Monaten anschubsen werde - mal sehen.
Ich bedanke mich bei Gosia für die hilfreichen Tipps.