// Datei: ./praxis/eigenes-apt-repository-anlegen/mini-dinstall.adoc

// Baustellenstatus: Rohtext

[[eigenes-apt-repository-anlegen-mini-dinstall]]
=== mini-dinstall ===

// Stichworte für den Index
(((APT-Repository, eigenes erstellen)))
(((Debian Archive Kit (dak))))
(((Debianpaket, dput)))
(((Debianpaket, dput-ng)))
(((Debianpaket, mini-dinstall)))
(((Paket, bereitstellen)))
(((Paketquelle, APT-Repository)))
(((Paketquelle, lokal)))

Das Projekt _mini-dinstall_ verfolgt den gleichen Zweck wie _minidak_: eine
kleinere Version von _dak_ und zielt auf das Betreiben eigener APT-Repositories
ab. Daher ist es mit weniger Automatismen und Komfort als die größeren 
Varianten ausgelegt. Es steht als gleichnamiges Debianpaket für die aktuelle, 
stabile Veröffentlichung von Debian bereit <<Debian-Paket-mini-dinstall>>. 

Hinzukommen entweder das Paket _dput_ <<Debian-Paket-dput>> oder dessen 
Neufassung _dput-ng_ <<Debian-Paket-dput-ng>>. Beide Werkzeuge dienen dazu,
Softwarepakete auf Übereinstimmung mit den Debian-Richtlinien zu prüfen und 
diese dann in das bereits von ihnen vorbereitete APT-Repository hochzuladen.

Bislang ist die Dokumentation zu `mini-dinstall` recht überschaubar. Eine 
Übersicht zur Benutzung anhand von Beispielen sowie den einzelnen Einträgen in 
der Konfigurationsdatei findet sich in der beigefügten Dokumentation zum Paket 
_mini-dinstall_ sowie in der Manpage des Programms. Für die nachfolgende 
Beschreibung hat auch das intensive Lesen und Vergleichen verschiedener 
Blogbeiträge sehr viel geholfen.

[[mini-dinstall-vorausetzungen]]
==== Voraussetzungen ====

Die grundlegende Voraussetzung ist ein Verzeichnis für das APT-Repository -- 
sprich: wo möchten Sie ihre Pakete ablegen. `mini-dinstall` ist da recht 
flexibel und folgt ihren Angaben. Soll das APT-Repository lediglich lokal 
bereitstehen, genügt ein Pfad wie bspw. `/opt/paketarchiv` vollkommen. Soll 
das APT-Repository hingegen auch von anderen Rechnern aus via HTTP oder HTTPS 
erreichbar sein, benötigen Sie neben einem Webserver wie Apache oder Nginx auch 
einen Pfad unterhalb des Wurzelverzeichnisses des Webservers, bspw. 
`/var/www/debian`. Genau diesen Fall zeigen wir hier.

[[mini-dinstall-einrichtung]]
==== Einrichtung ====

===== Verzeichnisstruktur des APT-Repositorys =====

Als erstes stellen Sie sicher, dass das Verzeichnis des APT-Repositorys 
vorhanden ist und legen es an, falls es noch nicht existiert:

.Verzeichnis für das APT-Repository anlegen
----
# mkdir -vp /var/www/debian
mkdir: Verzeichnis '/var/www/debian' angelegt
#
----

Danach legen Sie ein Unterverzeichnis an, indem die neuen, von Ihnen später
hochgeladenen Pakete zunächst landen. In unserem Fall heißt dieses lediglich 
`neuepakete`:

.Verzeichnis für neue Pakete anlegen
----
# mkdir -vp /var/www/debian/neuepakete
mkdir: Verzeichnis '/var/www/debian/neuepakete' angelegt
#
----

===== Konfiguration für `mini-dinstall` =====

// Stichworte für den Index
(((mini-dinstall, Konfiguration)))
(((mini-dinstall, .mini-dinstall.conf)))
Als nächstes legen Sie eine Konfigurationsdatei für `mini-dinstall` an. Der
übliche Name dafür ist `.mini-dinstall.conf` in dem Home-Verzeichnis des 
Benutzers, der die Pakete später in das APT-Repository hochlädt. Eine einfache 
Konfigurationsdatei `.mini-dinstall.conf` sieht wie folgt aus:

.Basiseinstellungen zu `.mini-dinstall.conf`
----
[DEFAULT]
archivedir = /var/www/debian
archive_style = flat
architectures = all, amd64
mail_on_success = false
----

Damit liegt das APT-Repository unter `/var/www/debian` mit einer flachen 
Struktur (alle Binärpakete landen im gleichen Unterverzeichnis) und
Unterverzeichnisse werden nur für die beiden Architekturen 'amd64' und 'all'
angelegt. Es erfolgt keine Benachrichtigung bei einem erfolgreichen Upload. 
Die Einstellungen gelten für alle Archive (Abschnitt `[DEFAULT]`), spezifische
Einstellungen pro Veröffentlichungsstatus bestehen nicht.

Mit obigen Angaben ist ihr APT-Repository bereits benutzbar. APT und `aptitude`
erwarten jedoch noch zusätzliche Informationen, um die Pakete in ihrem eigenen 
Repository auch als vertrauenswürdig anzuerkennen. **Schritt 1** ist eine 
`Release`-Datei. Dafür ergänzen Sie die folgende Zeile am Ende der obigen Datei 
`.mini-dinstall.conf`:

.Ergänzungen zu `.mini-dinstall.conf`
----
generate_release = 1
----

Laden Sie später ein Paket hoch oder rufen Sie `mini-dinstall` direkt auf,
erzeugt es eine solche `Release`-Datei mit den Hashwerten der Pakete in ihrem
Repository. Diese hat dann bspw. den folgenden Inhalt:

.Inhalt der `Release`-Datei
----
# cat /var/www/debian/unstable/Release 
Origin: root
Label: root
Suite: unstable
Codename: unstable
Date: Wed, 13 Nov 2019 17:02:23 UTC
Architectures: all amd64
MD5Sum:
 d41d8cd98f00b204e9800998ecf8427e               0 Packages
 f88f7e4006faa70eb958d8db16b863c3              33 Packages.gz
 4059d198768f9f8dc9372dc1c54bc3c3              14 Packages.bz2
 d41d8cd98f00b204e9800998ecf8427e               0 Sources
 e86c520b4bec9c320a71529fdf92275f              32 Sources.gz
 4059d198768f9f8dc9372dc1c54bc3c3              14 Sources.bz2
SHA1:
 da39a3ee5e6b4b0d3255bfef95601890afd80709               0 Packages
 91199c61d2cf161208659f6218378c86498df72e              33 Packages.gz
 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2              14 Packages.bz2
 da39a3ee5e6b4b0d3255bfef95601890afd80709               0 Sources
 17beadd3c12ddc3e8079627fc4a7f31f203c5705              32 Sources.gz
 64a543afbb5f4bf728636bdcbbe7a2ed0804adc2              14 Sources.bz2
SHA256:
 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855               0 Packages
 adffd98c43936b6d4263f0ae73f49ca71b98675143f3bd76d62182dafd7f25dc              33 Packages.gz
 d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058              14 Packages.bz2
 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855               0 Sources
 2340b8ea571b7f6c0ed490857b3828d19334bf03693cb846114f82770b9facaf              32 Sources.gz
 d3dda84eb03b9738d118eb2be78e246106900493c0ae07819ad60815134a8058              14 Sources.bz2
----

[NOTE]
====
Eine Übersicht zu den einzelnen Schaltern von `mini-dinstall` und den 
zulässigen Einträgen in der Konfigurationsdatei finden Sie unter 
<<mini-dinstall-schalter-und-konfiguration>>.
====

===== Konfiguration für `dput` =====

// Stichworte für den Index
(((dput, Konfiguration)))
(((dput, .dput.cf)))
(((mini-dinstall, -b)))
(((mini-dinstall, --batch)))
Nun folgt `dput` oder `dput-ng`. Die beiden Werkzeuge sind nicht unbedingt 
erforderlich. Beide vereinfachen Ihnen nur das Hochladen von Paketen. Ohne 
`dput` müssen Sie das manuell machen. 

Ein üblicher Name für die Konfigurationsdatei ist `.dput.cf` im 
Home-Verzeichnis des Benutzers, der die Pakete später in das APT-Repository
hochlädt. Darin stellen sie `dput` passend zum weiter oben genannten 
APT-Repository ein, bspw. wie folgt:

.`.dput.cf`-Beispiel:
----
[local]
fqdn = localhost
method = local
incoming = /var/www/debian/neuepakete
run_dinstall = 0
post_upload_command = mini-dinstall -b
----

Die Angabe `[local]` bezeichnet den Namen des Repositorys und alle danach 
folgenden Angaben beziehen sich auf dieses Repository. `fqdn` kürzt den 
Begriff 'fully-qualified domain name' ab und bezeichnet die URL bzw. den 
Rechnernamen, auf dem sich das APT-Repository befindet. Der Pfad bei `incoming` 
gibt das Unterverzeichnis an, indem neue Pakete landen. Die Angabe 
`run_dinstall = 0` legt fest, dass kein Aufruf von `dinstall -n` erfolgen soll, 
sprich: kein Installationstest für das Paket. Die letzte Zeile 
(`post_upload_command`) gibt das Kommando an, welches nach dem Hochladen 
ausgeführt wird. Die Angabe von `mini-dinstall -b` versetzt `mini-dinstall` 
in den Batchbetrieb, d.h. `mini-dinstall` integriert neue Pakete in das 
Paketarchiv, sobald diese im Unterverzeichnis für die hochgeladenen Pakete 
gelandet sind. 

===== Paket in das Repository hochladen =====

// Stichworte für den Index
(((dput, -u)))
(((dput, --unchecked)))
Jetzt laden Sie ihr Paket hoch. Das nachfolgende Beispiel nutzt das in 
<<metapakete-bauen>> erzeugte Metapaket 'meta-mc'. 

Der Schalter `-u` im Aufruf kürzt `--unchecked` ab und überspringt den Test 
der kryptographischen Signaturen zum Paket. Das ist zum Testen ganz praktisch.

.Hochladen eines Paketes mit `dput`
----
# dput -u local /home/frank/projekte/metapackage/meta-mc_1.0_amd64.changes 
Uploading to local (via local to localhost):
Successfully uploaded packages.
#
----

Benutzen Sie kein `dput` oder `dput-ng`, laden Sie alle Dateien, die in der
`.changes`-Datei zum Paket benannt sind, in das Unterverzeichnis, indem neue 
Pakete landen (`dput` macht nichts anderes).

* Einrichtung (was noch schön wäre)
** gpg-Schlüssel zum Signieren der bereitgestellten Pakete

[[mini-dinstall-laufender-betrieb]]
==== Laufender Betrieb ====

* APT-Repository zu ihren Paketquellen hinzufügen
** neuer Eintrag in der `/etc/apt/sources.list`
----
# local repo
deb file:/var/www/debian/ unstable/
deb-src file:/var/www/debian/ unstable/
----

* `apt-get update`

* Ergänzungen
** cron oder daemon

[[mini-dinstall-schalter-und-konfiguration]]
==== Schalter und Konfiguration ====

`mini-dinstall` kommt mit einer ganzen Reihe von Schaltern daher. Auch die 
Einträge für die Konfigurationsdatei sind etwas länger. Als **Schalter** 
unterstützt `mini-dinstall` die folgenden:

`-b` (Langform `--batch`) :: laufe im Stapelmodus ('batch mode')

`-c` (Langform `--config=file`) :: benutze `file` als Konfigurationsdatei. Der
Standardwert ist `~/.mini-dinstall.conf`

`-d` (Langform `--debug`) :: Gib zusätzliche Debuginformationen im Terminal 
und dem Logfile aus

`-k` (Langform `--kill`) :: beende den laufenden Daemon sofort

`-n` (Langform `--no-act`) :: führe keine Änderungen aus. Der Schalter ist 
nützlich in Kombination mit dem Schalter `-v`

`-q` (Langform `--quiet`) :: zeige so wenig Informationen an, wie nur möglich

`-r` (Langform `--run`) :: teile dem aktuell laufenden Daemon mit, dass er die
Abarbeitungsschlange sofort bearbeiten soll

`-v` (Langform `--verbose`) :: zeige ausführliche Informationen an

`--help` :: zeige eine kurze Liste der Schalter an

`--no-db` :: schalte das Nachschauen in der Paketdatenbank ab. `apt-ftparchive`
läuft ohne den Schalter `--db`.

`--no-log` :: schreibe kein Logfile

`--version` :: zeige die Version von `mini-dinstall` an

In der **Konfigurationsdatei** sind die folgenden Einträge zulässig:

`archivedir` :: The root of the mini-dinstall archive. Must be set, either here or on the command line.

`extra_keyrings` :: Additional GnuPG keyrings to use for signature verification.

`incoming_permissions` :: The permissions for the incoming directory. mini-dinstall will attempt to set the directory's permissions at startup. A value of zero (´'0´' or ´'0000´') will disable permission setting. Doing this, you MUST set permission for incoming by hand! Defaults to 0750.

`keyrings` :: GnuPG keyrings to use for signature verification of changes files. Setting this  parameter will modify the default list; it is generally better to modify `extra_keyrings` instead. Defaults to the keyrings from the debian-keyring package.

==== Lesematerial ====

* Creating a Package Repository for APT (see https://debian-handbook.info/browse/stable/sect.setup-apt-package-repository.html)

// Datei (Ende): ./praxis/eigenes-apt-repository-anlegen/mini-dinstall.adoc
