Как настроить команду apt-get, чтобы игнорировать те, которые она хочет удалить?

Можно ли настроить команду apt-get игнорировать некоторые пакеты, которые он хочет удалить. Я запускаю как 32-битные, так и 64-битные пакеты разработки, а также созданные на них программы, то есть мне нужны как xxx: i386, так и их 64-разрядные копии в системе. В этой системе, например, мне нужно установить 64-битный пакет разработки на все связанные 32-разрядные пакеты разработки отмечены для удаления.

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 считает, что он конфликтует с другими пакетами? Это я считаю довольно неожиданным, так как большинство систем разработки ищут 32-битные пакеты разработки отдельно из 64-битных пакетов.

One Solution collect form web for “Как настроить команду apt-get, чтобы игнорировать те, которые она хочет удалить?”

Когда apt-get решает удалить пакет как часть установки другого пакета, это потому, что есть объявленный конфликт (который может не отражать фактический конфликт). Неармянские пакеты конфликтуют с одним и тем же пакетом из другой архитектуры; как объясняется в ответ на вопрос Почему попытка установить 64-битную библиотеку через apt угрожает удалить несколько требуемых 32-битных? это часто происходит с пакетами разработки.

Тем не менее вы можете принудительно установить конфликтный пакет, используя dpkg --force-conflicts . Вам нужно будет загрузить зараженные пакеты и установить их вручную, и вы не сможете использовать apt-get пока конфликт не будет разрешен (точнее, apt-get будет настаивать на разрешении конфликта). Вы можете сломать пакеты, вовлеченные в конфликт, но по крайней мере вы можете попробовать …

Я не знаю, как отключить обработку конфликтов apt-get .

Альтернативой является исправление затронутых пакетов; это достаточно просто в большинстве случаев и избежит любых последующих проблем с apt . Например, для harfbuzz в Debian 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 после строки Architecture разделе Package: libharfbuzz-dev

  • добавьте запись в журнал изменений, чтобы ваши пользовательские пакеты не были заменены текущей версией из архива:

     dch -n "Enable Multi-Arch on the -dev package." 
  • создайте пакет (вам нужно будет сделать это на компоновщике amd64 и i386 builder – это то, где pbuilder или sbuild пригодится)

     dpkg-buildpackage -us -uc 

Это создаст libharfbuzz-dev пакеты libharfbuzz-dev . Это работает, потому что пакеты уже были доступны для совместной установки, им просто не хватало необходимых метаданных. Для harfbuzz это было исправлено в Debian 9.

Linux и Unix - лучшая ОС в мире.