Wie installiere ich eine bestimmte Paketversion in Alpine?

79792
Golo Roden

Ich muss ein DockerfileDocker-Image erstellen, das auf Alpine Linux basiert. Jetzt muss ich ein Paket als Teil davon installieren Dockerfile.

Zur Zeit habe ich:

RUN apk update && \ apk upgrade && \ apk add git 

Anscheinend ist das eine schlechte Idee, da das Ergebnis nicht deterministisch ist. Stattdessen hängt es von dem Zeitpunkt ab, zu dem ich das Image erstellt habe, welche Version von gitinstalliert wird.

Was ist der richtige Weg, dies zu tun?

Ich denke, dass ich zu sagen haben updated, upgradeund addwelche Versionen zu verwenden, aber wie mache ich das?

Ich habe gesehen, dass apkdas Fixieren von Repositorys unterstützt wird, aber das ist nicht das, was ich will (zumindest denke ich), weil ich kein Repository anheften möchte, sondern ein Paket.

Mit anderen Worten: Wenn gitüber installiert werden könnte npm, könnte ich ausführen:

npm install git@1.9.2 

(oder welche Version ich auch habe). Was ist das Äquivalent dazu für Alpine Linux?

60

3 Antworten auf die Frage

49
kaiser

Sie können "klebrige" Versionen wie folgt einstellen:

# Both are equal apk add packagename=1.2.3-suffix apk add 'packagename<1.2.3-suffix' 

Dadurch werden Pakete nur bis zur angegebenen Version aktualisiert. Sie können dann sicher verwenden…

apk upgrade 

Um alle Pakete zu aktualisieren, bleiben Pakete mit Versionen bei ihrer Version. Um eine Mindestversion festzulegen, verwenden Sie einfach…

apk add "packagename>1.2.3-suffix" 

Falls Sie ein Paket nicht finden können, während es in der Benutzeroberfläche für Alpine-Pakete angezeigt wird, aktualisieren Sie Ihre Quell- / Paketdatenbank:

apk update 

Das Paket-Repository finden Sie hier :

https://pkgs.alpinelinux.org/packages 
Bist du sicher, dass das funktioniert? In diesem Thread scheint es, dass er eigentlich nichts tut: https://forum.alpinelinux.org/forum/general-discussion/it-not-possible-install-old-version-packages#comment-1101 Travis Reeder vor 6 Jahren 0
@TravisR Schauen Sie sich die APK-Dokumente von Alpine [hier] an (https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Advanced_APK_Usage). kaiser vor 6 Jahren 2
In meinem Fall half es mir, einfach von Alpine 3.7 auf Alpine 3.6 herunterzustufen! DUzun vor 6 Jahren 0
Semver Tilde-Bereiche funktionieren auch wie in `apk add ansible ~ = 2.4.1`, was`> = 2.4.1 <2.5.0` bedeutet. Testen Sie http://jubianchi.github.io/semver-check, um Ihre eigenen Bereiche zu testen. Mike D vor 5 Jahren 0
11
Vlad Frolov

Derzeit ist es nicht möglich, beliebige ältere Versionen eines Pakets aus offiziellen Repositorys in Alpine Linux zu installieren. Das Beste, was Sie erreichen können, ist die Verwendung von Repositorys der früheren Versionen:

# cat /etc/alpine-release 3.3.3  # echo 'http://dl-cdn.alpinelinux.org/alpine/v3.2/main' >> /etc/apk/repositories  # apk update fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/community/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.2/main/x86_64/APKINDEX.tar.gz  # apk add bash==4.3.33-r0 (1/1) Updating pinning bash (4.3.33-r0) OK: 13 MiB in 17 packages  # apk add bash==4.3.42-r3 (1/2) Upgrading bash (4.3.33-r0 -> 4.3.42-r3) Executing bash-4.3.42-r3.post-upgrade (2/2) Purging ncurses5-libs (5.9-r1) Executing busybox-1.24.1-r7.trigger OK: 13 MiB in 16 packages 
0
s12chung

Weil ich das testingRepo benutzt habe. Am Ende habe ich meine eigene Kopie gebaut. Schritte:

Gehe zu den Paketdetails. Ex:

https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman

Klicken Sie auf das Festschreiben, klicken Sie auf die APKBUILD-Dateiverknüpfungen und "Protokoll" im Menü, um das Festschreibungsprotokoll der APKBUILD-Datei abzurufen. Wählen Sie dann ein Commit für Ihre APKBUILD-Datei und laden Sie es herunter. Ex:

https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455

Installieren Sie die Build-Tools:

apk -U add alpine-sdk 

Sie müssen kein rootBenutzer sein, also erstellen Sie einen packagerBenutzer mit Passwort:

adduser -D packager && addgroup packager abuild passwd packager 

Dann erstellen Sie es wie packagerim selben Verzeichnis wie die APKBUILD-Datei:

su - packager abuild-keygen -a -i abuild -r 

Möglicherweise müssen Sie Fehler ermitteln und Abhängigkeiten installieren. In meinem Beispiel musste ich dies für mein vorhandenes Docker-Image folgendermaßen tun root:

apk add python-dev 

Nach einem erfolgreichen Build als packagerinstallieren Sie es als root:

apk add /home/packager/packages/<something...>/watchman-4.7.0-r0.apk --allow-untrusted 

Ich weiß nicht, wie --allow-untrustedich das Teil entfernen soll, aber die Schritte funktionierten für mich.