这是一个困扰我很长时间的问题 - 为什么RHEL的默认服务器安装? CentOS 包括像蓝牙这样的桌面/笔记本电脑包?
使用 kickstart 时,我通常会从Base设置的软件包开始,然后从那里进行自定义。
但是,将以用户为中心的包放在服务器上对我来说似乎有违直觉——为什么要这样做?
当我使用 删除 Ubuntu 中的一个包时apt-get remove package,它似乎总是留下很多文件......例如,日志文件/var/log,配置文件/etc,数据/var/lib,等等。
如何完全删除 Ubuntu 中软件包的所有痕迹,就好像它从未存在过一样?
我目前正在构建一个鞋匠和木偶设置。我做的一件事是用 puppet 禁用不需要的服务,但后来我想:我应该用 cobbler 删除它们,而不是在它们安装后禁用它们?
例如,我在 puppet 中的基类通知客户端禁用 smartd、cpuspeed、microcode_ctl 和 readahead_early,如果它是虚拟机。
那为什么不删除呢?如果我在稍后阶段确实需要其中一些软件包,我可以直接安装。当然,如果机器转换为物理硬件,我将不得不记住再次安装这些包。
我认为我的问题的最佳解决方案是创建一个傀儡类,如果它是虚拟的,则禁用服务 A,如果不是,则启用它。但是,也许其他人有其他见解?
有没有办法在 Debian 中获取通过 aptitude 安装的所有“主要”软件包?“main”是指通过安装命令提供给 aptitude 的包名称。相当于一个 Gentoo“世界”文件。
据我所知,您只能获得所有已安装软件包的列表,包括依赖项(从某个角度来看我并不真正关心)。我能想到的唯一另一种方法是解析 bash_history 文件以获取 aptitude 安装命令。
我有一个安装了 Nginx 的 CentOS 7 虚拟机。我使用 Webmin 来管理服务器。
它通常会自动安装更新,但是 nginx 更新失败,所以我尝试手动进行更新。它返回这个:
Installing package(s) with command /bin/yum -y install nginx ..
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.netsite.dk
* epel: mirror.netsite.dk
* extras: mirror.netsite.dk
* updates: mirror.netsite.dk
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 1:1.20.1-9.el7 will be updated
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-mail-1.20.1-9.el7.x86_64
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-stream-1.20.1-9.el7.x86_64
--> Processing Dependency: nginx(abi) = 1.20.1 for package: …Run Code Online (Sandbox Code Playgroud) 我自己在 Linux 上编译和安装软件(在我的例子中是 Debian Squeeze)。下载、解包、安装依赖的开发者库/头文件,运行 configure 然后 make。
到目前为止,所有内容仍保留在源目录中。一旦我运行make install,基本上我开始在/usr/localor 中/usr放置非包文件(取决于--path开关)。
我也尝试将它安装到不同的地方,例如/opt,但这通常会在某处引起麻烦。即我总是记得将它专门添加到标题/链接器路径中。或者我在那里安装了一个包,但系统范围pkg-config内不知道它(我再次需要添加额外的标志)。即使我在尔德每安装定制软件/opt,我不知道它在所有这些文件bin/,等等lib/等等属于彼此。如果我开始将它们安装到/opt/software1/.
但是当我直接在其中安装软件时,我/usr感觉很糟糕,无法正确分辨我的自定义安装文件属于哪里。确定给定文件是否属于某个包很容易,但如果不属于,则在大型自定义安装中,很难记住或找出文件所属的位置。
当我想删除文件时,情况会变得更糟。它们分散在bin/、lib/、man/等中。 因此,如果我想完全删除自定义安装的软件包,则必须执行手动工作,或者在最坏的情况下,我不再能够确定所有这些,我将保持陈旧周围的文件。
我知道我也可以开始构建一个自定义包。但这需要我分析我预先安装的每个软件吗?我没有创建.deb文件的实际经验,也不打算将它们分发到其他安装。我想要的只是一种跟踪自定义本地安装的好方法。
我可能可以自己想出一些办法,即列出所有文件 ( find / ...),安装软件,然后再次执行此操作并将差异保存在某处。只是想知道是否有更好的方法。
使用 puppet 我想以受控方式更新我的(CentOS 5 和 6 服务器)上的软件包。因此我不想使用ensure=>latest而是ensure=>3.0.1-1.
例子:
class puppet::installation inherits puppet {
package { "puppet":
ensure => "3.0.1-1",
}
}
Run Code Online (Sandbox Code Playgroud)
更新工作正常,但傀儡代理一直抱怨有区别:
/Stage[main]/Puppet::Installation/Package[puppet]/ensure: current_value 3.0.1-1.el6, should be 3.0.1-1 (noop)
Run Code Online (Sandbox Code Playgroud)
我可以通过将确保规则更改为3.0.1-1.el6但在 CentOS 5 上不起作用来解决此问题。
是否有一种简短/干净的方法来解决这个问题,或者我是否必须编写单独的、依赖于 os-releaseversion 的规则。
我一直在搜索解决方案,但没有找到与这个特定问题有关的任何内容。
对相关示例的任何建议或参考将不胜感激。
我想安装 Logstash 和其他,但是当我尝试时:
# yum install libevent-devel
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Transaction Check Error:
file /usr/bin/event_rpcgen.py from install of libevent-devel-2.0.12-1.rhel6.i686 conflicts with file from package compat-libevent14-1.4.13-1.rhel6.i686
file /usr/lib/libevent_core.a from install of libevent-devel-2.0.12-1.rhel6.i686 conflicts with file from package compat-libevent14-1.4.13-1.rhel6.i686
file /usr/lib/libevent_core.so from install of libevent-devel-2.0.12-1.rhel6.i686 conflicts with file from package compat-libevent14-1.4.13-1.rhel6.i686
file /usr/lib/libevent_extra.a from install of libevent-devel-2.0.12-1.rhel6.i686 conflicts with file from package compat-libevent14-1.4.13-1.rhel6.i686
file /usr/lib/libevent_extra.so from install of libevent-devel-2.0.12-1.rhel6.i686 conflicts with file from package compat-libevent14-1.4.13-1.rhel6.i686
Run Code Online (Sandbox Code Playgroud)
请给我建议以解决此错误冲突。
# rpm -qi compat-libevent14
Name : compat-libevent14 Relocations: …Run Code Online (Sandbox Code Playgroud) 我正在为 Wheezy 和自定义软件包使用 Debian 存储库(基于 reprepro)。我不时修改我的自定义包并在不同的系统上手动测试它们,例如:
通常,我在不同的服务器上运行这些测试。
由于自定义 Debian 软件包的数量在不断增长,手动测试过程消耗了我越来越多的时间。
所以我正在寻找一个现有的自动化测试框架。此外,如果这个测试框架支持在容器/虚拟机内部运行这些测试(例如使用快照,所以我们可以一遍又一遍地重新开始),那就太好了。此外,我希望在测试完成后收到一份完整的报告。
我知道我不是这个星球上唯一一个寻找这样一种工具的人。但是,使用 Google 和此站点上的搜索功能没有发现任何解决方案。我找到了“自动测试”,但我不确定这个工具是否适合我。
那么 - 您使用什么来自动测试 Debian 软件包安装和更新?
请注意,我不是在寻找测试包构建的工具(例如 Jenkins、Hudson)。
如果这个问题与 serverfault 上已经存在的条目重复,我很抱歉。如果是这种情况,如果您能将我指向正确的页面,我会很高兴。
编辑:debian 项目似乎完全使用了我正在寻找的内容:
编辑 #2:似乎 debci 正是我正在寻找的(见上面的链接)。我将看看这个工具并在这里分享我的经验。不过,如果您能分享您为此特定目的使用的工具,我会很高兴。
我最近发现了软件集合,并了解它们如何通过为每个集合引入命名空间来安装多个版本的软件。在企业 Linux 上,这很好,因为我将能够保持系统的常规稳定性,同时现在能够在更新某些版本的软件时轻松更新(不仅是安全更新,还有功能!)
我希望我系统的主网络服务器是 httpd 2.4。centos-sclo-rh软件合集目前可用的版本是2.4.12,而可用的版本base只有2.4.6。所以我从那个 SCL 安装了 httpd 并启用了它:
> scl enable httpd24-httpd bash
Run Code Online (Sandbox Code Playgroud)
然后使用 systemctl 启用并启动服务
> systemctl enable httpd24-httpd
> systemctl start http24-httpd
Run Code Online (Sandbox Code Playgroud)
所以我希望我的系统应该知道我现在安装了一个网络服务器。但是,当我尝试从 安装 phpmyadmin 时epel,它仍然希望安装标准httpd包base作为依赖项。
查看 rpms 的一些机制,我刚刚了解到包可以在他们的规范文件中包含一个 Provides 行,列出虚拟包,例如webserverhttpd 的 src rpm 确实有一个 Provides: webserver 行。我猜httpd24-httpd我从 SCL 获得的包没有那个描述符。
如何让我的系统识别httpd从 SCL 提供的已安装和启用的webserver虚拟包,以便它不想安装httpd包base来实现webserver虚拟依赖?