Bagaimana cara menginstal versi paket tertentu di Alpine?

66

Saya punya Dockerfile untuk membangun gambar Docker yang didasarkan pada Alpine Linux. Sekarang saya perlu menginstal paket sebagai bagian dari ini Dockerfile.

Saat ini saya punya:

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

Tampaknya ini adalah ide yang buruk, karena hasilnya adalah non-deterministik. Sebaliknya, itu tergantung pada titik di mana saya membangun gambar, versi apa git sedang diinstal.

Apa cara yang benar untuk melakukan ini?

Saya kira saya harus memberi tahu updated, upgrade dan add versi mana yang digunakan, tetapi bagaimana saya melakukan ini?

Saya sudah melihatnya apk mendukung menyematkan repositori, tetapi bukan itu yang saya inginkan (setidaknya saya pikir begitu), karena saya tidak ingin menyematkan repositori, tetapi sebuah paket.

Dengan kata lain: Jika git dapat diinstal melalui npm, Saya bisa menjalankan:

npm install [email protected]

(atau versi apa pun yang saya ingin miliki). Apa yang setara dengan ini untuk Alpine Linux?

Golo Roden
sumber

Jawaban:

55

Anda dapat mengatur versi "sticky" seperti ini:

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

Itu akan meningkatkan paket hanya sampai versi yang ditentukan. Anda kemudian dapat dengan aman menggunakan ...

apk upgrade

untuk memutakhirkan semua paket, sementara paket dengan versi akan tetap dengan versinya. Untuk mengatur a minimum versi cukup gunakan ...

apk add "packagename>1.2.3-suffix"

Jika Anda tidak dapat menemukan paket, sementara Anda bisa melihatnya di UI untuk paket Alpine, perbarui sumber / basis data paket Anda:

apk update

Repositori paket dapat ditemukan sini :

https://pkgs.alpinelinux.org/packages
kaiser
sumber
Apakah Anda yakin ini berhasil? Dari utas ini, sepertinya tidak benar-benar melakukan apa-apa: forum.alpinelinux.org/forum/general-discussion/…
Travis Reeder
2
@ TravisR Lihatlah dokumen APK Alpine sini .
kaiser
Dalam kasus saya, ini membantu menurunkan versi dari alpine 3.7 ke alpine 3.6!
DUzun
Rentang semver tilde juga berfungsi seperti pada apk add ansible~=2.4.1 berarti >=2.4.1 <2.5.0. Periksa jubianchi.github.io/semver-check untuk menguji rentang Anda sendiri.
Mike D
Repo dengan daftar paket yang tersedia pkgs.alpinelinux.org/packages adalah yang paling membantu saya.
Egel
12

Saat ini, tidak ada cara untuk menginstal versi yang lebih lama dari paket dari repositori resmi di Alpine Linux. Hal terbaik yang dapat Anda capai adalah menggunakan repositori dari rilis sebelumnya:

# 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
Vlad Frolov
sumber
0

Karena saya menggunakan testing repo. Saya akhirnya membuat salinan saya sendiri. Tangga:

Buka detail paket. Ex:

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

Klik komit, klik tautan file APKBUILD dan "Log" pada menu untuk mendapatkan log komit file APKBUILD. Kemudian pilih komit untuk file APKBUILD Anda dan unduh. Ex:

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

Instal alat pembuatan:

apk -U add alpine-sdk

Anda tidak perlu root pengguna jadi buat packager pengguna dengan kata sandi:

adduser -D packager && addgroup packager abuild
passwd packager

Kemudian bangun sebagai packager dalam direktori yang sama dengan file APKBUILD:

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

Anda mungkin perlu mencari tahu kesalahan dan menginstal dependensi. Dalam contoh saya, saya perlu melakukan ini pada gambar Docker yang ada sebagai root:

apk add python-dev

Setelah berhasil membangun sebagai packager, instal sebagai root:

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

Tidak yakin cara menghapus --allow-untrusted sebagian, tetapi langkah-langkahnya berhasil untuk saya.

s12chung
sumber