삭제하려는 명령을 무시하도록 apt-get 명령을 어떻게 구성할 수 있습니까?

삭제하려는 명령을 무시하도록 apt-get 명령을 어떻게 구성할 수 있습니까?

제거하려는 특정 패키지를 무시하도록 apt-get 명령을 구성할 수 있습니까? 저는 32비트 및 64비트 개발 패키지와 그 위에서 생성된 프로그램을 실행합니다. 즉, 시스템에 xxx:i386과 이에 상응하는 64비트가 필요하다는 뜻입니다. 예를 들어, 이 시스템에서는 관련된 모든 32비트 개발 패키지가 제거 대상으로 표시된 64비트 개발 패키지를 설치해야 합니다.

root@ac02:/usr/src/packages/lazarus# apt-get -f install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  gir1.2-freedesktop:i386 gir1.2-glib-2.0:i386 gir1.2-pango-1.0:i386 libcairo-gobject2:i386 libcairo-script-interpreter2:i386 libexpat1-dev:i386 libgirepository-1.0-1:i386
  libharfbuzz-gobject0:i386 libharfbuzz-icu0:i386 libice-dev:i386 liblzo2-2:i386 libpcre3-dev:i386 libpcrecpp0:i386 libpng12-dev:i386 libpthread-stubs0-dev:i386 libsm-dev:i386
  libx11-dev:i386 libxau-dev:i386 libxcb-render0-dev:i386 libxcb-shm0-dev:i386 libxcb1-dev:i386 libxcursor-dev:i386 libxdamage-dev:i386 libxdmcp-dev:i386 libxext-dev:i386
  libxfixes-dev:i386 libxinerama-dev:i386 libxrandr-dev:i386 libxrender-dev:i386 zlib1g-dev:i386
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  gir1.2-atk-1.0 gir1.2-gdkpixbuf-2.0 gir1.2-gtk-2.0 libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev
  libglib2.0-dev libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 libice-dev libpango1.0-dev libpcre3-dev libpcrecpp0 libpixman-1-dev libpng12-dev libpthread-stubs0-dev libsm-dev
  libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev
  libxinerama-dev libxrandr-dev libxrender-dev
Suggested packages:
  libcairo2-doc libglib2.0-doc libgtk2.0-doc libice-doc libpango1.0-doc libsm-doc libxcb-doc libxext-doc
The following packages will be REMOVED:
  gir1.2-atk-1.0:i386 gir1.2-gdkpixbuf-2.0:i386 gir1.2-gtk-2.0:i386 libatk1.0-dev:i386 libcairo2-dev:i386 libfontconfig1-dev:i386 libfreetype6-dev:i386 libgdk-pixbuf2.0-dev:i386
  libglib2.0-dev:i386 libgtk2.0-dev:i386 libharfbuzz-dev:i386 libpango1.0-dev:i386 libpixman-1-dev:i386 libxcomposite-dev:i386 libxft-dev:i386 libxi-dev:i386
The following NEW packages will be installed:
  gir1.2-atk-1.0 gir1.2-gdkpixbuf-2.0 gir1.2-gtk-2.0 libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev libexpat1-dev libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev
  libglib2.0-dev libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 libice-dev libpango1.0-dev libpcre3-dev libpcrecpp0 libpixman-1-dev libpng12-dev libpthread-stubs0-dev libsm-dev
  libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev
  libxinerama-dev libxrandr-dev libxrender-dev
0 upgraded, 38 newly installed, 16 to remove and 33 not upgraded.
1 not fully installed or removed.
Need to get 14.0 MB of archives.
After this operation, 13.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

패키지가 제거 대상으로 표시되면 apt-get이 해당 패키지가 다른 패키지와 충돌한다고 생각한다는 의미입니까? 대부분의 개발 시스템이 64비트 패키지와 별도로 32비트 개발 패키지를 검색하기 때문에 이는 매우 예상치 못한 일입니다.

답변1

apt-get다른 패키지를 설치하는 동안 패키지를 제거하기로 결정한 경우 이는 선언된 충돌(실제 충돌을 반영하지 않을 수 있음)이 있기 때문입니다. 답변에 설명된 대로 비 다중 아키텍처 패키지가 다른 아키텍처의 동일한 패키지와 충돌합니다.apt를 통해 64비트 라이브러리를 설치하려고 하면 필요한 많은 32비트 라이브러리가 제거될 위험이 있는 이유는 무엇입니까?이는 개발 키트에서 자주 발생합니다.

그러나 충돌하는 패키지의 강제 설치를 사용할 수 있습니다 dpkg --force-conflicts. 영향을 받는 패키지를 다운로드하여 수동으로 설치해야 하며 apt-get충돌이 해결될 때까지 해당 패키지를 사용할 수 없습니다(또는 apt-get충돌 해결이 중단됩니다). 충돌과 관련된 패키지를 깨뜨릴 수도 있지만 적어도 시도해 볼 수는 있습니다...

apt-get충돌 처리를 비활성화하는 옵션을 모르겠습니다.

대안은 영향을 받은 패키지를 복구하는 것입니다. 대부분의 경우 이는 간단하며 후속 문제를 피할 수 있습니다 apt. 예를 들어 harfbuzzDebian 8의 경우:

  • 소스코드를 다운로드하고 압축을 푼다:

    dget http://httpredir.debian.org/debian/pool/main/h/harfbuzz/harfbuzz_0.9.35-2.dsc
    cd harfbuzz-0.9.35
    
  • debian/control아래 줄 Multi-Arch: same뒤에 편집 하여 추가하세요.ArchitecturePackage: libharfbuzz-dev

  • 사용자 정의 패키지가 아카이브의 현재 버전으로 대체되지 않도록 변경 로그 항목을 추가하십시오.

    dch -n "Enable Multi-Arch on the -dev package."
    
  • 패키지를 빌드합니다( amd64빌더와 i386빌더에서 이 작업을 수행해야 합니다. 여기서 pbuilder유용합니다).sbuild

    dpkg-buildpackage -us -uc
    

그러면 공동 설치 가능한 libharfbuzz-dev패키지가 생성됩니다. 패키지가 이미 공동 설치 가능하기 때문에 작동하지만 필요한 메타데이터가 누락되어 있습니다. harfbuzz이 문제는 Debian 9에서 수정되었습니다.

관련 정보