如何管理从源安装的软件?


14

由于各种原因,我们可能会不时地从源代码安装某些内容。虽然在给定适当依赖性的情况下如何安装软件是相当标准的,但我仍不清楚如何管理此类安装以便将来使用。

进一步来说:

  1. 我们该怎么做才能确保轻松干净地卸载(包括之前安装的依赖项以及仅用于从源安装的软件的依赖项)?

  2. 我们如何才能确保轻松,干净地升级相同的软件,而该软件很可能会从源头重新安装?

  3. 如果存在默认软件包(使用apt-get安装)以及该软件包的(较新)版本(从源代码安装),我们该怎么做以最大程度地减少潜在的冲突?

Answers:


8

使用checkinstall make install将创建一个临时软件包并安装它。这意味着它已记录在包管理器中,并且可以卸载。


7

最好的办法是自己制作更新版本的Debian软件包。dpkgapt工具可以完成您提到的所有三件事,并且都是为此目的而设计的。使用它们而不是重新发明轮子。有很多包装指南。如果软件库中已经存在该软件,则可能会获得源软件包(apt-get src),可用于研究和启动自己的软件包。

对此/ubuntu//a/485230/158442的回答可能作为一般准则很有用。

尽管checkinstall这对于快速而又肮脏的解决方案而言非常有用,但长期而言,您应该使用适当的包装。


感谢您的建议。当您说“软件已经存在于存储库中”时,我假设您指的是Ubuntu维护的官方存储库。如果是这样,则在许多情况下,这些存储库不会提供较新的版本,尤其是在较旧的Ubuntu版本上。因此apt-get src在这种情况下可能无济于事。
skyork 2014年

@skyork也许他们不知道。但是您可以使用旧版本的软件包进行学习。打包程序可能进行了一些自定义,一些自定义维护脚本。没有理由您应该忽略所有这些并从头开始。重塑方向盘似乎是这里的主题。
大师

4

首先,很大程度上取决于您如何管理源代码。我创建一个类似的目录~/sources,并将每个程序放在其子目录中,而其他人将为每个程序创建一个新目录。

类似地,像我这样的人,为每个新版本创建一个新的子子目录,并仅在确保新版本中没有任何会导致我停止工作的重大错误时才删除旧版本。

没有唯一的方法可以执行此操作,但是无论选择哪种方法,都应选择一种最容易管理的方法

  1. 干净卸载

    • 我建议创建一个rem_dep.sh看起来像这样的脚本。

      #! /bin/bash
      sudo apt-get remove dep1 dep2 ... depn
      

      dep1, dep2, depn依赖关系在哪里。

  2. 干净便捷的升级

    • 如果您是从自动版本控制系统(例如git或)获得源代码,bazaar或者链接是可预测的,则可以创建一个shell脚本,该脚本将

      #1 make a backup of earlier version
      #2 get new source
      #3 configure, build/make the source
      #5 if make went correctly, remove earlier version.
      #6 make install new version, update dependencies if required.
      
    • 在其他情况下,您也可以在某种程度上通过手动创建此类脚本。

  3. 冲突管理

    • 最好的方法是--prefix在安装软件及其相关性时使用该选项。
    • 另一个重要的事情是保持系统更新,以最大程度地减少冲突。

注意:如果发现自己编译的软件超出了应有的数量(max_limit为自己设置a ,例如5或10或100),最好离开Ubuntu并转到Arch Linux。


3

构建依赖关系:

  • AFAIK它们应手动记录。您可以创建类似README的文件来保留手动安装的依赖项列表。

  • 如果该软件已经在Ubuntu或PPA存储库中建立了二进制文件。在安装过程中跟踪依赖关系应该更容易:

    sudo apt-get build-dep target_package
    

干净卸载:

保留已配置并已安装的源文件夹。如果将所有源与已安装的依赖项文件一起收集在特定文件夹中,则更好。

干净升级和已安装文件隔离:

将它们安装在特定的位置--prefix(最好是--prefix=/opt/software_name-version/)。

这将解决许多问题:与版本库中的并发版本;干净升级;如果源被删除,则更容易进行脏卸载。

作为@muru的答案,更复杂或最好的方法是,构建Debian软件包(适用于Ubuntu / PPA存储库中的软件包)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.