制作RPM包(for gcc)
注意事项:
制作RPM包最好不要使用ROOT用户,以防止制作过程中不慎执行有害命令
需要安装的依赖包:
$ yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools
STEP1:
执行如下命令生成工作区目录:
$ rpmdev-setuptree
生成的工作区目录结构如下:
BUILD | rpmbuild命令构建软件的目录 |
RPMS | 用于存储生成的rpm包 |
SOURCES | 所有要用到的源文件(.src .conf)都放在这里,并在spec文件中用source引用 |
SPEC | 用于存放.spec文件,spec文件是构建rpm包的主要脚本文件 |
SRPMS | 用于存放.src.rpm文件,此文件无法直接使用,执行rpm -ivh会将源文件放到工作区目录下,仍然需要执行.spec文件进行编译 |
STEP2:
将要使用的源码放到SOURCES目录当中:
$ cd /root/rpmbuild/SOURCES
$ wget http://mirrors.ustc.edu.cn/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
STEP3:
创建gcc.spec文件,编写rpm包构建过程:
$ cd /root/rpmbuild/SPECS
$ vim gcc.spec
#gcc.spec
Summary: Install gcc
Name: gcc
Version: 4.8.5
Release: 1%{?dist}
License: GPL
Group: Development/Languages
Source0: gcc-4.8.5.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: gcc-c++ tar libstdc++-devel
%define __debug_install_post \
%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}
%description
The gcc package contains the GNU Compiler Collection. This package installs
all compilers in /usr/local/gcc48 directory.
%prep
%setup -q
%build
./contrib/download_prerequisites
mkdir gcc-build-4.8.5
cd gcc-build-4.8.5
#$PWD/../configure --prefix=/usr/local/gcc48 --enable-checking=release --enable-languages=c,c++ --disable-multilib
$PWD/../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
%{__make} %{?_smp_mflags}
%install
%{__rm} -rf %{buildroot}
cd gcc-build-4.8.5
%{__make} install DESTDIR=%{buildroot}
%clean
%{__rm} -rf %{buildroot}
%pre
%post
echo "/usr/local/lib64" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig &> /dev/null
%postun
%files
%defattr(-, root, root, 0755)
/usr/local/bin
/usr/local/include
/usr/local/lib
/usr/local/lib64
/usr/local/libexec
/usr/local/share
%changelog
* Tue Apr 23 2019 lei.guo <lei.guo@funplus.com> - 4.8.5-2
- change
* Mon Apr 22 2019 lei.guo <lei.guo@funplus.com> - 4.8.5-1
- test
STEP4:
编译生成二进制RPM包:
QA_RPATHS=0x0020 rpmbuild -bb gcc.spec
总结:
- 这里简单的介绍了制作gcc的rpm包的大致方法,详细的rpm包制作过程见rpm包官方指导手册
- SPEC文件中_tmppath这类变量是其自带的宏,想查看其真实的值可以使用如下命令:
rpmbuild --showrc | grep _prefix