Eigenen Mirror erstellen: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
K code → ic
Zeile 29: Zeile 29:
  # chown mirror:users scripts files logs
  # chown mirror:users scripts files logs


Alle weiteren Dateinamens-Angaben beziehen sich, wenn nicht anders angegeben auf <code>/home/mirror/</code>. Zudem wird weiterhin als root gearbeitet.
Alle weiteren Dateinamens-Angaben beziehen sich, wenn nicht anders angegeben auf {{ic|/home/mirror/}}. Zudem wird weiterhin als root gearbeitet.


== Synchronisationsscript ==
== Synchronisationsscript ==
Das Synchronisieren des eigenen Mirrors mit einem anderen Mirror wird mittels eines Bash-Scriptes vorgenommen. Nachfolgendes script wird unter <code>scripts/mirrorsync.sh</code> gespeichert und ausführbar gemacht.
Das Synchronisieren des eigenen Mirrors mit einem anderen Mirror wird mittels eines Bash-Scriptes vorgenommen. Nachfolgendes script wird unter {{ic|scripts/mirrorsync.sh}} gespeichert und ausführbar gemacht.


  #!/bin/bash
  #!/bin/bash
Zeile 145: Zeile 145:
== Regelmäßiges Synchronisieren ==
== Regelmäßiges Synchronisieren ==
{{hinweis|Sollte noch kein [[Cron]]-Daemon installiert sein, so muss dies erst gemacht werden. Die Anleitung dazu bietet der Artikel zu Cron hier im Wiki.}}
{{hinweis|Sollte noch kein [[Cron]]-Daemon installiert sein, so muss dies erst gemacht werden. Die Anleitung dazu bietet der Artikel zu Cron hier im Wiki.}}
Die Crontab für den durch <code>/bin/false</code> als Shell stark eingeschränkten user wird unter <code>scripts/mirror.cron</code> angelegt. und direkt mit einer Zeile gefüllt.
Die Crontab für den durch {{ic|/bin/false}} als Shell stark eingeschränkten user wird unter {{ic|scripts/mirror.cron}} angelegt. und direkt mit einer Zeile gefüllt.


  echo "0 3 * * * /home/mirror/scripts/mirrorsync.sh" > scripts/mirror.cron
  echo "0 3 * * * /home/mirror/scripts/mirrorsync.sh" > scripts/mirror.cron
Zeile 151: Zeile 151:
  su -c "crontab -u mirror scripts/mirror.cron"
  su -c "crontab -u mirror scripts/mirror.cron"


Hiermit wird über den root-Account als User <code>mirror</code> die Crontab eingerichtet, und dabei <code>scripts/mirror.cron</code> verwendet. Zum überprüfen, ob das funktioniert hat, kann man <code>crontab -l</code> verwenden.
Hiermit wird über den root-Account als User {{ic|mirror}} die Crontab eingerichtet, und dabei {{ic|scripts/mirror.cron}} verwendet. Zum überprüfen, ob das funktioniert hat, kann man {{ic|crontab -l}} verwenden.


{{hc|su -c "crontab -u mirror -l"|0 3 * * * /home/mirror/scripts/mirrorsync.sh}}
{{hc|su -c "crontab -u mirror -l"|0 3 * * * /home/mirror/scripts/mirrorsync.sh}}


Wenn es so aussieht, wie im Beispiel, ist alles in Ordnung. Dieser Cronjob führt das Synchronisationsscript nachts um drei Uhr aus. Will man die Crontab bearbeiten, so verwendet man <code>su -c "mirror crontab -e"</code>. Stattdessen kann man auch <code>scripts/mirror.cron</code> direkt bearbeiten, muss dann aber mittels <code>su -c "mirror crontab scripts/mirror.cron"</code> die Crontab manuell neu einlesen.
Wenn es so aussieht, wie im Beispiel, ist alles in Ordnung. Dieser Cronjob führt das Synchronisationsscript nachts um drei Uhr aus. Will man die Crontab bearbeiten, so verwendet man {{ic|su -c "mirror crontab -e"}}. Stattdessen kann man auch {{ic|scripts/mirror.cron}} direkt bearbeiten, muss dann aber mittels {{ic|su -c "mirror crontab scripts/mirror.cron"}} die Crontab manuell neu einlesen.


== Konfiguration von Pacman ==
== Konfiguration von Pacman ==
Zeile 161: Zeile 161:


=== Rein lokaler Mirror ===
=== Rein lokaler Mirror ===
Wenn der Mirror nur lokal verwendet werden soll (wenn also der Server und der Client identisch sind), kann man dies direkt tun, ohne noch etwas an der Mirror-Konfiguration anpassen zu müssen. Man muss lediglich die Datei <code>/etc/pacman.d/mirrorlist</code> anpassen.
Wenn der Mirror nur lokal verwendet werden soll (wenn also der Server und der Client identisch sind), kann man dies direkt tun, ohne noch etwas an der Mirror-Konfiguration anpassen zu müssen. Man muss lediglich die Datei {{ic|/etc/pacman.d/mirrorlist}} anpassen.


  Server = file:///home/mirror/files/$repo/os/x86_64
  Server = file:///home/mirror/files/$repo/os/x86_64
Zeile 192: Zeile 192:
  data_connection_timeout=30
  data_connection_timeout=30


Der so konfigurierte Server ist sehr sicher. Man braucht für den zugriff kein Passwort, und sollte daher nicht öffentlich zugänglich sein (außer, das ist beabsichtigt, weil man einen öffentlichen Mirror anbieten will). Einschrängen kann man den Zugriff beispielsweise über die Datei <code>/etc/hosts.allow</code> oder Portforwarding-Regeln auf dem Router.
Der so konfigurierte Server ist sehr sicher. Man braucht für den zugriff kein Passwort, und sollte daher nicht öffentlich zugänglich sein (außer, das ist beabsichtigt, weil man einen öffentlichen Mirror anbieten will). Einschrängen kann man den Zugriff beispielsweise über die Datei {{ic|/etc/hosts.allow}} oder Portforwarding-Regeln auf dem Router.


Der Passwortschutz für den FTP-Zugang zum Mirror bei gleichzeitiger Funktionalität als normaler, mit Pacman abrufbarer Mirror wird in diesem Artikel nicht behandelt.
Der Passwortschutz für den FTP-Zugang zum Mirror bei gleichzeitiger Funktionalität als normaler, mit Pacman abrufbarer Mirror wird in diesem Artikel nicht behandelt.


Um den Zugriff auf den Mirror von anderen Rechnern aus zu ermöglichen muss man jetzt nur noch die Datei <code>/etc/hosts.allow</code> anpassen.
Um den Zugriff auf den Mirror von anderen Rechnern aus zu ermöglichen muss man jetzt nur noch die Datei {{ic|/etc/hosts.allow}} anpassen.


  vsftpd : ALL : ALL
  vsftpd : ALL : ALL


{{hinweis|Mit dieser einstellung darf jeder von dem Mirror herunterladen. dies ist allerdings konfigurierbar, siehe <code>man hosts.allow</code> oder bei den Weblinks}}
{{hinweis|Mit dieser einstellung darf jeder von dem Mirror herunterladen. dies ist allerdings konfigurierbar, siehe {{ic|man hosts.allow}} oder bei den Weblinks}}


Wenn alles soweit konfiguriert wurde, kann man vsftpd starten.
Wenn alles soweit konfiguriert wurde, kann man vsftpd starten.
Zeile 206: Zeile 206:
  /etc/rc.d/vsftpd start
  /etc/rc.d/vsftpd start


Nun kann man in der Datei <code>/etc/pacman.d/mirrorlist</code>, je nachdem, ob der Server im DNS vorhanden ist, oder nicht, den eigenen Mirror ganz normal als Quelle hinzufügen.
Nun kann man in der Datei {{ic|/etc/pacman.d/mirrorlist}}, je nachdem, ob der Server im DNS vorhanden ist, oder nicht, den eigenen Mirror ganz normal als Quelle hinzufügen.


  Server = ftp://192.168.1.21/$repo/os/x86_64
  Server = ftp://192.168.1.21/$repo/os/x86_64
Zeile 219: Zeile 219:
  su -c "mirror /home/mirror/scripts/mirrorsync.sh"
  su -c "mirror /home/mirror/scripts/mirrorsync.sh"


Es wird nichts ausgegeben, da das Script auch als Cronjob läuft, und dann jedes mal unnötig System-Mails generiert werden würden. Will man trotzdem einen Status sehen, kann man dies mittels des <code>tail</code>-Befehls.
Es wird nichts ausgegeben, da das Script auch als Cronjob läuft, und dann jedes mal unnötig System-Mails generiert werden würden. Will man trotzdem einen Status sehen, kann man dies mittels des {{ic|tail}}-Befehls.


  tail -f logs/pkgsync_20091015-7.log
  tail -f logs/pkgsync_20091015-7.log


Der Dateiname richtet sich bei der Konfiguration nach in diesem Artikel nach folgendem Schema: <code>logs/pkgsync_YYMMDD-HH</code>.
Der Dateiname richtet sich bei der Konfiguration nach in diesem Artikel nach folgendem Schema: {{ic|logs/pkgsync_YYMMDD-HH}}.


Nach dem ersten Synchronisieren sollte man ein Mal <code>pacman -Sy</code> ausführen, um zu überprüfen, ob der Mirror ordungsgemäß funktioniert.
Nach dem ersten Synchronisieren sollte man ein Mal {{ic|pacman -Sy}} ausführen, um zu überprüfen, ob der Mirror ordungsgemäß funktioniert.


== Siehe auch ==
== Siehe auch ==
* [[Eigene Repositories erstellen]]
* [[Eigene Repositories erstellen]]
* Wiki-Artikel zur Funktionsweise von [[rsync]]
* Wiki-Artikel zur Funktionsweise von [[rsync]]
* [[Hosts.deny]] – das Gegenstück zur angesprochenen <code>hosts.allow</code>
* [[Hosts.deny]] – das Gegenstück zur angesprochenen {{ic|hosts.allow}}
* Der Paketmanager [[Pacman]]
* Der Paketmanager [[Pacman]]



Version vom 27. Januar 2013, 20:06 Uhr

Dieser Artikel beschreibt, wie man sich einen eigenen Arch-Mirror anlegt, und diesen mit einem anderen Mirror synchronisiert.

Ein Großteil aller Arch-Nutzer wird dies nie benötigen. Es ist nur sinnvoll, einen eigenen Mirror zu betrieben, wenn man sehr viele Arch-Installationen versorgen will, oder wenn man selbst einen eigenen, offiziellen Mirror anbieten möchte.

Für den Heimgebrauch mit nur wenigen Rechnern eignet sich ein im Netzwerk geteilter Pacman-Cache eventuell besser. Auch existiert mit pkgd eine einfache Möglichkeit, den Cache im LAN zu verteilen, ohne einen zentralen Cache verwalten zu müssen.

Aufgrund der Tatsache, dass das Synchronisieren eines kompletten Repositorys viel Traffic verursacht, ist es nur offiziellen Mirrors gestattet, direkt von rsync.archlinux.org zu synchronisieren. Will man einen offiziellen Mirror betreiben, muss man sich auf der Arch-Mailingliste melden.

In der Mirrorliste sind alle offiziellen Mirrors verzeichnet. Bei vielen besteht auch die Möglichkeit, mittels rsync zu synchronisieren.

Vorbereitungen

Damit man einen Mirror betreiben kann, benötigt man ein Tool, um den eigenen Datenbestand mit einem anderen Mirror zu synchronisieren. Dieser Artikel basiert auf einer rsync-Lösung.

rsync ist im „extra“-Repository enthalten und kann aus diesem mittels Pacman installiert werden. Will man den Mirror tatsächlich (im LAN) anbieten, benötigt man noch einen FTP-Server. in dieserm Artikel wird hierfür vsftpd verwendet, der ebenfalls in „extra“ zu finden ist.

pacman -S rsync vsftpd

Damit vsftpd nicht mit den normalen Userrechten, oder gar als root läuft, ist es sinnvoll, hier einen eigenen User anzulegen.

useradd -m -s /bin/false mirror

Dieser User kann sich nicht einloggen, dies ist also deutlich sicherer, als ein User, der zum Beispiel die bash als Shell definiert hat.

Es müssen zudem Verzeichnisse angelegt werden, in denen Dateien abgelegt werden, die für den Synchronisationsprozess benötigt werden.

$ cd /home/mirror
$ su
# mkdir scripts files logs
# chown mirror:users scripts files logs

Alle weiteren Dateinamens-Angaben beziehen sich, wenn nicht anders angegeben auf /home/mirror/. Zudem wird weiterhin als root gearbeitet.

Synchronisationsscript

Das Synchronisieren des eigenen Mirrors mit einem anderen Mirror wird mittels eines Bash-Scriptes vorgenommen. Nachfolgendes script wird unter scripts/mirrorsync.sh gespeichert und ausführbar gemacht.

#!/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/mirror"
SYNC_LOGS="$SYNC_HOME/logs"
SYNC_FILES="$SYNC_HOME/files"
SYNC_LOCK="$SYNC_HOME/mirrorsync.lck"

# 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.archlinux.org::ftp
SYNC_SERVER=rsync.selfnet.de::archlinux
# 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"

# Die nachfolgenden Zeilen verhindern, dass dieses Script mehrmals
# gleichzeitig ausgeführt wird, und sollten daher nicht geändert werden
if [ ! -d $SYNC_HOME ]; then
  echo "$SYNC_HOME does not exist, please create it, then run this script again."
  exit 1
fi

[ -f $SYNC_LOCK ] && exit 1
touch "$SYNC_LOCK"
# Ende des Blocks, der nicht bearbeitet werden sollte

# 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 -rptlv \
        --delete-after \
        --delay-updates $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"

    # Wenn man nur i686-Pakete synchronisieren will, kann man in dem
    # rsync-Aufruf dies nach „--delete-after“ inzufügen:
    # „ --exclude=os/x86_64“
    # 
    # Will man stattdessen nur die x86_64-Pakete synchronisieren, verwendet
    # man stattdessen „--exclude=os/i686“
    #
    # Will man beide Architekturen auf dem eigenen Mirror anbieten, lässt
    # den rsync-Aufruf einfach, wie er ist
    #
    rsync -rptlv \
          --delete-after \
          --delay-updates $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 an die eigenen Bedürfnisse angepasst werden. Gerade bei der Auswahl der Architekturen und Repositorys sollte man tatsächlich auch nur das angeben, was man selbst wirklich benötigt. Ein x86_64-Mirror mit den Repositorys „core“, „extra“ und „community“ umfasst etwa 15 Gigabyte.

Für jeden Mirror-Vorgang wird ein Logfile angelegt. Damit die Logfiles nicht überhand nehmen, sollte man zum beispiel LogRotate einrichten, oder aber ein Aufräumscript laufen lassen, wenn man sich nicht manuell umdie Logfiles kümmern möchte.

Regelmäßiges Synchronisieren

Hinweis: Sollte noch kein Cron-Daemon installiert sein, so muss dies erst gemacht werden. Die Anleitung dazu bietet der Artikel zu Cron hier im Wiki.

Die Crontab für den durch /bin/false als Shell stark eingeschränkten user wird unter scripts/mirror.cron angelegt. und direkt mit einer Zeile gefüllt.

echo "0 3 * * * /home/mirror/scripts/mirrorsync.sh" > scripts/mirror.cron
chown mirror:users scripts/mirror.cron
su -c "crontab -u mirror scripts/mirror.cron"

Hiermit wird über den root-Account als User mirror die Crontab eingerichtet, und dabei scripts/mirror.cron verwendet. Zum überprüfen, ob das funktioniert hat, kann man crontab -l verwenden.

su -c "crontab -u mirror -l"
0 3 * * * /home/mirror/scripts/mirrorsync.sh

Wenn es so aussieht, wie im Beispiel, ist alles in Ordnung. Dieser Cronjob führt das Synchronisationsscript nachts um drei Uhr aus. Will man die Crontab bearbeiten, so verwendet man su -c "mirror crontab -e". Stattdessen kann man auch scripts/mirror.cron direkt bearbeiten, muss dann aber mittels su -c "mirror crontab scripts/mirror.cron" die Crontab manuell neu einlesen.

Konfiguration von Pacman

Je nachdem, ob man den eigenen Mirror nur Lokal verwenden möchte, oder ob man einen SErver im Netz stehen hat, auf dem der Mirror läuft, und man diesen verwenden möchte, gibt es zwei Wege, die man beschreiten kann.

Rein lokaler Mirror

Wenn der Mirror nur lokal verwendet werden soll (wenn also der Server und der Client identisch sind), kann man dies direkt tun, ohne noch etwas an der Mirror-Konfiguration anpassen zu müssen. Man muss lediglich die Datei /etc/pacman.d/mirrorlist anpassen.

Server = file:///home/mirror/files/$repo/os/x86_64

Dies schreibt man in die este Zeile der Mirror-Liste. Wenn man nicht alle Repositorys synchronisiert, sollte man nach dieser Zeile weitere Mirrors angeben. Pacman geht die Liste so lange durch, bis es einen Server gefunden hat, auf dem das benötigte Paket vorhanden ist.

Mirror auf eigenem Server

Wenn der eigene Mirror sich auf einem anderen Rechner befindet, als der, der diesen Mirror benutzen soll (wenn man also einen Mirror in einem Netzwerk anbieten will), dann bedarf es noch der Einrichtung eines FTP-Servers auf dem Mirror-Server. Hierzu wird in diesem Artikel vsftpd verwendet.

Nach der Installation dieses Servers (siehe oben) wird er wie folgt konfiguriert.

# User, mit dessen Rechten der Server laufen soll
nopriv_user=mirror
 
# Username für den anonymen Login, identisch mit nopriv_user
ftp_username=mirror

# Das Startverzeichnis für den anonymen User
anon_root=/home/mirror/files
# Weitere Konfiguration 
listen=YES
tcp_wrappers=YES
use_localtime=YES
hide_ids=YES
anonymous_enable=YES
no_anon_password=YES
ls_recurse_enable=YES
idle_session_timeout=120
data_connection_timeout=30

Der so konfigurierte Server ist sehr sicher. Man braucht für den zugriff kein Passwort, und sollte daher nicht öffentlich zugänglich sein (außer, das ist beabsichtigt, weil man einen öffentlichen Mirror anbieten will). Einschrängen kann man den Zugriff beispielsweise über die Datei /etc/hosts.allow oder Portforwarding-Regeln auf dem Router.

Der Passwortschutz für den FTP-Zugang zum Mirror bei gleichzeitiger Funktionalität als normaler, mit Pacman abrufbarer Mirror wird in diesem Artikel nicht behandelt.

Um den Zugriff auf den Mirror von anderen Rechnern aus zu ermöglichen muss man jetzt nur noch die Datei /etc/hosts.allow anpassen.

vsftpd : ALL : ALL

Hinweis: Mit dieser einstellung darf jeder von dem Mirror herunterladen. dies ist allerdings konfigurierbar, siehe man hosts.allow oder bei den Weblinks

Wenn alles soweit konfiguriert wurde, kann man vsftpd starten.

/etc/rc.d/vsftpd start

Nun kann man in der Datei /etc/pacman.d/mirrorlist, je nachdem, ob der Server im DNS vorhanden ist, oder nicht, den eigenen Mirror ganz normal als Quelle hinzufügen.

Server = ftp://192.168.1.21/$repo/os/x86_64
# Server = ftp://hostname/$repo/os/x86_64
# Server = ftp://localhost/$repo/os/x86_64

Im Beispiel wird der Server über seine IP angesprochen. Auskommentiert sind das ansprechen über den im DNS vorhandenen Hostname, sowie das ansprechen des Mirrors über localhost. Wenn man die IP verwendet, sollte man dafür Sorge tragen, dass der Server immer über die Selbe IP erreichbar ist.

Die erste Synchronisation

Wenn man den eigenen Mirror das erste Mal mit einem anderen Mirror synchronisiert, dauert dies, abhängig von der Internetverbindung, mehrere Stunden. Jedes weitere synchronisieren geht schneller, da nur jeweils aktualisierte Pakete übertragen werden. Man kann wahlweise bis zum in der Crontab angegebenen Zeitpunkt warten, oder das Synchronisieren, zum beispiel in einer screen-Session oder mit nohup manuell starten.

su -c "mirror /home/mirror/scripts/mirrorsync.sh"

Es wird nichts ausgegeben, da das Script auch als Cronjob läuft, und dann jedes mal unnötig System-Mails generiert werden würden. Will man trotzdem einen Status sehen, kann man dies mittels des tail-Befehls.

tail -f logs/pkgsync_20091015-7.log

Der Dateiname richtet sich bei der Konfiguration nach in diesem Artikel nach folgendem Schema: logs/pkgsync_YYMMDD-HH.

Nach dem ersten Synchronisieren sollte man ein Mal pacman -Sy ausführen, um zu überprüfen, ob der Mirror ordungsgemäß funktioniert.

Siehe auch

Weblinks


Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar.