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

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

二、程序路径管理

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

四、rpm源码包安装

 

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

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

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

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

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

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

扫描二维码关注公众号,回复: 354346 查看本文章

               #./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:查看程序运行依赖的库及所在位置,例如

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

 

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

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

 

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

?
1
2
3
4
5
6
7
[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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
[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程序包

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[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  ]

 

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

本文出自 “Arvin Lau” 博客,请务必保留此出处http://64314491.blog.51cto.com/2784219/1637680

猜你喜欢

转载自blog.csdn.net/wangyingjie290107/article/details/80248662