我有几台服务器(10 台)在 x86 上运行 Debian Lenny。我需要从源代码编译一些软件包。我知道在生产服务器上使用编译工具不是一个好习惯(出于安全考虑)。
我想知道,我是否可以在单台计算机(x86)上编译这些包并将它们安装在服务器上?
有什么问题吗 ?
软件包示例
- 内核源代码
- 阿帕奇
- PHP5
- ...
万分感谢。
答案1
您有十台 Lenny 服务器,全部运行 x86 arch。完全可以构建一个安装到任何运行特定 arch 的计算机上的软件包。使用 构建 Debian 软件包是一种很好的做法pbuilder
,可以避免出现任何“在开发机上运行”的问题。
重建软件包相对简单。apt-get
有一个source
命令可以下载源代码。如果只需要configure
更改简单的选项,那么您几乎就完成了。编辑文件debian/rules
,并使用类似 的内容对软件包进行版本升级~jldugger0
,这样您就可以覆盖从中派生的 Debian 版本,但不会覆盖 Debian 的任何更新版本。只需增加尾随的 0 即可继续升级本地版本。不要直接改变 Debian 的版本,看在上帝的份上,不要改变 EPOCH--如果您想确保新版本不会覆盖本地更改,请固定该软件包。请注意,您将面临巨大的安全风险,需要找到某种方法来订阅软件包中的更改以供审核。
本地版本的软件包有两个问题:应努力跟上新版本的步伐。如果您的更改足够简单,您可能能够使用应用补丁的脚本。如果它具有侵入性,那么随着冲突的积累,不将更改推送到上游将花费您越来越多的时间。另一个问题是依赖关系。内核、Apache 和 PHP 都是其他软件包所依赖的核心组件。考虑一下您要对软件包进行的更改是否会影响依赖于它的其他软件包。
答案2
只要服务器来自同一发行版(并且具有相同的平台,x86),在其中一个服务器上编译并在多个服务器上安装应该没有区别。这和获取预编译的二进制文件或软件包本身一样好。
事实上,您也可以打包(或者只是 tar.bz2 编译后的目录,将其带到每个服务器,在本地提取并make install
在那里运行。
安装完成后,只需从这些服务器中删除解压的目录。
答案3
如果架构相同,那么就很简单了。如果架构不同,则称为交叉编译,需要一些设置。
也许一个想法是为自定义软件包设置一个内部 Debian 存储库。这样,软件包就可以通过 apt 供您的服务器使用(只要它们知道您的自定义存储库)
答案4
您还可以使用 make-kpkg 命令来制作 .deb 包,这与您在标准存储库中找到的非常相似。