rpm

rpm制作--简易版

                                       1.
接上面的autoconf。
这里要注意的是,前面Makefile.am里面的SOURCE部分没有写.h文件,这样的话编译没问题,但会导致打包的时候无法将.h文件打入tar.gz 包里。
所以添加.h文件

2.
然后make dist
生成 hello-1.0.tar.gz

tar tzf hello-1.0.tar.gz
查看是否文件齐全

3.
cp hello-1.0.tar.gz /usr/src/***/SOURCES/
rpm的制作要求有五个目录,方便起见用默认的目录

vi /usr/src/***/SPECS/hello.spec

4.
# hello.spec
%define _prefix /usr/

Summary: hello
Name: hello
Version: 1.0
Release: 1
Vendor : LCY
Packager: LCY
Group: LCY
License: GPL
Source0: %{name}-%{version}.tar.gz

BuildRoot: /var/tmp/hello
BuildArch: i386

%description
Msg hello

%prep
%setup


%build
[ ! -f Makefile ] || make distclean
%configure
make

%install
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

%makeinstall
for doc in ABOUT-NLS AUTHORS README COPYING INSTALL NEWS TODO ChangeLog; do
rm -f $RPM_BUILD_ROOT%{_prefix}/doc/nothing/$doc;
done;

%clean
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/usr/bin/hello


5.
cd /usr/src/***/SPECS
rpmbuild -ba hello.spec

这里的 -ba 可以被其他所替换, a是all的意思,解包--编译--生成都作

6.
cd /usr/src/***/RPMS/i386
ls
可见 hello-1.0-1.tar.gz

http://www-128.ibm.com/developerworks/cn/linux/management/package/rpm/part1/

rpm包在其他目录制作的方法
mkdir /code/rpm
cd /code/rpm
mkdir -p RPMS/i386 SRPMS BUILD SPECS SOURCES
vi ~/.rpmmacros


# rpmmacros

%_distribution Linux Program lcy
%_require_distribution 1
%_vendor Software test
%_require_vendor 1
%_topdir /code/rpm/
%_builddir /code/rpm/BUILD
%_rpmdir /code/rpm/RPMS //该行以下可以省
%_srcrpmdir /code/rpm/SRPMS
%_specdir /code/rpm/SPECS
%_SOUrcedir /code/rpm/SOURCES

然后把tar.gz 放到 /code/rpm/SOURCES下
spec 放到 /code/rpm/SPECS下 , 进入该目录rpmbuild就可以了
 
### RPM 包管理工具使用说明 RPM(Red Hat Package Manager)是一种广泛应用于 Red Hat 及其衍生 Linux 发行版中的二进制包管理系统,旨在简化软件的安装、升级、查询和卸载操作。以下是关于 RPM 的详细介绍: #### 功能概述 RPM 提供了一种高效的方式来管理软件包,支持多种基本操作,包括但不限于安装、升级、查询和卸载软件包。它还通过维护一个内部数据库来跟踪已安装的软件及其相关信息[^2]。 #### 命令格式与常用选项 RPM 工具的核心命令结构如下: ```bash rpm [选项] RPM包文件 ``` 常用的选项及其作用包括: - `-i`:安装新的 RPM 软件包。 - `-U`:升级某个软件包;如果该软件尚未安装,则会自动完成安装。 - `-F`:仅当目标软件已经存在时才进行升级,否则放弃操作。 - `-e`:卸载指定的软件包。 - `--force`:强制执行某些可能违反常规规则的操作,例如安装较旧版本的软件包。 - `-h` 和 `-v`:分别用于显示安装进度标记以及提供详细的日志信息[^3]。 #### 查询功能 为了帮助用户更好地理解当前系统上的软件状态,RPM 还提供了丰富的查询手段: - `rpm -qa`:列举所有已安装的软件名称。 - `rpm -ql {package_name}`:展示某一具体软件包对应的实际文件位置列表[^5]。 #### 处理依赖关系 尽管 RPM 自身具备一定的能力去检测并报告缺失的依赖项,但它并不主动解决这些问题。因此,在遇到复杂的多层依赖场景时,推荐借助更高层次的解决方案如 YUM 来自动化这一流程。 #### 数据库修复 偶尔情况下,RPM 内部使用的元数据存储可能出现错误或者损坏现象。对此情况下的恢复措施有两种主要方法可用: - 初始化新数据库:`rpm --initdb` - 重新构建现有数据库:`rpm --rebuilddb` #### 启动由 RPM 安装的服务实例 对于那些作为后台守护进程运行的应用程序来说,一旦它们被成功部署到操作系统之后,就可以利用标准的服务控制接口对其进行操控。举个例子,假设我们刚刚完成了 Apache HTTP Server (httpd) 的设置工作,那么下面两条指令都可以用来激活这个网络服务器组件[^4]: ```bash /etc/rc.d/init.d/httpd start service httpd start ``` ### 示例代码片段 这里给出一段简单的 Python 脚本来批量处理多个 .rpm 文件的安装请求: ```python import os def install_rpms(rpm_list): success = True for rpm in rpm_list: result = os.system(f"sudo rpm -ivh {rpm}") if result !=0 : print(f"Failed to install {rpm}.") success=False return success if __name__=="__main__": rpms=["example1.rpm","example2.rpm"] outcome=install_rpms(rpms) if not outcome: exit(1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值