Linux软件包的管理--源码管理


    任何管理工具都有自己最适用的场景,像软件包的管理,在CentOS系列中,有了RPM包管理器,但是它自动不能解决包的管理器,所以就出现了yum管理器,但是,他却不能符合我们实际要求(定制功能),所以就出现了源码管理。也许,有些时候源代码也不能满足我们的要求,我就可能要自己基于源码进行二次开发。这里,我们讲解源码管理。


一、源码安装步骤

    源码编译的前提,得有像gcc,make等编译工具。一般情况下在“Development tools”里面都提供了这些编译工具。

    源码安装步骤其实没有特定的步骤,原因是不同的源码制作者的制作方式的不同导致了我们使用的安装步骤和选型都有所差异。但一般情况下,制作者会遵循一些特定的规则。所以,一般情况下,源码编译是以下几步。

以安装ngnix服务为例:

    # tar xf 软件包的压缩文件

[root@server ~]# tar xf nginx-1.4.7.tar.gz

    # cd 解压后的软件目录

[root@server ~]# cd nginx-1.4.7
[root@server nginx-1.4.7]# pwd
/root/nginx-1.4.7

    # ./configure   还需通过许多选项指定编译特性

[root@server nginx-1.4.7]# ./configure --prefix=/usr/local/nginx
checking for OS
 + Linux 2.6.32-358.el6.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... found

##########中间省去好多checking############################

checking for zlib library ... found
creating objs/Makefile
Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using builtin md5 code
  + sha1 library is not found
  + using system zlib library
  
  # 如果配置正确,此时会显示个文件的路径
  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

    此时会在当前目录中生成一个Makefile的文件,里面内容如下:

# 里面定义了执行不同动作所执行的语句,每个软件的形式可能会各有不同

default:	build

clean:
	rm -rf Makefile objs

build:
	$(MAKE) -f objs/Makefile
	$(MAKE) -f objs/Makefile manpage

install:
	$(MAKE) -f objs/Makefile install

upgrade:
	/usr/local/nginx/sbin/nginx -t

	kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
	sleep 1
	test -f /usr/local/nginx/logs/nginx.pid.oldbin

	kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

    # make

# 执行编译操作,有过Linux C编程经验的来说,此步骤是利用gcc生成链接文件

    # make install

# 此步骤是真正的安装操作,其实就是复制(或创建)对应的文件到指定路径下。

    执行这2步,软件就算安装完成。


 ./configure脚本的使用:

    1、获取帮助

        ./configure --help

    2、较通用的一些选项

    安装路径相关:

        --prefix=/path/to/somewhere: 指定安装路径

        --sysconfdir=/path/to/somewhere: 指定配置文件安装路径

    指定启用/禁用的特性

        --enable-FEATURE: 例如--enable-fpm

        --disable-FEATURE: 例如--disable-socket

    指定所依赖的功能、程序或文件

        --with-FUNCTION[=/path/to/somewhere]

        --without-FUNCTION


二、安装后的配置

1、如果只是程序的的运行,不做为其他软件开发的依赖环境

    1)我们可以再全局下使用软件的相关功能

    当然实现这样的办法有多种,例如:将这些命令作为链接文件,链接至PATH变量中的某一路径;或者将这些命令拷贝到PATH变量中的某一路径;或者修改环境变量的值,将命令的路径添加进去。

    我这里演示的方法是:

    在 /etc/profile.d/下建一个于软件名相同的脚本,例如:nginx.sh。添加如下一行内容

export PATH=$PATH:/path/to/somewhere # 例如:export PATH=$PATH:/usr/local/nginx/sbin/
# 完成这步骤后,重新登录就可以正常使用

    2)导出手册页:

    编辑/etc/man.config配置文件,添加一项MANPATH,路径为新安装的程序的man目录;

    当然,我们也可以通过man -M 指定帮助文档路径查看。

    3)如果我们想使用像其他RPM包软件的启动方式,此时我们就要自己写相关格式的脚本放到/etc/init.d目录下统一管理。


2、如果作为程序开发:即其它应用程序依赖此程序的开发环境,或针对此程序做二次开发

    1)导出库文件

        第一步:指定让系统搜索定制的路径

        编辑/etc/ld.so.conf.d/APPNAME.conf

# 例如,在/etc/ld.so.conf.d/目录下建一个nginx.conf(只是举例,ngnix不一定有库文件)
# 一行一个库文件路径
/usr/local/ngnix/lib

        第二步:触发系统重新搜索所有的库文件并生成缓存,因为系统在启动时已经通过 /etc/ld.so.cache 这个文件缓存了库文件

        # ldconfig 

        -v 显示过程

    2)导出头文件

        导出方式:创建链接进行

# 假设: ngnix的头文件是/usr/local/nginx/include
ln -sv /usr/local/nginx/include /usr/include/nginx


    总结:本文主要介绍了源码如何安装软件包。

本文出自 “逆水寒” 博客,请务必保留此出处http://guoting.blog.51cto.com/8886857/1440409

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。