데비안이 제공하는 것보다 최신 버전의 소프트웨어를 어떻게 설치합니까?


26

현재 운영 체제 버전에서 사용 가능한 것보다 최신 버전의 소프트웨어를 원한다고 가정하면 어떻게해야합니까?

고려해야 할 경우 :

  1. 해당 버전의 OS에 사용 가능한 추가 패키지의 반 공식 / 공식 소스가 있습니다. 예 : 데비안의 경우 backports.org 또는 우분투의 경우 PPA
  2. 해당 버전의 OS에서 사용할 수있는 최신 버전의 패키지는 없지만 최신 버전의 OS에서 사용할 수있는 최신 버전이 있습니다. 백 포트의 표준 사례입니다.
  3. 사용 가능한 최신 버전의 소프트웨어 패키지 버전이 없습니다. 사용 가능한 옵션은 최신 버전을 패키지하는 것입니다.

Per 정식 Q & A 목록을 작성합시다 . 다음은 정식 답변을 제공하기위한 것입니다. 답변은 아마도 커뮤니티 위키가되어야합니다.


이것은 배포에 따라 다릅니다. 분포 당 하나의 질문으로 만드는 것이 좋습니다.
Gilles 'SO- 악마 그만해'

2
@Gilles이 질문은 배포 관련 내용이 아닙니다. 나는 다른 배포판에 대한 답변으로 하나의 질문을하는 것이 낫다고 생각합니다.
Faheem Mitha

작동하고 작동하지 않는 한 가지 예 : Debian 8의 경우 MySQL 5.6이 필요했습니다. (그러나 일반적으로 MySQL 5.5는 데비안 8에서만 설치할 수 있습니다. 다른 작업과 비교할 때 5.6이 필요했습니다.) 5.6 백 포트를 설치하려고했지만 망가졌습니다. 어떤 종류의 중복 파일을로드하는 중 오류 메시지가 표시됩니다. 보고했지만 어떻게해야합니까? 해결책 : MySQL 사이트에서 데비안 8 전용 MySQL 5.6을 직접 다운로드 할 수 있음을 발견했습니다. 즉 하단의 [이] (의 해결 과정 주석 읽으십시오 ... 일,하지만 dev.mysql.com/doc/refman/5.6/en/linux-i
타원형보기

답변:


33

(이 답변에 대한 질문 / 의견이 있으면 의견을 추가하십시오. 또는 충분한 답변이 있으면 채팅에 핑 (Ping) 할 수 있습니다.)

새로운 버전의 데비안에서 바이너리 꾸러미를 직접 설치하기 – 답이 아닙니다.

데비안 기반 배포판의 일부 버전을 실행한다고 가정합니다. 사용 가능한 것보다 최신 버전의 패키지를 원합니다. 모든 초보자가 먼저 Debian 버전에 바이너리 패키지를 직접 설치하려고 시도합니다. 실행중인 버전 및 패키지의 최신 버전에 따라 작동하지 않을 수 있습니다. 일반적으로이 절차는 제대로 작동하지 않습니다.

예를 들어 안정에서 직접 테스트 / 불안정에서 바이너리 패키지를 설치하려고하는 경우를 고려하십시오. 테스트 / 불안정이 그 순간 안정에 거의 도달하지 않는 한 이것은 잘 진행되지 않을 것입니다. 그 이유는 데비안과 같은 Linux 기반 바이너리 배포판의 특성과 관련이 있습니다. 이러한 운영 체제는 공유 라이브러리에 크게 의존하며 이러한 종속성은 버전에 따라 매우 밀접한 관계가 있습니다. 종종 필요 이상으로 훨씬 더. 데비안은 현재 버전 의존성을 "긴밀하게"만드는 좋은 방법을 가지고 있지 않다. 즉 버전 의존성이 필요한만큼 정확하게 제한적이라고 말하는 짧은 방법이다.

이것은 사용자에게 무엇을 의미합니까? 예를 들어 slrn데비안 불안정에서 데비안 안정으로 say를 설치한다고 가정 해보십시오 . 이것은 어떻게 생겼습니까?

# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.

에서 발생한 오류에도 불구하고 apt여기에 깨진 패키지가 없습니다. 그래서 무엇이 잘못 되었습니까? 문제는 libc6unstable slrn이 컴파일 된 버전이 Debian 스 테이블에서 사용 가능한 버전과 다르고 버전 번호가 높다는 것입니다. ( libc6GNU C 라이브러리입니다. C 라이브러리는 모든 유닉스 계열 운영 체제의 중심이며 GNU C 라이브러리는 Linux 기반 운영 체제가 일반적으로 사용하는 버전입니다.)

따라서 불안정한 slrn버전은 libc6안정적인 버전 보다 높은 버전의 버전이 필요합니다 . 패키지가 상위 버전의 라이브러리에 대해 컴파일되었으므로 반드시 해당 라이브러리의 상위 버전이 필요하지는 않지만 종종 그런 경우가 있습니다.

문법

apt-get install slrn/unstable

의미 : 불안정을 사용 slrn하지만 다른 모든 패키지의 경우 안정 버전 만 사용하십시오. 보다 정확하게는 우선 순위 번호를 사용합니다. 자세한 내용 man apt_preferences을 참조하십시오.

하나는 할 수 있습니다

apt-get install -t unstable slrn

이것은 훨씬 더 효과가 있지만 일반적으로 원하지 않습니다. 왜?

즉 , 패키지가 안정된 상태에서 모든 패키지를 불안정한 상태로 임시적으로 처리 합니다 . 따라서 이것은 slrn버전 번호가 높은 불안정한 의존성을 불안정하게 가져오고 일반적으로 적용됩니다. 여기에는 일반적으로 이미 설명한 이유로 GNU C 라이브러리가 포함됩니다. 이제, 이러한 접근 방식은 일반적으로 "종속성"입니다. 종속성은 정의에 의해 만족 될 것입니다 (불안정한 것에 slrn는 불안정한 것으로 만족되는 종속성이 있음 ). 그러나 갑자기 라이브러리 버전으로 강제 실행되는 패키지의 혼합으로 끝납니다. 그들이 만든 것과 다릅니다. 이것은 아마도 잘 끝나지 않을 것입니다.

대답은 ... 백 포트입니다!

그렇다면 올바른 방법은 무엇입니까? 일반적으로 "백 포트"로 알려진 최신 버전의 데비안 소스를 다시 빌드하는 것입니다. 다음과 같은 경우를 고려하십시오.

해당 버전의 데비안에서 사용 가능한 추가 패키지의 반 공식 / 공식 소스가 있습니다.

보기의 첫 번째 장소입니다 데비안 백 포트 데비안 백 포트의 공식 사이트입니다.

구체적인 예를 들면 다음과 같습니다.

릴리스에 적합한 백 포트 라인을 추가하고 새 패키지를 찾은 다음 백 포트에서 무언가를 명시 적으로 설치하십시오 (백 포트가 기본적으로 비활성화되어 있기 때문에).

echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git

이것은 스트레치에 포함 된 안정적인 것보다 유용한 새로운 기능을 가진 최신 안정 버전의 git을 얻습니다 (예 : 'include'를 사용하면 여러 구성 파일을 결합하거나 ~ / work / projects / vs ~ / personal /에 대한 사용자 이름을 변경할 수 있습니다 프로젝트 /).

살펴볼 또 다른 곳은 우분투 관리자의 다양한 PPA입니다. "packagename PPA"를 검색 할 수 있습니다.

해당 버전의 OS에서 사용할 수있는 최신 버전의 패키지는 없지만 최신 버전 / OS에서 사용할 수있는 최신 버전이 있습니다. 백 포트의 표준 사례입니다.

백 포트는 실행중인 버전에서 이후 버전의 데비안에서 데비안 소스를 다시 빌드한다는 것을 의미합니다. 이 절차는 패키지에 따라 쉽고 복잡 할 수 있습니다. 이 작업을 수행하는 방법에 대한 개요는 다음과 같습니다.

초보자를위한 간단한 백 포트 자습서

구체적으로 현재 데비안 마구간을 실행하고 있다고 가정합니다. 패키지 slrn를 예로 사용하겠습니다 .

먼저 모든 데비안 패키징 파일 debian/은 소스 디렉토리 의 하위 디렉토리에 있습니다.

첫 번째 단계는 최신 버전이 있는지 확인하는 것입니다. 를 사용하여이 작업을 수행 할 수 있습니다 apt-cache policy.

apt-cache policy slrn

slrn:
  Installed: 1.0.0~pre18-1.3
  Candidate: 1.0.0~pre18-1.3
  Version table:
     1.0.1-10 0
         50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
         50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
 *** 1.0.0~pre18-1.3 0
        500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status
     1.0.0~pre18-1.1 0
        500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages

우리는 백 포트하고 싶습니다 1.0.1-10.

1 단계:

주의 : deb-src다운로드하려는 소스 버전 의 라인이에 표시되어 있는지 확인하십시오 /etc/apt/sources.list. 예를 들어 불안정 버전의을 (를) 다운로드하려면 불안정한 줄 slrn이 필요 deb-src하거나 작동하지 않습니다. deb소스를 다운로드하기 위해 해당 라인이 필요하지는 않지만 apt-cache policy해당 정보를 사용하므로 해당 deb라인 apt-cache policy이없는 경우 관련 버전이 표시되지 않습니다. 당신이이있는 경우 deb라인을 엔트리에서 사용하는 최신 버전 핀 것을 잊지 마세요 /etc/apt/preferences또는 이와 유사한합니다. 의 항목 /etc/apt/preferences(불안정에 대한)이 같은 예를 들어, 작동합니다.

Package: *
Pin: release a=unstable
Pin-Priority: 50

에 줄을 추가하면 나중에 /etc/apt/sources.list실행하는 것을 잊지 마십시오 apt-get update.

의 소스를 다운로드하십시오 slrn. 좋은 곳은 /usr/local/src/slrn입니다.

apt-get source slrn=1.0.1-10

2 단계:

백 포트를 업스트림 버전과 구별 할 수 있도록 버전 번호를 약간 변경하십시오. Run을 실행 dch -i하면 debian/changelog파일에 항목이 자동으로 추가 됩니다. 그런 다음 예를 들어 항목을 다음과 같이 변경하십시오.

slrn (1.0.1-10.username) UNRELEASED; urgency=low

  * Backport to wheezy.

 -- User <user@domain>  Sun, 02 Feb 2014 23:54:13 +0530

3 단계 :

소스를 구축하려고 시도하십시오. 빌드에 필요한 패키지를 사용할 수 없으면 시도가 실패합니다. 디렉토리를 소스 디렉토리로 변경하십시오. 패키지 debuild에서 사용하십시오 devtools.

cd slrn-1.0.1/
debuild -uc -us

빌드 종속성이 충족되면 소스는 소스 디렉토리 위의 레벨에서 일부 뎁을 빌드하고 생성합니다. 이 경우 /usr/local/src/slrn.

4 단계 :

빌드 종속성이 충족되지 않았다고 가정하십시오. 그런 다음 빌드 종속성을 설치해야합니다. 버전에 따라 종속성을 사용할 수 없거나 사용 가능한 경우 올바른 버전에서 사용하지 못할 수 있으므로이 기능이 작동하거나 작동하지 않을 수 있습니다.

NB : 불행히도 데비안 패키지가 필요한 것보다 높은 빌드 종속성 버전을 요구하는 것은 드문 일이 아닙니다. 데비안에서는이를 확인하는 자동화 된 방법이 없으며, 종종 패키지 관리자는 해당 버전 / 릴리스에서 작동하는 한 신경 쓰지 않습니다. 따라서 의존성 버전에 회의적인 태도를 취하고 상식을 사용하십시오. 예를 들어, Python 및 GNU 도구와 같이 널리 사용되는 패키지는 데비안 패키지 프로그램의 목록에 상관없이 특정 버전의 종속성에 의존하지 않습니다.

어쨌든 설치를 시도 할 수 있습니다

apt-get build-dep slrn=1.0.1-10

이것이 성공하면 패키지를 다시 빌드하십시오 (STEP 2). 실패하면 추가 작업이 필요합니다. 파일 debuild에서 빌드 종속성 을 살펴보고 debian/control필요한 경우이를 변경할 수 있습니다. 이제 그것에 대해 이야기하겠습니다. 다음은 slrn에 대한 빌드 종속성입니다.

Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
 exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
 libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews

사용의 대안 apt-get build-dep은 다음을 수행하여 수동으로 설치하는 것입니다.

apt-get install debhelper libslang2-dev ...

제어 파일에서이 값을 변경하기 시작 apt-get build-dep하면 더 이상 올바른 작업을 수행하지 않으므로 수동 설치로 전환해야합니다 .

사용 가능한 최신 버전의 소프트웨어 패키지 버전이 없습니다. 사용 가능한 옵션은 최신 버전을 패키지하는 것입니다.

대부분의 경우 새로운 소스와 함께 이전 버전의 소프트웨어에서 패키징을 재사용 할 수 있습니다. 이 접근법은 문제를 일으킬 수 있습니다. 특히 이전 버전의 소프트웨어에 적용된 패치는 여기에 적용되지 않을 수 있으므로 소스와 다시 동기화해야 할 수도 있습니다. 현재 표준이되고있는 3.0 (퀼트) 소스 형식은 퀼트를 사용하며 패치는 debian/patches디렉토리에 있습니다.

그러나 이러한 문제에 대한 자세한 설명은이 게시물에서 다루지 않습니다.


이것은 실제로 일반적인 배포판입니다 (새로운 물건에 대한 코드 저장소는 다르게 호출 할 수 있거나 특별한 장소에서 물건을 가져와야합니다). 배포 가이드를 확인하십시오.
vonbrand

2

데비안뿐만 아니라 항상 작동하는 한 가지 방법은 필요한 소프트웨어를 직접 컴파일하는 것입니다. (사용 가능한 최신 버전이 필요할 때와 소프트웨어가 전혀 제공되지 않았을 때 모두 데비안에서이 작업을 몇 년 동안 해왔습니다.)

/use/local사용하여 로컬로 컴파일 된 패키지 stow를 저장하면 패키지와 관련된 모든 파일을 하위 디렉토리 트리에 저장 한 다음 해당 트리에 심볼릭 링크를 만들 수 있습니다. 이렇게하면 컴파일 된 패키지를 쉽게 관리 할 수 ​​있습니다. 설치된 파일이 데비안 제공 파일과 충돌하지 않으며 하나의 명령으로 패키지를 제거 할 수 있습니다.

패키지를 컴파일하고 설치하는 단계 some_software는 일반적으로 다음과 같은 변형입니다.

  1. .tar파일 등을 다운로드 하십시오 /usr/local/src/.

  2. 파일 만들기 /usr/local/packages/some_software나 소프트웨어를 다운로드 한 설명, 그것은 무엇을, 어떤 버전이 있으며, 그것이 내가 (아래 참조) 컴파일하기 위해해야 할 일을했을 어떤 사항을 다루고 있습니다.

  3. .tar파일 내용을에 압축을 풉니 다 /usr/local/tmp/some_software.

  4. 또는 저장소에서 컴파일하는 경우 적절한 하위 디렉토리 (예 :)에서 저장소를 체크 아웃 /usr/local/git/some_software하고 컴파일하십시오.

  5. cd이 디렉토리에서보기에 README, INSTALL

  6. 대부분의 경우 configure패키지에 대한 autotools 스크립트가 있습니다. ./configure --prefix /usr/local/stow/some_software-version이 하위 디렉토리에 파일이 설치되도록 호출하십시오 . 그렇지 않으면 Makefile설치된 파일의 경로를 설정하는 방법을 읽고 이해하십시오.

  7. 로 컴파일하십시오 make.

  8. 로 설치하십시오 make install.

  9. cd /usr/local/stow그런 다음 stow some_software-version

  10. 작동하는지 테스트하십시오.

첫 번째 시도에서 컴파일이 작동하지 않는 경우가 종종 있습니다. 패키지에는 라이브러리와 해당하는 포함 파일이 필요할 수 있으므로 ...-dev데비안 에서 올바른 패키지 를 설치해야합니다 . 또는 패키지 작성자가 사용하지 않은 gcc다른 버전이 gcc불평하지 않는 것에 대해 불평 할 수 있습니다. 따라서 때로는 코드를 읽고 수정해야하지만 너무 자주 발생하지는 않습니다.


이 질문의 의도는 분명하지는 않지만 데비안 용 소프트웨어 패키지를 설치하는 방법을 설명하는 것이 었습니다. 어쩌면 나는 질문을 더 분명하게 만들어야 할 것이다. stow데비안 패키지를 작성 합니까 ? 맨 페이지에서 보이지 않습니다.
Faheem Mitha

@FaheemMitha Stow는 데비안 패키지에 대해 모른다. 별도의 설치 디렉토리 세트에서 단일 디렉토리로의 기호 링크 만 관리합니다.
Kusalananda

@FaheemMitha : 자체 컴파일 된 소프트웨어를 데비안 패키지 로 바꾸려면 데비안 패키지 관리자와 마찬가지로 직접 패키지해야합니다. 그러나 유일한 사용자가 되려면 설치하는 /usr/local것이 훨씬 간단하고 stow거기에 저장된 파일을 관리하는 데 도움 이된다면 너무 큰 문제 입니다. 또는 다르게 말해 : 소프트웨어가 데비안에서 사용하기 위해 데비안 패키지에있을 필요는 없습니다.
dirkt

의존성을 올바르게 설명하면 패키지를 설치하면 종속성이 계속 설치되어있게됩니다.
Stephen Kitt

@StephenKitt : 데비안 패키지로 소프트웨어를 올바르게 패키징하는 것이 최상의 솔루션입니다. 단점은 제대로 포장하기 위해 시간을 투자해야한다는 것입니다.
dirkt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.