Grundsätzlich kann auf einem beliebigen Webserver ein Spiegelserver für den offiziellen eisfair-Paketserver Packeis eingerichtet werden. Dieser Artikel beschreibt dessen Einrichtung auf einem eisfair-Seerver, da dessen Paketmanager eisman ein Kommando zur Synchronisierung mit dem Datenbestand eines anderen Paketservers enthält:

# eisman mirror --help

Create / synchronize a local package mirror

usage:
    eisman mirror [OPTIONS] /path/to/package/mirror

options:
    --help            show this help screen
    --url <url>       package index download url
    --system <system> force eisfair-1 oder eisfair-64
    --relocate <url>  relocate package urls to 'url'
    --quiet           don't show additional text
    --no-progress     don't show progress information
    --keep [<days>]   keep old files (even if no longer listed
                      for a number of days). If the 'days' value
                      is omitted, files are kept forever.
                      if --keep is not specified, old files are removed when
                      not listed for more than 90 days.

Mit der Option –url kann die Adresse des Paketservers angegeben werden, den man spiegeln möchte und ist auf https://www.pack-eis.de/index.txt voreingestellt. Möchte man mehrere Paketserver spiegeln, ist für jeden ein eigenes lokales Zielverzeichnis vorzusehen.

Die –system Option erzwingt explizit die Spiegelung der eisfair-1 oder eisfair-64-Pakete, jeweils immer unter Einschluss der auf beiden Systemtypen nutzbaren eisfair-noarch-Pakete. Ohne Angabe dieses Parameters wird automatisch das eisfair-System gespiegelt, auf dem das eisman-Kommando ausgeführt wird.

Der –keep Option kann eine Zahl mitgegeben werden, nach der nicht mehr auf dem entfernten Server gelistete Pakete lokal aus dem Spiegel entfernt werden.

Neben den eigentlichen Paketdateien, wird bei der Spiegelung auch die Indexdatei downgeloadet und die Pfade zu den Paketen auf das angegebene lokale Zielverzeichnis gesetzt:

# eisman mirror --system eisfair-1 /data/packeismirror/eisfair-1
#
# ergibt dann folgende lokale Indexdatei:
#
# This file was automatically generated by eisman
# Last synchronization: 2023-11-25 21:39:24
7zip                 3.4.0      stable       /data/packeismirror/eisfair-1/7zip/3.4.0/7zip.tar.bz2.info eisfair-1
[...]

Die Verwendung der Option –relocate erlaubt eine Umschreibung des Pfades, was wir im folgenden nutzen werden.

Um nun den Spiegelserver aufzubauen, benötigen wir zudem einen Webserver, z. B. ein installiertes und konfiguriertes Apache2-Paket. Zudem legen wir folgende Verzeichnisse im Docroot des Apachen als Verzeichnisse für die Spiegelung der eisfair-Pakete an:

  • eisfair-1: /var/www/htdocs/packeismirror/eisfair-1
  • eisfair-64: /var/www/htdocs/packeismirror/eisfair-64
# mkdir  /var/www/htdocs/packeismirror/eisfair-1
# mkdir  /var/www/htdocs/packeismirror/eisfair-64

Das folgende Skript synchronisiert nun Packeis mit den lokalen Datenverzeichnissen unter Verwendung der eben erwähnten relocate-Option, um in der lokalen Indexdatei die korrekten http-URLs zu den Paketen zu setzen:

#!/bin/sh

echo "Mirroring eisfair-1"
eisman mirror --relocate http://eis.local.net/packeismirror/eisfair-1 --system eisfair-1 /var/www/htdocs/packeismirror/eisfair-1
echo "Mirroring eisfair-64"
eisman mirror --relocate http://eis.local.net/packeismirror/eisfair-64 --system eisfair-64 /var/www/htdocs/packeismirror/eisfair-64

Die lokale Indexdatei erhält dadurch folgenden Inhalt:

# This file was automatically generated by eisman
# Last synchronization: 2023-11-25 21:39:24
7zip                 3.4.0      stable       http://eis.local.net/packeismirror/eisfair-1/7zip/3.4.0/7zip.tar.bz2.info eisfair-1
[...]

Statt eis.local.net kann auch die IP des Server, der F(ull)Q(ualified)D(omain)N(ame), ein Dyn-DNS-Name oder localhost angegeben werden, wobei bei der Angabe localhost die Nutzung des Spiegelservers als Paketquelle nur für das System selbst möglich ist. Mittels cron-Job kann die Synchroniserung automatisiert werden, z. B.:

CRON_x_NAME='Synchronize Packeis 64bit'
CRON_x_ACTIVE='yes'
CRON_x_TIMES='0 1 * * *'
CRON_x_USER='root'
CRON_x_COMMAND='/pfad/zum/miror/script'

Um diesen Spiegelserver nun für ein eisfair-System als Paketserver nutzen zu können, ist dieser, wie andere Paketquellen auch, in der Paketkonfiguration als Quelle zu definieren, z. B.:

URL_x_NAME='Mein 64bit eisfair-Mirror'
URL_x_PATH='http://eis.local.net/packeismirror/eisfair-64/index.txt'
URL_x_SEARCH='yes'
URL_x_PRIORITY='high'
URL_x_SECTION='no'

Die Standard-Paketquelle Packeis sollte auf die PRIORITY normal oder low gestellt werden, damit sie dem eigenen Spiegelserver nicht vorgezogen wird. Zudem ist nun noch mit dem Befehl “eisman update” die lokale Paketdatenbank neu aufzubauen, damit die Download-URL nun sofort auf den eigenen Spiegelserver verweisen:

# eisman update
(Re)building package database ...
[100%] completed!
(Re)building outdated database ...
[100%] completed!
Cleaning up info cache ...
[100%] completed!

Soll ein “eisman search <package>” nur noch Treffer des lokalen Spiegelservers anzeigen, ist für die originale Paketquelle SEARCH auf no zu setzen.

Hinweis: eisman löscht bei einem Synchronisierungslauf Pakete, die nicht mehr in der Indexdatei aufgeführt sind, nicht sofort auch vom lokalen Spiegel sondern nach 90 Tagen. Mit der Option –keep kann diese Bereinigung auch komplett unterbunden werden, so dass man ein dauerhaftes Paketarchiv aufbauen kann.