Как установить конкретную версию пакета в Alpine?


91

У меня есть Dockerfileдля создания образа Docker, который основан на 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?

Ответы:


80

Вы можете установить «липкие» версии следующим образом:

# 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

Вы уверены, что это работает? Из этой ветки
Трэвис Ридер

2
@TravisR Взгляните на документацию по Alpine APK здесь .
Кайзер

В моем случае это помогло просто понизить рейтинг с альпийских 3,7 до альпийских 3,6!
Дузун

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

Репо со списком доступных пакетов 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

Возможно, вам придется выяснить ошибки и установить зависимости. В моем примере мне нужно было сделать это на моем существующем образе Docker как root:

apk add python-dev

После успешной сборки as 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.