Làm thế nào để cài đặt một phiên bản gói cụ thể trong Alpine?


90

Tôi có một Dockerfileđể xây dựng một hình ảnh Docker dựa trên Linux Linux. Bây giờ tôi cần cài đặt một gói như là một phần của điều này Dockerfile.

Hiện tại tôi có:

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

Rõ ràng đây là một ý tưởng tồi, vì kết quả là không xác định. Thay vào đó, nó phụ thuộc vào thời điểm tôi xây dựng hình ảnh, phiên bản nào gitđang được cài đặt.

Cách chính xác để làm điều này là gì?

Tôi đoán rằng tôi phải nói updated, upgradeaddsử dụng phiên bản nào, nhưng làm thế nào để làm điều này?

Tôi đã thấy rằng apkhỗ trợ ghim kho lưu trữ, nhưng đó không phải là điều tôi muốn (ít nhất là tôi nghĩ vậy), vì tôi không muốn ghim một kho lưu trữ, mà là một gói.

Nói cách khác: Nếu gitcó thể được cài đặt qua npm, tôi có thể chạy:

npm install git@1.9.2

(hoặc bất cứ phiên bản nào tôi muốn có). Điều này tương đương với điều này đối với Alpine Linux là gì?

Câu trả lời:


79

Bạn có thể đặt các phiên bản "dính" như thế này:

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

Điều đó sẽ chỉ nâng cấp các gói cho đến khi phiên bản được chỉ định. Sau đó, bạn có thể sử dụng một cách an toàn

apk upgrade

để nâng cấp tất cả các gói, trong khi các gói có phiên bản sẽ vẫn giữ nguyên với phiên bản của chúng. Để đặt phiên bản tối thiểu, chỉ cần sử dụng

apk add "packagename>1.2.3-suffix"

Trong trường hợp bạn không thể tìm thấy một gói, trong khi bạn có thể thấy nó trong giao diện người dùng cho các gói Alpine, hãy cập nhật cơ sở dữ liệu nguồn / gói của bạn:

apk update

Kho lưu trữ gói có thể được tìm thấy ở đây :

https://pkgs.alpinelinux.org/packages

Bạn có chắc chắn điều này hoạt động? Từ chủ đề này, có vẻ như nó thực sự không làm gì cả: forum.alpinelinux.org/forum/general-discussion/ Kẻ
Travis Reeder

2
@TravisR Hãy xem tài liệu APK của Alpine tại đây .
kaiser

Trong trường hợp của tôi, nó đã giúp hạ cấp từ alpine 3.7 xuống alpine 3.6!
DUzun

Phạm vi dấu ngã cũng hoạt động như trong apk add ansible~=2.4.1ý nghĩa >=2.4.1 <2.5.0. Kiểm tra jubianchi.github.io/semver-check để kiểm tra phạm vi của riêng bạn.
Mike D

Repo với danh sách các gói có sẵn pkgs.alpinelinux.org/packages là hữu ích nhất đối với tôi.
Egel

16

Hiện tại, không có cách nào để cài đặt các phiên bản cũ hơn của gói tùy ý từ kho lưu trữ chính thức trong Alpine Linux. Điều tốt nhất bạn có thể đạt được là sử dụng kho lưu trữ của các bản phát hành trước đó:

# 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

Bởi vì tôi đã sử dụng testingrepo. Tôi đã kết thúc việc xây dựng bản sao của riêng tôi. Các bước:

Đi đến chi tiết gói. Ví dụ:

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

Nhấp vào cam kết, nhấp vào liên kết tệp APKBUILD và "Nhật ký" trên menu để nhận nhật ký cam kết của tệp APKBUILD. Sau đó chọn một cam kết cho tệp APKBUILD của bạn và tải xuống. Ví dụ:

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

Cài đặt các công cụ xây dựng:

apk -U add alpine-sdk

Bạn cần không phải là rootngười dùng để tạo một packagerngười dùng có mật khẩu:

adduser -D packager && addgroup packager abuild
passwd packager

Sau đó, xây dựng nó như packagertrong cùng thư mục với tệp APKBUILD:

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

Bạn có thể cần phải tìm ra lỗi và cài đặt phụ thuộc. Trong ví dụ của tôi, tôi cần thực hiện điều này trên hình ảnh Docker hiện tại của mình là root:

apk add python-dev

Sau khi xây dựng thành công packager, cài đặt thành root:

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

Không chắc chắn làm thế nào để loại bỏ --allow-untrustedmột phần, nhưng các bước làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.