加载中...

RPM常用命令及打包


RPM常用命令及打包

rpm常用命令

rpm -e xxx                    # 删除指定软件包
rpm -e --nodeps xxx	          # 删除指定软件包(不含依赖,强制删除)
rpm -ql xxx                   # 查看指定软件包的安装内容
rpm -qpR xxx.rpm              # 查看rpm包的依赖

dnf install xxx               # 安装软件包
dnf remove xxx                # 卸载软件包,同时删除依赖包
dnf info xxx                  # 查看指定软件包详情
dnf info --available xxx      # 查看 指定软件包 是否有升级包(可用包,不含已安装)
dnf info --showduplicates xxx # 查看 指定软件包 的所有包(已安装和可用包)

查看当前环境所有宏定义

rpmbuild --showrc

使用 rpm 命令的 --eval 选项可以查看宏的值。例如,要查看 %{_sourcedir} 的值,可以运行:

rpm --eval '%{_sourcedir}'

查看rpm包中的内容:

rpm2cpio xxxx.noarch.rpm | cpio -t

rpm构建打包

RPM 打包指南https://rpm-packaging-guide.github.io/

1. 安装依赖

安装创建rpm包需要的工具:

dnf install -y rpm-build rpmdevtools rpmlint

2. 创建RPM构建目录

rpmdev-setuptree

# 这将在你的主目录下创建 rpmbuild 目录,其中包含以下子目录:
# BUILD       # 编译过程中源代码解压到的目录,不需要我们放任何东西
# BUILDROOT   # 在编译制作过程中会生成的目录,目录中的所有文件即为打成rpm包中的内容
# RPMS        # 制作完成以后存放rpm包的目录
# SOURCES     # 原材料存放目录(源代码,配置文件等存放的目录)
# SPECS       # 放.spec文件的目录
# SRPMS       # src格式的rpm包存放路径

3. 编写spec文件

.spec 文件示例:

Name:       hello-world
Version:    1
Release:    1
Summary:    Most simple RPM package
License:    FIXME

%description
This is my first RPM package, which does nothing.

%prep
# we have no source, so nothing here

%build
cat > hello-world.sh <<EOF
#!/usr/bin/bash
echo Hello world
EOF

%install
mkdir -p %{buildroot}/usr/bin/
install -m 755 hello-world.sh %{buildroot}/usr/bin/hello-world.sh

%files
%defattr(-,root,root,0755)     # 定义文件相关权限(,属主,属组,权限)
/usr/bin/hello-world.sh

%changelog
# let's skip this for now

检查spec文件:

dnf builddep ~/rpmbuild/SPECS/lico-scheduler.spec

spec文件编写注意事项:

1. 指令使用 <tag_name>: <value> 方式,例如:
   Name: nginx   # tag_name不区分大小写,value区分大小写
2. 用户自定义宏语法: %define key value
   使用宏方法:%{key} 或者 %key  # 大括号可以省略
3. "#" 号开头的都是注释,注释中不能使用 "%" 号,如果想使用 "%" 号需要使用两个 "%%" 号来表示,否则可能引起误识别(比如注释这是%prep阶段)

$1 表示已安装包的版本数

action count
install the first time 1
upgrade 2 or higher
remove the last version of package 0

例:

%prep
if [ $1 == 1 ]; then
    /usr/sbin/useradd -c "test"
fi

4. 构建软件包

方法一:使用spce文件构建软件包:

rpmbuild -bb ~/rpmbuild/SPECS/xxx.spec

# -ba 同时生成rpm二进制包和源码包
# -bb 制作二进制格式rpm包
# -bs 制作源码格式rpm包
# -bp 执行完 %prep 阶段就停止
# -bc 执行完 %build 阶段就停止
# -bi 执行完 %install 阶段就停止
# -bl 检测哪些文件在BUILDROOT路径安装生成了,但在制作rpm包的files阶段没有包含进去

# 指定 _sourcedir路径
rpmbuild -ba ~/test_7.1.0/rpmbuild/SPECS/lico-scheduler.spec --define '_sourcedir /root/test_7.1.0/rpmbuild/SOURCES'

如果一切顺利,生成的 RPM 包将位于 ~/rpmbuild/RPMS/ 目录中。

方法二:使用 .src.rpm 构建rpm包 (别人用 -bs 构建出来的源码格式rpm包进行构建)

rpmbuild --rebuild xxx.src.rpm

FPM

感兴趣可以了解一下,当时打包时见有此种方法,故记录,并未实践!

fpm:https://github.com/jordansissel/fpm

fpm 的目标是使构建诸如 rpm、debs、OSX 包等包变得简单快捷。

fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。

安装ruby模块

yum -yinstall ruby rubygems ruby-devel# 添加阿里云的
gem sources -a http://mirrors.aliyun.com/rubygems

移除原生的Ruby仓库:

gem sources --remove http://rubygems.org/

安装fpm

gem install fpm -v 1.3.3

指定安装fpm 1.3.3版本的软件,fpm这个工具升级挺频繁,而且在每次升级后会出现各种各样的问题。但是老版本的fpm工具能够满足我们的需求,因此就用这个版本了。


文章作者: 无夜
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 无夜 !
评论
  目录