// Datei: ./praxis/apt-cache/approx.adoc

// Baustelle: Notizen

[[approx]]

=== Approx ===

==== Überblick ====

// Stichworte für den Index
(((APT-Cache)))
(((Debianpaket, approx)))
(((Paketcache)))
(((Paketproxy, approx)))

Approx <<Debian-Paket-approx>> ist ein Proxyserver für Debianpakete und
dient als Paketcache zwischen einem Paketmirror und Debian-basierten
Clients. Mit Approx halten Sie Debianpakete vor, die von den Clients zur
lokalen Installation oder Aktualisierung angefragt werden und liefern
diese aus dem Paketcache an die Clients aus.

Gemäß der Selbstbeschreibung von Approx sind lediglich die Repositorys
in den Konfigurationsdateien von Approx anzupassen, jedoch nicht die
Konfigurationsdateien jedes Clients selbst (bspw.
`/etc/apt/sources.list`). In der Realität sieht es jedoch etwas anders 
aus und es sind ebenfalls Änderungen in den Clients notwendig, damit 
diese mit dem Paketproxy kommunizieren (siehe 
<<approx-Konfiguration-Client>>).

Approx präsentiert sich als Alternative zu APT Cacher (siehe
<<apt-cacher>>) und APT Cacher-NG (siehe <<apt-cacher-ng>>), dem
Nachfolger von APT Cacher.

[[approx-Setup]]
==== Setup und Installation ====

// Stichworte für den Index
(((Approx, Installation)))
Als *ersten Schritt* laden Sie das Paket 'approx' <<Debian-Paket-approx>>
herunter und installieren es, bspw. mittels `apt-get` wie folgt:

.Installation von Approx mit `apt-get`
----
apt-get install approx
----

Das Paket 'approx' ist rund 1.5 MB groß und belegt nach dem Entpacken
des Softwarearchivs etwa 6.6 MB Platz in ihrem System. Weitere Pakete
sind zur Installation nicht erforderlich. Die *Schritte 2 und 3*
beinhalten nun die Konfiguration des Approx-Serverdienstes (siehe
<<approx-Konfiguration-Server>> und der Clients (siehe
<<approx-Konfiguration-Client>>).

[[approx-Konfiguration]]
==== Konfiguration ====

[[approx-Konfiguration-Server]]
===== Server =====

// Stichworte für den Index
(((Approx, /etc/approx/approx.conf)))
(((Approx, Serverkonfiguration)))
Hierzu passen Sie zunächst die Datei `/etc/approx/approx.conf` auf ihre
eigenen Bedürfnisse an. Approx versteht dazu eine Reihe von Variablen in
Form von Name-Wert-Paaren, wobei Name und Wert mit mindestens einem 
Leerzeichen voneinander zu trennen sind. Darüber steuern Sie die
Funktionalität des Service. Nachfolgend listen wir diese Variablen samt
deren Bedeutung in alphabetischer Reihenfolge auf.

`$cache` :: legt den Pfad fest, den Approx für seinen eigenen Paketcache
verwendet. Der *Defaultwert* ist `/var/cache/approx`.

`$curl_path` :: legt den Pfad zum Programm `curl` fest. Der
*Defaultwert* ist `/usr/bin/curl`.

`$debug` :: legt fest, ob Logeinträge zur erweiterten Fehlersuche
erstellt werden sollen. Der *Defaultwert* ist `false` und somit
ausgeschaltet.

`$group` :: legt den Namen der Gruppe fest, dem die Dateien im
Cacheverzeichnis von Approx gehören. Der *Defaultwert* ist `approx`.

`$interval` :: gibt die Zeitdauer in Minuten an, nach der eine Datei im
Cache als zu alt angesehen wird, um noch sofort von Approx ausgeliefert
zu werden. Ist das Intervall überschritten, schaut Approx zuerst auf dem
Paketmirror nach, ob es zwischenzeitlich eine neuere Version gibt. Der
*Defaultwert* ist 60 für 60 Minuten.

`$max_rate` :: legt die Obergrenze für die Breite des Datenstroms in
Bytes pro Sekunde fest, mit der Daten vom Paketmirror bezogen werden.
Der *Defaultwert* ist `unlimited` für unbegrenzte Bandbreite. Geben Sie
stattdessen einen Zahlenwert an und ergänzen ihn mit `K`, `M` oder `G`,
begrenzen Sie die Bandbreite auf den entsprechenden Wert in Kilobyte,
Megabyte oder Gigabyte pro Sekunde.

`$max_redirects` :: legt die maximale Anzahl von HTTP-Weiterleitungen
('HTTP redirects') fest, denen gefolgt wird, wenn ein Paket
heruntergeladen wird. Der *Defaultwert* ist 5.

`$max_wait` :: gibt an, wieviele Sekunden der Prozess von Approx im
Falle eines konkurrierenden Downloads wartet, bevor es die Datei selbst
bezieht. Der *Defaultwert* ist 10 für 10 Sekunden.

`$offline` :: gibt an, ob Approx auch möglicherweise veraltete Dateien
ausliefern soll, wenn keine Verbindung zum Paketmirror zustandekommt.
Der *Defaultwert* ist `false` und diese Funktionalität ist somit
ausgeschaltet.

`$pdiffs` :: legt fest, ob IndexFile Diffs genutzt werden sollen. Der
*Defaultwert* steht auf `true` für 'eingeschaltet'.

`$syslog` :: legt das Verhalten von 'syslog' fest, wenn mit Logdateien
umgegangen wird. Der *Defaultwert* ist `daemon`.

`$user` :: legt den Namen des Benutzers fest, dem die Dateien im
Cacheverzeichnis von Approx gehören. Der *Defaultwert* ist `approx`.

`$verbose` :: legt fest, ob ausführlichere Logeinträge erstellt werden
sollen. Der *Defaultwert* ist `false` und somit ausgeschaltet.

Alle weiteren Einträge bezeichnen den Namen und die URL eines
Paketmirrors, von denen Approx im Falle einer Anfrage passende
Softwarepakete suchen und beziehen soll. Bitte beachten Sie, dass
hierbei keine Veröffentlichung oder ein Distributionsname angegeben
wird. Diese Angabe verbleibt in der Konfiguration des Clients.

Nachfolgend sehen Sie in beispielhaft die Einstellungen für einen
Paketmirror, welcher die Softwarepakete unter `/var/cache/paketcache`
zwischenpuffert.

.Beispielkonfiguration für Approx
----
debian    http://deb/debian.org/debian
security  http://security.debian.org/debian-security

$interval 60
$max_wait 10
$cache    /var/cache/paketcache
----

Ohne weitere Änderungen lauscht Approx auf dem *Port* 9999 für Anfragen
von Clients. Um das zu ändern und Approx bspw. auf Port 8000 lauschen zu
lassen, passen Sie die Servicebeschreibung von Approx an. Verwenden Sie
*Systemd* als Prozessmanager, hilft ihnen dabei das Kommando `systemctl`
weiter.

.Anpassen der Servicebeschreibung von Approx bei Systemd
----
systemctl edit approx.socket
----

Die Servicebeschreibung beinhaltet die drei Abschnitte 'Unit', 'Socket'
und 'Install'. Ändern Sie im Abschnitt 'Socket' die Einstellung
`ListenStream=9999` auf `ListenStream=8000`.

.Veränderte Servicebeschreibung von Approx bei Systemd
----
[Unit]
Description=caching proxy server for Debian archive files
Documentation=man:approx(8)

[Socket]
ListenStream=8000
Accept=yes

[Install]
WantedBy=sockets.target
----

Starten Sie anschließend Approx mittels `systemctl restart
approx.socket` neu, um die Änderungen auch wirksam werden zu lassen.

Verwenden Sie hingegen *Init.d* als Prozessmanager, ändern Sie zunächst
in der Konfigurationsdatei `/etc/inetd.conf` diese Zeile von

----
9999          stream  tcp     nowait  approx  /usr/sbin/approx /usr/sbin/approx
----

in

----
8000          stream  tcp     nowait  approx  /usr/sbin/approx /usr/sbin/approx
----

und speichern die Konfigurationsdatei. Danach starten Sie Approx wie
folgt neu:

----
/etc/init.d/approx restart
----

Danach passen Sie die Konfiguration des Clients an -- dieser soll ja
jetzt auch mit dem APT-Cache kommunizieren und nur darüber seine
Softwarepakete beziehen.

[[approx-Konfiguration-Client]]
===== Client =====

// Stichworte für den Index
(((Approx, Clientkonfiguration)))
Die Konfiguration des Clients passen Sie in drei Schritten an. *Schritt
1* ist die Ergänzung der Datei `/etc/hosts` um den APT-Cache mit der
entsprechenden IP-Adresse und dem Hostname. Heißt ihr APT-Cache 'skye'
und hat die IP-Adresse 192.168.10.250, fügen Sie diesen Eintrag zur
Datei hinzu:

----
192.168.10.250 skye
----

In *Schritt 2* ergänzen Sie in der Datei `/etc/apt/sources.list` die
Einträge der Paketmirror um den Verweis auf den zuvor angelegten
APT-Cache. 

----
deb     http://skye:8000/debian stable main contrib non-free
deb-src http://skye:8000/debian stable main contrib non-free
deb     http://skye:8000/security stable/updates main contrib non-free
----

*Schritt 3* ist das abschließende Aktualisieren der lokalen Paketliste
mittels `apt-get update`. Jetzt kennt ihr Client den APT-Cache und
bezieht alle Softwarepakete über ihn.

==== Beobachtungen aus dem Alltag ====

* Verzögerungen einplanen, bis Pakete im Approx-Cache gelandet sind


// Datei (Ende): ./praxis/apt-cache/approx.adoc
