Vermutlich verwendest du einen veralteten Browser. Da diese Website auf moderne Technik setzt, benötigst du einen aktuellen Browser, um diese Website richtig darzustellen.

Workaround: Installation von Paketen in Docker-Container schlägt zufällig fehl

Für das Deployment mittels GitLab CI habe ich angefangen Docker zu nutzen. Innerhalb eines Docker-Containers wird die Website gebaut und anschließend auf den entsprechenden Server kopiert.

In dem PHP-Image fehlen die Pakete zip und unzip, diese werden aber z.B. benötig, wenn man Composer nutzt, um die Abhängigkeiten zu installieren.

In unregelmäßigen Abständen ist die Installation der Pakete mit folgender Fehlermeldung fehlgeschlagen:

$ apt-get install zip unzip
Reading package lists...
Building dependency tree...
Reading state information...
Package zip is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'zip' has no installation candidate
ERROR: Job failed: exit code 1

Leider ist diese Fehlermeldung recht allgemein und bietet nicht sehr viel Informationen warum es das eine Mal funktioniert und das andere Mal nicht. Bei einer erfolgreichen Installation sahen die Logs wie folgt aus:

$ apt-get install zip unzip
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
 unzip zip
0 upgraded, 3 newly installed, 0 to remove and 6 not upgraded.
Need to get 596 kB of archives.
After this operation, 1464 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian/ jessie/main unzip amd64 6.0-16+deb8u3 [162 kB]
Get:2 http://deb.debian.org/debian/ jessie/main zip amd64 3.0-8 [228 kB]
Get:3 http://deb.debian.org/debian/ jessie/main zlib1g-dev amd64 1:1.2.8.dfsg-2+b1
[206 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 596 kB in 0s (689 kB/s)
Selecting previously unselected package unzip.
(Reading database ... 19445 files and directories currently installed.)
Preparing to unpack .../unzip_6.0-16+deb8u3_amd64.deb ...
Unpacking unzip (6.0-16+deb8u3) ...
Selecting previously unselected package zip.
Preparing to unpack .../archives/zip_3.0-8_amd64.deb ...
Unpacking zip (3.0-8) ...

Mir ist dann aufgefallen, dass sich die URLs unterscheiden, von denen die Pakete abgerufen werden. Scheinbar können von dem einen Server keine Pakete geladen werden.

Schaut man genauer nach, stellt man fest, dass in dem Docker-PHP-Image eine zusätzliche Quelle für Pakete hinzugefügt ist: /etc/apt/sources.list.d/additional.list. In dieser Datei wird die Quelle hinzugefügt, von der die Pakete nicht richtig installiert werden.

Der Workaround für dieses Problem ist das Löschen der zusätzlichen Quelle. In dem Abschnitt before_script muss die Zeile rm /etc/apt/sources.list.d/additional.list hinzugefügt werden.

image: tetraweb/php

before_script:
  - rm /etc/apt/sources.list.d/additional.list

Der Ausschnitt aus der .gitlab-ci.yml würde dann entsprechend so aussehen. Durch das Entfernen der Datei ist das Problem nicht mehr erneut aufgetreten.