我正在Linux上编译和安装软件(Debian Squeeze)。 下载,解包,安装依赖的开发库/头文件,运行configure然后make。
到目前为止,所有东西仍然保留在源代码目录中。 一旦我运行make install
,基本上我开始将非包文件放在/usr/local
或/usr
(取决于--path
开关)。
我也试着把它安装到不同的地方,例如/opt
,但是这经常会在某个地方引起麻烦。 即我一直记得专门添加到标题/链接器path。 或者我在那里安装一个软件包,系统范围的pkg-config
不知道它(我再次需要添加额外的标志)。 即使我将安装每个自定义软件/opt
,我不知道在bin/
,etc lib/
等所有这些文件属于彼此。 如果我开始将它们安装到/opt/software1/
,维护问题只是增加了,我必须跟踪更多的path,我需要添加编译进一步的软件包或需要在LD库path等等。
但是,当我直接在/usr
安装软件时,我只是感觉不好,不能正确地告诉我的哪个定制安装文件属于哪里。 很容易确定一个给定的文件是否属于一个包,但是如果不包含这个文件,那么在大的自定义安装中,记住或找出文件所属的位置是很痛苦的。
当我想删除文件时会变得更糟。 它们分散在bin/
, lib/
, man/
等中。所以,如果我想彻底删除一个自定义安装的软件包,我必须执行手动工作或最坏的情况,我不能再确定所有的软件包我会留下陈旧的文件。
我知道我也可以开始build立一个自定义的包。 但是这需要我分析我安装的每个软件? 我没有创build.deb
文件的真实经验,我也不打算将它们分发给其他安装。 我想要的是跟踪自定义本地安装的一个好方法。
我可能会自己想出一些东西,比如列出所有文件( find / ...
),安装软件,然后重新执行,并将diff保存到某个地方。 只是想知道有没有更好的办法。
你有没有尝试checkinstall (这是在Debian回购)?
您可以使用checkinstall
,而不是使用make install
,它会使用软件包创build(并安装)软件包,以便您可以使用软件包pipe理器进行跟踪。
由于您要求最佳实践:最好的方法是不要将软件安装在存储库中。 如果这是不可能的,最好的做法是从其中构build软件包,并使用系统软件包pipe理器来pipe理它们。
你需要想出一个方法来检查重要的更新,但你怎么做是由你决定的。 但如果他们在那里,你需要重新构build和更新新的包。
我不知道你是否会最终find这个有用的东西,但至less我会分享它:«… NetBSD软件包集合(pkgsrc)是在NetBSD 和其他类UNIX系统上构build第三方软件的框架…»