Як встановити певну версію пакета в Alpine?


90

У мене є Dockerfileпобудова зображення Докера, який базується на Alpine Linux. Тепер мені потрібно встановити пакет як частину цього Dockerfile.

На даний момент у мене:

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

Мабуть, це погана ідея, оскільки результат недетермінований. Натомість це залежить від моменту, в який я будую зображення, в яку версію gitвстановлюється.

Який правильний спосіб зробити це?

Я здогадуюсь, що я повинен сказати updated, upgradeі addякі версії використовувати, але як це зробити?

Я бачив, що apkпідтримує закріплення сховищ, але це не те, що я хочу (принаймні я так думаю), тому що я не хочу закріплювати сховище, а пакет.

Іншими словами: Якщо це gitможна встановити через npm, я можу запустити:

npm install git@1.9.2

(або будь-яку версію, яку я хочу мати). Що еквівалентно цьому для Alpine Linux?

Відповіді:


79

Ви можете встановити "липкі" версії так:

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

Це дозволить оновити пакети лише до вказаної версії. Тоді ви можете безпечно використовувати ...

apk upgrade

оновити всі пакети, тоді як пакети з версіями залишаться з їх версією. Для встановлення мінімальної версії просто використовуйте…

apk add "packagename>1.2.3-suffix"

Якщо ви не можете знайти пакунок, хоча ви можете побачити його в інтерфейсі для пакетів Alpine, оновіть джерела / базу даних пакунків:

apk update

Репозиторій пакетів можна знайти тут :

https://pkgs.alpinelinux.org/packages

Ви впевнені, що це працює? З цієї теми
Travis Reeder

2
@TravisR Погляньте на альпійські документи APK тут .
кайзер

У моєму випадку це допомогло просто перейти з альпійських 3,7 до альпійських 3,6!
DUzun

Діапазони Semver tilde також працюють як за apk add ansible~=2.4.1значенням >=2.4.1 <2.5.0. Перевірте jubianchi.github.io/semver-check, щоб перевірити власні діапазони.
Майк D

Репо з переліком доступних пакетів pkgs.alpinelinux.org/packages був для мене найбільш корисним.
Егель

16

В даний час немає можливості встановити довільні старіші версії пакету з офіційних сховищ в Alpine Linux. Найкраще, що ви можете досягти - це використання сховищ попередніх версій:

# 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

Тому що я використовував testingрепо. Я закінчила створення власної копії. Кроки:

Перейдіть до деталей пакета. Наприклад:

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

Клацніть на фіксацію, натисніть на посилання файлів APKBUILD та "Журнал" у меню, щоб отримати журнал фіксування файлу APKBUILD. Потім виберіть команду для файлу APKBUILD та завантажте його. Наприклад:

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

Встановіть інструменти збирання:

apk -U add alpine-sdk

Потрібно бути не rootкористувачем, тому створіть packagerкористувача з паролем:

adduser -D packager && addgroup packager abuild
passwd packager

Потім побудуйте його як packagerу тому самому каталозі, що і файл APKBUILD:

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

Можливо, вам доведеться з’ясувати помилки та встановити залежності. У моєму прикладі мені потрібно було зробити це на своєму наявному зображенні Докера як root:

apk add python-dev

Після успішної збірки як packager, встановіть її як root:

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

Не впевнений, як зняти --allow-untrustedдеталь, але кроки працювали для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.