如何管理基于 deb 的包/依赖项

如何管理基于 deb 的包/依赖项

今天我将 Elementary OS Loki 安装到虚拟机中。

我很惊讶,这个系统是如此之快且漂亮。

但重点是:

如何安装.deb软件包并解决对 Elementary OS 的依赖关系?

答案1

实际上,我更喜欢使用aptitude包管理器来安装/解决包依赖项。您可以使用以下命令安装它:

sudo apt-get install aptitude

apt这些命令与/非常相似apt-get

aptitude似乎比其他处理依赖关系的工具更聪明。它还显示带有处理删除/安装过程的替代方案的菜单,并在您拒绝第一个选择时显示替代方案(如果存在)。

$sudo aptitude purge libasound2
The following packages will be REMOVED:  
  libasound2{p} libasound2-data{u} 

The following packages have unmet dependencies:
 openjdk-8-jre : Depends: libasound2 (>= 1.0.16) but it is not going to be installed
The following actions will resolve these dependencies:

Remove the following packages:              
1)     openjdk-8-jre [8u111-b14-3 (now, testing)]



Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

     Keep the following packages at their current version:    
1)     libasound2 [1.1.2-1 (now, testing)]                
2)     libasound2-data [1.1.2-1 (now, testing)]           

Accept this solution? [Y/n/q/?] 

来自 debian Aptitude维基百科

Aptitude 具有许多有用的功能,包括:

  • 类似 mutt 的语法,用于以灵活的方式匹配包标记
  • 将软件包设置为“自动安装”或“手动安装”,以便在不再需要时可以自动删除软件包
  • 即将采取的操作的彩色预览
  • 类似 dselect 的用户操作持久性
  • 能够检索和显示大多数软件包的 Debian 变更日志
  • AptCLI 式(= apt-get + apt-cache)命令行模式(“aptitude install foo”)
  • 基于分数且(通常)比 apt-get 更智能的依赖解析器

尽管它已经被列为过时多年,并且可以说其他工具提供了类似的功能,但我也建议debfoster清理系统的残余部分。debfoster特别有趣,例如帮助削减基本虚拟机以用作基本安装/模板。

您可以使用以下命令安装它:

sudo apt-get install debfoster

我还经常在预生产虚拟机中使用它来在进行测试之前保存包的实际状态,然后使用它保存的状态恢复以删除所有添加的包,就像我运行它之前一样。

HOWTO:在实践中使用 debfoster

debfoster - 删除不必要的 Debian 软件包

debfoster 维护明确请求而不是作为依赖项安装的已安装软件包的列表。参数完全是可选的,每次运行 dpkg 和/或 apt-get 后可以调用 debfoster 本身。

或者,您可以使用 debfoster 通过在命令行上指定软件包来安装和删除软件包。带有 - 后缀的软件包将被删除,而没有后缀的软件包将被安装。

如果遇到新的包或者 debfoster 注意到以前是依赖项的包现在是孤儿包,它会询问您如何处理它。如果您决定保留它,debfoster 只会记录并继续。如果您认为这个软件包不够有趣,那么在 debfoster 完成提问后它将被删除。如果您的选择导致其他包成为孤立包,则会出现更多问题。

$sudo debfoster

smem is keeping the following 27 packages installed:
  blt fonts-lyx libglade2-0 libjs-jquery libjs-jquery-ui liblapack3 libtk8.6 libwebp6
  libwebpdemux2 libwebpmux2 libxss1 python-cairo python-cycler python-dateutil
  python-glade2 python-gobject-2 python-gtk2 python-imaging python-matplotlib
  python-matplotlib-data python-numpy python-pil python-pyparsing python-tk python-tz
  tk8.6-blt2.5 ttf-bitstream-vera
Keep smem? [Ynpsiuqx?], [H]elp: Y

imvirt is keeping the following 9 packages installed:
  imvirt-helper libemail-date-format-perl libfile-slurp-perl libfile-which-perl
  libimvirt-perl libmime-lite-perl libmime-types-perl libmodule-find-perl pciutils
Keep imvirt? [Ynpsiuqx?], [H]elp: Y

linux-image-4.8.0-1-amd64-unsigned is keeping the following 9 packages installed:
  busybox firmware-linux-free initramfs-tools initramfs-tools-core irqbalance
  klibc-utils libklibc libnuma1 linux-base
Keep linux-image-4.8.0-1-amd64-unsigned? [Ynpsiuqx?], [H]elp: Y

faketime is keeping the following 1 packages installed:
  libfaketime
Keep faketime? [Ynpsiuqx?], [H]elp: N

haveged is keeping the following 1 packages installed:
  libhavege1
Keep haveged? [Ynpsiuqx?], [H]elp: Y
Keep libfaketime? [Ynpsiuqx?], [H]elp: N
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  faketime* libfaketime*
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 127 kB disk space will be freed.
Do you want to continue? [Y/n]

答案2

由于实现目标的方法有很多,我列出两种命令行界面选项,apt主观上最好的和推荐的:

第一选择: apt(和apt-get

sudo apt install ./long-package-name.deb

请注意,我特意指的是apt, not apt-get,因为它不会自动完成文件名,否则,如果您坚持使用 ,您当然可以这样做,apt-get例如在脚本中:

PACKAGE=$(echo long-package-name.deb)

sudo apt-get install ./$PACKAGE

第二选择: gdebi

sudo gdebi long-package-name.deb

由于我不使用gdebi,所以我不能推荐它,也不能说它反对它,除了我刚刚尝试过的之外,我将与您分享:

  1. 我安装了一个.debapt
  2. 我跑了sudo apt update
  3. 我运行了sudo apt install ./long-package-name.deb预期的结果:

    PACKAGE已经是最新版本(VERSION)。

  4. 我运行sudo gdebi long-package-name.deb时得到了不良结果:

    您要安装软件包吗?

也许只是我,不知道如何正确使用gdebi

相关内容