Alpine'de belirli bir paket sürümü nasıl kurulur?


90

DockerfileAlpine Linux tabanlı bir Docker resmi oluşturmak zorundayım . Şimdi bunun bir parçası olarak bir paket kurmam gerekiyor Dockerfile.

Şu anda var:

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

Görünüşe göre bu kötü bir fikir, çünkü sonuç deterministik değil. Bunun yerine, hangi sürümün gityüklenmekte olduğunu görüntünün oluşturduğu noktaya bağlıdır .

Bunu yapmanın doğru yolu nedir?

Ben söylemek zorunda olduğunu tahmin updated, upgradeve addhangi versiyonları kullanmak, ama bunu nasıl yapacağım?

apkDepoların sabitlenmesini desteklediğini gördüm , ancak istediğim şey bu değil (en azından öyle düşünüyorum), çünkü bir depoyu sabitlemek istemiyorum, ama bir paket.

Başka bir deyişle: Eğer gitkurulabilirse npm, şunu çalıştırabilirim:

npm install git@1.9.2

(veya hangi sürüme sahip olmak istersem). Alpine Linux için buna eşdeğer nedir?

Yanıtlar:


79

"Sabit" sürümleri şöyle ayarlayabilirsiniz:

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

Bu paketleri yalnızca belirtilen sürüme kadar yükseltecek. Daha sonra güvenle kullanabilirsiniz…

apk upgrade

Tüm paketleri yükseltmek için, sürümleri olan paketler sürümleriyle birlikte kalacaktır. Minimum sürümü ayarlamak için sadece kullanın…

apk add "packagename>1.2.3-suffix"

Bir paket bulamıyorsanız, UI for Alpine paketlerinde görebilirken, kaynaklar / paket veritabanınızı güncelleyin:

apk update

Paket deposu burada bulunabilir :

https://pkgs.alpinelinux.org/packages

Bunun işe yarayacağına emin misin? : Bu konuya bakıldığında, aslında hiçbir şey yapmaz gibi görünüyor forum.alpinelinux.org/forum/general-discussion/...
Travis Reeder

2
Alp APK docs bir göz atın @TravisR burada .
kaiser,

Benim durumumda alp 3.7'den alp 3.6'ya geçmemize yardımcı oldu!
DUzun

Semver tilde aralıkları da apk add ansible~=2.4.1anlam olarak çalışır >=2.4.1 <2.5.0. Check out jubianchi.github.io/semver-check kendi aralıklarını test etmek.
Mike D,

Mevcut paketlerin listesi olan depo pkgs.alpinelinux.org/packages için çok yardımcı oldu.
Egel,

16

Şu anda, bir paketin keyfi eski sürümlerini Alpine Linux'taki resmi depolardan kurmanın bir yolu yoktur. Elde edebileceğiniz en iyi şey, önceki sürümlerin havuzlarını kullanmaktır:

# 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

1

Çünkü testingdepoyu kullanıyordum . Kendi kopyasını kendim oluşturdum. Adımlar:

Paket detaylarına git. Ör:

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

İşlemin üzerine tıklayın, APKBUILD dosyasının işlem günlüğünü almak için APKBUILD dosya linklerine tıklayın ve menüdeki "Log" a tıklayın. Sonra APKBUILD dosyanız için bir taahhüt seçin ve indirin. Ör:

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

Yapı araçlarını yükleyin:

apk -U add alpine-sdk

rootKullanıcı olmamanız gerekiyor packager, şifre ile bir kullanıcı oluşturun :

adduser -D packager && addgroup packager abuild
passwd packager

Ardından packagerAPKBUILD dosyasıyla aynı dizinde olduğu gibi oluşturun:

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

Hataları çözmeniz ve bağımlılıkları yüklemeniz gerekebilir. Örneğime göre, bunu mevcut Docker resmime yapmam gerekiyordu root:

apk add python-dev

Başarılı bir yapı oluşturduktan sonra, şu şekilde packagerkurun root:

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

Parçanın nasıl çıkarılacağından emin değilim --allow-untrusted, ancak adımlar benim için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.