linux的rpm源码安装包,程序包管理之源代码编译安装及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]

OptionDescriptionDefault

--prefix=...Directories to put files in/usr/local

--bindir=...$prefix/bin

--etcdir=...$prefix/etc

--mandir=...$sharedir/man

--locale=...$sharedir/locale

--i18n=0/1Disable/enable internationalization1

--debug=0/1Disable/enable debugging0

--strip=0/1Disable/enable binary stripping1

[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  ]

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

042999f3c9338b18fdc5ebadaef8f389.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值