정확한 버전으로 특정 Ubuntu 패키지를 설치하는 방법은 무엇입니까?


224

제공된 일부 지정된 패키지 (이름 및 버전)를 사용하여 새 가상 머신을 설정하려고합니다.

예를 들어 2.2.20-1ubuntu1모든 종속성이 있는 버전의 apache2 서버에이 패키지의 새 버전이 있더라도이 패키지를 설치해야합니다.

솔루션은 여러 개의 "설정"으로 작동 / 확장해야합니다. 다른 가상 머신에는 이전 버전의 apache2가 필요할 수 있습니다.

나는 현재 정확한 패키지를 설치할 가능성을 알고 있지만 그렇게 잘 확장하지는 않습니다.

  1. *.deb모든 가상 머신에 필요한 모든 것을 수동으로 복사 하고 다음을 입력하십시오. dpkg -i...-> 작동 할 수 있지만 오류가 발생하기 쉽습니다. (수동 스크립트 등)
  2. 각 설정마다 새로운 Ubuntu 리포지토리를 생성하고 사용하십시오. -> n 개의 저장소가 필요하기 때문에 작동하지 않습니다.
  3. 머신을 한 번 설정하고 VM을 복사하고 스냅 샷을 만듭니다. -> n 개의 VM을 저장해야하기 때문에 작동하지 않습니다.

내 문제는 패치 관리로 표시 될 수 있지만 패키지를 현재 버전으로 업데이트하고 싶지 않습니다. 내 목표는 오래된 패키지를 설치하는 것입니다.

답변:


227

apt-getapt가 알고있는 아카이브에있는 한 특정 버전의 패키지를 설치하는 데 사용할 수 있습니다 . 로부터 apt-get맨 :

패키지 이름과 같고 선택할 패키지 버전을 따라 특정 패키지 버전을 설치용으로 선택할 수 있습니다. 그러면 해당 버전을 찾아 설치하도록 선택합니다. 또는 슬래시가있는 패키지 이름과 배포 버전 또는 아카이브 이름 (안정, 고정, 불안정)을 따라 특정 배포를 선택할 수 있습니다.

예를 들어 다음을 수행 할 수 있습니다.

sudo apt-get install apache2=2.2.20-1ubuntu1

이 경우 직접 의존성 해결을 수행해야 할 수도 있지만 문제가 있으면 apt-get이 원인을 알려줍니다. 내 11.10 시스템 에서이 작업을 수행하려면 다음을 수행해야합니다.

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1

46
사용 가능한 버전을 확인하는 방법은 무엇입니까?
Rodrigo Gurgel

12
@Rodrigo Gurgel, "적성 버전 apache2"
user169015

3
@ user169015 "version exist"! = "버전은 우분투 용으로 패키지되어 있으며 apt"
Kyle Strand

카일 안녕하세요, 귀하의 의견을 얻지 못했지만 예, apt를 사용하여 패키지를 설치할 수도 있습니다. 나는 오랫동안 그것을 사용했기 때문에 적성을 고집하고 ... :)
user169015

6
@ user169015 카일의 의견이 빠진 것 같습니다. 아래의 psusi의 답변을 살펴보십시오. 분명히 우분투 APT 저장소는 이전 버전의 패키지를 계속 호스팅하지 않습니다! 따라서 런타임 패키지 관리자 (pip, gem, maven 등)와 달리 오래되고 알려진 양호한 구성을 재구성하려는 경우 Ubuntu APT 리포지토리에 의존 할 수 없습니다. 나는 이것을 깨닫고 놀랐다. 아마도 아치가 이것을 더 잘 처리합니까? ( askubuntu.com/questions/728439/… )
조류 조류

66

사용 가능한 버전을 확인하려면 다음을 통해 확인할 수 있습니다.

sudo apt-cache madison ^apache2

작동하지 않으면 sudo apt-get update패키지 목록을 업데이트하기 전에 실행 을 고려 하십시오.

그런 다음 버전을 복사하거나 다음 구문을 사용하십시오.

sudo apt-get install apache2=2.2\*

설치 한 버전을 확인하려면 다음을 실행하십시오.

dpkg -l 'apache2*' | grep ^i

5
=2.2\*사용 가능한 하위 버전을 선택하기 위해 와일드 카드를 사용하는 방법으로 옵션 을 지적 해 주셔서 감사합니다 . 내가 알고 싶었지만 요청하는 방법을 몰랐습니다 :)
aexl

3
을 사용하여 버전을 나열 할 때 dpkg -l <packageName>버전 번호가 잘리는 경우가 있습니다. 이것을 피하려면COLUMNS=100 dpkg -l <packageName>
CJBS

Yakkety에서 첫 번째 명령은 다음과 같습니다.N: Unable to locate package ^apache2
Jesse Glick

@JesseGlick sudo apt-get update먼저 실행하십시오 . 올바른 Apt 소스를 구성했는지 확인하십시오.
kenorb

1
N : $ sudo apt-get 업데이트 후에 ^ apache2 패키지를 찾을 수 없지만 sudo apt-get install apache2 = 2.2 *가 작동합니다
Braian Mellor

17

apt패밀리의 다른 편리한 버전 관리 명령으로 이전 답변을 확장하겠습니다 . 사용 가능한 버전을 보려면 다음을 실행하십시오 apt-cache policy.

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

그런 다음 다른 곳에서 언급했듯이 다음을 사용하여 특정 버전을 설치하십시오 apt-get.

# apt-get install apache2=2.4.7-1ubuntu4.5
...

이제 apt-cache policy다시 실행 하여 설치 한 버전을 확인할 수 있습니다 .

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

업데이트에 최신 버전을 설치하지 않으려면 패키지를 apt-mark다음 과 같이 고정하십시오 .

# apt-mark hold apache2
apache2 set on hold.

새로운 버전의 apache2가 패키지 색인에 추가되고 컴퓨터가와 동기화되었다고 가정 해 봅시다 apt-get update. 다음에 실행할 때 이것을 볼 수 있습니다 apt-get upgrade:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

6

실제로는 이전 버전이 아카이브에 보관되어 있지 않기 때문에 가능하지 않으므로 어딘가에 이전 버전의 사본이 없으면 설치할 수 없습니다. 먼저 이전 버전을 설치하려는 이유를 스스로에게 묻어 야합니다. 안정적인 릴리스에서 새 버전이 출시되는 주된 이유는 보안 취약점을 해결하고 취약한 서버를 실행하고 싶지 않기 때문입니까?


25
개발 목적으로 오래된 환경의 정확한 사본을 재현하려면 이것이 필요합니다. 필요한 패키지에 액세스하기 위해 이전 패키지 버전을 삭제하지 않는 미러를 설정할 수 있습니까? 아니면 diff 만 보유하는 여러 저장소를 설정해야합니까?
ayckoster

19
@psusi : 정확한 답변은 아니지만 여러 가지 이유가있을 수 있습니다. 필자의 경우 최신 버전에는 실제로 버그가있을 수 있으며 이전 버전이 필요한 경우 다시 확인해야합니다. 단지 예입니다.
Cookie

2
@nomen, 아니오, 롤링 릴리즈 모델을 사용 하지 않는 단일 배포판입니다 . 안정된 릴리스에서 중요한 버그 및 보안 취약점이 수정 될 때 회귀를 일으키지 않지만 문제가 발생하면 회귀 릴리스로 태그가 지정된 버그 보고서를 제출하여 수정 또는 롤백되도록 각별한주의를 기울입니다. 뒤.
psusi

5
@ nomen, 단어에 대한 자신의 의미를 만들고 싶다면 다른 사람들과 의사 소통하는 데 어려움을 겪을 것입니다. 전 세계의 모든 사람들에게 이것은 롤링 릴리즈가 아니며 롤링 릴리즈는 정반대이므로 안정적인 릴리즈와 상호 배타적입니다. 그리고 지금 생각하면, 릴리스와 함께 제공된 원래 버전은 실제로 -release 포켓에 보관되며 업데이트는 -updates 또는 -security pocket으로 이동하므로 이전 업데이트로 돌아갈 수는 없습니다. 원래 출시 된 버전으로 돌아갈 수 있습니다.
psusi

5
@psusi : 여기 또 하나 있습니다. 모든 컴퓨터에서 Unison은 항상 동일한 버전이어야합니다. 그러나 13.10에서는 12.04 LTS와 다른 버전입니다. 그래서 지금 무엇? 이와 같은 질문에 올 때 왜 그렇게하고 싶은지와 같은 대답을받는 것은 정말 도움이되지 않으며 모든 사람에게 시간 낭비입니다.
쿠키

2

psusi가 설명했듯이 이전 버전은 우분투 저장소에 보관되지 않지만 런치 패드에서 여전히 찾을 수 있습니다. 그래서, 당신은 (신뢰할 수 있고 amd64를 우분투 버전과 아키텍처로 대체하십시오) :

https://launchpad.net/ubuntu/trusty/amd64/apache2

원하는 버전을 선택하십시오. 그런 다음 deb를 파일로 다운로드하고 다음을 사용하여 설치하십시오.

dpkg -i apache2_2.4.7-1ubuntu4.20_amd64.deb

다시 파일 이름을 파일로 바꿉니다. 많은 패키지를 다운 그레이드해야하는 경우 지루한 일이지만 필사적이라면 아무것도 아닌 것보다 낫습니다.

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