解决Linux源代码封包--host选项未知问题:
错误信息:
[root@data SPECS]# rpmbuild -ba ./nginx.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.FPu6Vb
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf nginx-1.8.0
+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/nginx-1.8.0.tar.gz
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd nginx-1.8.0
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.pDELh9
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd nginx-1.8.0
+ CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
+ export CFLAGS
+ CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'
+ export CXXFLAGS
+ FFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -I/usr/lib64/gfortran/modules'
+ export FFLAGS
+ FCFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -I/usr/lib64/gfortran/modules'
+ export FCFLAGS
+ LDFLAGS='-Wl,-z,relro '
+ export LDFLAGS
+ '[' 1 == 1 ']'
+ '[' x86_64 == ppc64le ']'
++ find . -name config.guess -o -name config.sub
+ ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info
./configure: error: invalid option "--host=x86_64-redhat-linux-gnu"
error: Bad exit status from /var/tmp/rpm-tmp.pDELh9 (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.pDELh9 (%build)
[root@data SPECS]#
流程操作:
rpm -qi 包名 #查询软件包的基本信息
示例代码:
[root@node0 ~]# cd /tools/
[root@node0 tools]# rpm2cpio httpd-2.2.15-45.el6.x86_64.rpm | cpio -id
6136 blocks
[root@node0 tools]# ll
total 844K
drwxr-xr-x 6 root root 4.0K Oct 10 17:20 etc
drwxr-xr-x 5 root root 4.0K Oct 10 17:20 usr
drwxr-xr-x 7 root root 4.0K Oct 10 17:20 var
列出的目录当安装的时候会复制到对应的目录。
安装rpm-build:
[root@node0 ~]# yum install rpm-build
[root@node0 SPECS]# yum install pcre pcre-devel zlib-devel -y
[root@node0 ~]# cd
[root@node0 ~]# rpmbuild -ba xxx.spec
error: failed to stat /root/ba: No such file or directory
报错提示为正常现象,用来创建目录。
[root@node0 ~]# tree
.
└── rpmbuild
├── BUILD
├── BUILDROOT #会把软件安装到此处,是一个虚拟的根环境,是一个chroot环境
├── RPMS #生成的RPM包
├── SOURCES #把源码包复制到此处
├── SPECS
└── SRPMS
7 directories, 0 files
拷贝源码包:
[root@node0 ~]# cp /tools/lnmp_soft/nginx-1.8.0.tar.gz /root/rpmbuild/SOURCES/
[root@node0 ~]# cd /root/rpmbuild/SPECS/
[root@node0 SPECS]# vim ./nginx.spec
Name:nginx
Version:1.8.0
Release:1.0
Summary:This is Web Server
#Group:
License:GPL
URL:xvgetech.com
Source0:nginx-1.8.0.tar.gz
#BuildRequires:
#Requires:
%description
This is a web server too.
Welcome to nginx.
%prep
%setup -q
%build
./configure --prefix=/app/nginx/
#使用./configure代替了%configure参数,解决了Nginx编译参数--host编译选项找不到的问题
#%configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/app/nginx/*
%changelog
[root@node0 SPECS]# rpmbuild -ba nginx.spec
#查看安装包信息:
package ./nginx-1.8.0-1.0.x86_64.rpm is not installed
[root@old ~]# rpm -qpi ./nginx-1.8.0-1.0.x86_64.rpm
Name : nginx
Version : 1.8.0
Release : 1.0
Architecture: x86_64
Install Date: (not installed)
Group : Unspecified
Size : 660839
License : GPL
Signature : (none)
Source RPM : nginx-1.8.0-1.0.src.rpm
Build Date : Wed 11 Oct 2017 06:36:32 PM CST
Build Host : data
Relocations : (not relocatable)
URL : www.xvgetech.com
Summary : Test_Nginx
Description :
This is a web server too.
#安装软件:
rpm -ivh ./nginx-1.8.0-1.0.x86_64.rpm
获取的经验总结:
在使用spec文件指示rpmbuild命令封包的时候,spec文件中的%configure参数会在编译的时候指定Nginx编译选项--host=...,但是Nginx编译选项没有这个参数,所以编译不通过。使用./configure命令取代%configure,即可解决,最后需要设定RPM打包是需要包含的文件,本案例中使用了/app/nginx/*路径。
Nginx1.8.0在./configure支持的参数如下所示:
[root@data nginx-1.8.0]# ./configure --help
--help print this message
--prefix=PATH set installation prefix
--sbin-path=PATH set nginx binary pathname
--conf-path=PATH set nginx.conf pathname
--error-log-path=PATH set error log pathname
--pid-path=PATH set nginx.pid pathname
--lock-path=PATH set nginx.lock pathname
--user=USER set non-privileged user for
worker processes
--group=GROUP set non-privileged group for
worker processes
--build=NAME set build name
--builddir=DIR set build directory
--with-rtsig_module enable rtsig module
--with-select_module enable select module
--without-select_module disable select module
--with-poll_module enable poll module
--without-poll_module disable poll module
--with-threads enable thread pool support
--with-file-aio enable file AIO support
--with-ipv6 enable IPv6 support
--with-http_ssl_module enable ngx_http_ssl_module
--with-http_spdy_module enable ngx_http_spdy_module
--with-http_realip_module enable ngx_http_realip_module
--with-http_addition_module enable ngx_http_addition_module
--with-http_xslt_module enable ngx_http_xslt_module
--with-http_image_filter_module enable ngx_http_image_filter_module
--with-http_geoip_module enable ngx_http_geoip_module
--with-http_sub_module enable ngx_http_sub_module
--with-http_dav_module enable ngx_http_dav_module
--with-http_flv_module enable ngx_http_flv_module
--with-http_mp4_module enable ngx_http_mp4_module
--with-http_gunzip_module enable ngx_http_gunzip_module
--with-http_gzip_static_module enable ngx_http_gzip_static_module
--with-http_auth_request_module enable ngx_http_auth_request_module
--with-http_random_index_module enable ngx_http_random_index_module
--with-http_secure_link_module enable ngx_http_secure_link_module
--with-http_degradation_module enable ngx_http_degradation_module
--with-http_stub_status_module enable ngx_http_stub_status_module
--without-http_charset_module disable ngx_http_charset_module
--without-http_gzip_module disable ngx_http_gzip_module
--without-http_ssi_module disable ngx_http_ssi_module
--without-http_userid_module disable ngx_http_userid_module
--without-http_access_module disable ngx_http_access_module
--without-http_auth_basic_module disable ngx_http_auth_basic_module
--without-http_autoindex_module disable ngx_http_autoindex_module
--without-http_geo_module disable ngx_http_geo_module
--without-http_map_module disable ngx_http_map_module
--without-http_split_clients_module disable ngx_http_split_clients_module
--without-http_referer_module disable ngx_http_referer_module
--without-http_rewrite_module disable ngx_http_rewrite_module
--without-http_proxy_module disable ngx_http_proxy_module
--without-http_fastcgi_module disable ngx_http_fastcgi_module
--without-http_uwsgi_module disable ngx_http_uwsgi_module
--without-http_scgi_module disable ngx_http_scgi_module
--without-http_memcached_module disable ngx_http_memcached_module
--without-http_limit_conn_module disable ngx_http_limit_conn_module
--without-http_limit_req_module disable ngx_http_limit_req_module
--without-http_empty_gif_module disable ngx_http_empty_gif_module
--without-http_browser_module disable ngx_http_browser_module
--without-http_upstream_hash_module
disable ngx_http_upstream_hash_module
--without-http_upstream_ip_hash_module
disable ngx_http_upstream_ip_hash_module
--without-http_upstream_least_conn_module
disable ngx_http_upstream_least_conn_module
--without-http_upstream_keepalive_module
disable ngx_http_upstream_keepalive_module
--with-http_perl_module enable ngx_http_perl_module
--with-perl_modules_path=PATH set Perl modules path
--with-perl=PATH set perl binary pathname
--http-log-path=PATH set http access log pathname
--http-client-body-temp-path=PATH set path to store
http client request body temporary files
--http-proxy-temp-path=PATH set path to store
http proxy temporary files
--http-fastcgi-temp-path=PATH set path to store
http fastcgi temporary files
--http-uwsgi-temp-path=PATH set path to store
http uwsgi temporary files
--http-scgi-temp-path=PATH set path to store
http scgi temporary files
--without-http disable HTTP server
--without-http-cache disable HTTP cache
--with-mail enable POP3/IMAP4/SMTP proxy module
--with-mail_ssl_module enable ngx_mail_ssl_module
--without-mail_pop3_module disable ngx_mail_pop3_module
--without-mail_imap_module disable ngx_mail_imap_module
--without-mail_smtp_module disable ngx_mail_smtp_module
--with-google_perftools_module enable ngx_google_perftools_module
--with-cpp_test_module enable ngx_cpp_test_module
--add-module=PATH enable an external module
--with-cc=PATH set C compiler pathname
--with-cpp=PATH set C preprocessor pathname
--with-cc-opt=OPTIONS set additional C compiler options
--with-ld-opt=OPTIONS set additional linker options
--with-cpu-opt=CPU build for the specified CPU, valid values:
pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, sparc32, sparc64, ppc64
--without-pcre disable PCRE library usage
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources
--with-md5-opt=OPTIONS set additional build options for md5
--with-md5-asm use md5 assembler sources
--with-sha1=DIR set path to sha1 library sources
--with-sha1-opt=OPTIONS set additional build options for sha1
--with-sha1-asm use sha1 assembler sources
--with-zlib=DIR set path to zlib library sources
--with-zlib-opt=OPTIONS set additional build options for zlib
--with-zlib-asm=CPU use zlib assembler sources optimized
for the specified CPU, valid values:
pentium, pentiumpro
--with-libatomic force libatomic_ops library usage
--with-libatomic=DIR set path to libatomic_ops library sources
--with-openssl=DIR set path to OpenSSL library sources
--with-openssl-opt=OPTIONS set additional build options for OpenSSL
--with-debug enable debug logging
[root@data nginx-1.8.0]#
本文转自 棋帅小七 51CTO博客,原文链接:http://blog.51cto.com/xvjunjie/1971516