Alpine에서 특정 패키지 버전을 설치하는 방법은 무엇입니까?


90

DockerfileAlpine Linux를 기반으로하는 Docker 이미지를 빌드 해야합니다 . 이제 이것의 일부로 패키지를 설치해야합니다 Dockerfile.

현재 나는 :

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

결과는 결정적이지 않기 때문에 이것은 나쁜 생각입니다. 대신 이미지를 빌드하는 시점과 git설치 되는 버전에 따라 다릅니다 .

이 작업을 수행하는 올바른 방법은 무엇입니까?

나는 말할 필요 updatedupgrade있고 add어떤 버전을 사용해야 한다고 생각 하지만 어떻게해야합니까?

apk리포지토리 고정 을 지원하는 것을 보았지만 리포지토리를 고정하지 않고 패키지로 고정하기 때문에 원하는 것이 아닙니다 (적어도 그렇게 생각합니다).

즉 , git를 통해 설치할 npm수 있다면 다음을 실행할 수 있습니다.

npm install git@1.9.2

(또는 내가 원하는 버전). 알파인 리눅스에서 이것과 동등한 것은 무엇입니까?

답변:


79

다음과 같이 "sticky"버전을 설정할 수 있습니다.

# 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 패키지의 UI에서 패키지를 볼 수 있지만 소스 / 패키지 데이터베이스를 업데이트하십시오.

apk update

패키지 리포지토리 여기 에서 찾을 수 있습니다 .

https://pkgs.alpinelinux.org/packages

이것이 효과가 있습니까? 이 글에서 실제로 아무것도하지 않는 것 같습니다 : forum.alpinelinux.org/forum/general-discussion/…
Travis Reeder

2
@TravisR 여기 에서 Alpine APK 문서를 살펴보십시오 .
카이저

필자의 경우 알파인 3.7에서 알파인 3.6으로 다운 그레이드하는 데 도움이되었습니다!
DUzun

물결표 범위도 apk add ansible~=2.4.1의미 와 같이 작동 합니다 >=2.4.1 <2.5.0. 확인 jubianchi.github.io/semver-check을 자신의 범위를 테스트 할 수 있습니다.
Mike D

사용 가능한 패키지 pkgs.alpinelinux.org/packages 목록이있는 저장소가 가장 도움이되었습니다.
Egel December

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

그런 다음 packagerAPKBUILD 파일과 동일한 디렉토리에 빌드 하십시오.

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

오류를 파악하고 종속성을 설치해야 할 수도 있습니다. 내 예에서는 기존 Docker 이미지에서 root다음 과 같이해야했습니다 .

apk add python-dev

로 빌드 한 후 다음과 같이 packager설치하십시오 root.

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

--allow-untrusted부품 을 제거하는 방법을 모르지만 단계가 저에게 효과적이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.