程序包管理之源代码编译安装及rpm源码包安装

一、程序源码编译安装步骤

二、程序路径管理

三、简单源码编译安装示例

四、rpm源码包安装

 

一、程序源码编译安装步骤

---------------------------------------

    1.cd SOURCE_CODE    #cd到程序源码文件夹

---------------------------------------

    2../configure    #检查编译环境,对程序定制编译配置,编译前读一读README,INSTALL

                     #常用配置参数:--prefix=安装路径,--sysconfdir=配置文件路径,配置帮助--help

                     #./configure结合Makefile.in生成makefile,Linux中的automake程序帮助生成Makefile.in文件

                     #Linux中的autoconf程序帮助生成configure文件

---------------------------------------

    3.make    #编译程序,生成安装文件

              #执行make命令,则结合makefile完成编译安装文件

---------------------------------------   

    4.make install   #安装

 

二、程序路径管理

 

实际安装程序时,二进制可执行文件、库文件、头文件、man手册可能都不在系统默认环境变量的搜索路径中(配置文件程序会自动搜索匹配),此时需要手动将这些文件的路径添加进去

1、修改PATH

    1.1、临时性全局:bash下直接运行命令export PATH=$PATH:/usr/local/apache/bin

    1.2、永久全局修改:编辑/etc/profile,加入export PATH=$PATH:/usr/local/apache/bin;或者新建/etc/profile.d/apache.sh,加入export PATH=$PATH:/usr/local/apache/bin

    1.3、针对用户:编辑~./bashrc或~./bash_profile,添加export PATH=$PATH:/usr/local/apache/bin

 

2、库文件搜索路径:编辑/etc/ld.so.conf或新建/etc/ld.so.conf.d/*.conf,新加路径后,使用ldconfig -v重新搜索当前系统上所有库文件搜索路径下的库文件,并生成缓存/etc/ld.so.cache,ldd /bin/ls:查看程序运行依赖的库及所在位置,例如

[root@TESTHOST ~]# vim /etc/ld.so.conf.d/apache.conf    #为apache单独建立lib路径文件
/usr/local/apache/lib
[root@TESTHOST ~]# ldconfig -v    #重建lib缓存

 

3、头文件:使用链接ln -s,例如

[root@TESTHOST ~]# ln -sv /usr/local/apache/include /usr/include/httpd    #系统头文件目录为/usr/include/下,在其中创建一个目录链接即可

 

4、man手册路径:编辑/etc/man.config文件中的“MANPATH=”,例如

[root@TESTHOST ~]# vim /etc/man.config
MANPATH /usr/local/apache/share/man    #将程序man路径加入
MANPATH	/usr/man
MANPATH	/usr/share/man
MANPATH	/usr/local/man
MANPATH	/usr/local/share/man
MANPATH	/usr/X11R6/man


三、简单源码编译安装示例

 

  编译安装axel

[root@TESTHOST ~]# tar xf axel-2.4.tar.bz2    #解包
[root@TESTHOST ~]# ls
RPM-GPG-KEY-CentOS-6    RPM-GPG-KEY-CentOS-6.2  axel-2.4          install.log
RPM-GPG-KEY-CentOS-6.1  anaconda-ks.cfg         axel-2.4.tar.bz2  install.log.syslog
[root@TESTHOST ~]# cd axel-2.4    #cd到源码文件夹中
[root@TESTHOST axel-2.4]# ls
API      CREDITS   axel.1  axel_zh_CN.1    conf.h     conn.h  ftp.h   http.h  search.c  tcp.h
CHANGES  Makefile  axel.c  axelrc.example  configure  de.po   gui     nl.po   search.h  text.c
COPYING  README    axel.h  conf.c          conn.c     ftp.c   http.c  ru.po   tcp.c     zh_CN.po
[root@TESTHOST axel-2.4]# less README    #./configure前查看其README,或INSTALL文件,获取相关信息 
[root@TESTHOST axel-2.4]# ./configure --help    #查看./configure支持的选项
Axel configure

Usage: ./configure [OPTIONS]

Option		Description				Default

--prefix=...	Directories to put files in		/usr/local
--bindir=...						$prefix/bin
--etcdir=...						$prefix/etc
--mandir=...						$sharedir/man
--locale=...						$sharedir/locale

--i18n=0/1	Disable/enable internationalization	1
--debug=0/1	Disable/enable debugging		0
--strip=0/1	Disable/enable binary stripping		1
[root@TESTHOST axel-2.4]# ./configure --prefix=/usr/local/axel    #检查编译环境,定制程序编译相关配置,这里仅定义了安装目录
The strip option is enabled. This should not be a problem usually, but on some
systems it breaks stuff.

Configuration done:
  Internationalization enabled.
  Debugging disabled.
  Binary stripping enabled.
[root@TESTHOST axel-2.4]# make    #使用make编译程序
gcc -c axel.c -o axel.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc -c conf.c -o conf.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc -c conn.c -o conn.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc -c ftp.c -o ftp.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc -c http.c -o http.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc -c search.c -o search.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc -c tcp.c -o tcp.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
tcp.c: In function 'get_if_ip':
tcp.c:98: warning: dereferencing pointer 'x' does break strict-aliasing rules
tcp.c:97: note: initialized from here
gcc -c text.c -o text.o -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os 
gcc *.o -o axel  -lpthread
strip axel
msgfmt -vo nl.mo nl.po
40 translated messages, 6 fuzzy translations, 4 untranslated messages.
msgfmt -vo de.mo de.po
46 translated messages, 4 fuzzy translations.
msgfmt -vo ru.mo ru.po
46 translated messages, 2 fuzzy translations, 2 untranslated messages.
msgfmt -vo zh_CN.mo zh_CN.po
42 translated messages, 6 fuzzy translations, 2 untranslated messages.
[root@TESTHOST axel-2.4]# make install    #安装
mkdir -p /usr/local/axel/bin/
cp axel /usr/local/axel/bin/axel
mkdir -p /usr/local/axel/etc/
cp axelrc.example /usr/local/axel/etc/axelrc
mkdir -p /usr/local/axel/share/man/man1/
cp axel.1 /usr/local/axel/share/man/man1/axel.1
mkdir -p /usr/local/axel/share/man/zh_CN/man1/
cp axel_zh_CN.1 /usr/local/axel/share/man/zh_CN/man1/axel.1
Installing locale files...
[root@TESTHOST axel-2.4]# vim /etc/profile.d/axel.sh    #新建文件
export PATH=$PATH:/usr/local/axel/bin    #将程序路径加入PATH
[root@TESTHOST axel-2.4]# . /etc/profile.d/axel.sh    #source后即刻生效
[root@TESTHOST ~]# man axel    #因为man手册路径不在系统默认目录中,所以提示未找到    
Cannot open the message catalog "man" for locale "zh_CN.UTF-8"
(NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")

No manual entry for axel
[root@TESTHOST ~]# man -M /usr/local/axel/share/man axel    #手动指向man手册绝对路径
[root@TESTHOST ~]# vim /etc/man.config    #将axel的man手册路径加入系统默认搜索路径
MANPATH /usr/local/axel/share/man

 

四、rpm源码包安装

  

  安装nginx的src.rpm包

  步骤:1、安装rpm源码包----->生成rpmbuild文件夹

        2、通过nginx.spec,编译rpm包,命令:rpmbuild -ba nginx.spec

        3、安装生成的rpm程序包

[root@TESTHOST ~]# ls    #src.rpm包
anaconda-ks.cfg  axel-2.4  axel-2.4.tar.bz2  Geo  install.log  install.log.syslog  nginx-1.0.15-5.el6.src.rpm  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-6.1  RPM-GPG-KEY-CentOS-6.2
[root@TESTHOST ~]# rpm -ivh nginx-1.0.15-5.el6.src.rpm    #安装后并不是安装了程序,而相当于解压
warning: nginx-1.0.15-5.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
   1:nginx                  ########################################### [100%]
[root@TESTHOST ~]# ls    #安装完后文件存放在rpmbuild文件夹中
anaconda-ks.cfg  axel-2.4  axel-2.4.tar.bz2  Geo  install.log  install.log.syslog  nginx-1.0.15-5.el6.src.rpm  rpmbuild  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-6.1  RPM-GPG-KEY-CentOS-6.2
[root@TESTHOST ~]# cd rpmbuild/
[root@TESTHOST rpmbuild]# ls    #rpmbuild下有两个文件夹
SOURCES  SPECS
[root@TESTHOST rpmbuild]# ls SOURCES/    #文件夹下有程序的源码,配置文件、补丁等其他信息文件
404.html  50x.html  default.conf  index.html  nginx-1.0.15.tar.gz  nginx-auto-cc-gcc.patch  nginx.conf  nginx.init  nginx-logo.png  nginx.logrotate  nginx.sysconfig  poweredby.png  ssl.conf  virtual.conf
[root@TESTHOST rpmbuild]# cd SPECS/
[root@TESTHOST SPECS]# ls    #SPECS文件夹下存放的是编译配置文件,使用它能结合SOURCES文件夹中的文件生成rpm安装包
nginx.spec
[root@TESTHOST SPECS]# rpmbuild -bs^C nginx.spec    #-bs只编译源码rpm包
[root@TESTHOST SPECS]# rpmbuild -bb^C nginx.spec    #-bb只编译二进制rpm包
[root@TESTHOST SPECS]# rpmbuild -ba nginx.spec    #同时编译二进制和源码rpm包,这里我们用-ba编译程序
------------------------------
······编译过程省略
------------------------------
[root@TESTHOST SPECS]# ls /root/rpmbuild/    #编译完,rpm文件夹下多出了几个文件夹
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
[root@TESTHOST SPECS]# ls /root/rpmbuild/RPMS/
x86_64
[root@TESTHOST SPECS]# ls /root/rpmbuild/RPMS/x86_64/    #此文件夹下为编译好的rpm包
nginx-1.0.15-5.el6.x86_64.rpm  nginx-debuginfo-1.0.15-5.el6.x86_64.rpm
[root@TESTHOST SPECS]# ls /root/rpmbuild/SRPMS/    #此文件夹为此次编译同时生成的源码rpm包
nginx-1.0.15-5.el6.src.rpm
[root@TESTHOST SPECS]# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.0.15-5.el6.x86_64.rpm    #安装程序
Preparing...                ########################################### [100%]
   1:nginx                  ########################################### [100%]
[root@TESTHOST SPECS]# /etc/init.d/iptables stop    #为了快速测试,暂时关闭防火墙
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]

 

在浏览器中输入主机地址,出现下图提示,成功!!!

QQ截图20150423173705

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章