일부 종속성을 무시하려면 apt-get을 어떻게 얻습니까?


86

apt-get이 일부 종속성을 무시하게하려면 어떻게해야합니까? 예를 들어 mailx 를 설치 하여 cron 스크립트 / 보고서 생성 도구에서 전자 메일을 보내는 데 사용할 수있었습니다. 그러나 mailx를 설치하면 exim4 와 많은 의존성 (이미 Postfix가 이미 설치되어 있음)을 설치합니다. 필요하지 않으며 mailx도없이 살 수 있다고 생각합니다.

일부 종속성을 무시하지만 apt-get은 여전히 ​​훌륭한 도구이므로 어떻게 사용합니까?


postfix는 어떻게 설치됩니까? 데비안 패키지를 통해? 또는 소스에서 postfix를 설치 했습니까?
스튜

예, Postfix는 소스에서 설치되었습니다
FrancisV

3
데비안의 mailx 패키지는 exim4 만 '권장'하므로 필요하지 않습니다. 권장 패키지를 설치하지 않으려면에 추가 APT::Install-Recommends "false";하십시오 apt.conf.
ruief

unix.stackexchange.com에서 이에 대한 만족스러운 답변을 찾았습니다. unix.stackexchange.com/a/404449/23542
artfulrobot

답변:


45

간단하고 쉬운 솔루션 :- 각 패키지 뒤에 불필요한 패키지를 추가하십시오 .

-스위치가 없는 예 :

root@debian:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]

설치피하기 위해 스위치를 사용한 예 exim4-base. -끝에를 주목하십시오 :

root@debian:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]

보시다시피, apt-get더 이상 exim4-base패키지를 설치하려고 시도하지 않으며 다양한 종속성 exim4-config등 을 설치하지 않습니다 .

그리고 당신이 틀렸고 exim4-base결국 그 의존성이 필요하다면 , apt-get install나중에 할 수 있습니다 !


5
이것은 특정 종속성을 설치 하지 않는 가장 좋은 방법 입니다. 다른 답변은 모든 종속성 설치를 피하고, 설치된 후 종속성을 제거하거나 패키지를 신중하게 편집하도록 제안합니다.
Neil

1
이것은 내가 필요한 것입니다! ( X deps를 피 gnupg2하지 않고 설치 pinentry-gtk2)
lapo

그러나 그것은 정말로 훌륭합니다. 필자의 경우 apt-get은 "이 충족되지 않은 종속성"(이 방법을 사용하여 지정한)으로 패키지 설치를 거부합니다. 특히 내가 관심이없는 100 메가 바이트 문서 패키지.
Rolf

3
필수 종속성이 아닌 선택적 종속성에서만 작동합니다. 오류 메시지 : Depends: xxx but it is not going to be installed. 다음 옵션을 사용하여 모든 옵션 패키지를 건너 뛸 수 있습니다.apt-get install --no-install-recommends PACKAGE
koppor

가상 패키지에서도 작동하지 않습니다. 그러나 unix.stackexchange.com/a/404449/23542
artfulrobot

55

다음과 같이 deb 패키지의 종속성을 변경할 수 있습니다.

  1. 압축 풀기 deb : ar x golden-linux.deb(예 : 세 개의 파일을 만듭니다 : debian-binary control.tar.gz data.tar.gz)
  2. 제어 아카이브 압축 해제 : tar xzf control.tar.gz(postinst postrm preinst prerm md5sums control 작성)
  3. control텍스트 편집기를 사용하여 종속성 수정
  4. control.tar.gz를 다시 포장하십시오. tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. 재 포장 deb : ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz(주문 중요! [참고] 참조)

[참고] : dpkg는 데이터 섹션이 끝난 위치를 검색해야한다면 패키지의 메타 데이터를 빨리 읽을 수 없습니다!


2
니스, 그것은 "raring8"에서 "raring6"에 대한 종속성의 특별한 경우를 해결하지만 같은 버전 = (매우 감사합니다
Felipe Alcacibar

1
나도 감사합니다. libmng1.so.1symlink로 설정된 완벽하게 작동했지만 응용 프로그램이 필요했기 때문에 이것을 사용해야 했습니다 libmng1.so.2. apt-get단지 총구를 풀지 못하고 충족되지 않은 종속성에 대해 계속 짜증나게했습니다 (완전히 관련이없는 것을 설치할 때조차도!). 쓰레기 개념의 짐.
syntaxerror

+1이 작업은 나에게도 완벽했습니다. 패키지 gnome-settings-daemon는 원했지만 gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11이미 가지고 있습니다 gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2(<-끝에 ".2"에 주목하십시오). 이 절차를 통해 패키지를 편집하고 최신 11.2 버전을 사용하도록 할 수있었습니다. 감사합니다!
Eric Duncan

1
훌륭한 솔루션, 감사합니다. 2 단계와 4 단계를 약간 수정했습니다. 2. FILES=$(tar zxvf control.tar.gz)파일 목록을 변수에 저장합니다. 4.- tar zcf control.tar.gz $FILES원본 파일 목록을 사용하여 파이프 또는 경로 재 지정없이 단일 단계로 아카이브를 작성하십시오 (수정 후).
Brett

2
또 다른 커플 제안. # 4의 경우 : 나머지 명령 행에서 누락 된 파일 --ignore-failed-readtar무시 하도록 추가하십시오 . (예를 들어, prerm에는 postrm많은 패키지가 없습니다.) 또한 tarball은 최신 버전의 데비안 아카이브 형식 (예 :)이 .xz아닌 타볼이 될 수 있습니다 . .gzdata.tar.xz
Dan Lenski

33

--ignore-depends 옵션으로 패키지를 설치 한 후 /var/lib/dpkg/status파일을 편집하고 필요없는 종속성을 제거하십시오. 매우 조심하십시오. 뎁을 요구하는, 그것은 가능성이보다 더 BE 필요


3
업데이트 후 패키지를 지정할 필요없이 /var/lib/dpkg/status설치를 완료해야 할 수도 있습니다 sudo apt-get -f install.
Zmicier Zaleznicenka

superuser.com/a/815371/127024 에서도 찾을 수 있습니다 .
Johann

이것은 나에게 소름 끼치지만 완벽하게 작동했습니다!
David Schmitt

25

--nodeps깃발을 시험해 볼 수 있습니다 apt-get.
또는 dpkg옵션을 사용하여 패키지를 다운로드하여 설치하십시오 --ignore-depends.

예를 들어 foo종속성없이 패키지를 설치하려는 경우 bar:

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb

52
어떤 APT 버전이 있습니까? 광산 ( 0.8.10 )에는 그러한 옵션이 없습니다.
tshepang

8
dpkg에게 depndencies를 무시하도록 지시하는 것은 그를위한 옵션이 아닙니다. dpkg에게이 트랜잭션의 종속성을 무시하도록 지시하고 다음에 작업을 수행 할 때 종속성을 만족 시키거나 pacakge를 제거하려고 시도합니다.
스튜

2
APT 0.8.16 BTW에서는 여전히 운이 없습니다. 합리적인 대안이 없기 때문에 너무 나쁩니다. 2011 년에이 버전을 사용하기 위해 사용한 버전은 무엇입니까?
Christian

2
apt-get 다운로드를 사용한 다음 dpkg를 사용할 수 있습니다
Frederick Roth

7
--no-install-recommends나를 위해 일했다.
Olle Härstedt

14

소스에서 postfix를 설치 했으므로 mailx (또는 bsd-mailx)의 메일 전송 에이전트 종속성을 충족시키는 "더미"패키지를 설치해야합니다. 데비안의 "equivs"패키지는 dpkg에게 "이 의존성이 만족된다"고 알리는 더미 패키지를 만들기 위해 존재합니다.

dpkg에게 단순히 종속성을 무시하도록 지시하는 것은 좋은 해결책이 아닙니다. 단일 트랜잭션에 대해 dpkg / apt에게 무시하도록 지시하기 때문에 종속성을 영원히 무시하도록 지시 할 수 없기 때문입니다. apt를 사용할 때마다 모든 패키지 의 종속성을 확인 합니다


2
superuser.com/a/416560/128960 튜토리얼에 링크되어있는이 답변도 참조하십시오 (매우 복잡하지만) . 짧은 버전입니다 : 실행 equivs-control <name>오른쪽 의존성을 제공하기 위해 생성 된 파일을 편집하고 좋은 이름을 가지고, 다음 실행 equivs-build <name>마지막 dpkg -i결과 뎁 파일.
Christian

1
IMHO 이것은 정말 좋은 해결책입니다. 여기에 요청 된 다른 모든 솔루션은 약간 해킹입니다. 이 작업은 한 번만 수행하면되고 나중에 자체 컴파일 된 소프트웨어에 따라 소프트웨어를 설치할 수 있습니다. 따라서이 답변을 찬성합시다!
rugk

7

Xen을 실행하는 Ubuntu 12.04 서버에서이 옵션을 찾고있었습니다. 내 도메인에서 -virtual 커널을 사용하고 모든 커널 패키지 업그레이드와 함께 grub을 지속적으로 설치하려고했습니다. 그러나 p [yv] grub을 사용할 때는 domU 내부에서 Grub이 필요하지 않습니다.

apt-get에 -nodeps 옵션을 찾고 있었지만 작동하지 않았으므로 각 커널 업그레이드 후 grub * 제거 / 제거가 끝났습니다.

결국 맨 페이지를 읽는 것이 때로는 도움이됩니다 .12.04의 비슷한 apt-get 옵션은 --no-install-recommends 인 것으로 보입니다.이 경우 실제로는 grub이 패키지 정보 ( "실제"의존성이 아닌 것 같습니까?)

필자의 경우 비슷한 문제가 해결되어 '--no-install-recommends'에 대한 힌트가 아직 언급되지 않았으므로 여기에 추가하고 있습니다.


6

apt-get으로 패키지를 다운로드 한 다음 dpkg와 함께 설치하여 무시하려는 종속성을 수동으로 나열 할 수 있습니다.

예를 들어 mypackage를 다운로드하고 싶지만 libperl5.14에 의존하고 다른 버전이 있으므로 libperl5.14를 설치하고 싶지 않은 경우 다음과 같이이 종속성을 무시할 수 있습니다.

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb

이것이 당신에게 "깨진"상태를 남길 것이라고 언급하는 것입니다. 누락 된 종속성을 수정할 때까지 다른 패키지를 설치할 수 없습니다.
drpexe

6

종속성을 수동으로 조정하는 다른 방법은 다음과 같습니다.

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb

2

내 데비안 시스템에서 bsd-mailx는 실제로 의존합니다 default-mta | mail-transport-agent( apt-cache show <pkg>아카이브의 어떤 항목이나 dpkg -s <pkg>설치된 패키지 에 대해 패키지가 의존하는 것을 확인할 수 있습니다 .

postfix 패키지 Provides: mail-transport-agent에 MTA가 설치되어 있지 않다는 것을 알 수 있습니다. 공식 패키지라면 버그를 신고 할 가치가 있습니다.


1

이 목적을 위해, 당신 은이 의존성이 없다고 생각하는 을 설치할 수 있습니까?

apt-get install nail

-5

글쎄요.

성공을 향한 길에서 다른 사람들의 일을하는 것이 매우 중요합니다. 소스 (tarball)에서 일부 소프트웨어를 빌드 할 때 배포판의 패키지 관리자 작업을 사용할 기회가 없습니다.

"무료"업데이트는받지 않습니다. 대부분의 경우 소스에서 설치 한 패키지를 업데이트하지 않습니다. 새 버전의 소프트웨어를 추적해야하므로 소프트웨어 및 모든 종속 프로그램을 다시 빌드하십시오 (기억하십시오).

배포판 저장소의 다른 패키지에 문제가 있습니다. 우분투에는 훌륭한 패키지 관리자가 있으며 패키지를 관리하는 아주 좋은 사람들이 있습니다. 그리고 그들은 mailx 프로그램이 작동하기 위해서는 MTA가 필요하다고 결정했습니다. 따라서 소스에서 postfix를 설치하면 우분투는 exim을 설치하라는 메시지를 표시하지 않습니다.

어떤 이유로 서버의 유지 보수가 다른 사람에게 전달되면 (예를 들어 프로젝트가 매우 성공적으로 진행되고 다른 물건으로 바쁠 때 서버를 관리하기 위해 다른 사람을 고용하기로 결정한 경우) 그는 자연스럽게 dpkg --get-selections모든 것을 얻기 위해 달리기 를 기대 합니다. 설치된 패키지.

배포판의 패키지 관리 소프트웨어를 가능한 많이 사용하십시오. 사전 빌드 된 패키지를 찾을 수없고 더 나은 전문가가 되려면 자신 만의 패키지를 만드는 방법을 배우십시오.

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