Linux的程序包管理:
软件包的组成部分:
二进制程序 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库 lib, /usr/lib, /lib64, /usr/lib64, /usr/local/lib, /usr/local/lib64
/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
配置文件 /etc
帮助文件 man文件, info文件, README, INSTALL, ChangeLog
man COMMAND
到某路径下查找与命令名同名的通常以.gz结尾的压缩文件的名字
/usr/share/man/
ldd命令:
查看应用所依赖的共享库
ldd [options] FILE...
rpm包的使用:
rpm包命名格式:
源程序:name-version.tar.{gz|bz2|xz}
version: major.minor.release
rpm包:name-version-release.arch.rpm
release:通常包含rpm的制作发行号,还包含适用的OS
bash-4.3.2-2.el6.x86_64.rpm
来源合法性验正:
源程序:通过md5或sha1校验码验正;
rpm包:发行商提供的合法性是可信的
验正包完整性:校验码
验正来源合法:公钥
获取rpm包的途径:
1、发行商的光盘或站点服务器
以CentOS为例:
http://mirrors.163.com
http://mirrors.sohu.com
2、http://rpmfind.net
3、http://rpm.pbone.net
rpm包管理:安装
# rpm -ivh [install-options] /path/to/rpm_package 安装软件包,显示安装进度
[install-options]
--test 仅测试,不真正执行安装过程
--nodeps 忽略依赖关系
--replacepkgs 重新安装
原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件
rpm包管理:卸载
#rpm -e [install-options] package_name 卸载软件包
[install-options]
--nodeps 忽略依赖关系
rpm包管理:查询
#rpm -qa 查询所有已经安装的包
#rpm -q package_name 查询某单个包是否安装
#rpm -qi package_name 查询包的描述信息
#rpm -ql package_name 查询包安装之后在当前系统生成文件列表
#rpm -qd package_name 查询包安装后生成的帮助文档
#rpm -qc package_name 查询包安装后生成的配置文件
#rpm -qf /path/to/somefile 查询某文件是哪个包安装生成的
#rpm -q --scripts package_name 查询包相关的脚本
脚本有四类:
preinstall 安装前脚本
postinstall 安装后脚本
preuninstall 卸载前脚本
postuninstall 卸载后脚本
查询尚未安装的rpm包文件的相关信息:
#rpm -pqi /path/to/package_file 查询包的描述信息
#rpm -pql /path/to/package_file 查询包安装之后在当前系统生成文件列表
#rpm -pqd /path/to/package_file 查询包安装后生成的帮助文档
#rpm -pqc /path/to/package_file 查询包安装后生成的配置文件
rpm包之升级:
#rpm -Uvh [install-options] /path/to/package_file 升级或安装
#rpm -Fvh [install-options] /path/to/package_file 升级
[install-options]
--nodeps 忽略依赖关系
--force 强行安装
rpm包管理:检查包安装后生成的文件是否被修改过;
#rpm -V package_name
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
rpm包管理:检验来源合法性和软件包完整性
包完整性:通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)
导入制作者的公钥,CentOS发行版的公钥在iso文件中;
导入命令:rpm --import /path/to/gpg-key-file
#pm -K --nosignature /path/to/package_file 只检查完整性,不检查来源合法性 #pm -K --nodigest /path/to/package_file 不检查完整性,只检查来源合法性
#pm -K /path/to/package_file 既检查完整性,又检查来源合法性
rpm包管理:数据库重建
数据库:/var/lib/rpm/
#rpm --initdb 初始化,如果事先不存在一个数据库,则新建之;
#rpm --rebuilddb 重建,直接重建数据库,会覆盖原有的库;
yum客户端:
1、配置文件:指定各可用的yum仓库;
2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地;
3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;
4、执行具体操作:
客户端配置文件指定对应服务器访问方式:
ftp ftp://server/path/to/repo
http http://server/path/to/repo
nfs nfs://server/nfs_path
file file:///path/to/repository
要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中:
/etc/yum.conf
/etc/yum.repos.d/*.repo
配置文件格式:由两段组成,类似windows的ini配置文件
[main] :主配置段
[repo] :仓库配置段
配置repo:
[repo_ID]
name=String
baseurl=仓库的访问路径
enabled={1|0}
gpgcheck={1|0}
gpgkey=公钥文件(可以在本地,也可是服务器端路径)
cost=定义此仓库开销,默认为1000
[base]
name=CentOS 6.5 X86_64 relase
baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/
enabled=1
gpgcheck=1
gpgkey=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/RPM-GPG-KEY-CentOS-6
yum的各命令:
# yum repolist 列出所有可用yum repo
# yum clean all 清理缓存
# yum list [all|installed|available] 列出[所有的安装包|已安装包|可安装包]
# yum info package_name 列出包的描述信息
# yum whatprovides|provides /path/to/somefile 查询某文件是由哪个包安装生成的
# yum install package_name 安装指定的程序包
# yum reinstall package_name 重新安装指定的程序包
# yum erase package_name 卸载指定的程序包
# yum check-update 检查可升级的包
# yum update package_name 升级指定的程序包
# yum downgrade package_name 降级指定的程序包
# yum grouplist 列出所有包组
# yum groupinfo "group_name" 显示包组信息
# yum groupinstall "group_name" 安装指定的包组
# yum groupremove "group_name" 卸载指定的包组
如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries”
如果系统为CentOS 6,常用的开发包组为“Development Tools”和“Server Platform Development”
安装本地包:
# yum install /path/to/package_file
手动禁止检查来源及完整性:--nogpgcheck
# yum --nogpgcheck install /tmp/zsh-2.3.1-2.el6.x86_64.rpm
练习:安装相关的包组,确保如下命令可执行
# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#yum -y groupinstall "Development tools" "Server Platform Development"
yum repository: 文件服务器
repodata/:
repomd.xml:
测试实现yum repository的配置:
1、准备文件服务器;使用httpd为例,请事先确保已经安装httpd程序包;
2、在/var/www/html目录,使用一个目录来保存准备制作成为yum仓库的所有rpm包;
# cd /var/www/html
# lftp 172.16.0.1/pub/Sources/6.x86_64
# lftp: > mirror openstack
# bye
3、创建yum仓库
# rm -rf /var/www/html/openstack/repodata
# createrepo /var/www/html/openstack
4、启动httpd服务
# service httpd start
5、配置使用自建的yum仓库
[openstack]
name=Openstack Repository
baseurl=http://172.16.100.7/openstack/
enabled=1
gpgcheck=0
6、配置好epel的yum源
7、测试使用
# yum install openstack-keystone
程序包管理之编译安装:
源程序:
项目工程:把代码分散于多个源代码文件
GNU/make
autoconf: configure脚本
检查编译环境是否编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等;
结果:会根据Makefile.in文件生成makefile文件
automake: Makefile.in文件
用于结合configure脚本生成makefile文件
makefile文件是make命令的配置文件
编译安装的步骤:
1、拿到源代码,并解压:
# tar xf package-version.tar.{gz|bz2|xz}
注意:展开后的目录名通常为package-version
2、切换至源码目录中
# cd package-version
3、执行configure脚本
# ./configure
4、编译
# make
5、安装
# make install
configure脚本的通用功能:
我们需要定义的配置:
1、指定安装路径:
--prefix=/usr/local/package_name
--sysconfdir=/etc/package_name
2、指定启用/禁用的特性:
--enable-feature: 例如--enable-fpm
--disable-feature: 例如 --disable-socket
3、指定所依赖功能、程序或文件
--with-function:启用某功能
--without-function:禁用某功能
不同的程序,其configure脚本功能不同,要获取帮助:
./configure --help
练习:
1、编译安装nginx, 并启动之;
2、编译安装axel,并试用之;
3、编译安装httpd,并启动之;
/usr/local/apache/bin
二进制程序:
# vim /etc/profile.d/apache.sh
PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH
export PATH
头文件输出给系统:
# ln -sv /usr/local/apache/include /usr/include/httpd
库文件输出:
# vim /etc/ld.so.conf.d/httpd.conf
/usr/local/apache/lib
让系统重新生成库文件路径缓存
# ldconfig
导出man文件:
# vim /etc/man.config
MANPATH /usr/local/apache/man