Linux: centos软件包管理的3种方式
centos软件管理的方式大概有3种:
(1).通过rpm管理软件包;
(2).通过yum管理软件包;
(3).手动管理软件包。
前言
软件包管理器的核心功能:
(1).制作软件包;
(2).安装,卸载,升级,查询,校验。
rpm包是由发布人定制并编译好的二进制包,直接就可以安装,不用再编译,但存在以下缺点:(1)发布人定制的内容不能满足要求;(2)rpm可能在比较旧的平台编译,在新的平台上安装,有可能不能发挥最近性能;(3)不能很好管理软件包的依赖关系。yum是基于rpm的,所以使用yum必须要事先安装rpm,yum可以自动检测软件包之间的依赖关系,并依次安装,但由于yum是基于C/S模式的,每次安装软件可能都要到服务器目录中下载安装包。手动安装需要自己编译软件的源码,虽然操作比较复杂,但手动
编译可以根据当前的硬件环境优化编译的结果,提高性能。
在Linux环境中,软件包一般安装在/usr/local目录下。
软件包命名格式:
主包:
Bind-9.7.1-i586.e15.rpm
子包:
Bing-libs-9.7.1.-i586.e15(操作系统型号).rpm
包名格式:
Name-version-release.arch.rpm
Bing-major.minor.release-release.arch(rpm制作者定).rpm
主版本号:重大改进
次版本号:某个子功能发生了重大变化
发现号:修正了部分bug,调整了一点功能
一、通过rpm管理软件包
1.安装
rpm –I /PATH/TO/PACKAGE_FILE
-h显示安装进度;每个#表示2%
-v: 显示详细过程
-vv: 显示更详细的过程
-ihv: 安装显示安装进度和详细的过程
--nodeps: 忽略依赖关系
--force: 强行安装,可以实现重装或者降级
--replacepkg: 重新安装,替换原有的安装
--replacefiles: 替换文件
rpm –ivh –replacepak /path/package --重新安装
2.查询
rpm –q 软件包名(精确) : 查询指定包是否已经安装
rpm –qa z* : 查询已安装的所有包
rpm –qi PACKAGE_NMAE: 查询指定包的说明信息
Rpm –ql package_name: 查询指定包安装后生产的文件列表
Rpm –qf /path/to/somefile: 查询指定文件是有那个rpm包安装生成的
Rpm –qc package: 查询指定包安装的配置文件
Rpm –qd package_name: 查询指定包安装的帮助文件
Rpm –q –scripts package_name : 查询指定包中包含的脚本
如果某个rpm包尚未安装,我们需要查询其说明信息、安装以后生成的文件:
Rpm –qpi /path/to/package_file
Rpm –qpl /path/to/package_file: 查看安装后有哪些文件
3.升级
rpm –Uvh /path/to/new_package_file :如果装有老版本的,则升级,否则则安装
rpm –Fvh /path/to/new_package_file : 如果装有老版本,则升级,否则,退出
rpm –ivh –oldpackage packagename: 降级
4.卸载
rpm -e package_name
--nodeps : 没有依赖
5.检验
rpm –V package_name
6.重建数据库
ls /var/lib/rpm
rpm
--rebuild : 重建数据库
--initdb : 初始化数据库,没有才建立,有就不用建立
7.检验来源合法性,及软件完整性
#ls /et/pki/rpm-gpg/
先导入密钥文件:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
rpm –K package_name
rpm –K –nodigest zsh-4.2323.tar
dsa,gpg: 验证来源合法性,也即验证签名,可以使用--nosignatre,略过此项。
Sha1,md5: 验证软件包完整性的,也可以用--nodigest,略过此项。
RPM方式首先要经过定制编译成二进制格式,所以:
(1).有些特性是编译选定的,有些特性可能没包含,可能无法使用。
(2).rpm落后于源码包,有时落后很多,有些bug没有修复。
二、通过yum管理软件包;
Yum是rpm的前端工具,必须先安装rpm
rpm: 依赖关系处理不好
Yum可以处理好安装包的依赖关系,yum是基于C/S(Client/Server),要依赖yum仓库(yum repository),yum仓库可以是以下形式:
(1)ftp
(2)web
(3)file
Yum Client 要配置文件,指定yum仓库。
三、手动管理软件包
如果要编译c,则需要安装c的编译环境gcc。
如果要编译c++,则需要安装c++的编译环境G++。
Make项目管理工具
在make之间,必须要生成一个Makefile文件,里面 定义了make(调用gcc,g++)按何种次序去编译这些源程序。
软件包必须有makefile文件,但makefile不是软件的一部分。
首先,通过configure定制软件包的安装的方式,然后生成MakeFile文件,然后通过make方法编译,再通过make install安装。
Make install 的实质就是把编译后的文件和配置文件拷贝到指定目录。
一般步骤:
tar -xf packagename_1.0.tar.gz
cd packagename_1.0
./configure
--help
--prefix=/path/to/somewhere 指定安装目录
--sysconfdir=/path/to/conffile_path 指定配置文件目录(不指定,放到默认目录)
功能:1.让用户选定功能特性;
2.检查编译环境。
Make
Makeinstall
例子:以下是按照apache的例子。
首先安装软件包:
#tar -xf httpd-2.4.1.tar.gz
#cd httpd-2.4.1
#./configure–prefix=/usr/local/httpd –conf-dir=/etc/httpd/httpd.conf
#make
#makeinstall
如果安装在非默认目录下,在安装软件后,要配置(1)软件命令的目录;(2)软件依赖库的目录;(3)软件的头文件;(4)软件命令的man目录。
1.配置软件命令的目录
修改PATH环境变量,以能够识别此程序的二进制文件路径。在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义export PATH=$PATH:/path/to/somewhere
例如:
export PATH=$PATH:/usr/local/httpd/bin
测试: echo $PATH
配置完之后,就可以直接识别apachectl命令,不用在前面加命令的路径。
2.配置软件依赖库的目录
在某些情况下,其他软件要依赖目前安装软件的库文件,所有必须要在系统中配置库的目录,这样其它软件才能找得到。默认情况下,系统搜索库文件的路径是/lib,/usr/lib。由于软件安装的目录是自定义的,所以要增添额外搜索路径。在/etc/ld.so.conf.d中创建以.conf为后缀名的文件,而后把要增添的路径直接写到此文件中。
#ldconfig 通知系统重新搜寻库文件
-v : 显示重新搜寻库的过程
例子: ldconfig –v:显示系统中所有的库
vim /etc/ld.so.conf/http.conf, 文件的内容如下:
/usr/local/apache/lib
3.头文件:输出给系统
软件的库都对应的头文件,其它软件调用该软件的库的时候,必须要知道头文件的具体地方,通过头文件调用库中的方法。系统默认存放的头文件的地方:/usr/include,但由于软件的安装目录是自定义,所以要增添头文件搜索路径,可以使用连接进行:
/usr/local/tengine/include/ /usr/include/
具体做法有2种方式:
第一种:逐个文件连接一次,单独连接,缺点:文件多的话不容易管理
ln –s /usr/local/tengine/include/* /usr/include/
第二种:目录创建一个连接
ln –sv /usr/local/tengine/include/usr/include/tengine
#include,供别人调用库的规范文件
例子:ls include/
ln –sv /usr/local/apache /usr/include/httpd
这种方式容易管理
4.man文件路径:安装--prefix指定目录下的man目录:/usr/share/man
有2中配置方式:
第一种:
找到系统中man的配置文件man_config,在配置文件中加入安装软件的man目录;
例如:
vim /etc/man_config
在man_config中加入tengine的man目录
第二种:
手动一个个命令加
man –M /path/to/man_dir COMMAND
例子:Man–M /usr/local/apache/man htpasswd
安装完,可以通过netstat测试:
netstat –r : 显示路由表
netstat –t: 显示已经建立的tcp连接
netstat –u: 显示udp连接
netstat –tl: 显示监听状态的TCP连接
netstat –ul: 显示监听赚头的UDP连接
netstat –n: 以数字方式显示
netstat –p: 显示监听指定的套接字的进程号和进程名
以上步骤不一定都是必须,但都要考虑。
综述,手动编译安装可以根据硬件环境制定编译计划,提供编译代码的质量,而且随时可以获取到最新的源码,修改之前的bug,所以建议用手动编译方式安装。