如何在CentOS/RedHat中为你自己的脚本创建RPM

时间:2019-05-19 01:25:49  来源:igfitidea点击:

**RPM (RedHat Package Manager)**是一个基于RHEL的软件包管理系统。
在基于红帽的系统中的所有包都具有 .rpm后缀。

本教程将如何为自己的脚本创建RPM。
我创建了一个脚本来进行数据库备份,今天我创建了该脚本的RPM文件,这是我创建的第一个RPM。

步骤1 -安装所需的软件包

首先,我们需要在系统上安装所需的包来创建rpm文件。

$ yum install rpm-build rpmdevtools

步骤2 -创建目录结构

转到用户的主目录,使用下面的命令创建所需的目录结构。

$ rpmdev-setuptree

上面的命令将创建一个类似下面的目录结构。

$ ls -l rpmbuild

drwxr-xr-x 2 root root 6 Oct 25 03:09 BUILD
drwxr-xr-x 2 root root 6 Oct 25 03:09 RPMS
drwxr-xr-x 2 root root 6 Oct 25 03:09 SOURCES
drwxr-xr-x 2 root root 6 Oct 25 03:09 SPECS
drwxr-xr-x 2 root root 6 Oct 25 03:09 SRPMS

如果 rpmdev-setuptree命令创建结构失败,我们可以手动创建它

$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS,tmp}

步骤3 -创建rpmmacro文件

现在创建 ~/.rpmmacros 文件,包含以下内容。

%packager <orange>YOUR_NAME</orange>

%_topdir %(echo $HOME)/rpmbuild

%_smp_mflags %( \
    [ -z "$RPM_BUILD_NCPUS" ] \\
        && RPM_BUILD_NCPUS="`/usr/bin/nproc 2>/dev/null || \\
                             /usr/bin/getconf _NPROCESSORS_ONLN`"; \\
    if [ "$RPM_BUILD_NCPUS" -gt 16 ]; then \\
        echo "-j16"; \\
    elif [ "$RPM_BUILD_NCPUS" -gt 3 ]; then \\
        echo "-j$RPM_BUILD_NCPUS"; \\
    else \\
        echo "-j3"; \\
    fi )

%__arch_install_post \
    [ "%{buildarch}" = "noarch" ] || QA_CHECK_RPATHS=1 ; \
    case "${QA_CHECK_RPATHS:-}" in [1yY]*) /usr/lib/rpm/check-rpaths ;; esac \
    /usr/lib/rpm/check-buildroot

步骤4 -复制源目录下的文件

将所有文件和脚本文件夹复制到 ~/rpmbuild/SOURCES目录中,我们需要将其添加到rpm文件中。
对于本教程,我使用了本教程中为MySQL创建的高级Bash脚本中的所有文件。

$ cd ~/rpmbuild/SOURCES
$ ls -l mydumpadmin-1

-rw-r--r-- 1 root root  125 Oct 25 03:54 credentials.txt
-rw-r--r-- 1 root root 4693 Oct 25 03:54 mysql-dump.sh
-rw-r--r-- 1 root root 1008 Oct 25 03:54 README.md
-rw-r--r-- 1 root root 3445 Oct 25 03:54 settings.conf

创建代码的压缩文件。

$ tar czf mydumpadmin-1.0.tar.gz mydumpadmin-1

步骤5 -创建SPEC文件

创建spec文件 ~/rpmbuild/SPECS/mydumpadmin
内容如下。

Name:           mydumpadmin
Version:        1
Release:        0
Summary:        An Advance Bash Script for MySQL Database Backup

Group:          theitroad
BuildArch:      noarch
License:        GPL
URL:            https://github.com/tecHyman/mydumpadmin.git
Source0:        mydumpadmin-1.0.tar.gz

%description
Write some description about your package here

%prep
%setup -q
%build
%install
install -m 0755 -d $RPM_BUILD_ROOT/etc/mydumpadmin
install -m 0600 credentials.txt $RPM_BUILD_ROOT/etc/mydumpadmin/credentials.txt
install -m 0755 mysql-dump.sh $RPM_BUILD_ROOT/etc/mydumpadmin/mysql-dump.sh
install -m 0644 README.md $RPM_BUILD_ROOT/etc/mydumpadmin/README.md
install -m 0644 settings.conf $RPM_BUILD_ROOT/etc/mydumpadmin/settings.conf

%files
/etc/mydumpadmin
/etc/mydumpadmin/credentials.txt
/etc/mydumpadmin/mysql-dump.sh
/etc/mydumpadmin/README.md
/etc/mydumpadmin/settings.conf

%changelog
* Tue Oct 24 2017 Hyman Kumar <[email protected]> 1.0.0
  - Initial rpm release

根据需求更改包名,脚本路径,档案名称,描述等。

步骤6 -构建RPM

完成上述步骤后,让我们通过执行以下命令来构建rpm。

$ cd ~/rpmbuild
$ rpmbuild -ba SPECS/mydumpadmin.spec

成功构建后,将创建一个rpm文件: ~/rpmbuild/RPMS/noarch/mydumpadmin-1-0.noarch.rpm
使用下面的命令安装rpm。
安装检查后,文件被正确地安装到定义的位置。

$ rpm -ivh mydumpadmin-1-0.noarch.rpm