我至少有 5 个开发服务器(dev、QA、staging),其中有从源代码编译的 php 和其他包。我想删除所有这些服务器,并使用 yum 包更新这些服务器。如果我可以通过 puppet 或 chef 做到这一点,那就太好了。所以:
- 我如何开始寻找自编译的软件包并将其删除?
- 稍后在服务器上通过 yum 安装相同软件包的更新版本?
- puppet/chef 是用于模拟服务器变化的好选择吗?
答案1
我如何开始寻找自编译的包
没有一个好的方法可以保证你能得到所有的东西
- 查阅您的配置文档。
- 查阅您的构建文档。
- 在常见位置查找(/usr/bin、/usr/local/bin 等)
但实际上没有一个好的方法可以保证你能得到它们
并移除它们
除非软件包附带了删除自身的方法,否则这并非易事。您可以尝试重新编译软件包,然后使用 chroot 或 DESTDIR= 指令重新安装它们
mkdir /tmp/package
make && make install DESTDIR=/tmp/package
然后查看 /tmp/package 或 chroot 树的内容以获取文件列表,然后可以使用该文件列表从主文件系统树中删除文件。不过,这取决于您是否了解用于配置构建的选项。
稍后在服务器上通过 yum 安装相同软件包的更新版本?
yum install packagename
puppet/chef 是用于模拟服务器变化的好选择吗?
此时,最好的解决方案是重新开始。选择一个配置管理解决方案并使用它来构建一致的系统
然后安装基本操作系统
- 使用配置管理解决方案添加和配置包
- 运行测试
- 如果测试失败
- 找出原因
- 更新配置管理
- 冲洗并重复,直到测试通过
答案2
不幸的是,这种情况并不容易清除。无论如何,以下是:
- 列出你认为手动安装的内容,这将会很有用
- 自编译的软件包一般在 /usr/local、/opt 和其他非默认目录中。查看这些目录以查看手动安装的内容
- 手动安装发现后,通过 yum/rpm 安装官方软件包。它们将安装在 /bin、/usr/bin 和其他默认目录中,因此它们应该是调用可执行文件时的首选程序(例如:/usr/bin/php 应优先于 /usr/local/bin/php)。无论如何,请检查您的 PATH 变量
- 请记住,官方软件包将安装不同的受影响软件的版本(可能较旧)。如果您的应用程序依赖于特定的软件包版本,则可能会出现问题(例如:如果您使用最近的 Joomla 安装,请注意它至少需要 PHP 5.3.10+,而 CentOS 提供的版本为 5.3.3)
- 我会不是使用自动配置脚本/方法执行此活动。它确实需要人工干预,至少对于第一台服务器而言。
答案3
只要你还有编译好的源代码(我自己会保留它们),今天的很多软件包都支持卸载目标。只是make uninstall
希望删除正确的文件。如果您没有它们,请重新编译并安装,然后卸载。只需确保您拥有相同的版本。
如果这不起作用,您可能需要尝试安装发行版软件包,并使用rpm
手动搜索不属于任何软件包的文件。只需确保所有以前的文件都被覆盖即可。