rpm 规范文件中的 chkconfig 命令

Posted

技术标签:

【中文标题】rpm 规范文件中的 chkconfig 命令【英文标题】:chkconfig command in rpm spec file 【发布时间】:2011-07-19 12:48:58 【问题描述】:

我想在 rpm 规范文件的 %install 部分使用“chkconfig --del NetworkManager”命令。如果我包含此命令,则 rpm 构建良好,但是当我安装该 rpm 时,看起来该命令没有被执行。安装后我使用 'chkconfig --list' 命令验证并观察到服务一直在运行。

这是我正在使用的规范文件。请让我知道我出错了。

%define name disable_network-manager
%define version 1.0
%define release fc

Name:       %name
Version:    %version
Release:    1%?dist
Summary:    Includes the script to disable Network Manager services

Group:      Development/Other
License:    GPL
URL:        www.abcd.com
Source0:    %name-%version.tar.gz
BuildRoot:  %(mktemp -ud %_tmppath/%name-%version-%release-XXXXXX)

%description
sample text.

%prep
%setup -q

#%build

%install
/sbin/chkconfig --del NetworkManager
rm -rf $RPM_BUILD_ROOT
install -m 0755 -d $RPM_BUILD_ROOT/usr/bin
install -m 0755 enablenm.sh $RPM_BUILD_ROOT/usr/bin/enablenm.sh

%clean
rm -rf $RPM_BUILD_ROOT


%files
/usr/bin/enablenm.sh

【问题讨论】:

基本上我想创建一个 rpm 包,它将禁用网络管理器 (chkconfig --del NetworkMnager)。请告知正确的规范文件。 【参考方案1】:

好的,知道了。我应该从 %post 部分而不是 %install 部分发出 chkconfig 命令。

【讨论】:

【参考方案2】:

其实我觉得你的回答是错的……

首先,您要执行/sbin/chkconfig NetworkManager off 将其彻底关闭; --del 将其从 chkconfig 控件中删除。

其次,这只会在您下次重新启动时阻止它运行。要停止当前运行的实例,您需要调用/sbin/service NetworkManager stop

但是是的,%install 部分不在目标机器上运行,只在构建机器上运行。 %post 是放置我上面的两个命令的正确位置。

【讨论】:

【参考方案3】:

而且你还不如依赖网络管理员提供的任何东西。

【讨论】:

如果 /etc/init.d/NetworkManager 不存在,RPM 安装/卸载将失败,此服务文件是网络管理器包的一部分,因此您的 RPM 对网络管理器有运行时依赖性包。

以上是关于rpm 规范文件中的 chkconfig 命令的主要内容,如果未能解决你的问题,请参考以下文章

系统找不到chkconfig命令是怎么回事

我的linux系统没有chkconfig命令怎么办?

linux系统启动流程

chkconfig命令在开机启动中的应用(以Nginx为例)

Linux的运行级别和chkconfig用法

从 RPM 规范文件中提取 shell 脚本以进行静态分析